如何使用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#脚本?
如果将字节转换为十六进制表示,则更容易理解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函数。