/// <summary> /// 线程主体,循环发送串口指令 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void threadCom_Refresh() { int count = 0; while (true) { Thread.Sleep(30); if (S2data.COMHardCon == 1) //串口数据处理 { if (Com.IsExists()) { //label3.Text = "心跳起搏"; S2data.COMSoftCon = 1; count = 0; } else { count++; //label3.Text = "心跳异常"; if (count > 2) { count = 0; S2data.COMHardCon = 0; S2data.COMSoftCon = 0; lForm.RecodeInfo("串口心跳异常"); threadCom.Abort(); //避免重复新建线程 } } if (S2data.COMSoftCon == 1 && S2data.NetHardCon == 0) //软链接成功 { if (S2data.GetFirstNum() == 0) //读取固件信息 { S2data.SetFirstNum(1); //获取主板名称 S2data.SetName(Com.GetCardName()); //获取固件编号 S2data.SetSN(Com.GetSN()); //获取编码开关状态 S2data.DIP = Com.GetDipSwitch(); //获取版本信息 S2data.SetVer_Info(Com.GetVerInfo()); } int axis = S2data.Axis; //获取轴位置 S2data.SetLocation(axis, Com.GetPosition(axis)); //获取轴IO S2data.SetPWMIOState(axis, Com.GetAIO()); if (S2data.GetCardID() == 1) { //获取主板输入端口值 S2data.MInput = Com.GetInputsEx(); //获取主板输出端口值 S2data.MOutput = Com.GetOutputsEx(); } else { //获取主板输入端口值 S2data.MInput = Com.GetInputs(); //获取主板输出端口值 S2data.MOutput = Com.GetOutputs(); } //获取轴状态 S2data.SetPWMState(axis, Com.GetAxisStatus(axis)); if (S2data.GetShowMode(axis) == 1) { if ((S2data.GetPWMState(axis) >> 1 & 0x1) == 0) { int Dis = S2data.GetDire(axis) > 0 ? S2data.GetDistence(axis) : -S2data.GetDistence(axis); Com.RltMove(S2data.Axis, Dis, S2data.GetStartSpd(axis), S2data.GetRunSpd(axis), S2data.GetAcce(axis), S2data.GetDece(axis)); if (S2data.GetDire(axis) == 0) { S2data.SetDire(axis, 1); } else { S2data.SetDire(axis, 0); } } } } } } }