c#如何读取Modbus中Slave和Poll的值

虚拟串口

在这里插入图片描述

Modbus Slave

右击设置slave定义

在这里插入图片描述
在这里插入图片描述

设置好地址后,设置连接。点击Connection–选择Connect

在这里插入图片描述
在这里插入图片描述

Modbus Poll

右击选择设置定义

在这里插入图片描述

设置的内容要和slave一致

在这里插入图片描述

设置连接,点击Connection—选择Connect

在这里插入图片描述
在这里插入图片描述

Poll和Slave连接之后,可以获取slave的值。我们在使用c#读取信息时,读取的是Poll的端口号,此处是"COM3"。但是在读取的时候,一定要将slave打开,Poll关闭。Poll不关闭的话会引起"对端口“COM3”的访问被拒绝。"。这样可以通过Poll的串口读取slave设置的值。

public static void ModbusSerialRtuMasterReadRegisters()
{
    using(SerialPort port = new SerialPort("COM3"))
    {
        port.BaudRate = 9600;//比特率
        port.DataBits = 8;//数据位 
        port.Parity = Parity.None;//校验位
        port.StopBits = StopBits.One;//停止位
        port.Open();

        // create modbus master  创建一个master   里面有一个串行的ModbusSerialMaster,直接调用
        IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
        //IModbusSerialMaster master1 = ModbusSerialMaster.CreateAscii(port);

        byte slaveId = 1;//slave地址
        ushort startAddress = 1;//起始地址
        ushort registerNUM = 10;

        //同步
       ushort[] data =  master.ReadHoldingRegisters(slaveId, startAddress, registerNUM);

        if (data != null && data.Length > 0)
        {
            for (int i = 0; i < data.Length; i++)
            {
                Console.WriteLine($"Register {startAddress + i}: {data[i]}");
            }
        }
        else
        {
            Console.WriteLine("No data received.");
        }
        //异步线程读取数据
        //master.ReadHoldingRegisters

    }

}

代码不全,只是想分析一下自己怎么才读取到信息的。如果有错误,请在评论区指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值