如何使用带PLC的NModbus和C#打开和关闭输出
大家好,我正在使用NModbus库,以前在VS2012和VS2010上运行过,但尝试在VS2008上运行过,它似乎运行得更好 这是我在dos提示符下运行代码时的输出如何使用带PLC的NModbus和C#打开和关闭输出,c#,serial-port,modbus,C#,Serial Port,Modbus,大家好,我正在使用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 现在,当我运行此脚
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#script中设置高输出的方法?如果将字节转换为十六进制表示,那么理解TX和RX数据就更容易了 对于TX数据,我们有: 01 10 07 D0 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的值 000f是写入寄存器2002的值 95 98是此帧的计算CRC 对于RX数据,我们有: 01 10 07 D0 00 03 80 85 写入多个寄存器功能的响应只是一个具有相同从机地址、功能代码、起始地址和来自请求的寄存器数量的响应,加上响应帧的计算CRC(80 85) 您可以从中获取Modbus规范。您可以在Modbus应用协议规范中找到所有请求和响应帧的格式
您需要检查PLC文档,查看输出如何映射到寄存器。由于它们是开/关输出,它们可能映射到线圈,在这种情况下,您应该使用写入多线圈功能。在命令写入总线之前,您正在处理串行端口。这需要时间。你需要重组你的计划。在启动时打开串口,在程序退出前不要关闭。罗纳尔多,你是个英雄,我非常感谢你概述了以上内容。我确实遇到了一些modbus教程,并使用C#nmodbus库成功地编写了我的plc。真是一种享受:)