Exemple #1
0
        /// <summary>
        /// 线程主体,循环发送串口指令
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void threadGP_Refresh()
        {
            int count = 0;

            while (true)
            {
                Thread.Sleep(50);
                int addr = GPdata.Comaddr;
                while (WRABLE)
                {
                    ;
                }
                WRABLE = true;
                if (Com.IsExists(addr))
                {
                    GPdata.COMSoftCon = 1;
                    count             = 0;
                }
                else
                {
                    count++;

                    if (count > 5)
                    {
                        count             = 0;
                        GPdata.COMHardCon = 0;
                        GPdata.COMSoftCon = 0;
                        lForm.RecodeInfo("心跳异常");
                        Com.Close();
                        threadGP.Abort();            //避免重复新建线程
                    }
                }
                WRABLE = false;
                if (GPdata.COMSoftCon == 1)      //串口数据处理
                {
                    while (WRABLE)
                    {
                        ;
                    }
                    WRABLE = true;

                    if (GPdata.GetFirstNum() == 0)    //读取固件信息
                    {
                        GPdata.SetFirstNum(1);
                        //获取版本信息
                        GPdata.SetVer_Info(Com.GetVerInfo(addr));
                    }

                    GPdata.GPOutput   = Com.GetOutputs(addr);
                    GPdata.GPLed      = Com.GetLeds(addr);
                    GPdata.GPPolarity = Com.GetOutputPol(addr);
                    GPdata.GPState    = Com.GetSTATE0(addr);
                    int[] sensorPV = Com.GetSensors(addr);
                    GPdata.SensorP1 = sensorPV[0];
                    GPdata.SensorP2 = sensorPV[1];
                    GPdata.SensorP3 = sensorPV[2];
                    GPdata.SensorP4 = sensorPV[3];
                    WRABLE          = false;
                }
            }
        }
Exemple #2
0
        /// <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);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemple #3
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);
                                }
                            }
                        }
                    }
                }
            }
        }