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 } }
/// <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 } } }