C#ModBus Tcp读写数据

  1. 引用-添加引用-HslCommunication.dll
    C#ModBus Tcp读写数据

  2. ModBus组件所有的功能类都在 HslCommunication.ModBus命名空间,所以再使用之前先添加

using HslCommunication.ModBus;
using HslCommunication;
  1. 在使用读写功能之前必须先进行实例化:
private ModbusTcpNet busTcpClient = new ModbusTcpNet("192.168.3.45", 502, 0x01);   // 站号1

上面的实例化指定了服务器的IP地址,端口号(一般都是502),以及自己的站号,允许设置为0-255,后面的两个参数有默认值,在实例化的时候可以省略。

private ModbusTcpNet busTcpClient = new ModbusTcpNet("192.168.3.45");   // 端口号502,站号1

4.C#ModBus Tcp读写数据

模拟器模拟的是西门子PLC 有四种类型
地址以0开头的是可读可写线圈
地址以1开头的是只读线圈
地址以4开头的是可读可写寄存器(string/float/int/ushort/short等都可以放在这里面)
地址以3开头的是只读寄存器
我们读取的时候只看后四位0001,就是1,但是库里面是从0开始读的,所以对应的就要减一

  1. 读取寄存器的一个值
        private void button1_Click(object sender, EventArgs e)
        {
		    bool coil100 = busTcpClient.ReadCoil("0").Content;   // 读取线圈1的通断
		    int int100 = busTcpClient.ReadInt32("0").Content;      // 读取寄存器1-2的int值
		    float float100 = busTcpClient.ReadFloat("0").Content; // 读取寄存器1-2的float值
		    double double100 = busTcpClient.ReadDouble("0").Content; // 读取寄存器1-3的double值
        }
  1. 读取寄存器的一组值(一组线圈)(一组float值)
        private void button3_Click(object sender, EventArgs e)
        {
            //读取地址为0,长度为3的线圈数量
            OperateResult<bool[]> read = busTcpClient.ReadCoil("0", 3);
            if (read.IsSuccess)
            {
                for (int i = 0; i < read.Content.Length; i++)
                {
                    Console.WriteLine(read.Content[i]);
                }

            }
            else
            {
                MessageBox.Show(read.ToMessageShowString());
            }
			
           	//读取(一组)寄存器数据
            OperateResult<float[]> result = busTcpClient.ReadFloat("0", 4);
            if (result.IsSuccess)
            {
                //Console.WriteLine(result.Content[0]);
                //Console.WriteLine(result.Content[1]);
                //Console.WriteLine(result.Content[2]);
                for (int i = 0; i < result.Content.Length; i++)
                {
                    Console.WriteLine(result.Content[i]);
                }
            }
            else
            {
                MessageBox.Show(result.ToMessageShowString());
            }
        }
  1. 写入一个(线圈)(寄存器)
        private void button2_Click(object sender, EventArgs e)
        {
		    busTcpClient.WriteCoil("0", true);// 写入线圈1为通
		    busTcpClient.Write("0", 123.456);// 写入寄存器1-2为123.456
        }
  1. 批量写入一组(线圈)(寄存器)
        private void button9_Click(object sender, EventArgs e)
        {
            //写入一组线圈
            bool[] value = new bool[] { true, true, false, true, false };
            busTcpClient.WriteCoil("0", value);
        }

        private void button10_Click(object sender, EventArgs e)
        {

            //写入一组寄存器
            float[] value = new float[] {1.1F, 1.2F, 1.3F, 1.4F, 1.5F };
            busTcpClient.Write("0", value);
        }

C#ModBus Tcp读写数据 -C#ModBus Tcp读写数据

上一篇:无线模拟量传输模块[标准Modbus协议]


下一篇:单串口服务器连接温度传感器通讯