S7-300/400 的CPx43-1 MODBUS TCP 通讯(STEP7)_V4.3

下面章节将介绍如何使用软件选项包” ModbusTCP CP V4.3 "的功能块库配置S7-300/400单站系统通过CP343-1/CP443-1与第三方模拟软件进行Modbus/TCP进行通讯的详细步骤

1.“ ModbusTCP CP V4.3”块库使用说明

1) 该功能块库可以用于S7-300单站通过CP343-1S7-400单站通过CP443-1进行ModbusTCP通讯。

2) 由于需要在SIMATIC站与其他通讯伙伴之间建立TCP连接用于Modbus通讯,因此需要调用SIMATIC S7标准功能块,对于S7-300/400CP来说,需要调用FC5(AG_SEND)FC6(AG_RECV)功能块。

3) 对于主要功能块FB106107108来说,包含了V1.xV2.x,它们管脚参数并没有更改,只是在V2.x中增加了FC10”AG_CNTRL”功能块用于管理TCP连接,是否支持功能块与CP的型号和固件版本有关,如下图1所示:

1 功能块V1.xV2.x版本区别

当将软件选项包安装完集成到Step7时,可以在Step7安装文件的相应目录中找到块库、例程、英文手册,另外还可找到用CFC语言编程的功能快库,供读者选用,如下图2~4所示,在实际的项目调试过程中由于例子程序的各项功能比较完善,因此可以直接使用例子程序根据项目的实际情况修改相应的参数即可,可以节省大量的参数设置时间,以下主要描述了使用软件选项包” ModbusTCP CP V4.3 "配置S7-300/400站的详细配置和编程步骤

2 块库、例程、英文手册和软件注册的文件夹位置

3 例程(:当找不到例程时可以通过”Browse..”按钮来进行查找) 

4 功能块库(:当找不到块库时可以通过”Browse..”按钮来进行查找)

2. 配置S7-400单站系统通过CP443-1 作为Server进行Modbus TCP通讯

S7-400单站系统及Modscan32软件为例,详细介绍如何将S7-400单站系统通过CP443-1配置为ServerModscan32Client进行Modbus TCP通讯,在本例中将使用带FC10”AG_CNTRL”版本的功能块,下图5为服务器功能块库的程序结构及各功能块完成的功能

5 服务器功能块库程序结构

注意:Modscan32软件可以从网上免费下载得到,本例中使用的版本为V7.0版,由于各版本的功能不尽相同,因此需要注意版本问题。

2.1 例子中使用的硬件设备及软件

本例中所用的硬件设备如下表:

1 服务器硬件清单

所用软件如下表:

2 服务器软件清单

2.2 S7-400系统及Modscan32软件组态

打开Step7软件,新建一个工程项目文件,命名为“M_TCP_CP_V43(Server)” 在项目下插入一个S7-400站,如下图6所示:

6 新建S7-400 Station

双击插入的SIMATIC 400 Station“Hardware”,打开硬件组态,在硬件组态界面下分别插入机架,电源PS407CPU414-3PN/DPCP443-1,本例中将CPIP地址设为192.168.70.2如下图7所示:

7 硬件组态并设置CP443-1IP地址

打开Netpro网络组态,选中CPU414-3PN/DP,插入一个新连接,连接伙伴为Unspecified,连接类型为TCP Connection,如下图8所示:

8 网络组态-新建TCP connection

打开连接属性对话框中的“General Information”,由于CP443-1Server被动连接,因此不勾选“Active connection estabishment”选项ID保持缺省即可,在“Address”栏中同样由于CP443-1Server,因此填入连接的Port号设置为502,组态完成后,编译保存,将例程站点“SIMATIC 400(Server)”中的程序(System data不需要拷贝)拷贝到该项目中并下载(注意:OB100中调用的FB108idladdr需根据组态确认)。对于通讯伙伴RemoteIP地址可以不填,即允许任意IP地址的客户端发起连接,如下图9所示:

