/// <summary> /// /// </summary> private void ProcessRead() { mComm.Take(); try { foreach (var vv in mInputStatusPackage) { var result = mMaster.ReadInputs((byte)mData.Id, vv.Key, vv.Value); if (result != null && result.Length == vv.Value) { for (ushort i = 0; i < vv.Value; i++) { ushort addr = (ushort)(vv.Key + i); if (this.mInputStatusTags.ContainsKey(addr)) { UpdateValue(mInputStatusTags[addr], result[i]); } } } } foreach (var vv in mCoilStatusPackage) { var result = mMaster.ReadCoils((byte)mData.Id, vv.Key, vv.Value); if (result != null && result.Length == vv.Value) { for (ushort i = 0; i < vv.Value; i++) { ushort addr = (ushort)(vv.Key + i); if (this.mCoilStatusTags.ContainsKey(addr)) { UpdateValue(mCoilStatusTags[addr], result[i]); } } } } foreach (var vv in mInputRegistorPackage) { var result = mMaster.ReadInputRegisters((byte)mData.Id, vv.Key, vv.Value); if (result != null && result.Length == vv.Value) { for (ushort i = 0; i < vv.Value; i++) { ushort addr = (ushort)(vv.Key + i); UpdateRegistor(addr, i, result, mInputRegistorTags); } } } foreach (var vv in mHoldtRegistorPackage) { var result = mMaster.ReadHoldingRegisters((byte)mData.Id, vv.Key, vv.Value); if (result != null && result.Length == vv.Value) { for (ushort i = 0; i < vv.Value; i++) { ushort addr = (ushort)(vv.Key + i); UpdateRegistor(addr, i, result, mHoldRegistorTags); } } } } catch (Exception ex) { LoggerService.Service.Warn("Modbus ip Driver", ex.Message); } mComm.Release(); }
public void SetOut(string Address, string Value) { try { ushort adr = Convert.ToUInt16(Address); bool boolVal = false; if (bool.TryParse(Value, out boolVal)) { bool[] Response; try { lock (Master) { Master.WriteSingleCoil(_Cfg.slaveID, adr, boolVal); } } catch { throw new Exception(this._Cfg.DeviceName + " connection error!"); } lock (Master) { Response = Master.ReadCoils(_Cfg.slaveID, adr, 1); } bool org; if (DOUT.TryGetValue(adr, out org)) { if (!org.Equals(Response[0])) { DOUT.TryUpdate(adr, Response[0], org); _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), org.ToString(), Response[0].ToString()); } } else { DOUT.TryAdd(adr, Response[0]); _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), "N/A", Response[0].ToString()); } } else { ushort[] Response2; try { lock (Master) { Master.WriteSingleRegister(_Cfg.slaveID, adr, Convert.ToUInt16(Value)); } } catch { throw new Exception(this._Cfg.DeviceName + " connection error!"); } lock (Master) { Response2 = Master.ReadHoldingRegisters(_Cfg.slaveID, adr, 1); } ushort org; if (AOUT.TryGetValue(adr, out org)) { if (!org.Equals(Response2[0])) { AOUT.TryUpdate(adr, Response2[0], org); _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), org.ToString(), Response2[0].ToString()); } } else { AOUT.TryAdd(adr, Response2[0]); _Report.On_Data_Chnaged(_Cfg.DeviceName, "DOUT", adr.ToString(), "N/A", Response2[0].ToString()); } } } catch (Exception e) { logger.Error(e.StackTrace); } }
//public ushort[] ReadInputRegisters(byte slaveID, ushort coilAddress) //{ // ushort[] ussReadRegisters = Master.ReadInputRegisters(slaveID, coilAddress, DigitalInputQuantity); // ushort[] ussReadConvert = new ushort[(int)DigitalInputQuantity]; // for (int i = 0; i <= ussReadRegisters.Length; i++) // { // if (ussReadRegisters[0] != 0) // { // double value = double.Parse((((int)ussReadRegisters[i] / 4096) + 4) / 1000); // ussReadConvert(i) = value.ToString("0.000"); // } // } // return //} public ushort[] ReadHoldingRegisters(byte slaveID, ushort coilAddress) { return(Master.ReadHoldingRegisters(slaveID, coilAddress, DigitalInputQuantity)); }