使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信

n

1多功能测量表SENTRON PAC3200简介
SENTRON PAC3200电能监视设备可精确提供系统特性,包括电压和电流最大值、最小值和平均值,功率值、频率、功率因数、对称性、逻辑计算、负载趋势、谐波和总谐波失真等。SENTRON PAC3200可检测 50 多个基本数值,具有 10个电能计数器,可用于全面负载检测。它们的测量准确度满足电能计数器标准所规定的较高要求。PAC3200带有MODBUS RTU-RS485接口、PROFIBUS-DP接口和MODBUS TCP 接口,可以很方便将PAC3200的数据上传到PLC中进行处理,也可以上传到HMI中进行数据分析、处理及归档。对于西门子系统可以轻松地将PAC3200集成到上位自动化系统中,例如,集成到西门子 SIMATIC PCS 7 powerrate 和SIMATIC WinCC powerrate 软件包中。n

2 PAC3200通信接口对比
PAC3200可以通过MODBUS RTU RS485接口、MODBUS TCP 以太网接口以及现场总线PROFIBUS-DP接口与PLC和HMI通信。下面分别以连接S7-300 PLC为例,在通信性能、连接的个数、编程方面进行对比:n

1) 通信性能:PROFIBUS-DP使用令牌方式由主站依次访问从站,是实时现场总线,通信响应快,通信的响应时间应考虑PAC3200数据的刷新时间(自身刷新时间可能较PROFIBUS-DP刷新时间慢);如果选择以太网MODBUS TCP 通信,由于不是实时网络,通信性能次之,通信的响应时间也应考虑PAC3200数据的刷新时间(自身刷新时间可能较以太网刷新时间慢);使用RS485 MODBUS RTU通信,由于基于串口,通信性能不能与以太网与PROFIBUS-DP相比较。
2) 连接个数:使用PROFIBUS-DP,基于主站的性能,最多可以连接126个站点;以太网MODBUS TCP 通信,基于CP的连接个数,通常16个;使用RS485 MODBUS RTU,可以连接一个网段,典型值31个站点。
3) 编程:使用PROFIBUS-DP,不需要编写通信程序;使用以太网MODBUS TCP 通信,需要编写发送接收通信程序;使用RS485 MODBUS RTU通信,需要编写从站轮询程序,比较麻烦,如果没有购买MODBUS RTU的驱动,还需要编写通信程序。
4) 价格:PROFIBUS-DP与RS485 MODBUS RTU通信需要购买选件网卡,而PAC3200本身集成以太网接口,支持MODBUS TCP 通信。
下面将介绍PAC3200的MODBUS TCP 通信。

3 MODBUS TCP 通信报文
MODBUS TCP 使MODBUS RTU协议运行于以太网,MODBUS TCP使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUS TCP结合了以太网物理网络和网络标准TCP/IP以及以MODBUS作为应用协议标准的数据表示方法。MODBUS TCP通信报文被封装于以太网TCP/IP数据包中。与传统的串口方式,MODBUS TCP插入一个标准的MODBUS报文到TCP报文中,不再带有数据校验和地址,如图1所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信

图1 MODBUS TCP报文n

由于使用以太网TCP/IP数据链路层的校验机制而保证了数据的完整性,MODBUS TCP 报文中不再带有数据校验”CHECKSUM”,原有报文中的“ADDRESS”也被“UNIT ID”替代而加在MODBUS应用协议报文头中。
MODBUS TCP服务器使用502端口与客户端进行通信。n

S7-300 与PAC3200 之间进行MODBUS TCP 通信时,MODBUS应为协议的报文头赋值如下:
byte 0: transaction identifier (高字节) – 为0
byte 1:transaction identifier(低字节) - 为0
byte 2:protocol identifier(高字节) = 0
byte 3:protocol identifier (低字节) = 0
byte 4:length field (高字节) = 0 (因为所有的报文小于256)
byte 5:length field (低字节) = 后面跟随的字节数
byte 6:unit identifier -原从站地址,这里为0
byte 7:MODBUS 功能码,通过功能码发送通信命令
byte 8 ~:后续的字节数与功能码相关n

4 PAC3200支持的MODBUS TCP 功能码
在MODBUS TCP 的报文中,通过使用功能码请求通信伙伴的数据,如对内部寄存器的读写操作、读输入寄存器、写输出寄存器等。不同的操作使用不同的功能码,如FC1、2、3、4、5、6、7、15、16等,PAC3200支持FC2、FC3、FC4、FC6、FC16,在下面将介绍PAC3200这些功能码的报文格式:n

FC2 读输入的位信号:
请求
Byte 0: 功能码,2
Byte 1-2: 开始的位地址
Byte 3-4:位的个数 (1-2000)n

响应:n

Byte 0: 返回的功能码 2
Byte 1: 返回的字节个数 (B=(位的个数+7)/8)
Byte 2-(B+1): 位信号的值 (最低有效位是第一个位信号)n

FC3 读多个寄存器信号:
请求
Byte 0: 功能码,3
Byte 1-2: 寄存器开始地址
Byte 3-4: 寄存器的个数 (1-125)n

