Esempio n. 1
0
        private static double SingleMeasure(IModbusSerialMaster master, byte IDAddress)
        {
            master.WriteMultipleRegisters(IDAddress, (ushort)32, new ushort[] { 100 });
            bool measuring = true;

            while (measuring)
            {
                ushort[] stateRead = new ushort[1];
                stateRead = master.ReadHoldingRegisters(IDAddress, (ushort)32, 1);
                short stateConnect = BitConverter.ToInt16(new byte[] {
                    BitConverter.GetBytes(stateRead[0])[0],
                    BitConverter.GetBytes(stateRead[0])[1]
                },
                                                          0);
                if (stateConnect <= 0)
                {
                    break;
                }
                System.Threading.Thread.Sleep(1000);
            }
            ushort[] result = new ushort[3];
            result = master.ReadHoldingRegisters(IDAddress, (ushort)58, 6);
            float responseDuration = BitConverter.ToSingle(new byte[] {
                BitConverter.GetBytes(result[2])[0],
                BitConverter.GetBytes(result[2])[1],
                BitConverter.GetBytes(result[2 + 1])[0],
                BitConverter.GetBytes(result[2 + 1])[1]
            },
                                                           0);

            return(responseDuration * 301.0 / 2.0);
        }
 /// <summary>
 /// 读取保持寄存器的连续块
 /// </summary>
 /// <param name="startAddress">开始位置</param>
 /// <param name="numberOfPoints">长度</param>
 /// <returns></returns>
 public short[] ReadHoldingRegisters(ushort startAddress, ushort numberOfPoints)
 {
     Thread.Sleep(Delay_ms);
     short[] data = new short[numberOfPoints];
     try
     {
         CheckInitPort();
         data = master.ReadHoldingRegisters(slaveID, startAddress, numberOfPoints);//可能抛出异常
     }
     catch (Exception e)
     {
         throw;
     }
     return(data);
 }
Esempio n. 3
0
        public static void ModbusSerialRtuMasterReadRegisters(string baudBaud)
        {
            using (SerialPort port = new SerialPort(baudBaud))
            {
                // configure serial port

                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                // create modbus master
                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                byte     slaveId      = 1;
                ushort   startAddress = 300;
                ushort   numRegisters = 1;
                ushort[] registers; //= new ushort[numRegisters];
                string   result;

                // read registers
                registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
                result    = Convert.ToString(registers[0]);
                MessageBox.Show(result);
            }
        }
Esempio n. 4
0
        private float ReadFloatRegister(ushort startAddress)
        {
            CheckPort();
            try
            {
                if (!port.IsOpen)
                {
                    port.Open();
                }
                IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
                //master.Transport.ReadTimeout = timeout;

                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, 2);
                return
                    (ModbusUtility.GetSingle(registers[1], registers[0]));
            }
            catch (TimeoutException)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show("Порт не отвечает");
                return(0);
            }
            catch (Exception ex)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show(ex.Message);
                return(0);
            }
        }
Esempio n. 5
0
        private ushort ReadIntRegister(ushort startAddress)
        {
            CheckPort();
            try
            {
                if (!port.IsOpen)
                {
                    port.Open();
                }
                IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);


                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, 1);

                return(registers[0]);
            }
            catch (TimeoutException)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show("Порт не отвечает");
                return(0);
            }
            catch (Exception ex)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show(ex.Message);
                return(0);
            }
        }
