Esempio n. 1
0
        private static void Syncdbus()
        {
            while (true)
            {
                if (dbusThread.exitEvent.WaitOne(Dbus.Cycle))
                {
                    break;
                }
                int AgvNum;

                #region AGV1
                AgvNum = 1;
                if (UdpSever.EndPointArray[AgvNum] != null)
                {
                    //Sever => AGV 1
                    Dbus.SetRegister(AgvNum, 1);

                    //PLC    => AGV
                    //56 -60 => 26-30
                    //更新Modbus数据到Dbus
                    UpdateModbusToDbus(AgvNum, 56, 26, 5);
                    //设置到AGV
                    Dbus.SetRegister(AgvNum, 26, 30);

                    //AGV    => PLC
                    //20 -25 => 50-55
                    //更新Dbus数据到Modbus
                    UpdateDbusToModbus(AgvNum, 20, 50, 6);
                    //设置到Modbus
                    Profinet.SetRegister(50, 55);
                }
                #endregion

                #region AGV2
                //Sever => AGV 1
                AgvNum = 2;
                if (UdpSever.EndPointArray[AgvNum] != null)
                {
                    Dbus.SetRegister(AgvNum, 1);
                    //PLC    => AGV
                    //67 -71 => 37-41
                    //更新Modbus数据到Dbus
                    UpdateModbusToDbus(AgvNum, 67, 37, 5);
                    //设置到AGV
                    Dbus.SetRegister(AgvNum, 37, 41);

                    //AGV    => PLC
                    //31 -36 => 61-66
                    //更新Dbus数据到Modbus
                    UpdateDbusToModbus(AgvNum, 31, 61, 6);
                    //设置到Modbus
                    Profinet.SetRegister(61, 66);
                }
                #endregion
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 同步Modbus设备数据
        /// </summary>
        private static void SyncModbus()
        {
            while (true)
            {
                if (Profinet.ErrorNum > 10)
                {
                    //连续10次出错,重新连接
                    SyncState.ModbusTcp = false;
                    break;//退出当前进程
                }
                if (SyncState.ModbusTcp)
                {
                    if (modbusThread.exitEvent.WaitOne(Profinet.Cycle))
                    {
                        break;
                    }
                    #region MES
                    int num;
                    //读取 0
                    num = 0;
                    if (Profinet.Clear[num])
                    {
                        //此处循环是防止清除失败,做了重读验证
                        while (true)
                        {
                            //清除寄存器
                            Profinet.Register[num] = 0;
                            Profinet.SetRegister(num, num);

                            Thread.Sleep(100);

                            //读取结果
                            Profinet.GetRegister(num, num);
                            if (Profinet.Register[num] == 0)
                            {
                                Profinet.Clear[num] = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        Profinet.GetRegister(num, num);
                        Profinet.RegisterCompare[num] = Profinet.Register[num];
                    }

                    //读取 20
                    num = 20;
                    if (Profinet.Clear[num])
                    {
                        //此处循环是防止清除失败,做了重读验证
                        while (true)
                        {
                            //清除寄存器
                            Profinet.Register[num] = 0;
                            Profinet.SetRegister(num, num);

                            Thread.Sleep(100);

                            //读取结果
                            Profinet.GetRegister(num, num);
                            if (Profinet.Register[num] == 0)
                            {
                                Profinet.Clear[num] = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        Profinet.GetRegister(num, num);
                        Profinet.RegisterCompare[num] = Profinet.Register[num];
                    }

                    //写入 1-14
                    // Profinet.SetRegister(1, 14);
                    Profinet.SetRegister(1, 6);
                    Profinet.SetRegister(8, 14);


                    //写入 21-34
                    Profinet.SetRegister(21, 26);
                    Profinet.SetRegister(28, 34);

                    #endregion

                    #region PLC
                    //读取 56-60
                    Profinet.GetRegister(56, 60);
                    //读取 67-71
                    Profinet.GetRegister(67, 71);

                    //写入 50-55
                    Profinet.SetRegister(50, 55);
                    //写入 61-66
                    Profinet.SetRegister(61, 66);
                    #endregion
                }
            }
        }