S7-1200PLC Modbus通信踩坑记录


先放结论,两个大坑:
1.数据地址加4万或40万,来帮助PLC确定Modbus功能代码;
2.和某些设备通信时,需要给数据地址+1。

本文内容:帮读者找到通信失败的原因,不是完整的教程。
硬件设备:CPU1212C,485通信模块CM1241,Modbus从机(比如变送器,变频器)。
编程软件:TIA Portal

485接线

CM1241带一个DB9接头,接线按照 "3号管脚是485+,8号是485-"进行,不要看AB。2根线就够,不用接GND。
在这里插入图片描述

TIA Portal函数块的选用

如下图,函数区里有两个MODBUS的文件夹,上面的带(RTU)的和下面的那个。在使用的时候只用一个文件夹里的函数,不要混用,而且两组函数的用法不太一样。

Modbus编程,大致步骤是先用MB_COMM_LOAD初始化,再用MB_MASTER将PLC作为主机向从机发起通信,具体做法可以网上搜到。新版函数需要设置背景数据块 “Modbus_Comm_Load_DB”.MODE=4,表示485半双工通信方式,算个小坑。
在这里插入图片描述

MODBUS标准帧结构

Modbus数据帧的一般结构是:
在这里插入图片描述
在这里插入图片描述
根据命令码的不同,上面“数据内容”会有不同的划分。最常用的命令码是03和06。03表示主机读取从机里多个字(英文word)的数据,一个字就是2个字节。03功能码的示例:
在这里插入图片描述
06表示主机向从机写入1个字的数据:
在这里插入图片描述

叠加地址基数

MB_MASTER函数块:
在这里插入图片描述
了解了帧结构之后,如果直接把起始地址输入到函数里,会通信失败。这时候就需要看西门子的文档了。

可以发现,函数上不能直接输入Modbus功能码,而且多了一个MODE输入。看一下函数的参数说明:
在这里插入图片描述
在这里插入图片描述
可见,需要通过指定MODE和数据地址,来间接的确定功能码。上表种的“Modbus地址”就是数据地址。

在Modbus帧结构里,数据地址一般是占用1个字,所以理论上地址可以是0~0xFFFF种的任意一个数,最大值0xFFFF对应十进制的65535。

这时候直接输入原始的数据地址就会出错。比如在MODE=0的情况下,数据地址是2000,PLC就以为要读取一个位;地址是30001,PLC以为要读取一个字,完全混乱了。

为了避免混乱,正确做法是给数据地址加上一个“基数”,再输入到函数。 具体加什么基数要看上面的表格。比如原地址是2000,想要把功能码设为03,就要把MODE设为0,数据地址加4万或40万,变成42000或402000,让PLC能根据MODE和地址,定位到功能码03。PLC在实际发送的时候会自动减掉基数。

为什么有4万和40万两个基数?根据前面的分析,原数据地址最大能到65535,这时候如果加4万,变成105535,就超出表格里40001~49999的范围了。如果加40万,变成465535,正好在表格里40万地址区间之内。所以基数40万适用于所有的Modbus从机,4万可以用于地址范围比较小的设备。

根据情况,给地址加一

解决基数问题之后,还是一直报错,直到看到一篇教程上说:
DATA_ADDR–从站的起始地址(需将从站的地址由16进制转换为10进制,转换成10进制后,数据加1(因为从站地址是从0开始的,而PLC的地址是从1开始的,所以要加1)) ;
于是破案了。至于数据地址要不要加一,需要看具体设备的说明书。一般地址从个位数1开始的,就是已经加过1了,可以直接用;从整数开始的就要自己加1。不确定就做个实验。

最后放两个案例:

案例1:从力传感器读取重量值

查看变送器说明书:
在这里插入图片描述

现在想要读取重量。
确定MODE: 是读取操作,需要功能码03,所以MODE设为0.
确定DATA_ADDR:
根据变送器说明书,数据的原地址是1.
根据变送器说明书,数据地址都在一万以内,所以基数采用4万或40万都行。这里采用4万,叠加后地址变为40001. 而且这个数据地址不需要再加一了。
确定DATA_LEN: 重量数据占用4个字节,所以DATA_LEN=2(字)。
通信成功后,数据会被放到DATA_PTR指向的PLC存储空间。

案例2:变频电机控制