9 S7-400为服务器的TCP connection参数设置

对于服务器和客户端的端口号(下述中以Port代替)的选择需要注意以下几点:

1)一般情况下服务器端的Port号modbus TCP规范缺省为502,客户端的Port号设置为客户端允许的号即可,另外各厂商产品也有一些限制,对于SIMATIC产品一般从2000之后开始。

2)对于一个系统来说,当创建多个TCP连接时,要保证IP地址和Port号不重合,即同一个IP地址下创建多个TCP连接时Port号必须不同,而不同的系统因IP地址不同可以使用相同的Port号,例如本例中如果需要创建多个TCP连接作为Server时因只有一个IP,因此Port号必须不同。

2.3 通讯测试

由于“ ModbusTCP CP V4.3选项包支持功能码FC1234561516,不同的功能码测试过程中类似,因此下面以FC03(读写保持寄存器)为例来说明通讯测试的整个过程,对于其他功能码的测试将不再重复描述,对于Modbus的数据类型可参考下表3

 

3 Modbus数据类型 

由于服务器主功能块FB108“MODBUSCP”的参数需要初始化,因此分别在OB100OB1中调用FB108,在OB100中调用FB108完成相关参数的初始化,FB108的管脚分分布如下图10所示:

注意:在图10中已经填写的参数不需要初始化OB1调用赋值;而未填写的参数需要初始化OB100中调用完成。

打开Modscan32软件,在“Connection--->connect”中打开连接属性对话框,连接接口选择“Remote TCP/IP Server”IP Address分别填入CPUIP

192.168.70.2Service为远程服务器的端口502,在协议的选择对话框中可以定义传输模式、通讯超时响应时间,报文发送间隔及允许写多个保

持寄存器等,这里分别保持缺省设置即可,如下图11所示:

18:对应TCP通讯的Modscan32连接窗口

下载网络组态及程序到CPU中,使能参数ENQ_ENR=1,在 Modscan32“Set up->Data Definition”中设置数据扫描周期、寄存器连接类型、起始地址、长度等,如下图11所示:

11 Modscan32Modbus数据参数定义

之后在ModScan32中就可以建立和远程CP443-1 Server的连接了,在Netpro中可以看到连接已经建立起来,如下图12所示:

12 Modscan32激活与S7-400的连接

由于Modbus的内部地址编排时基于数据链路层和应用层有一定的映射关系,因此Modbus的地址与SIMATIC中的DB块的地址时按照一定的地址映射关系来相对应,这样造成了DB块中有一定的地址偏移量,在本例中假设数据区的定义如下图21所示,其DB偏移量、Modbus物理编址、应用层编址如下图13所示:

13本例中的数据区定义

14 DB偏移量、Modbus物理编址、应用层编址对应关系 

Step7的项目程序中新建一个变量监控表,插入需要监控的参数和数据区变量,可以看到ModScan32软件与CP443-1的数据通讯已经建立起来了,双方可以进行正常的保持寄存器数据读写操作,如下图15所示:

15 通讯连接建立

3. 配置S7-400单站系统作为Client进行Modbus TCP通讯

下面以S7-400单站系统及ModSim32软件为例详细介绍如何将S7-400单站系统配置为ClientModSim32Server进行Modbus TCP通讯,在本例中同样使用FC10AG_CNTRL”版本的功能块,由于客户端和服务器模式均使用相同的功能块,因此客户端功能块库的程序结构及各功能块完成的功能可以参考图5

3.1 例子中使用的硬件设备及软件

   本例中所用的硬件设备如下表:

4 客户端硬件清单

 所用到软件如下表: 

5 客户端软件清单

3.2 S7-400单站系统与ModSim32软件组态

打开Step7软件,新建一个工程项目文件,命名为“M_TCP_CP_V43(Client)”, 在项目下插入一个S7-400站,如下图16所示:

16 新建S7-400 Station

