如何使用NModbus和c#结合PLC实现输出的开关

本文关键字:实现 输出 开关 PLC 结合 何使用 NModbus | 更新日期: 2023-09-27 18:15:01

嗨,我正在使用NModbus库,以前在VS2012上运行,然后在VS2010上运行,但尝试在VS2008上运行它,它似乎运行得更好。

以下是我在dos提示符 中运行代码时的输出
Modbus.IO.ModbusSerialTransport Write -     TX: 1,16,7,208,0,3,6,0,1,0,5,0,15,149,152
Modbus.IO.ModbusRTUTransport ReadResponse - RX: 1,16,7,208,0,3,128,133

现在,当我运行这个脚本时,我确实在我的PLC单元上得到RX和TX的闪烁,但我没有看到PLC上的输出变高。下面是库

中的相关代码段
{
        using (SerialPort port = new SerialPort("COM1"))
        {
            // configure serial port
            port.BaudRate = 38400;
            port.DataBits = 8;
            port.Parity = Parity.Odd;
            port.StopBits = StopBits.One;
            port.Open();
            // create modbus master
            IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
            byte slaveId = 1;
            ushort startAddress = 2000;
            //ushort[] registers = new ushort[] { 1, 2, 3 };
            ushort[] registers = new ushort[] { 01, 05, 15 };
            // write three registers
            master.WriteMultipleRegisters(slaveId, startAddress, registers);
        }
    }

有人可以帮助我理解TX和RX,也可以帮助我指出方向,以查明我可以在哪里找到如何设置输出高从c#脚本?

如何使用NModbus和c#结合PLC实现输出的开关

如果将字节转换为十六进制表示,则更容易理解TX和RX数据。

对于TX数据,我们有:

01 10 07 d00 00 03 06 00 01 00 05 00 0F 95 98

01为Modbus从地址

10是写多寄存器功能的Modbus函数码

07 D0为起始地址(2000)

00 03是写入(3)

的寄存器数。

06是包含寄存器数据的字节数(每个寄存器保存2个字节,当你写入3个寄存器时,我们有6个字节被传输)

00 01是写入寄存器2000的值

00 05是写入寄存器2001的值

00 0F是写入寄存器的值2002

95 98是该帧的计算CRC

对于RX数据,我们有:

01 10 07 d00 00 03 80 85

写多寄存器函数的响应只是一个响应,具有相同的从地址,函数码,起始地址和来自请求的寄存器数,加上响应帧的计算CRC (80 85)。

您可以从http://www.modbus.org/specs.php获得Modbus规范。你可以在Modbus应用协议规范中找到所有请求和响应帧的格式。

你需要检查你的PLC文档,看看输出是如何映射到寄存器的。由于它们是开/关输出,它们可能被映射到线圈,在这种情况下,您应该使用Write Multiple coil函数。