查阅变频器说明书:
在这里插入图片描述
现想要控制电机正转运行。
确定MODE: 是写入操作,MODE=1。
确定DATA_ADDR: 数据原地址是2000H(16进制),转换为10进制是8192。
观察发现,说明书上地址是从个位为0的整数开始的,所以地址要加1.
观察发现,变频器上的数据地址范围比较大,超过了1万,所以统一加基数40万。
综上,输入到PLC函数的数据地址是:400,000+8192+1=408,193.
确定DATA_LEN:命令信息占用1个字,所以DATA_LEN=1.
数据值 :在DATA_PTR指向的变量里,设置命令值0001。

### 回答1: s7-1200plc modbus tcp通信是指S7-1200 PLC通过Modbus TCP协议与其他设备进行通信的一种方式。Modbus TCP是一种常用的工业通信协议,可实现设备之间的可靠数据传输和通信。S7-1200 PLC支持Modbus TCP协议,可以方便地与其他设备(如HMI、传感器等)进行通信,从而实现设备间的数据交换和控制。 ### 回答2: S7-1200PLC是一种高性能、低成本的可编程逻辑控制器,常用于自动化控制系统中。其支持Modbus TCP通信协议,可以与其他的Modbus TCP设备进行通信,实现数据的交互和共享。 Modbus TCP是一种基于TCP/IP协议栈的通信协议,可以实现设备之间数据的实时传输和处理。在S7-1200PLC中,通过配置相应的网络参数和功能块,可以实现Modbus TCP通信的功能。下面介绍几个主要的配置步骤。 首先,需要在S7-1200PLC中配置网络参数。在PLC配置界面中,选择“通信”功能区,进入“通信设置”界面。在此界面中可以配置PLC的网络参数,包括IP地址、子网掩码、默认网关等。根据连接设备的实际需求,可合理调整网络参数配置。 然后,在PLC编程软件中添加Modbus TCP通信功能块。可选择STL、FBD或LAD语言编写Modbus TCP通信代码。其中,常用的Modbus TCP通信功能块包括“MODBUS_TCP_CLIENT”和“MODBUS_TCP_SERVER”。它们分别是PLC作为客户端或服务器端与其他设备之间进行通信的功能块。根据实际情况,可灵活选择使用。 接下来,可以配置Modbus TCP通信的参数,如IP地址、端口号、Modbus地址、读取位数等。在PLC编程软件的Modbus TCP通信功能区中,通过添加“读取字操作”或“读取位操作”等进行参数配置。同样根据实际情况灵活设置相关参数,以达到最佳通信效果。 最后,通过代码调试和硬件测试等手段进行功能验证。可在PLC编程软件中进行代码调试,或将PLC与其他设备连接,进行数据交互测试。通过调试和测试,可检测Modbus TCP通信功能是否正常运行,以及是否满足实际需求。 总之,S7-1200PLC Modbus TCP通信是实现自动化控制系统设备互联互通的有力手段,能实现设备之间的数据交互和共享。在使用过程中,需灵活配置参数,注意程序逻辑和代码书写规范,以确保可靠性和稳定性。 ### 回答3: S7-1200 PLC是一种功能强大的工业自动化控制器,可以使用Modbus TCP通信协议实现与其他设备的通信Modbus TCP通信是一种基于TCP/IP协议的Modbus协议的实现,可以实现在以太网环境下的实时数据通信。使用S7-1200 PLC进行Modbus TCP通信,需要注意以下几个方面: 1. Modbus TCP协议的配置:需要在PLC的配置界面中设置Modbus TCP协议的相关参数,包括IP地址、Port号、数据传输格式等。 2. 程序设计:PLC程序需要使用相应的指令实现Modbus TCP通信,控制PLC与其他设备之间的数据交换。 3. 网络配置:需要确保PLC与其他设备处于同一局域网内,并且网关、子网掩码等网络参数设置正确。 4. 数据传输保护:Modbus TCP通信基于TCP/IP协议,安全性较差,因此需要采取一定的数据安全保护措施,如加密传输、数据签名等。 总体来说,在S7-1200 PLC上实现Modbus TCP通信需要涵盖网络配置、协议配置、程序设计、数据安全等多个方面,需要进行较为详细的配置和设置。同时,需要对网络环境和数据传输安全等问题进行综合考虑和解决,以确保通信的数据准确性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值