双击插入的SIMATIC 400 Station“Hardware”,打开硬件组态,在硬件组态界面下分别插入机架,电源PS407CPU414-3PN/DPCP443-1,本例中将CPIP地址设为192.168.70.2,如下图17所示:

 

17 硬件组态并设置CP443-1IP地址

打开Netpro网络组态,选中CPU414-3PN/DP,插入一个新连接,连接伙伴为Unspecified,连接类型为TCP Connection,如下图18所示:

18 网络组态-新建TCP connection

打开连接属性对话框中的“General Information”,由于CP443-1Client主动发起连接,因此需要勾选“Active connection estabishment”选项ID保持缺省即可,在“Address”栏中同样由于CP443-1Client,对于本地的端口号设置为2000(一般从2000以外开始以避免与别的协议资源冲突)对于通讯伙伴RemoteIP地址设置为测试PC机的IP 地址,本例中 PC机的IP设置为192.168.70.245Port号设置为502,如下图19所示:

19 S7-400为客户端的TCP connection参数设置

组态完成后,编译保存,将例程站点“SIMATIC 400(Client)”中的程序(System data不需要拷贝)拷贝到该项目中并下载(注意:OB100中调用的FB108idladdr需根据组态确认)。

关于服务器和端口号的设置请参考本文中2.2章节说明。

3.3 通讯测试

由于“ModbusTCP CP V4.3”选项包支持功能码FC1234561516,不同的功能码测试过程中类似,因此下面同样以FC03(读写保持寄存器)为例来说明通讯测试的整个过程,对于其他功能码的测试将不再重复描述。

需要说明的是由于客户端功能块需要定义具体的功能码,而主功能块FB108 “MODBUSCP”并没有直接的管脚来定义功能码,而是由其中的两个参数“DATA_TYPE”“single-write”共同决定(参见后面的管脚参数说明),详细情况如下图20所示:

20 S7-400单站系统做客户端时不同的功能码的参数定义

由于客户端和服务器均使用相同的功能块FB108“MODBUSCP ”的参数需要初始化,因此分别在OB100OB1中调用FB108,在OB100中调用FB108完成相关参数的初始化,FB108的管脚分布参见3.3章节中的图10说明。

打开ModSim32软件,在“Connection--->connect”中打开连接属性对话框,连接接口选择“Modbus/TCP svr”TCP/IP Server Port为本地服务器的端口502,如下图21所示:

21 ModSim32中设置端口号

下载硬件组态及程序到CPU中,给参数ENQ_ENR发送脉冲信号;在打开的ModSim32软件窗口设置寄存器连接类型、起始地址、长度等,如下图22所示:

22 ModSim32Modbus数据参数定义

关于SIMATICDB偏移量、Modbus物理编址、应用层编址对应关系请参考本文中2.3章节图14的说明

之后在CP443-1 Client就可以建立和远程ModSim32 Server的连接了,在Netpro中可以看到连接已经建立起来,如下图23所示:

23 Modscan32激活与S7-400的连接

Step7的项目程序中新建一个变量监控表,插入需要监控的参数和数据区变量,可以看到ModSim32软件与S7-400的数据通讯已经建立起来了,双方可以进行正常的保持寄存器数据读写操作,如下图24所示:

24 S7-400单站系统作为客户端与ModSim32软件通讯

4. “ ModbusTCP CP V4.3” 选项包通讯使用总结及相关注意事项

由于是通过PC测试软件模拟第三方设备与SIMATIC CPU的集成PN口进行Modbus TCP通讯,因此在实际的第三方设备与CPU的集成PN口进行通讯时需要注意以下几点:

1) 由于订货号2XV9450-1MB02程序中会占用CPU 较大的装载和工作存储区,因此对于性能比较低特别是S7-300的低端CPU进行通讯时必须考虑一定的富余量。

2) 对于SIMATIC S7,参数DB_x的数据区建议使用不同的DB 块,使用同一个DB的不同地址区会造成地址编排混乱,另外参数Start_xEND_x 参数不能出现地址叠加情况。

3) 第三方设备的数据区与SIMATIC S7的数据DB块的地址对应关系可以先按照第三方的数据区域Modbus地址的偏移关系之后计算相应的偏移量。

4)建议使用项目中的样例程序,只须修改连接ID,定义通讯双方的IP地址、端口号及相应的数据存储区等,能减少编程量,只须把样例程序放到一个单独的FC块中即可,样例程序中定义了足够的数据区,连接成功及错误次数指示等。

5) Modbus TCP每一包的数据最多只能发送125个寄存器或2000个比特位,超过该范围必须进行分包处理。

6) S7-300/400作为Client能与多少个Server建立通讯或者作为Server时能与多少个Client通讯取决于产品所支持的TCP连接数,Modbus/TCP协议并没有对此进行约束和限制。 

5 .“ModbusTCP CP V4.3” 软件包授权

未经授权的Modbus TCP软件可用于测试和学习,不允许用于商业行为;未经授权的软件测试时CPU INTF指示灯红色闪烁,并在CPU故障缓冲区生成错误信息;同时,Modbus TCP功能块报错,如图2526所示:

25 CPU诊断缓冲区报错

26 Modbus TCP功能块报错A090

每个CPU都需要对功能块MODBUSCP进行授权。授权有两个步骤:读取IDENT_CODE和申请注册码REG_KEY。且在CPU中必须调用OB121 

5.1读取IDENT_CODE

1、下载程序并将CPU切换到RUN模式;

2、打开MODBUSCPFB108)的背景块DB108,确认IDENT_CODE的偏移地址为108;如图27所示:

27 确认IDENT_CODE的偏移地址

3、打开变量监视表,输入DB108.DBB108开始的20个字节,偏移地址110开始的18个字符即为IDENT_CODE,监控如图28所示:

28 确认IDENT_CODE

4、按上图方式,获取IDENT_CODE和软件包装上的License-No,并按照章节5.2和5.3所描述步骤申请注册码。

5.2 通过拨打西门子授权服务中心申请注册码REG_KEY

授权中心联系方式:010-64757575

通过西门子授权服务中心申请注册码时,需要您提供所购买的软件订货号、IDENT_CODE和软件包装上的License-No ,如图28所示。

5.3 通过网站申请注册码REG_KEY

1、通过西门子技术支持网站申请,打开如下网址,点击“技术问题提交”:

http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo2&aktprim=99&lang=zh

29 技术支持网站

2、请按如下示例的步骤进行操作(注意:由于步骤3搜索出来的参考信息无法解决授权问题,请直接点击“继续”进入步骤4),如图30~34所示。

30 步骤1

31 步骤2

32 步骤4

33 步骤5

34 步骤6

5.4 使用注册码REG_KEY

1、西门子授权中心收到技术支持申请后,将会尽快给您回复邮件;

2、当获取到注册码后,在项目中打开LICENSE_DBDB3);

3、通过菜单“View--->Data View”将DB块切换到数据视图模式,将获取的17位注册码填写到“Actual value”中,如图35所示。

35 输入注册码

4、将LICENSE_DBDB3)下载到CPU中,CPUINTF指示灯熄灭;并可通过查看MODBUSPNFB102)的输出引脚LICENSEDtrue且不再报A090错误代码,确认注册码激活成功,如图36所示。

36 注册码激活成功

6. CP进行Modbus TCP通讯FB输出常见故障代码及处理

STATUS(Hex)

故障原因

处理措施

FB MODBUS故障

A002

Modbus起始地址Start_x错误

由通讯伙伴确认起始地址

A003

Modbus地址映射的DB块的数据区长度太短,最低长度:

-寄存器:

(START_ADDRESS – start_x + LENGTH) * 2

-

(START_ADDRESS – start_x + LENGTH) / 8

其他可能的原因:

·参数初始化错误(CPClient)

·客户端请求报文时错误的地址区域(CPServer)

扩展DB区域

