以下是学习笔记:
学习参考: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,,硬件接线部分:
2,在博图中写好PLC程序
3,Modbus地址与PLC地址映射
3.1,布尔量的映射:
3.2 浮点型的映射
3.3
4,最后还要写一个PLC作为ModbusTCP服务器的程序
5,
知识:一个浮点型对应4个字节,需要2个寄存器
1个寄存器2个字节
先用Modbus Poll来测试下:
1,连接
2,设置读取19个寄存器,因为上面设置的PLC就是19个寄存器
3,这里就能看到PLC的数据了
4,监控PLC的实际值,跟Modbus Poll读取的值不一样。
5,修改Modbus Poll-->Display的数据类型就可以
6,现在就可以调试了,对PLC点位控制
四,C#程序
1,界面
2,手写ModbusTCP通讯。也可以使用开源库 NModbus4,这里我们使用开源库
工具--》NuGet包管理器--》管理解决方案的NuGet程序包--》浏览--》搜索
备注:安装好了之后,其实就是一个这样一个dll文件,以后的项目如果没有下载,可以直接用这个NModbus4.dll这文件
3,连接和断开代码编写:
4,实时读取PLC浮点型的数据 40008后面的12个寄存器是浮点型的数据
注意参数的地址,是相对地址还是绝对地址
正常的使用ushort[] res = master,ReadHoldingRegisters(4008,12),如果是绝对地址就是7
解析方法:
连接成功后开启定时器
5,点动功能:
6,相对运动,绝对运动,会原点
7,效果: