【实践分享】基于S7-1500CPU集成PN口的Modbus TCP通讯配置和通讯数据处理实践
引言
本文以实际工程项目为背景,详细介绍在TIA Portal V20环境下,基于S7-1500 CPU集成PN口实现Modbus TCP和主DCS控制系统的通讯的技术方案,在通讯架构中,DCS系统作为Modbus TCP Master(Client),S7-1500 CPU作为Modbus TCP Slave(Server),DCS侧建立读取和写入功能块控制和S7-1500CPU过程数据的双向交互过程。
本文还侧重讲解通讯数据的标准化处理过程,如针对模拟量数据,DCS系统默认采用Int类型进行读取,而西门子PLC用户通常习惯使用Real类型处理模拟量,为满足DCS侧的数据格式要求,文中通过具体项目案例,系统介绍了通讯数据的标准化处理方法,为用户提供完成数据标准化的解决思路。
1 Modbus TCP简介
Modbus TCP是一种基于TCP/IP协议的工业自动化通信协议,作为工业界应用最广泛的协议之一,Modbus可以让来自不同厂商的传感器、控制器、执行器能顺畅交流,其核心特点是保留了传统Modbus的简洁性和可靠性,同时借助TCP/IP的网络能力扩展了通信范围和灵活性。
Modbus协议包括ASCII、RTU、TCP三种报文类型,标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。Modbus设备可分为主站(Master)和从站(slave),主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。对于这三种通信在数据模型和功能调用上都是相同的,只有封装方式是不同的。
图1. Modbus TCP请求响应模型
Modbus TCP协议是一个运行在TCP/IP网络连接中的一种协议,与传统的串口方式相比,MODBUS TCP插入一个标准的MODBUS报文头到 TCP报文中,不再带有差错校验和地址域,MBAP为报文头,长度为7字节,组成如下图2所示。
图2. Modbus 报文帧
再拓展一点来讲,Modbus TCP通讯数据的请求过程是并行请求,可同时从多个服务器侧读取数据,和Modbus RTU的串行总线通讯方式有着鲜明的对比,对于系统较为复杂及多站点系统而言,相对Modbus RTU的通讯方式,会节省大量的通讯时间。
图3 Modbus TCP客户端/服务器的数据请求
最后,Modbus TCP 协议使用的通讯资源端口号 在Modbus服务器中按缺省协议使用Port 502通信端口,在Modus客户器程序 中设置任意通信端口(为避免与其它通讯协议的冲突一般建议2000以后),或 者不设置端口号,系统会自动分配一个端口号。
2 项目介绍
因现场项目改造需求新增一面西门子的控制柜,用S7-1500PLC 采集现场的过程信号,及泵的启停和阀门开关等控制,并通过Modbus TCP的通讯方式和主DCS 系统NovaTech D/3完成数据交互, DCS系统D/3作为Modbus TCP Master(Client),S7-1500CPU作为Modbus TCP Slave(Server),物理链路通过交换机实现双方过程数据的连接。
系统通讯架构图简化如下所示。
图4系统通讯架构示意图
因NovaTech D/3主控制系统比较小众,且不好找相关Modbus TCP通讯的介绍资料,那么我们项目中处理此通讯任务的思路是先从Siemens S7-1500 PLC着手,组态好程序并下载到PLC中后,一定记得用Modscan32 或者Modbus Poll等相关软件验证西门子侧通讯已经组态正常,这样后面对接主系统时,对通讯建立的问题排除是很有帮助的。
关于TIA Portal里面Modbus TCP的具体组态方式,可以参阅西门子官方总结手册 ”基于S7-1500 CPU 集成PN口的 Modbus TCP 通信快速入门”,此文中较为详细的介绍了Modbus TCP作为Server或Client的通讯建立过程。
3 Siemens S7-1500 PLC通讯组态介绍
首先介绍S7-1500CPU组态为Modbus TCP Server与通讯伙伴D/3建立通讯,在TIA Portal V20中组态好硬件及IO模块后,为集成的PROFINET接口建立一个新的子网并设定IP地址,本例中因要和主系统设置在同一网段内,PLC侧地址设为172.16.4.150。
图5 S7-1500PLC在TIA环境中配置网络和地址
在CPU1511-1PN的OB1或者FC功能块中添加Modbus Server功能块“MB_SERVER”, 软件将提示会为该FB块增加一个背景数据块,本项目中为 DB64 “MB_SERVER_DB”,如图6所示:
图6 添加通讯功能块“MB_SERVER”
此处需要强调CONNECT信号管脚一定要指向xx.TCON这个“TCON_IP_V4”的数据类型,否则通讯会报错,报错信息可以查阅块的STATUS 状态,文中为16#7006代表通讯正常。
之后在CPU1511-1PN中添加一个全局数据块来匹配功能块“MB_SERVER”的管教参数“CONNECT”,本项目中为数据块DB61 “MB_TCP_serverPara”, 打开该数据块,需要手动建立一个“TCON_IP_V4”的数据类型,此处命名为“TCON”, 若下图所示。
图7 手动建立一个“TCON_IP_V4”的数据类型
展开DB块后其“TCON”的数据类型各参数设置说明如下:
最后,创建一个全局数据块用于匹配功能块的参数“MB_HOLD_REG”, 本项目中使用DB62 ”DCS_MB_TCP_DATA”, 用于存储保持寄存器的通讯数据,需要注意的是该数据块必须为非优化数据块(支持绝对寻址),在该数据块的属性中不勾选“优化的块访问”选项,如下图所示。
图 8 创建保持寄存器存储数据块
另外关于硬件接口标识符,可选中PN网口并在系统常数中查看,如下图所示。
图 9 硬件接口标识符
设置完上述各管脚参数后,编译程序并下载项目到CPU1511-1PN中,在全局数据块DB62中定义通讯数据的类型,如下图所示,在项目中分别定义了INT和Real类型的数据,然后打开Modsan32 应用程序,下面以保持寄存器为例介绍通信测试过程。 在Modscan32的数据定义界面中设置数据类型为保持寄存器,并设置Modbus 偏移量及长度,建立与CPU1511-1PN集成PN口的通信连接,可以看到双 方可以建立通信连接并进行数据读写,如下图所示:
图10 建立全局通讯数据块并定义类型
打开Modscan32仿真软件,设置连接参数,协议类型选择Modbus TCP, IP address 需要输入通讯伙伴的地址,文中为172.16.4.150,即Siemens S7-1500 PLC的地址, 服务器端口默认设置502即可。
设置连接参数后,设置Device ID为1,选择03:Holding register类型,并定义数据长度,此处注意Length设置最大为100。如40001地址,查看PLC过来的数据信号为True的位置是否和软件一致即可,也可以通过Modscan32右键设置寄存器地址处的数据格式,给PLC侧写入信号。
图11 对BOOL类型信号的仿真测试
对于Real类型的数据,也用一样的方式进行读取,此处文中定义开始地址为20,此处要回顾一下,文中一开始定义的通讯全局数据块DB62中数据块类型读写各包含20个INT类型,40个Real类型,所以第一个Real数据的开始地址为20,这个是通讯建立过程中需要特别特别注意的一个点,一定要注意数据的Mapping过程。
图12 对Real类型信号的仿真测试
最后,文中介绍并使用的是通过TCON_IP_v4结构创建连接参数,除此之外,还可以通过使TCON_Configured结构创建连接参数,2种方式都是可以的,关于后者如何建立,可以查阅文中提及的西门子手册进行详细配置了解。
4 NovaTech D/3通讯组态介绍
前面介绍了S7-1500PLC作为Modbus TCP server的通讯组态过程,接下来介绍NovaTech D/3 DCS系统作为Modbus TCP Client的通讯组态过程,此系统和西门子不一样的一点,对于通讯并不使用功能块来进行组态的,而是以类似填表的方式来进行通讯组态。
首先,打开通讯组态软件EthernetMPC I/O Configuration,并建立一个新的通讯节点,文中为PCM04ETH104. IP地址设置为172.16.4.150(此处为通讯Partner地址,即为PLC的IP地址),协议设置为Modbus TCP Protocol。
然后在数据区建立一个读取Read类型的数据块,长度为100INT,从保持寄存器的4x, 400001地址开始, 继续建立一个写入Write类型的数据块,长度也是100INT,从保持寄存器的4x,400101地址开始,注意这个双方约定的数据长度需要和PLC侧一致,否则通讯可能建立不成功。
图13 DCS侧作为Modbus TCP Client的通讯组态
然后,打开通讯监控软件界面,看到PCM04ETH104的连接状态为OK,代表Modbus TCP通讯和Siemens S7-1500PLC已经建立成功。
图 14 DCS系统通讯状态监测
5 通讯双方的数据格式标准化
众所周知,在处理通讯间的通讯数据时,以同一的数据格式进行,会降低工程量并提供组态效率,如我们约定通讯双方以INT类型的数据基础进行数据的通讯交互,那么在双方程序层面就会存在一个数据打包和解包的过程,以Siemens PLC举例如下,DCS侧的做法类型,不再展开阐述。
从DCS系统传递过来的INT类型数据,可以通过一个逻辑块解包到需要的BOOL类型数据,如下图所示,将INT解包为16个Bit,用于PLC侧信号点位的组态。
图15 数据标准化解包处理
从PLC系统传递到DCS系统的INT类型数据,可以通过一个逻辑块打包将BOOL类型数据打包为INT类型,如下图所示,将16个Bit打包为1个INT类型,用于DCS侧信号点位的组态。
图16 数据标准化打包处理
了解完数据的打包解包类型后,既然已经约定INT类型作为通讯双方的数据传递类型,那么对于Real类型的数据该如何处理呢? 文中使用TIA Protal库中自带的标准块NORM_X和SCALE_X配合使用,将Real类型的数据转换为INT类型,以便DCS侧方便读取。
◆ 从DCS来的INT类型数据,先通过NORM_X转为Real,在经SCALE_X转换为实际需要的数据,MIN和MAX为实际工程量量程下限和上限。
◆ 发送给DCS的Real类型数据,先通过NORM_X转为Real,在经SCALE_X转换为INT类型的数据,对于西门子PLC S7-1500而言,MIN和MAX设置为0和27648。
图17 INT和Real类型的数据处理转换处理
6 总结
本文以实际工程项目为背景,系统性地阐述了Modbus TCP通讯在工业自动化领域的应用与实践。通过详细解析Server侧与Client侧的通讯建立过程、数据打包解包机制,以及在统一数据格式要求下的Real类型数据处理方法,为工程技术人员提供了一套完整、实用的Modbus TCP通讯解决方案。
作者简介
李福祥:
自动化工控行业从业者
对西门子PCS7产品有深入了解
2026年1月