CPClient,修改参数START-ADDRESS或者LENGTH

CPServer,修改客户端的请求

A004

仅在CPClient时才有此故障:

参数DATA_TYPEWRITE_READ设置不匹配,不可能对输入寄存器或离散输入进行写操作

修改此两个参数

A005

CPClient时:

参数LENGTH设置无效

CPServer时:

Client请求的寄存器号无效,合法的数据类型范围如下:

读线圈/离散输入: 1 to 2000

写线圈: 1 to 1968

读寄存器: 1 to 125

写保持寄存器: 1 to 123

CPClient时:

修改参数LENGTH

CPServer时:

修改Client请求的数据类型范围

A006

CP为客户端时:

数据区1-8中对应的Modbus地址范围(DATA_TYPE,

START_ADDRESS LENGTH

)不存在

CP为服务器时:

客户端请求的报文不正确

CPClient时:

修改参数DATA_TYPE,START_ADDRESS LENGTH

CPServer时:

修改Client 请求或修改数据类型data_type_x.

 

A007

CPClient时:

参数MONITOR监控时间设置无效,值必须>20ms

修改参数MONITOR

A008

接收监控超时,可能的原因:

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

对于MODBUSCP V1.x:

同步错误,报文丢失

检查通讯伙伴的参数设置,如单元标识符等

A009

CPClient,接收标识符TI与发送不一致, 连接将终止和重新建立

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

通过抓包工具来分析和修正通讯伙伴的报文

 

A00A

CPClient时,接收参数UNIT 与发送的不一致,连接将终止和重新建立

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

A00B

CPClient时:

接收与发送功能码不一致

CPServer时:

无效的功能码被接收

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

对于MODBUSCP V1.x:

同步错误,报文丢失

CPClient时:

通过抓包工具来分析和修正通讯伙伴的数据报文格式

CPServer时:

注意FB MODBUS仅支持功能码FC1234561516

A00C

接收到的字节长度与寄存器/位不匹配

CP为服务器时,CP将发一个响应异常给客户端

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

通过抓包工具来分析和修正通讯伙伴的报文

 

A00D

仅在CP Client 时发生:

响应的MODBUS寄存器/位地址或长度与客户端请求的不一致

A00E

MODBUS报文报头的长度与寄存器/位 不匹配,FB将忽略

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

对于MODBUSCP V1.x:

同步错误,报文丢失

A00F

0的协议标识符报文被接收

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

对于MODBUSCP V1.x:

同步错误,报文丢失

A010

数据区1-8 DB块号重复使用

确保每个Db块号只使用一次

A011

DATA_TYPE参数设置(范围为1-4)

修改DATA_TYPE参数

A012

数据区参数data_type_1data_type_2设置重叠

 

数据区不能有重叠的modbus地址区域

A013

数据区参数data_type_1data_type_3设置重叠

修改此参数

A014

数据区参数data_type_1data_type_4设置重叠

A015

数据区参数data_type_1data_type_5设置重叠

A016

数据区参数data_type_1data_type_6设置重叠

A017

数据区参数data_type_1data_type_7设置重叠

A018

数据区参数data_type_1data_type_8设置重叠

A019

当参数data_type_x设置不为0时,db_x被赋值0

db_x不能为0

A01A

报头中长度错误:

范围3-253字节

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

通过抓包工具来分析和修正通讯伙伴的报文

 

A01B

CPServer及使用功能码FC05:

接收的线圈值无效

CP将发送异常报文

A01E

CP接收到无法识别的数据,

对于MODBUSCP V2.x:

所有通过502端口的连接激将中断并重新建立

对于MODBUSCP V1.x:

同步错误,报文丢失

分析错误信息,通过抓包工具来分析和修正通讯伙伴的报文

A01F

功能块FB MBBUSCP返回一个无效的状态

联系产品供货商

A020

参数Check_conn_cycle设置<1s时,对于功能块AG_CNTRL过短

当为Client模式时,参数Check_conn_cycle=TRUECheck_conn_cycle设置需要>1s

