public void UpdateOut() { try { bool[] data = new bool[_Cfg.DigitalInputQuantity]; for (int i = 0; i < _Cfg.DigitalInputQuantity; i++) { bool val; if (DOUT.TryGetValue(i, out val)) { data[i] = val; } else { data[i] = false; } } lock (Master) { Master.WriteMultipleCoils(_Cfg.slaveID, 0, data); } ushort[] data2 = new ushort[_Cfg.DigitalInputQuantity]; for (int i = 0; i < _Cfg.DigitalInputQuantity; i++) { ushort val; if (AOUT.TryGetValue(i, out val)) { data2[i] = Convert.ToUInt16(Convert.ToDouble(val) * 32767.0 / 10.0); } else { data2[i] = 0; } } lock (Master) { Master.WriteMultipleRegisters(_Cfg.slaveID, 0, data2); } } catch (Exception e) { logger.Error(e.StackTrace); } }
/// <summary> /// /// </summary> /// <param name="deviceInfo"></param> /// <param name="value"></param> /// <param name="valueType"></param> public override void WriteValue(string deviceInfo, object value, byte valueType) { if (mComm.IsConnected) { var dtmp = deviceInfo.Split(new char[] { ':' }); ushort addr = ushort.Parse(dtmp[1]); ushort size = ushort.Parse(dtmp[2]); if (dtmp[0].StartsWith("cs")) { mMaster.WriteSingleCoil((byte)mData.Id, addr, Convert.ToBoolean(value)); } else if (dtmp[0].StartsWith("hr")) { mMaster.WriteMultipleRegisters((byte)mData.Id, addr, GetValue(value, valueType, size)); } } }