C#--通过Modbus TCP与西门子1200PLC通讯

以下是学习笔记:

学习参考:https://www.bilibili.com/video/BV1LV41127M1?p=5&t=2752

一,回顾:上位机与PLC通信方式

1,S7,

2,ModbusTCP

3,TCP

4,UDP

5,OPC

二,Modbus协议基础知识介绍存储区:

1,输入线圈 0区 --》I点

2,输出线圈 1区--》Q点

3,输入寄存器 3区--》PIW

4,输出寄存器 4区--》DB区 ,M区 0=40001  7=40008 起始地址都是从0开始的,

输出寄存器的好处:可读可写,既可以表示布尔,又可以表示寄存器

所以输出寄存器 4区 用的是最多的。

比如:

一个寄存器16个位

40001.0来表示布尔  读取是方便的  但是写入布尔比较麻烦,因为Modbus不支持寄存器布尔量的直接写入

如果要写入布尔量:要先读取再偏移再写入

如果是三菱PLC D0.0 想写入true或false,因为三菱PLC不支持寄存器布尔

三,硬件接线和PLC程序编写

1,,硬件接线部分:

C#--通过Modbus TCP与西门子1200PLC通讯

 

 2,在博图中写好PLC程序

3,Modbus地址与PLC地址映射

3.1,布尔量的映射:

C#--通过Modbus TCP与西门子1200PLC通讯

 

 3.2 浮点型的映射

C#--通过Modbus TCP与西门子1200PLC通讯

 

 3.3

C#--通过Modbus TCP与西门子1200PLC通讯

 

 4,最后还要写一个PLC作为ModbusTCP服务器的程序

C#--通过Modbus TCP与西门子1200PLC通讯

 

 5,

知识:一个浮点型对应4个字节,需要2个寄存器

1个寄存器2个字节

C#--通过Modbus TCP与西门子1200PLC通讯

 

先用Modbus Poll来测试下:

 1,连接

C#--通过Modbus TCP与西门子1200PLC通讯

 

 2,设置读取19个寄存器,因为上面设置的PLC就是19个寄存器

C#--通过Modbus TCP与西门子1200PLC通讯

 

 3,这里就能看到PLC的数据了

C#--通过Modbus TCP与西门子1200PLC通讯

 

 4,监控PLC的实际值,跟Modbus Poll读取的值不一样。

C#--通过Modbus TCP与西门子1200PLC通讯

 

 5,修改Modbus Poll-->Display的数据类型就可以

C#--通过Modbus TCP与西门子1200PLC通讯

 

 6,现在就可以调试了,对PLC点位控制

C#--通过Modbus TCP与西门子1200PLC通讯

 

 

 

四,C#程序

1,界面

C#--通过Modbus TCP与西门子1200PLC通讯

 

 2,手写ModbusTCP通讯。也可以使用开源库 NModbus4,这里我们使用开源库

工具--》NuGet包管理器--》管理解决方案的NuGet程序包--》浏览--》搜索

C#--通过Modbus TCP与西门子1200PLC通讯

 

 备注:安装好了之后,其实就是一个这样一个dll文件,以后的项目如果没有下载,可以直接用这个NModbus4.dll这文件

C#--通过Modbus TCP与西门子1200PLC通讯

 

 3,连接和断开代码编写:

C#--通过Modbus TCP与西门子1200PLC通讯

 

 4,实时读取PLC浮点型的数据 40008后面的12个寄存器是浮点型的数据

注意参数的地址,是相对地址还是绝对地址

正常的使用ushort[] res = master,ReadHoldingRegisters(4008,12),如果是绝对地址就是7

 

C#--通过Modbus TCP与西门子1200PLC通讯

 

 解析方法:

C#--通过Modbus TCP与西门子1200PLC通讯

 

 连接成功后开启定时器

C#--通过Modbus TCP与西门子1200PLC通讯

 

 

 

5,点动功能:

C#--通过Modbus TCP与西门子1200PLC通讯

 

 6,相对运动,绝对运动,会原点

C#--通过Modbus TCP与西门子1200PLC通讯

 

 

7,效果:

C#--通过Modbus TCP与西门子1200PLC通讯

 

上一篇:C#ModBus Tcp读写数据


下一篇:C# ModBus Tcp读写数据 与服务器进行通讯 安卓modbus tcp