当为Server模式时,Check_conn_cycle设置需要>1s

A023

数据区参数data_type_2data_type_3设置重叠

 

数据区不能有重叠的modbus地址区域

A024

数据区参数data_type_2data_type_4设置重叠

A025

数据区参数data_type_2data_type_5设置重叠

A026

数据区参数data_type_2data_type_6设置重叠

A027

数据区参数data_type_2data_type_7设置重叠

A028

数据区参数data_type_2data_type_8设置重叠

A034

数据区参数data_type_3data_type_4设置重叠

A035

数据区参数data_type_3data_type_5设置重叠

A036

数据区参数data_type_3data_type_6设置重叠

A037

数据区参数data_type_3data_type_7设置重叠

A038

数据区参数data_type_3data_type_8设置重叠

A045

数据区参数data_type_4data_type_5设置重叠

A046

数据区参数data_type_4data_type_6设置重叠

A047

数据区参数data_type_4data_type_7设置重叠

A048

数据区参数data_type_4data_type_8设置重叠

A056

数据区参数data_type_5data_type_6设置重叠

A057

数据区参数data_type_5data_type_7设置重叠

A058

数据区参数data_type_5data_type_8设置重叠

A067

数据区参数data_type_6data_type_7设置重叠

A068

数据区参数data_type_6data_type_8设置重叠

A068

数据区参数data_type_7data_type_8设置重叠

A07A

参数id设置无效:范围1-64

修改参数id

A07C

参数data_type_1设置无效:范围0-4

修改参数data_type_x

A07D

参数data_type_1未定义,data_type_1为缺省的使用数据区,需要定义

修改参数data_type_1

A07E

参数db_x值与背景DB中的值不一致

修改参数db_x

A080

OB1OB100调用FB MODBUS功能块时使用了不同的背景DB

需要使用相同的背景DB

A081

CPClient且使用FC05功能码时:

接收的线圈状态与发送不一致

通过抓包工具来分析和修正通讯伙伴的报文

A082

CPClient且使用FC06功能码时:

接收的寄存器值与发送不一致

通过抓包工具来分析和修正通讯伙伴的报文

A083

仅在CPClient:在上一个请求还没有处理完成时又发送新的请求

等待DONE =TRUE ERROR = TRUE后再发送新请求

A085

在授权期间由于无效的写权限导致发生错误

对于授权DB,确认参数REG_KEY的结构是否正确

A090

功能块未授权,此为一状态信息,参数ERROR并不会置1,功能块在未授权情况仍然可以运行而不影响通讯

针对CPU读出预授权解码,之后按照授权操作向IT4industry.部门索取授权码

A091

收到异常响应码1(仅在Client模式),连接将终止和重新建立

通讯伙伴不支持请求的报文

A092

收到异常响应码2(仅在Client模式),无效的或不存在的地址请求

确认参数LENGTH START_ADDRESS

是否正确

A093

收到异常响应码3(仅在Client模式)

通讯伙伴无法执行报文接收(例如请求长度不支持等)

A094

收到异常响应码4(仅在Client模式)

通讯伙伴无法执行报文接收

A095

收到未知的异常响应码(仅在Client模式)

通过抓包工具来分析和修正通讯伙伴的报文

FC/SFC故障

7xxx

请参考SIMATIC的在线帮助

通过在线帮助SIMATIC manager -> mark block -> key F1 –> Ethernet -> see also -> code evaluation可以查到相关帮助信息

8xxx

请参考SIMATIC的在线帮助

通过在线帮助SIMATIC manager -> mark block -> key F1 –> Ethernet -> see also -> code evaluation可以查到相关帮助信息

SFC24故障

80A1

DB=0或超出了CPU允许的范围

选择有效的DB

80B2

DB块在CPU中不存在

DB_x参数中的DB块必须创建并下载到CPU

80B3

DB块被创建为“Unlinked”类型

DB块不能创建为“Unlinked”类型