コード例 #1
0
ファイル: FormS1.cs プロジェクト: Super0415/Csharp
        /// <summary>
        /// 线程主体,循环发送指令
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void thread_Refresh()
        {
            int count = 0;

            while (true)
            {
                Thread.Sleep(30);

                if (S1data.COMHardCon == 1)      //串口数据处理
                {
                    if (Com.IsExists())
                    {
                        S1data.COMSoftCon = 1;
                        count             = 0;
                    }
                    else
                    {
                        count++;

                        if (count > 5)
                        {
                            count             = 0;
                            S1data.COMHardCon = 0;
                            S1data.COMSoftCon = 0;
                            lForm.RecodeInfo("心跳异常");
                            thread.Abort();            //避免重复新建线程
                        }
                    }

                    if (S1data.COMSoftCon == 1)        //软链接成功
                    {
                        if (S1data.GetFirstNum() == 0) //读取固件信息
                        {
                            S1data.SetFirstNum(1);
                            //获取版本信息
                            S1data.SetVer_Info(Com.GetVerInfo());
                        }

                        int axis = S1data.Axis;
                        //获取轴位置
                        S1data.SetLocation(axis, Com.GetPosition());
                        //获取DIP
                        if (Com.GetDIP() != Com.ErrNum)
                        {
                            S1data.DIP = Com.GetDIP();
                        }
                        //获取输入口状态
                        if (Com.GetInputs() != Com.ErrNum)
                        {
                            S1data.MInput = Com.GetInputs();
                        }
                        //获取输出口状态
                        if (Com.GetOutputs() != Com.ErrNum)
                        {
                            S1data.MOutput = Com.GetOutputs();
                        }

                        if (S1data.GetShowMode(axis) == 1)
                        {
                            int  dir  = S1data.GetDire(axis);
                            int  dis  = S1data.GetDistence(axis);
                            long Loca = S1data.GetLocation(axis);

                            if (ShowLoc - Loca == 0 && ShowNum == 0)
                            {
                                ShowEn = true;
                                ShowNum++;
                            }
                            else if (Math.Abs(ShowLoc - Loca) == dis && ShowNum == 1)
                            {
                                ShowEn = true;
                                ShowNum--;
                            }
                            if (ShowEn)
                            {
                                ShowEn = false;
                                Com.SetMMmove(S1data.GetDire(axis), S1data.GetDistence(axis), S1data.GetRunSpd(axis));
                                if (dir == 0)
                                {
                                    S1data.SetDire(axis, 1);
                                }
                                else
                                {
                                    S1data.SetDire(axis, 0);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        /// <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);
                                }
                            }
                        }
                    }
                }
            }
        }