private void ConnectServer() { try { switch (_Cfg.ConnectionType) { case "Socket": try { _Report.On_Connection_Status_Report(_Cfg.DeviceName, "Connecting"); tt = new TcpClient(_Cfg.IPAdress, _Cfg.Port); Master = Modbus.Device.ModbusIpMaster.CreateIp(tt); _Report.On_Connection_Status_Report(_Cfg.DeviceName, "Connected"); } catch (Exception e) { _Report.On_Connection_Error(_Cfg.DeviceName, e.StackTrace); _Report.On_Connection_Status_Report(_Cfg.DeviceName, "Connection_Error"); return; } break; } Master.Transport.Retries = _Cfg.Retries; Master.Transport.ReadTimeout = _Cfg.ReadTimeout; Thread ReceiveTd = new Thread(Polling); ReceiveTd.IsBackground = true; ReceiveTd.Start(); } catch (Exception e) { logger.Error(e.StackTrace); } }
public ICPcon(ushort digitalInputQuantity, Modbus.Device.ModbusIpMaster master) { try { DigitalInputQuantity = digitalInputQuantity; Master = master; Master.Transport.Retries = 0; Master.Transport.ReadTimeout = 1500; } catch (Exception ex) { throw new Exception(ex.ToString()); } }
/// <summary> /// /// </summary> public override void Init() { base.Init(); int clen = -1, cstart = -1, ilen = -1, istart = -1, irlen = -1, irstart = -1, hrlen = -1, hrstart = -1; foreach (var vv in mCachTags) { var dtmp = vv.Key.ToLower().Split(new char[] { ':' }); ushort addr = ushort.Parse(dtmp[1]); if (dtmp[0] == ("cs")) { //Coil status if (cstart == -1) { cstart = addr; clen = 1; } else { if ((addr - cstart + 1) > mData.PackageLen) { mCoilStatusPackage.Add((ushort)cstart, (ushort)clen); cstart = -1; } else { clen = addr - cstart + 1; } } if (!mCoilStatusTags.ContainsKey(addr)) { mCoilStatusTags.Add(addr, vv.Value); } } else if (dtmp[0] == ("is")) { //Input status if (istart == -1) { istart = addr; ilen = 1; } else { if ((addr - istart + 1) > mData.PackageLen) { mInputStatusPackage.Add((ushort)istart, (ushort)ilen); istart = -1; } else { ilen = addr - istart + 1; } } if (!mInputStatusTags.ContainsKey(addr)) { mInputStatusTags.Add(addr, vv.Value); } } else if (dtmp[0] == ("ir")) { ushort len = ushort.Parse(dtmp[2]); //Input registor if (irstart == -1) { irstart = addr; irlen = len; } else { if ((addr - irstart + len) > mData.PackageLen) { mInputRegistorPackage.Add((ushort)irstart, (ushort)irlen); irstart = -1; } else { irlen = addr - irstart + len; } } if (!mInputRegistorTags.ContainsKey(addr)) { mInputRegistorTags.Add(addr, new Tuple <ushort, List <int> >(len, vv.Value)); } } else if (dtmp[0] == ("hr")) { //holding registor ushort len = ushort.Parse(dtmp[2]); if (hrstart == -1) { hrstart = addr; hrlen = len; } else { if ((addr - hrstart + len) > mData.PackageLen) { mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen); hrstart = -1; } else { hrlen = addr - hrstart + len; } } if (!mHoldRegistorTags.ContainsKey(addr)) { mHoldRegistorTags.Add(addr, new Tuple <ushort, List <int> >(len, vv.Value)); } } } if (cstart != -1) { mCoilStatusPackage.Add((ushort)cstart, (ushort)clen); } if (istart != -1) { mInputStatusPackage.Add((ushort)istart, (ushort)ilen); } if (irstart != -1) { mInputRegistorPackage.Add((ushort)irstart, (ushort)irlen); } if (hrstart != -1) { mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen); } mComm.EnableTransparentRead(true); mMaster = Modbus.Device.ModbusIpMaster.CreateIp(mComm); }