响应:n

Byte 0: 返回的功能码 3
Byte 1: 返回的字节个数 (B=2倍寄存器数)
Byte 2-(B+1): 寄存器的值n

FC4 读输入寄存器信号:
请求
Byte 0: 功能码,4
Byte 1-2: 输入寄存器开始地址
Byte 3-4: 输入寄存器的个数 (1-125)n

响应:

Byte 0: 返回的功能码 4
Byte 1: 返回的字节个数 (B=2倍输入寄存器数)
Byte 2-(B+1): 输入寄存器的值n

FC6 写单个寄存器信号:
请求
Byte 0: 功能码,6
Byte 1-2: 寄存器地址
Byte 3-4: 寄存器的值n

响应:n

Byte 0: 返回的功能码 6
Byte 1-2: 寄存器地址
Byte 3-4: 寄存器的值n

FC16 写多个寄存器信号:
请求
Byte 0: 功能码,10(HEX)
Byte 1-2: 寄存器开始地址
Byte 3-4: 寄存器的个数 (1-100)
Byte 5:字节的个数 (B=2倍输入寄存器数)
Byte 6-(B+5) 预置的寄存器值n

响应:n

Byte 0: 返回的功能码 10(HEX)
Byte 1-2: 寄存器开始地址
Byte 3-4: 寄存器个数n

:n

一个寄存器为两个字节,上面介绍的首地址为MODBUS TCP 报文中PDU的首地址。n

5 PAC3200的地址区
使用不同的功能码可以对PAC3200不同的地址区进行操作:
测量变量:例如电压、电流值、输入、输出等变量可以使用FC3和FC4,FC3与FC4功能相
同,两者都可以读。
状态参数:例如限制值0、1、2以及输入0、输出0等位信号,使用FC2可以读出这些信
号。
设定参数:例如连接类型、是否使用电压变送器电压、一次侧电压等,可以使用FC3、FC4进
行读操作,两者功能相同,使用FC16进行写操作。
通信参数:例如IP地址、网关等参数,可以使用FC3、FC4进
行读操作,两者功能相同,使用FC16进行写操作。
信息参数:例如产品的序列号等,可以使用FC3、FC4进行读操作,两者功能相同,使用
FC16进行写操作。
命令参数:例如复位最大值、最小值以及能量计数器等参数,使用FC6进行写操作。n

6 PAC3200侧的配置
使用PAC3200集成的以太网通信接口进行MODBUS TCP通信,需要对接口进行设置,步骤如下:n

1):使用F4(Menu) > "SETTINGS> COMMUNICATION 进入如下界面如图2所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图2 通信界面n

2):使用F4(Edit)键对选中的条目进行编辑,在通信界面中设定MODBUS TCP 通信的IP地
址、子网掩码及网关,在“PROTOCOL”中选择“TCP”后退出,PAC3200侧设置完成。n

7 PLC侧设置
在PLC侧作的设置是为了与PAC3200建立TCP连接,以S7-300为例,步骤如下:
1):在SIMATIC Manager中创建一个S7-300的项目,本例中项目名为MODBUS_TCP。
2):插入一个S7-300站,从硬件目录中插入CP343-1,本例为CP343-1IT,如图3所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图3 插入以太网模块n

3):双击CP343-1的PN IO 槽,配置IP地址、子网掩码,CP343-1的IP地址必须与
PAC3200在一个网段中,否则需要配置路由器地址,如图4所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图4 设置CP地址参数n

4):在硬件界面中点击“Options”->“configure network”进入网络连接界面,如图5所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图5 网络配置界面n

5):点击CPU,出现网络连接表,双击表中任一空格,选择通信连接类型,由于CP343-1与
PAC3200使用以太网TCP/IP的通信方式,所以连接类型选择为“TCP CONNECTION”,如
图6所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图6 选择连接类型n

6):确认选择的连接类型后,进入属性界面,如图7所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图7 连接属性-通用信息栏n

选择“Active coection establishment”选项,表示在通信连接初始化中由CP343-1主动发出连接请求。同样在“Block parameters”中自动生成通信参数,用于编程时的参数赋值。n

7):在连接属性的地址栏中,配置通信双方的地址,如图8所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图8 连接属性-地址栏n

在IP地址中填写PAC3200的地址,本例中为192.168.1.13,在PORT端口号中定义本方的端口号,为了不与网络中固定功能的端口号冲突,西门子PLC通常以2000开始,PAC3200的端口号由MODBUS TCP规定固定为502。n

8):配置完成后,存盘编译,将整个硬件配置下载到PLC中,使用网线连接PAC3200后,在
网络配置界面中使用菜单命令:“PLC”->“activate coection status”,查看实际连 接状态,如图9所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图9 查看连接状态n

如果连接状态显示成功(符号为绿色的三角),可以进行下一步工作,如果出现红方块,表示没有建立连接,需要检查通信双方的设置及网线,通常的情况下,PAC3200设置完成后需要重新上电启动。
如果需要与多个设备进行MODBUS TCP通信,则需要建立多个通信连接,PLC侧的端口号不能相同,可以为2000、2001、2002等,但是连接的不同MODBUS TCP的服务器端口号必须为502,只是IP地址不同。n

