Read Holding Register FC03, Read Input Register FC04 C# | Modbus RTU/ASCII/TCP C#

 

Read Holding Register FC03, Read Input Register FC04 C# | Modbus RTU/ASCII/TCP C#

Read Holding Register FC03, Read Input Register FC04 C# | Modbus RTU/ASCII/TCP C#


Link tải Source C#: 


Link tải DLL Library:


   Download 

Code Visual Studio 2015

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO.Ports;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using Modbus.Device;

using System.Threading;

using Modbus.Utility;


namespace Test_NModbus_RTU_Serial

{

    public partial class Form1 : Form

    {

        ModbusSerialMaster master;

        byte slaveID = 1;

        ushort startAddress = 0;

        ushort numOfPoints = 10;


        public Form1()

        {

            InitializeComponent();

        }


        private void Form1_Load(object sender, EventArgs e)

        {

            read();

        }


        private void button1_Click(object sender, EventArgs e)

        {

            write();

        }


        private void read()

        {

            try

            {


                SerialPort serialPort = new SerialPort(); //Create a new SerialPort object.

                serialPort.PortName = "COM3";

                serialPort.BaudRate = 9600;

                serialPort.DataBits = 8;

                serialPort.Parity = Parity.None;

                serialPort.StopBits = StopBits.One;

                serialPort.Open();

                master = ModbusSerialMaster.CreateRtu(serialPort);

                BeginWork();

                            

            }

            catch (Exception e)

            {

                MessageBox.Show(e.Message);

            }

        }



        private async void BeginWork()

        {

            while (true)

            {

                // Since we asynchronously wait, the UI thread is not blocked by the file download.

                var result = await DoWork(textBox6.Text);


                // Since we resume on the UI context, we can directly access UI elements.

                textBox6.Text = result;

            }

        }


        private async Task<string> DoWork(object text)

        {

            // Do actual work

            await Task.Delay(100);

            // Return Actual Result            

            ushort[] holding_register = master.ReadHoldingRegisters(slaveID, startAddress, numOfPoints); // Read holding FC03

            await Task.Delay(100);

            //ushort[] input_register = master.ReadInputRegisters(slaveID, startAddress, 10); //Read Input FC04

            bool[] read_coid = master.ReadCoils(slaveID, startAddress, 10); // Read coil FC01


            textBox1.Text = read_coid[0].ToString();

            textBox2.Text = read_coid[1].ToString();

            textBox3.Text = read_coid[2].ToString();

            textBox4.Text = read_coid[3].ToString();

            textBox5.Text = read_coid[4].ToString();


            textBox11.Text = Convert.ToString(holding_register[0]); // 16bit

            textBox10.Text = Convert.ToString(holding_register[1]); // 16bit

            textBox9.Text = Convert.ToString(holding_register[2]); // 16bit

            textBox8.Text = Convert.ToString(holding_register[3]); // 16bit

            textBox7.Text = Convert.ToString(holding_register[4]); // 16bit   


        /*    uint value_1 = ModbusUtility.GetUInt32(input_register[1], input_register[0]);  // 32bit

            uint value_2 = ModbusUtility.GetUInt32(input_register[3], input_register[2]);  // 32bit

            uint value_3 = ModbusUtility.GetUInt32(input_register[5], input_register[4]);  // 32bit

            uint value_4 = ModbusUtility.GetUInt32(input_register[7], input_register[6]);  // 32bit

            uint value_5 = ModbusUtility.GetUInt32(input_register[9], input_register[8]);  // 32bit

            textBox1.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_1), 0).ToString(); // chuyển đổi float

            textBox2.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_2), 0).ToString(); // chuyển đổi float

            textBox3.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_3), 0).ToString(); // chuyển đổi float

            textBox4.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_4), 0).ToString(); // chuyển đổi float

            textBox5.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_5), 0).ToString(); // chuyển đổi float  */


            return DateTime.Now.ToString("dd/MM/yyyy  HH:mm:ss");

        }


        private void textBox6_TextChanged(object sender, EventArgs e)

        {


        }


        private void write()

        {

            

            master.WriteSingleRegister(slaveID, ushort.Parse(textBox15.Text), ushort.Parse(textBox16.Text));

        }


        private void Read_Coil()

        {

           


        }


        private void button2_Click(object sender, EventArgs e)

        {

            master.WriteSingleCoil(slaveID, ushort.Parse(textBox15.Text), bool.Parse(textBox16.Text));

        }

    }

}



Video hướng dẫn


1 comment:

  1. bạn có file hướng dẫn sự dụng nmodbus không cho mình xin với.

    ReplyDelete