public void StartSelfcheck(bool bStart)
 {
     if (bStart)
     {
         // 现在的测功机服务端软件使用的“DeviceVirtual.dll”虚拟流量计驱动需要发两次开始命令才能接收实时数据
         if (!_dynoCmd.StartFlowmeterPrepareCmd(false, false, out string errMsg))
         {
             MessageBox.Show("执行开始流量计准备命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         else
         {
             for (int i = 0; i < 3; i++)
             {
                 GetFlowmeterPrepareRealTimeDataAckParams ackParams = new GetFlowmeterPrepareRealTimeDataAckParams();
                 if (_dynoCmd.GetFlowmeterPrepareRealTimeDataCmd(true, false, ref ackParams, out errMsg) || ackParams != null || ackParams.step >= 0 || ackParams.msg != "手动终止检测")
                 {
                     if (!_dynoCmd.StartFlowmeterPrepareCmd(false, false, out errMsg))
                     {
                         MessageBox.Show("执行开始流量计准备命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     }
                     else
                     {
                         _timer.Enabled = true;
                         break;
                     }
                 }
             }
         }
     }
     else
     {
         _timer.Enabled = false;
         Thread.Sleep(_mainCfg.RealtimeInterval);
         if (!_dynoCmd.StartFlowmeterPrepareCmd(true, true, out string errMsg) && errMsg != "ati >= 0")
         {
             MessageBox.Show("执行停止流量计准备命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         else if (errMsg.Length > 0)
         {
             if (errMsg == "ati >= 0")
             {
                 lblMsg.Text = "已手动停止流量计自检";
             }
             else if (errMsg != "OK")
             {
                 lblMsg.Text = errMsg;
             }
         }
     }
 }