8 PLC编程
在前面的章节中已经介绍了MODBUS TCP的报文格式,在PLC侧的通信程序就必须符合这种报文格式。下面以例子的方式介绍通信程序的编写。
在OB1中调用用于CP343-1的通信函数FC5和FC6,如果是S7-400,需要在S7-400的函数库中调用FC50和FC60,如图10所示:n

使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信
图10 调用通信函数n

通信函数FC5的参数含义:
ACT :沿触发信号。
ID :参考本地CPU连接表中的块参数(图7)。
LADDR :参考本地CPU连接表中的块参数(图7)。
SEND : 发送区,最大通信数据为8K字节。
LEN : 实际发送数据长度。
DONE :每次发送成功,产生一个上升沿。
ERROR :错误位。
STATUS:通信状态字。n

通信函数FC6的参数含义:
ID :参考本地CPU连接表中的块参数。
LADDR :参考本地CPU连接表中的块参数。
RECV : 接收区。接收区应大于等于发送区。
NDR : 每次接收到新数据,产生一个上升沿。
ERROR :错误位。
STATUS:通信状态字。
LEN : 实际接收数据长度。

如何实现MODBUS TCP通信,可以通过例子进行说明,例如读出PAC3200设备的IP地址,通过PAC3200的手册可以知道,IP地址为通信参数,偏移地址(开始地址)为63001,占用两个寄存器,上面已经介绍通信参数的读取可以使用功能码FC3或FC4读出,MODBUS TCP 的报文头(参考图1)BMAP部分占用7个字节,协议数据单元(PDU)部分占用5个字节,那么通过通信函数FC5一共发送12个字节,本例中数据发送区为DB1.DBB0~DB1.DBB11,然后将请求的内容分别赋值到DB1.DBB0~DB1.DBB11中,请求报文格式如下:n

DB1,DBB0=0 transaction identifier (高字节) – 为0
DB1,DBB1=0 transaction identifier(低字节) - 为0
DB1,DBB2=0 protocol identifier(高字节) = 0
DB1,DBB3=0 protocol identifier (低字节) = 0
DB1,DBB4=0 length field (高字节) = 0 (因为所有的报文小于256)
DB1,DBB5=6 后面跟随的字节数
DB1,DBB6=7 unit identifier -原从站地址,这里为任意值
使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信

MPAP

DB1,DBB7=4 MODBUS 功能码
DB1,DBB8= F6(HEX)输入寄存器开始地址(高字节)
DB1,DBB9=19 (HEX) 输入寄存器开始地址(低字节)
DB1,DBB10=0 输入寄存器的个数(高字节)
DB1,DBB11=2 输入寄存器的个数(低字节)
使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信

PDU

DB1.DBB0~DB1.DBB11经过赋值请求信息后,例子中M0.5每个上升沿将发送一次请求,如果通信成功,通过FC6将接收到PAC3200的返回信息,返回信息为13个字节,放入到数据接收区DB2.DBB0~DB2.DBB12中,接收报文的格式如下:

DB2,DBB0=0 transaction identifier (高字节) – 为0
DB2,DBB1=0 transaction identifier(低字节) - 为0
DB2,DBB2=0 protocol identifier(高字节) = 0
DB2,DBB3=0 protocol identifier (低字节) = 0
DB2,DBB4=0 length field (高字节) = 0 (因为所有的报文小于256)
DB2,DBB5=7 后面跟随的字节数
DB2,DBB6=7 unit identifier -返回值
使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信

MBAP

DB2,DBB7=4 MODBUS 功能码
DB2,DBB8= 4 返回的字节个数
DB2,DBB9= C0(HEX) ,192(DEC)第一个寄存器值(高字节)
DB2,DBB10=A8(HEX),168(DEC) 第一个寄存器值(低字节)
DB2,DBB11=1 第二个寄存器值(高字节)
DB2,DBB12=D(HEX),13(DEC)第二个寄存器值(低字节)
使用S7-300/400通信处理器CP与SENTRON PAC3200进行MODBUS TCP通信

PDU

9 通信注意事项

有几个问题需要注意:

1) 接收区是一个环形缓存区,接收区的长度一定与PAC3200发送的数据相等,如果接收区大于实际发送的数据,每次接收数据时都以填充的方式进入接收区,造成数据混乱。
2) 如果连接多个PAC3200,除需要建立多个连接,还需要调用多对FC5和FC6。
3) 如果需要读出多个数据,但是相互地址间隔大,超过125个,例如偏移地址为1、201、501、833等,这样需要发送多次数据请求,比较麻烦,可以购买MODBUS TCP通信函数块,这样将比较简单,产品信息可以参考西门子网站 Entry ID:22660304订货信息,由于此产品为其他部门编写,可能A&D热线不负责解答。
本快速入门的示例程序参考附件 Modbus_TCP.zip ( 481 KB ) 。创建示例程序使用的STEP7版本为V5.4+SP4。

关键词
CP 、参数设置、编程、MODBUS TCP

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc326868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论