不好意思,由于TIA 软件安装不顺利。导致卡住了。
这次更新一下西门子1200的modbus tcp的用法。
PS:由于1200的RS485的模块,手里没有,还有AB的PLC也没有了。所以对于这一块的,我这边将整理一下之前的调试时参考的资料大家。然后就进入到三菱的环节。
参考文档:
基于 S7-1200 CPU集成PN口的 ModbusTCP 通信快速入门(见附件)
modbus TCP Server
在指令库中找到【通信】->【其他】
引脚参数的定义:
Disconnect:断开连接:true是断开,false是监听
Connect_ID:是连接的ID号,唯一标识 PLC 中的每个连接,不能和其他modbus功能块的ID号重复。
IP_PORT: 默认值=502:IP 端口号,将监视该端口是否有来自Modbus 客户端的连接请求。
MB_HOLD_REG:指向 MB_SERVER Modbus 保持寄存器的指针:必须是一个标准的全局 DB 或 M 存储区地址。(即03/16功能码对应读取的区域)
剩余的引脚可以填或不填。
需要配置一个DB块做为MB_Hold_reg的引脚配置。
配置完成后需要特别注意下,改DB块的配置属性需要取消优化的块访问。
编译一下后,会发现偏移量会自动填充上去。
我们通过modbus poll监控后发现:
03的功能码:对应着MB_HOLD_REG的对应区域。
01功能码:对应着输出点位
02的功能码对应的是输出点位。
到这里。TCPserver功能就介绍完成了。
PS:个人观点:我个人由于一个Connect_ID仅支持一个连接,即用一个modbus Poll是ok的,但是用两个进行,第二个就会报错。我在测试过程中,还发现modbus工具连着,通讯正常。当我重新更新一次程序之后,modbus 显示读写出错,但是没有断开连接,PLC的TCP连接已经成功,但是repose一直没有。Modbus poll重启后正常。猜想是PLC的连接没有释放导致的。所以大家在用modbus poll做项目的时候要注意测一下重连机制,不然会造成通讯不稳定。需要把错误码和DisConnect进行关联。(我不确保观点正确,但是调试中确实遇到问题)
modbus TCP Client
在指令库中找到【通信】->【其他】->【MODBUS TCP】。
REQ:modbus TCP Client通讯请求标志位。Ture:发送modbus 请求。
DISCONNECT:0,建立连接;1,断开连接;
Connect_ID:唯一标识PLC中的每个连接。
IP_OCTET_1、IP_OCTET_2、IP_OCTET_3、IP_OCTET_4:IP的四个网段。
IP_PORT:服务器的端口号,默认是502。
MB_MODE:读写类型。0是读,1是写;
MB_DATA_ADDR:modbus 请求访问的开始地址;
MB_DATA_LEN:数据访问的位数和字数。
MB_DATA_PTR:数据读写的存放区域。
编写程序如下:
在【其他】->【MODBUS TCP】中吧MB_Client 拖拽到编程区,并配置管脚参数
其中配置MB_DATA_PTR的参数时,注意取消“优化的块访问”
把程序下载到PLC中。
打开modbus poll
将PLC的程序中req的引脚%M0.0设置成TRUE之后,在DB块中监控到的数据如下:
PS:以上仅是个人感悟,不确保严谨性。有兴趣讨论和研究modbus的加我微信we9322025