Esempio n. 6
0
 private void numAddress_ValueChanged(object sender, EventArgs e)
 {
     try
     {
         if (serialPort.IsOpen && master != null)
         {
             numValue.Value = master.ReadHoldingRegisters(slaveAddress, Convert.ToUInt16(numAddress.Value.ToString()), 1)[0];
             if (numValue.Value == 0)
             {
                 LblLevel.Text = numValue.Value.ToString("0#.0");
             }
         }
     }
     catch (Exception ex)
     {
         if (ex.HResult == -2146233088)
         {
             MessageBox.Show(this, "Address is wrong.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         else
         {
             MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
Esempio n. 7
0
        /// <summary>
        ///     Simple Modbus serial ASCII master read holding registers example.
        /// </summary>
        public static void ModbusSerialAsciiMasterReadRegisters()
        {
            using (SerialPort port = new SerialPort(PrimarySerialPortName))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                var factory = new ModbusFactory();
                IModbusSerialMaster master = factory.CreateAsciiMaster(port);

                byte   slaveId      = 1;
                ushort startAddress = 1;
                ushort numRegisters = 5;

                // read five registers
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                for (int i = 0; i < numRegisters; i++)
                {
                    Console.WriteLine($"Register {startAddress + i}={registers[i]}");
                }
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
Esempio n. 8
0
File: Program.cs Progetto: zanxi/OPU
        void p()
        {
            using (SerialPort port = new SerialPort("COM1"))
            {
                port.BaudRate     = 19200;
                port.DataBits     = 8;
                port.Parity       = Parity.Odd;
                port.StopBits     = StopBits.One;
                port.ReadTimeout  = 1000;
                port.WriteTimeout = 1000;

                port.Open();
                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                byte     slaveId      = 1;
                ushort   startAddress = 0x180;
                ushort[] res          = master.ReadHoldingRegisters(slaveId, startAddress, 1);
                for (int i = 0; i < res.Length; i++)
                {
                    Console.Write(res[i].ToString() + " ");
                    if ((i + 1) % 4 == 0)
                    {
                        Console.WriteLine();
                    }
                    Console.ReadKey();
                }
            }
        }
Esempio n. 9
0
        /// <summary>
        ///     Write a 32 bit value.
        /// </summary>
        public static void ReadWrite32BitValue()
        {
            using (SerialPort port = new SerialPort(PrimarySerialPortName))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                var factory = new ModbusFactory();
                IModbusRtuTransport transport = factory.CreateRtuTransport(port);
                IModbusSerialMaster master    = factory.CreateMaster(transport);

                byte   slaveId      = 1;
                ushort startAddress = 1008;
                uint   largeValue   = UInt16.MaxValue + 5;

                ushort lowOrderValue  = BitConverter.ToUInt16(BitConverter.GetBytes(largeValue), 0);
                ushort highOrderValue = BitConverter.ToUInt16(BitConverter.GetBytes(largeValue), 2);

                // write large value in two 16 bit chunks
                master.WriteMultipleRegisters(slaveId, startAddress, new ushort[] { lowOrderValue, highOrderValue });

                // read large value in two 16 bit chunks and perform conversion
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, 2);
                uint     value     = ModbusUtility.GetUInt32(registers[1], registers[0]);
            }
        }
        public ushort ModbusSerialRtuMasterReadRegisters(ushort startAddress = 1, ushort numRegisters = 5, byte slaveId = 1)
        {
            using (SerialPort port = new SerialPort(PrimarySerialPortName))
            {
                // configure serial port
                port.BaudRate = _baudRate;
                port.DataBits = _dataBits;
                port.Parity   = _parity;
                port.StopBits = _stopBits;
                port.Open();
                var t = port.ReadTimeout;

                var factory = new ModbusFactory();
                IModbusSerialMaster master = factory.CreateRtuMaster(port);
                master.Transport.ReadTimeout = 1000;

                byte   _slaveId      = slaveId;
                ushort _startAddress = startAddress;//1;
                ushort _numRegisters = numRegisters;

                // read five registers
                ushort[] registers = master.ReadHoldingRegisters(_slaveId, _startAddress, _numRegisters);

                var currentThread = Thread.CurrentThread.ManagedThreadId;
                port.Close();
                return(registers[0]);
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
Esempio n. 11
0
        private ushort ModbusReadValue(string com, ushort startAddress)
        {
            try
            {
                ushort readValue = 0;
                using (SerialPort port = new SerialPort(com))
                {
                    // configure serial port
                    port.BaudRate = 9600;
                    port.DataBits = 8;
                    port.Parity   = Parity.None;
                    port.StopBits = StopBits.One;
                    port.Open();


                    // create modbus master
                    IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
                    master.Transport.ReadTimeout = 2000;
                    byte   slaveId     = 1;
                    ushort numOfPoints = 1;

                    ushort[] values = master.ReadHoldingRegisters(slaveId, startAddress, numOfPoints);
                    readValue = values[0];
                    Console.WriteLine("{0}, 当前读取到数值:{1};", DateTime.Now.ToString(), readValue);
                }
                return(readValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                System.IO.File.AppendAllText("log.txt", "\r\n Read TimeOut Exception:" + ex.Message.ToString());
                return(0);
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Simple Modbus serial ASCII master read holding registers example.
        /// </summary>
        public static void ModbusSerialAsciiMasterReadRegisters()
        {
            using (SerialPort port = new SerialPort("COM1"))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                // create modbus master
                IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);

                byte   slaveId      = 1;
                ushort startAddress = 1;
                ushort numRegisters = 5;

                // read five registers
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                for (int i = 0; i < numRegisters; i++)
                {
                    Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);
                }
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
Esempio n. 13
0
 public short[] ReadHoldingRegisters(ushort startAddress, ushort numberOfPoints)
 {
     Thread.Sleep(delayms);
     short[] data = new short[numberOfPoints];
     try
     {
         CheckInitPort();
         //Global.MBMutex.WaitOne();
         data = master.ReadHoldingRegisters(slaveID, startAddress, numberOfPoints);//可能抛出异常
         //Global.MBMutex.ReleaseMutex();
     }
     catch (Exception e)
     {
         //Global.MBMutex.ReleaseMutex();
         throw;
     }
     return(data);
 }
Esempio n. 14
0
        public void Read()
        {
            byte   slaveId          = 1; //broadcast
            ushort numRegisters     = 7;
            ushort startAddress     = 2;
            ushort startAddress_Uab = 8 - 2; //???
            ushort startAddress_Ia  = 4 - 2;
            ushort startAddress_Ib  = 5 - 2;
            ushort startAddress_Uc  = 2 - 2;
            ushort startAddress_Ic  = 6 - 2;

            while (!m_shouldStop)
            {
                m_mutex.WaitOne();

                ushort[] registers;

                try
                {
                    registers = m_master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
                }
                catch (Exception e)
                {
                    m_mutex.ReleaseMutex();
                    Thread.Sleep(500);
                    ReConnect();
                    continue;
                }

                m_lastIndicators = new Indicators(
                    m_settings.Uab_mult * registers[startAddress_Uab] /*  *  m_rnd.Next(1, 100)  */,
                    m_settings.Ia_mult * registers[startAddress_Ia] /* *  m_rnd.Next(1, 100)  */,
                    m_settings.Uc_mult * registers[startAddress_Uc] /* *  m_rnd.Next(1, 100) */,
                    m_settings.Ic_mult * registers[startAddress_Ic] /* * m_rnd.Next(1, 100) */,
                    m_settings.Ib_mult * registers[startAddress_Ib] /* * m_rnd.Next(1, 100) */);

                if (m_shouldStore)
                {
                    if (!Filter(m_lastIndicators))
                    {
                        m_indicators.Add(m_lastIndicators);
                    }

                    m_onRead(true);
                }
                else
                {
                    m_onRead(true);
                }

                m_mutex.ReleaseMutex();

                Thread.Sleep(10);
            }

            Disconnect();
        }
Esempio n. 15
0
        /// <summary>
        ///     Modbus serial ASCII master and slave example.
        /// </summary>
        public static void ModbusSerialAsciiMasterReadRegistersFromModbusSlave()
        {
            using (SerialPort masterPort = new SerialPort("COM1"))
                using (SerialPort slavePort = new SerialPort("COM2"))
                {
                    // configure serial ports
                    masterPort.BaudRate = slavePort.BaudRate = 9600;
                    masterPort.DataBits = slavePort.DataBits = 8;
                    masterPort.Parity   = slavePort.Parity = Parity.None;
                    masterPort.StopBits = slavePort.StopBits = StopBits.One;
                    masterPort.Open();
                    slavePort.Open();

                    var slaveAdapter = new SerialPortAdapter(slavePort);
                    // create modbus slave on seperate thread
                    byte slaveId = 1;

                    var factory = new ModbusFactory();

                    var transport = factory.CreateAsciiTransport(slaveAdapter);

                    var network = factory.CreateSlaveNetwork(transport);

                    var slave = factory.CreateSlave(slaveId);

                    network.AddSlave(slave);

                    var listenTask = network.ListenAsync();

                    var masterAdapter = new SerialPortAdapter(masterPort);

                    var masterTransport = factory.CreateAsciiTransport(masterAdapter);

                    // create modbus master
                    IModbusSerialMaster master = factory.CreateMaster(masterTransport);

                    master.Transport.Retries = 5;
                    ushort startAddress = 100;
                    ushort numRegisters = 5;

                    // read five register values
                    ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                    for (int i = 0; i < numRegisters; i++)
                    {
                        Console.WriteLine($"Register {(startAddress + i)}={registers[i]}");
                    }
                }

            // output
            // Register 100=0
            // Register 101=0
            // Register 102=0
            // Register 103=0
            // Register 104=0
        }
Esempio n. 16
0
        private static int AutonDeviceConnect(IModbusSerialMaster master, string deviceName, byte IDAddress)
        {
            ushort[] stateM = new ushort[1];
            stateM = master.ReadHoldingRegisters(IDAddress, (ushort)4113, 1);
            short state = BitConverter.ToInt16(new byte[] {
                BitConverter.GetBytes(stateM[0])[0],
                BitConverter.GetBytes(stateM[0])[1]
            },
                                               0);

            if (state > 0)
            {
                return(1);
            }

            byte[]   deviceNameBytes  = Encoding.ASCII.GetBytes(deviceName);
            ushort[] deviceNameUShort = new ushort[8];
            int      j = 0;

            for (int i = 0; i < deviceNameBytes.Length; i++)
            {
                deviceNameUShort[j++] = BitConverter.ToUInt16(new byte[] {
                    deviceNameBytes[i],
                    deviceNameBytes[++i]
                }, 0);
            }
            master.WriteMultipleRegisters(IDAddress, (ushort)4112, deviceNameUShort);
            System.Threading.Thread.Sleep(1000);
            for (int i = 0; i < 30; i++)
            {
                stateM = master.ReadHoldingRegisters(IDAddress, (ushort)4113, 1);
                state  = BitConverter.ToInt16(new byte[] {
                    BitConverter.GetBytes(stateM[0])[0],
                    BitConverter.GetBytes(stateM[0])[1]
                }, 0);
                if (state == 0)
                {
                    break;
                }
                System.Threading.Thread.Sleep(1000);
            }
            return(0);
        }
Esempio n. 17
0
        public void ModbusSerialRtuMasterReadRegisters()
        {
            using (SerialPort port = new SerialPort(cbb_IP.Text))
            {
                if (checkLeitura.Checked == true)
                {
                    try
                    {
                        // configure serial port
                        port.BaudRate = 9600;
                        port.DataBits = 8;
                        port.Parity   = Parity.None;
                        port.StopBits = StopBits.One;
                        port.Open();

                        // create modbus master
                        IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
                        master.Transport.ReadTimeout = 550;

                        byte   slaveId      = 1;
                        ushort startAddress = 0;
                        ushort numRegisters = 8;

                        // read five registers
                        ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                        textBox1.Text = registers[0].ToString();
                        textBox2.Text = registers[1].ToString();
                        textBox3.Text = registers[2].ToString();
                        textBox4.Text = registers[3].ToString();
                        textBox5.Text = registers[4].ToString();
                        textBox6.Text = registers[5].ToString();
                        textBox7.Text = registers[6].ToString();
                        textBox8.Text = registers[7].ToString();

                        txt_Status.Text = "Status: Leitura On";

                        checkBox1.Visible = true;
                    }
                    catch
                    {
                        timer1.Stop();
                        txt_Status.Text = "Status: Leitura Off";
                        MessageBox.Show(" Erro \n Verifique a Porta");
                        checkLeitura.Checked = false;
                        timer1.Start();
                    }
                }
                else
                {
                    txt_Status.Text   = "Status: Leitura Off";
                    checkBox1.Visible = false;
                }
            }
        }
Esempio n. 18
0
        //read Digital Inputs
        public int Get_DI()
        {
            int DI = modbus_master.ReadHoldingRegisters(SHJ_digital_slaveID, SHJ_digital_inputReg, 1)[0];

            DI2convert[0] = DI;

            DIbits = new BitArray(DI2convert);
            DIbits.Not();

            return(DI);
        }
Esempio n. 19
0
        void BReadTableClick(object sender, EventArgs e)
        {
            bool   err  = false;
            ushort uAdr = 0;

            if (!serialPort.IsOpen)
            {
                MessageBox.Show("Port isn`t open");
                return;
            }

            var answer = MessageBox.Show("Чтение из устройства обновит данные в таблице, Вы уверены?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (answer == DialogResult.No)
            {
                return;
            }

            progressBar1.Minimum = 0;
            progressBar1.Maximum = 120;
            for (int i = 0; i < 120; i++)
            {
                progressBar1.Value = i;
                try {
                    uAdr = (ushort)(120 + i);
                    ushort[] t1 = master.ReadHoldingRegisters((byte)nSlaveAdr.Value, uAdr, 1);
                    dgvModbusAdr[1, i].Value = (int)t1[0];
                    dgvModbusAdr[2, i].Value = "";
                } catch {
                    err = true;
                }

                if (err)
                {
                    MessageBox.Show("Ошибка чтения с устройства № " + nSlaveAdr.Value.ToString() + ". Чтение прервано!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    progressBar1.Value = 0;
                    return;
                }
            }
            progressBar1.Value = 0;
        }
Esempio n. 20
0
        private void ellipseConnected_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //upTimer.Start();
            ushort adr  = 18;
            ushort adrd = 2;

            ushort[] registers = master.ReadHoldingRegisters(slave, adr, adrd);
            label.Content = registers[0].ToString();
            //MessageBox.Show(registers[0].ToString());
            //MessageBox.Show(registers[1].ToString());
            //connection.Close();
            //init();
        }
Esempio n. 21
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(ports);

            if (ports.IsOpen)
            {
                ushort[] holding_register = master.ReadHoldingRegisters(1, 0, 1);

                float valor = Convert.ToSingle(holding_register[0]);

                valores.valor1 = valor;
            }
        }
Esempio n. 22
0
        public int readRegister(ref ModbusRegisters regs)
        {
            if (master == null)
            {
                commsts = COMMSTS_UNKONOWN;
                return(RET_INITFAILURE);
            }

            lock (locker)
            {
                if (port.IsOpen == false)
                {
                    commsts = COMMSTS_PORTNOTOPEN;
                    return(RET_INITFAILURE);
                }

                try
                {
                    regs.values = master.ReadHoldingRegisters(regs.slaveid, regs.startAddress, regs.numRegisters);
                    for (int i = 0; i < regs.numRegisters; i++)
                    {
                        regs.stReg[i].value = regs.values[i];
                    }
                }
                catch (TimeoutException ex)
                {
                    LogClass.GetInstance().WriteLogFile("ReadHoldingRegisters Timeout:" + port.ReadTimeout.ToString());
                    //MessageBox.Show("Serial Port Read Timeout:" + port.ReadTimeout.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    if (rtycnt++ < MAX_RETYR_COUNT)
                    {
                        return(RET_TIMEOUT);
                    }
                    else
                    {
                        commsts = COMMSTS_FAILURE;
                        return(RET_COMMERROR);
                    }
                }
                catch (Exception ex)
                {
                    LogClass.GetInstance().WriteExceptionLog(ex);
                    //MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    commsts = COMMSTS_FAILURE;
                    return(RET_FAILURE);
                }
            }
            rtycnt  = 0;
            commsts = COMMSTS_NORMAL;
            return(RET_OK);
        }
 public ushort[] LerRegistradoresDeEscravo(List <HoldingRegisters> escravo, SerialPort port)
 {
     using (SerialPortAdapter adapter = new SerialPortAdapter(port))
         using (IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(adapter))
         {
             var      idEscravo = escravo.First().idEscravo;
             var      min       = escravo.Min(x => x.offSet);
             var      max       = escravo.Max(x => x.offSet);
             ushort   limite    = ushort.Parse((Int32.Parse(max) + 1).ToString());
             ushort[] registers;
             registers = master.ReadHoldingRegisters(byte.Parse(idEscravo), ushort.Parse(min), limite);
             return(registers);
         }
 }
Esempio n. 24
0
 //reads subset of ROV's register array and adds it to surface register array
 private void ReadRegisters(int start, int n)
 {
     if (serialPort.IsOpen && isConnected)
     {
         try
         {
             ushort[] subset = modbus.ReadHoldingRegisters(1, (ushort)start, (ushort)n);
             for (int i = 0; i < n; i++)
             {
                 registers[start + i] = subset[i];
             }
         }
         catch { isConnected = false; }
     }
 }
Esempio n. 25
0
        public T getValue <T>(IModbusConfig config)
        {
            lock (locker)
            {
                SerialPort port = new SerialPort(config.portName, config.baudRate);
                try
                {
                    if (port.IsOpen)
                    {
                        port.Close();
                    }
                    lock (_locker)
                    {
                        port.Open();
                        IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
                        master.Transport.ReadTimeout  = 200;
                        master.Transport.WriteTimeout = 200;

                        //Получение данных
                        ushort value = master.ReadHoldingRegisters(config.device_address, config.register_read_address, 1)[0];

                        port.Close();
                        port.Dispose();

                        switch (config.regType)
                        {
                        case RegType.INT16:
                            short signed_value = 0;
                            //Отрицательные значения отсчитываются от максимального значения в обратную сторону -1 = 65534
                            if (value >= 32768)
                            {
                                signed_value = (short)((short)value - 65535);
                            }
                            return((T)Convert.ChangeType(value, typeof(T)));

                        case RegType.UINT16:
                            return((T)Convert.ChangeType(value, typeof(T)));
                        }
                        return((T)Convert.ChangeType(1, typeof(T)));
                    }
                }
                catch (Exception ex)
                {
                    port.Dispose();
                    throw ex;
                }
            }
        }
Esempio n. 26
0
        public void readRegister(ref ModbusRegisters regs)
        {
            if (master == null)
            {
                return;
            }

            lock (locker)
            {
                regs.values = master.ReadHoldingRegisters(regs.slaveid, regs.startAddress, regs.numRegisters);
                for (int i = 0; i < regs.numRegisters; i++)
                {
                    regs.stReg[i].value = regs.values[i];
                }
            }
        }
Esempio n. 27
0
        public ushort[] ReadHoldingRegister(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            Log.Debug("GET ReadHoldingRegisters: SlaveAddress {0}, StartAddress {1}, NumberOfPoints {2}", slaveAddress, startAddress, numberOfPoints);

            try
            {
                var response = _master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
                Log.Debug("RESPONSE ReadHoldingRegisters: {0}", String.Join(",", response));
                return(response);
            }
            catch (Exception ex)
            {
                //  return new ushort[] { Convert.ToUInt16(new Random().Next(2, 4)) };
                Log.Error(ex, "ERROR: ReadHoldingRegisters: SlaveAddress {0}, StartAddress {1}, NumberOfPoints {2} - MSG: {3}", slaveAddress, startAddress, numberOfPoints, ex.Message);
                throw ex;
            }
        }
Esempio n. 28
0
        private static int CurrentStateCheck(IModbusSerialMaster master, byte IDAddress)
        {
            ushort[] result = new ushort[1];
            result = master.ReadHoldingRegisters(IDAddress, (ushort)32, 1);
            short stateConnect = BitConverter.ToInt16(new byte[] {
                BitConverter.GetBytes(result[0])[0],
                BitConverter.GetBytes(result[0])[1]
            },
                                                      0);

            if (stateConnect > 0)
            {
                master.WriteSingleRegister(IDAddress, (ushort)32, 0);
            }
            System.Threading.Thread.Sleep(250);
            return(0);
        }
Esempio n. 29
0
        private ushort[] ReadGadgetName(string portName)
        {
            try
            {
                using (var port = GetSerialPort(portName))
                {
                    var factory = new ModbusFactory();
                    IModbusSerialMaster master = factory.CreateRtuMaster(port);

                    return(master.ReadHoldingRegisters(_slaveID, 0, 3));
                }
            }
            catch
            {
                return(new ushort[3]);
            }
        }
Esempio n. 30
0
        private void TimerTick(object sender, EventArgs e)
        {
            if (roda == true)
            {
                using (SerialPort port = new SerialPort(Comunicacao))
                {
                    // configure serial port
                    port.BaudRate = taxaTrans;
                    port.DataBits = bits;
                    if (pariedade == "Sem")
                    {
                        port.Parity = Parity.None;
                    }
                    if (bitParada == 1)
                    {
                        port.StopBits = StopBits.One;
                    }
                    if (bitParada == 2)
                    {
                        port.StopBits = StopBits.Two;
                    }
                    port.Open();

                    // create modbus master
                    IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                    master.Transport.ReadTimeout = 300;
                    // read five registers
                    ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                    listBox1.Items.Clear();
                    for (int i = 0; i < numRegisters; i++)
                    {
                        //MessageBox.Show(registers[i].ToString());
                        //listBox1.Items.Add("Register " + (startAddress + i) + (registers[i]));
                        listBox1.Items.Add(registers[i].ToString());
                        // lista.Add(registers[i].ToString());
                    }
                    port.Close();
                }
                EscreverRegistro tela = new EscreverRegistro(Comunicacao, taxaTrans, bits, bitParada, pariedade, slaveId, startAddress, numRegisters);
                tela.ShowDialog();
            }
        }