以MODBUS通讯为例
准备工作: 外部库文件的形式NModbus4,添加引用
步骤如下:
1. 设置连接
首先,需要设置与PLC的连接。根据表格,PLC的IP地址为 192.168.1.88,端口号为 502。
string serverIp = "192.168.1.88";
int port = 502;
TcpClient tcpClient = new TcpClient(serverIp, port);
IModbusMaster master = ModbusIpMaster.CreateIp(tcpClient);
2. 读写操作
读取操作
假设我们需要读取PC与PLC之间的寄存器地址 50200 对应的PLC寄存器 D100 的值。根据Modbus协议,这通常是一个保持寄存器。
1. 读取保持寄存器(Read Holding Registers)
ushort[] registers = master.ReadHoldingRegisters(startAddress, numInputs);
- 作用:读取Modbus设备中的保持寄存器的值。
- 参数:
- startAddress:起始寄存器地址,从哪个寄存器开始读取数据。
- numInputs:要读取的寄存器数量。
- 返回值:一个ushort数组,包含从起始地址开始的指定数量的保持寄存器的值。
2. 读取输入寄存器(Read Input Registers)
ushort[] inputRegisters = master.ReadInputRegisters(startAddress, numInputs);
- 作用:读取Modbus设备中的输入寄存器的值。
- 参数:
- startAddress:起始寄存器地址,从哪个寄存器开始读取数据。
- numInputs:要读取的寄存器数量。
- 返回值:一个ushort数组,包含从起始地址开始的指定数量的输入寄存器的值。
区别:
1. 功能:保持寄存器用于存储设备的状态信息和控制参数,可以读取和写入;输入寄存器用于存储只读数据,通常是传感器数据等。
2. 权限:保持寄存器可以读取和写入,而输入寄存器只能读取。
3. 应用场景:保持寄存器通常用于控制和监控数据的读写,输入寄存器用于传感器数据等只读信息。
综上所述,保持寄存器和输入寄存器在Modbus通信中具有不同的作用和权限,通过读取这两种寄存器可以获取设备的不同类型的数据。
写入操作
假设我们需要将值 123 写入到PC与PLC之间的寄存器地址 50200 对应的PLC寄存器 D100
ushort valueToWrite = 123; // 要写入的值
master.WriteSingleRegister(startAddress, valueToWrite);
Console.WriteLine($"已将值{valueToWrite}写入寄存器D100");
- 读取操作:使用 ReadHoldingRegisters 方法从指定的起始地址读取一个或多个保持寄存器的值。这里的 startAddress 和 numRegisters 分别指定了起始地址和读取的寄存器数量。
- 写入操作:使用 WriteSingleRegister 方法向指定的寄存器地址写入一个值。这里的 startAddress 指定了寄存器地址,valueToWrite 是要写入的值。
3. 关闭连接
操作完成后,应当关闭连接以释放资源。
tcpClient.Close();
待更新------------各类PLC与上位机的通讯方式