//=================================================================================================// private bool GetEngValue(ModbusRegs_Holding_RW register, ref double engValue, ref string units) { bool success; // // Find the register mapping // int index = this.FindRegisterMapping(register); RegisterMapping mapping = RegisterMapRW[index]; // // Read the register // ushort regValue = 0; if ((success = this.ReadHoldingRegister((int)register, ref regValue)) == true) { // // Convert the register value to eng. units // engValue = this.ConvertRawToEng(regValue, mapping.raw, mapping.eng); units = mapping.units; } //Trace.WriteLine((success == true) ? STRLOG_IsOk : STRLOG_HasFailed); return(success); }
//-------------------------------------------------------------------------------------------------// private bool SetDCControlWord(ushort value, int seconds) { ModbusRegs_Holding_RW register = ModbusRegs_Holding_RW.DCControlWord; Trace.Write(String.Format(" {0}: 0x{1:X04} ({2})", register, value, value)); bool success = this.WriteHoldingRegister(register, value, seconds); Trace.WriteLine((success == true) ? STRLOG_IsOk : STRLOG_HasFailed); return(success); }
//-------------------------------------------------------------------------------------------------// private bool SetEngValue(ModbusRegs_Holding_RW register, double engValue, int delay) { RegisterMapping mapping = RegisterMapRW[this.FindRegisterMapping(register)]; Trace.Write(String.Format(" {0}: {1} {2}", register, engValue, mapping.units)); ushort regValue = this.ConvertEngToRaw(engValue, mapping.eng, mapping.raw); bool success = this.WriteHoldingRegister(register, regValue, delay); Trace.WriteLine((success == true) ? STRLOG_IsOk : STRLOG_HasFailed); return(success); }
//-------------------------------------------------------------------------------------------------// private int FindRegisterMapping(ModbusRegs_Holding_RW register) { int index = -1; for (int i = 0; i < RegisterMapRW.Length; i++) { if ((int)register == RegisterMapRW[i].register) { index = i; break; } } return(index); }
//-------------------------------------------------------------------------------------------------// private bool WriteHoldingRegister(ModbusRegs_Holding_RW register, ushort value, int seconds) { bool success = false; this.lastError = null; try { // // Convert register to Modbus protocol address // ushort protAddress = (ushort)((int)register - MODBUSREGS_HOLDING_BASEADDRESS); // // Write register // this.modbusIpMaster.WriteSingleRegister((byte)this.slaveId, protAddress, value); // // Read the value back and compare it with the value written // ushort[] inregs = this.modbusIpMaster.ReadHoldingRegisters((byte)this.slaveId, protAddress, (ushort)1); if (inregs[0] != value) { throw new Exception(STRERR_RegisterWriteReadMismatch); } // // Wait for action to occur // WaitDelay(seconds); success = true; } catch (Exception ex) { this.lastError = ex.Message; Logfile.WriteError(ex.Message); Trace.WriteLine(ex.Message); } return(success); }
//-------------------------------------------------------------------------------------------------// private bool SetEngValue(ModbusRegs_Holding_RW register, double engValue, int delay) { RegisterMapping mapping = RegisterMapRW[this.FindRegisterMapping(register)]; Trace.Write(String.Format(" {0}: {1} {2}", register, engValue, mapping.units)); ushort regValue = this.ConvertEngToRaw(engValue, mapping.eng, mapping.raw); bool success = this.WriteHoldingRegister(register, regValue, delay); Trace.WriteLine((success == true) ? STRLOG_IsOk : STRLOG_HasFailed); return success; }
//=================================================================================================// private bool GetEngValue(ModbusRegs_Holding_RW register, ref double engValue, ref string units) { bool success; // // Find the register mapping // int index = this.FindRegisterMapping(register); RegisterMapping mapping = RegisterMapRW[index]; // // Read the register // ushort regValue = 0; if ((success = this.ReadHoldingRegister((int)register, ref regValue)) == true) { // // Convert the register value to eng. units // engValue = this.ConvertRawToEng(regValue, mapping.raw, mapping.eng); units = mapping.units; } //Trace.WriteLine((success == true) ? STRLOG_IsOk : STRLOG_HasFailed); return success; }
//-------------------------------------------------------------------------------------------------// private int FindRegisterMapping(ModbusRegs_Holding_RW register) { int index = -1; for (int i = 0; i < RegisterMapRW.Length; i++) { if ((int)register == RegisterMapRW[i].register) { index = i; break; } } return index; }
//-------------------------------------------------------------------------------------------------// private bool WriteHoldingRegister(ModbusRegs_Holding_RW register, ushort value, int seconds) { bool success = false; this.lastError = null; try { // // Convert register to Modbus protocol address // ushort protAddress = (ushort)((int)register - MODBUSREGS_HOLDING_BASEADDRESS); // // Write register // this.modbusIpMaster.WriteSingleRegister((byte)this.slaveId, protAddress, value); // // Read the value back and compare it with the value written // ushort[] inregs = this.modbusIpMaster.ReadHoldingRegisters((byte)this.slaveId, protAddress, (ushort)1); if (inregs[0] != value) { throw new Exception(STRERR_RegisterWriteReadMismatch); } // // Wait for action to occur // WaitDelay(seconds); success = true; } catch (Exception ex) { this.lastError = ex.Message; Logfile.WriteError(ex.Message); Trace.WriteLine(ex.Message); } return success; }