コード例 #1
0
        //=================================================================================================//

        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);
        }
コード例 #2
0
        //-------------------------------------------------------------------------------------------------//

        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);
        }
コード例 #3
0
        //-------------------------------------------------------------------------------------------------//

        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);
        }
コード例 #4
0
        //-------------------------------------------------------------------------------------------------//

        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);
        }
コード例 #5
0
        //-------------------------------------------------------------------------------------------------//

        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);
        }
コード例 #6
0
        //-------------------------------------------------------------------------------------------------//
        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;
        }
コード例 #7
0
        //=================================================================================================//
        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;
        }
コード例 #8
0
        //-------------------------------------------------------------------------------------------------//
        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;
        }
コード例 #9
0
        //-------------------------------------------------------------------------------------------------//
        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;
        }