//循环读取所有PLC实时值 private void RThreadReadServer(object obj) { while (!this.isClose) { if (this.config.bReadThread) { try { LD.Config.PlcTypeItem devType = obj as LD.Config.PlcTypeItem; IEnumerable ie = from lst in this.config.PlcDataItems where lst.DeviceName == devType.DevName select lst; List <LD.Config.PlcDataItem> ioLst = ie.Cast <LD.Config.PlcDataItem>().ToList(); foreach (LD.Config.PlcDataItem item in ioLst) { //Config.PlcTypeItem devType = Logic.PlcHandle.Instance.GetPlcTypeItem(item.PlcDevice); if (!item.IsActive) { continue; } LD.Logic.PlcHandle.Instance.ReadValue(item.PlcDevice); } Thread.Sleep(1); } catch (Exception) { } } } }
//SiemensPLC初始化 void DoInitS7Plc(LD.Config.PlcTypeItem item) { //if (item.Timer == null) item.Timer = new System.Timers.Timer(); //item.Timer.Enabled = false; //item.Timer.Interval = 1000; //item.Timer.Elapsed += TimerCheck_Tick; SiemensS7Net S7PLC = new SiemensS7Net((SiemensPLCS)item.DevType); S7PLC.ConnectTimeOut = item.ConnectOutTime; S7PLC.Rack = byte.Parse(item.Rack); S7PLC.Slot = byte.Parse(item.Slot); System.Net.IPAddress address; if (!System.Net.IPAddress.TryParse(item.IP, out address)) { System.Windows.Forms.MessageBox.Show(string.Format("{0} input wrong!", item.IP)); return; } int port; if (!int.TryParse(item.Port.ToString(), out port)) { System.Windows.Forms.MessageBox.Show(string.Format("port {0} input wrong!", item.Port)); return; } S7PLC.IpAddress = item.IP; S7PLC.Port = port; item.Tag = S7PLC; if (S7PLC != null) { S7PLC.ConnectClose(); } OperateResult connect = S7PLC.ConnectServer(); if (connect.IsSuccess) { item.IsConnected = true; //Plcs.Add(item.DevName, S7PLC); } else { item.IsConnected = false; //Plcs.Add(item, S7PLC); } }
//MudbusTCP设备初始化 void DoInitMudbusTcp(LD.Config.PlcTypeItem item) { // 连接 byte station; if (!byte.TryParse(item.Station, out station)) { MessageBox.Show(string.Format("station {0} input is wrong!", item.Station)); return; } System.Net.IPAddress address; if (!System.Net.IPAddress.TryParse(item.IP, out address)) { MessageBox.Show(string.Format("IP {0} input wrong!", item.IP)); return; } int port; if (!int.TryParse(item.Port.ToString(), out port)) { MessageBox.Show(string.Format("port {0} input wrong!", item.Port)); return; } ModbusTcpNet busTcpClient = new ModbusTcpNet(item.IP, port, station); busTcpClient.AddressStartWithZero = item.AddressStartWithZero; if (busTcpClient != null) { busTcpClient.DataFormat = item.DataFormat; } busTcpClient.IsStringReverse = item.IsStringReverse; item.Tag = busTcpClient; OperateResult connect = busTcpClient.ConnectServer(); if (connect.IsSuccess) { item.IsConnected = true; //Plcs.Add(item.DevName, busTcpClient); } else { item.IsConnected = false; } }
//MelsecPLC初始化 void DoInitMelsecPlc(LD.Config.PlcTypeItem item) { MelsecMcNet MelsecPlc = new MelsecMcNet(item.IP, item.Port); MelsecPlc.ConnectTimeOut = item.ConnectOutTime; item.Tag = MelsecPlc; if (MelsecPlc != null) { MelsecPlc.ConnectClose(); } OperateResult connect = MelsecPlc.ConnectServer(); if (connect.IsSuccess) { item.IsConnected = true; } else { item.IsConnected = false; } }
//KeyencePLC初始化 void DoInitKeyencePlc(LD.Config.PlcTypeItem item) { KeyenceMcNet KeyencePLC = new KeyenceMcNet(item.IP, item.Port); KeyencePLC.ConnectTimeOut = item.ConnectOutTime; item.Tag = KeyencePLC; if (KeyencePLC != null) { KeyencePLC.ConnectClose(); } OperateResult connect = KeyencePLC.ConnectServer(); if (connect.IsSuccess) { item.IsConnected = true; } else { item.IsConnected = false; } }
//MudbusRTU设备初始化 void DoInitMudbusRtu(LD.Config.PlcTypeItem item) { // 连接 byte station; if (!byte.TryParse(item.Station, out station)) { MessageBox.Show(string.Format("station {0} input is wrong!", item.Station)); return; } int baudRate; if (!int.TryParse(item.BaudRate.ToString(), out baudRate)) { MessageBox.Show(string.Format("baudRate {0} input wrong!", item.BaudRate)); return; } int dataBits; if (!int.TryParse(item.DataBits.ToString(), out dataBits)) { MessageBox.Show(string.Format("dataBits {0} input wrong!", item.DataBits)); return; } int stopBits; if (!int.TryParse(item.StopBits.ToString(), out stopBits)) { MessageBox.Show(string.Format("stopBits {0} input wrong!", item.StopBits)); return; } ModbusRtu busRtuClient = new ModbusRtu(station); busRtuClient.AddressStartWithZero = item.AddressStartWithZero; if (busRtuClient != null) { busRtuClient.DataFormat = item.DataFormat; } busRtuClient.IsStringReverse = item.IsStringReverse; busRtuClient.SerialPortInni(sp => { sp.PortName = item.PortName; sp.BaudRate = baudRate; sp.DataBits = dataBits; sp.StopBits = stopBits == 0 ? StopBits.None : (stopBits == 1 ? StopBits.One : StopBits.Two); sp.Parity = item.Parity; }); item.Tag = busRtuClient; busRtuClient.Open(); if (busRtuClient.IsOpen()) { item.IsConnected = true; //Plcs.Add(item.DevName, busRtuClient); } else { item.IsConnected = false; } }