湖南 西门子 6ES7902-3AC00-0AA0 湖南代理商
Modbus TCP通信概述
MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品,显而易见,它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLC’s,I/O模块,以及连接其它简单域总线或I/O模块的网关服务的。
MODBUS/TCP 使MODBUS_RTU协议运行于以太网,MODBUS TCP使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUS TCP结合了以太网物理网络和网络标准TCP/IP以及以MODBUS作为应用协议标准的数据表示方法。MODBUS TCP通信报文被封装于以太网TCP/IP数据包中。与传统的串口方式,MODBUS TCP插入一个标准的MODBUS报文到TCP报文中,不再带有数据校验和地址。
1. 通讯所使用的以太网参考模型
Modbus TCP传输过程中使用了TCP/IP以太网参考模型的5层:
第一层:物理层,提供设备物理接口,与市售介质/网络适配器相兼容
第二层:数据链路层,格式化信号到源/目硬件址数据帧
第三层:网络层,实现带有32位IP址IP报文包
第四层:传输层,实现可靠性连接、传输、查错、重发、端口服务、传输调度
第五层:应用层,Modbus协议报文
2. Modbus TCP数据帧
Modbus数据在TCP/IP以太网上传输,支持Ethernet II和802.3两种帧格式,Modbus TCP数据帧包含报文头、功能代码和数据3部分,MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节,如图1所示:
图1: MODBUS TCP报文
由于使用以太网TCP/IP数据链路层的校验机制而保证了数据的完整性,MODBUS TCP 报文中不再带有数据校验”CHECKSUM”,原有报文中的“ADDRESS”也被“UNIT ID”替代而加在MODBUS应用协议报文头中。
3. Modbus TCP使用的通讯资源端口号
在Modbus服务器中按缺省协议使用Port 502 通信端口,在Modbus客户器程序中设置任意通信端口,为避免与其他通讯协议的冲突一般建议2000开始可以使用。
4. Modbus TCP使用的功能代码
按照使用的通途区分,共有3种类型分别为:
1) 公共功能代码:已定义好功能码,保证其唯一性,由Modbus.org认可;
2) 用户自定义功能代码有两组,分别为65~72和100~110,无需认可,但不保证代码使用唯一性,如变为公共代码,需交RFC认可;
3) 保留功能代码,由某些公司使用某些传统设备代码,不可作为公共用途。
按照应用深浅,可分为3个类别:
1) 类别0,客户机/服务器最小可用子集:读多个保持寄存器(fc.3);写多个保持寄存器(fc.16)。
2) 类别1,可实现基本互易操作常用代码:读线圈(fc.1);读开关量输入(fc.2);读输入寄存器(fc.4);写线圈(fc.5);写单一寄存器(fc.6)。
3) 类别2,用于人机界面、监控系统例行操作和数据传送功能:强制多个线圈(fc.15);读通用寄存器(fc.20);写通用寄存器(fc.21);屏蔽写寄存器(fc.22);读写寄存器(fc.23)。
5. Modbus TCP通讯应用举例
在读寄存器的过程中,以Modbus TCP请求报文为例,具体的数据传输过程如下:
1) Modbus TCP客户端实况,用Connect()命令建立目标设备TCP 502端口连接数据通信过程;
2) 准备Modbus报文,包括7个字节MBAP内请求;
3) 使用send()命令发送;
4) 同一连接等待应答;
5) 同recv()读报文,完成一次数据交换过程;
6) 当通信任务结束时,关闭TCP连接,使服务器可以为其他服务。
S7-300/400 的CPx43-1 MODBUS TCP 通讯(STEP7)
下面章节将介绍如何使用软件选项包” ModbusTCP CP V4.3 "的功能块库配置S7-300/400单站系统通过CP343-1/CP443-1与第三方模拟软件进行Modbus/TCP进行通讯的详细步骤
1.“ ModbusTCP CP V4.3”块库使用说明
1) 该功能块库可以用于S7-300单站通过CP343-1或S7-400单站通过CP443-1进行ModbusTCP通讯。
2) 由于需要在SIMATIC站与其他通讯伙伴之间建立TCP连接用于Modbus通讯,因此需要调用SIMATIC S7标准功能块,对于S7-300/400的CP来说,需要调用FC5(AG_SEND),FC6(AG_RECV)功能块。
3) 对于主要功能块FB106、107和108来说,包含了V1.x和V2.x,它们管脚参数并没有更改,只是在V2.x中增加了FC10”AG_CNTRL”功能块用于管理TCP连接,是否支持功能块与CP的型号和固件版本有关,如下图1所示:
图1 功能块V1.x和V2.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配置为Server,Modscan32为Client进行Modbus TCP通讯,在本例中将使用带FC10”AG_CNTRL”版本的功能块,下图5为服务器功能块库的程序结构及各功能块完成的功能:
图5 服务器功能块库程序结构
注意:Modscan32软件可以从网上免费下载得到,本例中使用的版本为V7.0版,由于各版本的功能不尽相同,因此需要注意版本问题。
2.1 例子中使用的硬件设备及软件
本例中所用的硬件设备如下表:
名称 | 数量 | 订货号 |
S7-400电源模块PS 407 10A | 1 | 6ES7407-0KA01-0AA0 |
S7-400 CPU414-3PN/DP | 1 | 6ES7414-3EM05-0AB0(V5.2) |
S7-400 CP443-1 | 1 | 6GK7443-1EX41-0XE0(V1.0) |
S7-400 机架 | 1 | 6ES7400-1JA00-0AA0 |
网线 | 若干 |
|
笔记本电脑 | 1 |
|
表1 服务器硬件清单
所用到软件如下表:
名称 | 订货号 |
STEP7 V5.5 组态编程软件 英文版 |
|
“ ModbusTCP CP V4.3” 软件选项包 | 2XV9450-1MB00 |
Modscan32 V7.0 |
|
表2 服务器软件清单
2.2 S7-400系统及Modscan32软件组态
打开Step7软件,新建一个工程项目文件,命名为“M_TCP_CP_V43(Server)”, 在项目下插入一个S7-400站,如下图6所示:
图6 新建S7-400 Station
双击插入的SIMATIC 400 Station的“Hardware”,打开硬件组态,在硬件组态界面下分别插入机架,电源PS407、CPU414-3PN/DP、CP443-1,本例中将CP的IP地址设为192.168.70.2,如下图7所示:
图7 硬件组态并设置CP443-1的IP地址
打开Netpro网络组态,选中CPU414-3PN/DP,插入一个新连接,连接伙伴为Unspecified,连接类型为TCP Connection,如下图8所示:
图8 网络组态-新建TCP connection
打开连接属性对话框中的“General Information”,由于CP443-1做Server被动连接,因此不勾选“Active connection estabishment”选项,ID保持缺省即可,在“Address”栏中同样由于CP443-1做Server,因此填入连接的Port号设置为502,组态完成后,编译保存,将例程站点“SIMATIC 400(Server)”中的程序(System data不需要拷贝)拷贝到该项目中并下载(注意:OB100中调用的FB108的id和laddr需根据组态确认)。对于通讯伙伴Remote的IP地址可以不填,即允许任意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”选项包支持功能码FC1,2,3,4,5,6,15,16,不同的功能码测试过程中类似,因此下面以FC03(读写保持寄存器)为例来说明通讯测试的整个过程,对于其他功能码的测试将不再重复描述,对于Modbus的数据类型可参考下表3:
表3 Modbus数据类型
由于服务器主功能块FB108“MODBUSCP”的参数需要初始化,因此分别在OB100及OB1中调用FB108,在OB100中调用FB108完成相关参数的初始化,FB108的管脚分分布如下图10所示:
注意:在图10中已经填写的参数不需要初始化,在OB1调用赋值;而未填写的参数需要初始化,在OB100中调用完成。
打开Modscan32软件,在“Connection--->connect”中打开连接属性对话框,连接接口选择“Remote TCP/IP Server”,IP Address分别填入CPU的IP地址
192.168.70.2,Service为远程服务器的端口502,在协议的选择对话框中可以定义传输模式、通讯超时响应时间,报文发送间隔及允许写多个保
持寄存器等,这里分别保持缺省设置即可,如下图11所示:
图18:对应TCP通讯的Modscan32连接窗口
下载网络组态及程序到CPU中,使能参数ENQ_ENR=1,在 Modscan32的“Set up->Data Definition”中设置数据扫描周期、寄存器连接类型、起始地址、长度等,如下图11所示:
图11 Modscan32中Modbus数据参数定义
之后在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单站系统配置为Client,ModSim32为Server进行Modbus TCP通讯,在本例中同样使用FC10“AG_CNTRL”版本的功能块,由于客户端和服务器模式均使用相同的功能块,因此客户端功能块库的程序结构及各功能块完成的功能可以参考图5。
3.1 例子中使用的硬件设备及软件
本例中所用的硬件设备如下表:
名称 | 数量 | 订货号 |
S7-400电源模块PS 407 10A | 1 | 6ES7407-0KA01-0AA0 |
S7-400 CPU414-3PN/DP | 1 | 6ES7414-3EM05-0AB0(V5.2) |
S7-400 CP443-1 | 1 | 6GK7443-1EX41-0XE0(V1.0) |
S7-400 机架 | 1 | 6ES7400-1JA00-0AA0 |
网线 | 若干 |
|
笔记本电脑 | 1 |
|
表4 客户端硬件清单
所用到软件如下表:
名称 | 订货号 |
STEP7 V5.5 组态编程软件 英文版 |
|
“ ModbusTCP CP V4.3” 软件选项包 | 2XV9450-1MB00 |
ModSim32 免授权版本 | 可从网上免费获取 |
表5 客户端软件清单
3.2 S7-400单站系统与ModSim32软件组态
打开Step7软件,新建一个工程项目文件,命名为“M_TCP_CP_V43(Client)”, 在项目下插入一个S7-400站,如下图16所示:
图16 新建S7-400 Station
双击插入的SIMATIC 400 Station的“Hardware”,打开硬件组态,在硬件组态界面下分别插入机架,电源PS407、CPU414-3PN/DP、CP443-1,本例中将CP的IP地址设为192.168.70.2,如下图17所示:
图17 硬件组态并设置CP443-1的IP地址
打开Netpro网络组态,选中CPU414-3PN/DP,插入一个新连接,连接伙伴为Unspecified,连接类型为TCP Connection,如下图18所示:
图18 网络组态-新建TCP connection
打开连接属性对话框中的“General Information”,由于CP443-1做Client主动发起连接,因此需要勾选“Active connection estabishment”选项,ID保持缺省即可,在“Address”栏中同样由于CP443-1做Client,对于本地的端口号设置为2000(一般从2000以外开始以避免与别的协议资源冲突),对于通讯伙伴Remote的IP地址设置为测试PC机的IP 地址,本例中 PC机的IP设置为192.168.70.245,而Port号设置为502,如下图19所示:
图19 S7-400为客户端的TCP connection参数设置
组态完成后,编译保存,将例程站点“SIMATIC 400(Client)”中的程序(System data不需要拷贝)拷贝到该项目中并下载(注意:OB100中调用的FB108的id和laddr需根据组态确认)。
关于服务器和端口号的设置请参考本文中2.2章节说明。
3.3 通讯测试
由于“ModbusTCP CP V4.3”选项包支持功能码FC1,2,3,4,5,6,15,16,不同的功能码测试过程中类似,因此下面同样以FC03(读写保持寄存器)为例来说明通讯测试的整个过程,对于其他功能码的测试将不再重复描述。
需要说明的是由于客户端功能块需要定义具体的功能码,而主功能块FB108 “MODBUSCP”并没有直接的管脚来定义功能码,而是由其中的两个参数“DATA_TYPE”和“single-write”共同决定(参见后面的管脚参数说明),详细情况如下图20所示:
图20 S7-400单站系统做客户端时不同的功能码的参数定义
由于客户端和服务器均使用相同的功能块FB108“MODBUSCP ”的参数需要初始化,因此分别在OB100及OB1中调用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 ModSim32中Modbus数据参数定义
关于SIMATIC中DB偏移量、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_x与END_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功能块报错,如图25、26所示:
图25 CPU诊断缓冲区报错
图26 Modbus TCP功能块报错A090
每个CPU都需要对功能块MODBUSCP进行授权。授权有两个步骤:读取IDENT_CODE和申请注册码REG_KEY。且在CPU中必须调用OB121。
5.1读取IDENT_CODE
1、下载程序并将CPU切换到RUN模式;
2、打开MODBUSCP(FB108)的背景块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_DB(DB3);
3、通过菜单“View--->Data View”将DB块切换到数据视图模式,将获取的17位注册码填写到“Actual value”中,如图35所示。
图35 输入注册码
4、将LICENSE_DB(DB3)下载到CPU中,CPU的INTF指示灯熄灭;并可通过查看MODBUSPN(FB102)的输出引脚LICENSED为true且不再报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 其他可能的原因: ·参数初始化错误(CP为Client时) ·客户端请求报文时错误的地址区域(CP为Server) | 扩展DB区域 当CP为Client时,修改参数START-ADDRESS或者LENGTH 当CP为Server时,修改客户端的请求 |
A004 | 仅在CP为Client时才有此故障: 参数DATA_TYPE及WRITE_READ设置不匹配,不可能对输入寄存器或离散输入进行写操作 | 修改此两个参数 |
A005 | CP为Client时: 参数LENGTH设置无效 CP为Server时: Client请求的寄存器号无效,合法的数据类型范围如下: 读线圈/离散输入: 1 to 2000 写线圈: 1 to 1968 读寄存器: 1 to 125 写保持寄存器: 1 to 123 | CP为Client时: 修改参数LENGTH CP为Server时: 修改Client请求的数据类型范围 |
A006 | CP为客户端时: 数据区1-8中对应的Modbus地址范围(DATA_TYPE, START_ADDRESS和 LENGTH )不存在 CP为服务器时: 客户端请求的报文不正确 | CP为Client时: 修改参数DATA_TYPE,START_ADDRESS和 LENGTH CP为Server时: 修改Client 请求或修改数据类型data_type_x.
|
A007 | CP为Client时: 参数MONITOR监控时间设置无效,值必须>20ms | 修改参数MonITOR |
A008 | 接收监控超时,可能的原因: 对于MODBUSCP V2.x: 所有通过502端口的连接激将中断并重新建立 对于MODBUSCP V1.x: 同步错误,报文丢失 | 检查通讯伙伴的参数设置,如单元标识符等 |
A009 | 当CP为Client时,接收标识符TI与发送不一致, 连接将终止和重新建立 对于MODBUSCP V2.x: 所有通过502端口的连接激将中断并重新建立 | 通过抓包工具来分析和修正通讯伙伴的报文
|
A00A | CP为Client时,接收参数UNIT 与发送的不一致,连接将终止和重新建立 对于MODBUSCP V2.x: 所有通过502端口的连接激将中断并重新建立 | |
A00B | CP为Client时: 接收与发送功能码不一致 CP为Server时: 无效的功能码被接收 对于MODBUSCP V2.x: 所有通过502端口的连接激将中断并重新建立 对于MODBUSCP V1.x: 同步错误,报文丢失 | CP为Client时: 通过抓包工具来分析和修正通讯伙伴的数据报文格式 CP为Server时: 注意FB MODBUS仅支持功能码FC1、2、3、4、5、6、15、16 |
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_1和data_type_2设置重叠
| 数据区不能有重叠的modbus地址区域 |
A013 | 数据区参数data_type_1和data_type_3设置重叠 | 修改此参数 |
A014 | 数据区参数data_type_1和data_type_4设置重叠 | |
A015 | 数据区参数data_type_1和data_type_5设置重叠 | |
A016 | 数据区参数data_type_1和data_type_6设置重叠 | |
A017 | 数据区参数data_type_1和data_type_7设置重叠 | |
A018 | 数据区参数data_type_1和data_type_8设置重叠 | |
A019 | 当参数data_type_x设置不为0时,db_x被赋值0 | db_x不能为0 |
A01A | 报头中长度错误: 范围3-253字节 对于MODBUSCP V2.x: 所有通过502端口的连接激将中断并重新建立 | 通过抓包工具来分析和修正通讯伙伴的报文
|
A01B | CP为Server及使用功能码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=TRUE下Check_conn_cycle设置需要>1s; 当为Server模式时,Check_conn_cycle设置需要>1s; |
A023 | 数据区参数data_type_2和data_type_3设置重叠
| 数据区不能有重叠的modbus地址区域 |
A024 | 数据区参数data_type_2和data_type_4设置重叠 | |
A025 | 数据区参数data_type_2和data_type_5设置重叠 | |
A026 | 数据区参数data_type_2和data_type_6设置重叠 | |
A027 | 数据区参数data_type_2和data_type_7设置重叠 | |
A028 | 数据区参数data_type_2和data_type_8设置重叠 | |
A034 | 数据区参数data_type_3和data_type_4设置重叠 | |
A035 | 数据区参数data_type_3和data_type_5设置重叠 | |
A036 | 数据区参数data_type_3和data_type_6设置重叠 | |
A037 | 数据区参数data_type_3和data_type_7设置重叠 | |
A038 | 数据区参数data_type_3和data_type_8设置重叠 | |
A045 | 数据区参数data_type_4和data_type_5设置重叠 | |
A046 | 数据区参数data_type_4和data_type_6设置重叠 | |
A047 | 数据区参数data_type_4和data_type_7设置重叠 | |
A048 | 数据区参数data_type_4和data_type_8设置重叠 | |
A056 | 数据区参数data_type_5和data_type_6设置重叠 | |
A057 | 数据区参数data_type_5和data_type_7设置重叠 | |
A058 | 数据区参数data_type_5和data_type_8设置重叠 | |
A067 | 数据区参数data_type_6和data_type_7设置重叠 | |
A068 | 数据区参数data_type_6和data_type_8设置重叠 | |
A068 | 数据区参数data_type_7和data_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 | 在OB1和OB100调用FB MODBUS功能块时使用了不同的背景DB | 需要使用相同的背景DB |
A081 | CP为Client且使用FC05功能码时: 接收的线圈状态与发送不一致 | 通过抓包工具来分析和修正通讯伙伴的报文 |
A082 | CP为Client且使用FC06功能码时: 接收的寄存器值与发送不一致 | 通过抓包工具来分析和修正通讯伙伴的报文 |
A083 | 仅在CP为Client时:在上一个请求还没有处理完成时又发送新的请求 | 等待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”类型 |
硬件列表
设备名称 | 设备型号 |
PS 307 | 6ES7 307-1EA01-0AA0 |
CPU 319-3PN/ DP | 6ES7 318-3EL00-0AB0 |
MMC | 6ES7 953-8LG30-0AA0 |
CP341 | 6ES7 341-1CH02-0AE0 |
Dongle | 6ES7 870-1AB01-0YA0 |
应用CP341进行 MODBUS协议通信时需要有Dongle的支持。在使用之前先将Dongle安装在CP341模块的背面的Dongle插槽中,Dongle和插入Dongle前后的CP341如下图所示。
图1
组态和配置
1、打开软件TIA PORTAL
图2
STEP7 V13,点击项目->新建...创建一新项目,项目名称为341_modbus_Master。
2、用鼠标点击“添加新设备”,选择SIMATIC S7-300->CPU->CPU 319-3PN/DP->6ES7 318-3EL00-0AB0。
图3
3、双击“设备组态”进入硬件组态界面,导轨RACK和CPU 319-3PN/DP已经存在,只需要插入PS307和CP341。
图4
4、双击CP341模板,进入CP341的属性框,配置CP341参数。
图5
5、在“协议”选项中选择“Modbus主站”。配置modbus通信参数,设定的通信参数要和通讯伙伴的相同。传输率(通信波特率):9600bps,数据位:8位,停止位:1位,奇偶校验:无。
图6
6、本示例选用的是RS422/485接口的CP341,还需要设置接口属性,如下图所示。
图7
编写通信程序
1、双击“添加新块”,创建发送数据块DB10和接收数据块DB11,发送数据块的名称为Send,接收数据块的名称为Rev;如下图所示,发送数据块中新建几个变量,从站地址为2,功能码为3,起始地址为0,读4个寄存器数据,具体功能码3 的使用参见手册“S7串行通信模板Modbus RTU主站可装载驱动的操作说明” 6.3章节的说明;如下图所示,接受数据块中新建1个数据类型Array的变量,数组元素的数据类型为Byte,数量为400。
图8
图9
2、进入主程序OB1,从通信->通信处理器->PtP链接:CP341,调用发送功能块P_SND_RK和接收功能块P_RCV_RK。P_SND_RK的背景数据块为DB1,P_RCV_RK的背景数据块为DB2。
图10
CP341的发送功能块P_SND_RK 的参数设置见下表。
管脚 | 解释描述 |
SF | ‘S’为发送,此处必须为大写的‘S’ |
LADDR | 硬件组态中的起始逻辑地址,本例中为256,见图11。 |
REQ | 发送数据触发位,上升沿触发,本例中为M0.5,为时钟存储器的位,见图12。 |
DB_NO | 发送数据块号,本例中为10(DB10) |
DBB_NO | 发送数据的起始地址,本例中为0(DB10.DBB0) |
LEN | 发送数据的长度,本例中为6 |
R_TYP | ‘X’为扩展的数据块,此处必须为大写的‘X’ |
R | 取消通讯,本例中不用 |
DONE | 发送完成位,发送完成后为TRUE,同时没有错误 |
ERROR | 错误位,为TRUE说明有错误 |
STATUS | 状态字,标识错误代码,查看Modbus Master手册获得相应的说明 |
其它参数 | 本例中不用 |
CP341的接收功能块P_RCV_RK 的参数设置见下表。
管脚 | 解释描述 |
LADDR | 硬件组态中的起始逻辑地址,本例中为256,见图11。 |
DB_NO | 发送数据块号,本例中为11(DB11)。 |
DBB_NO | 发送数据的起始地址,本例中为0(DB11.DBB0)。 |
LEN | 接收数据的长度,本例中为MW22,只显示一个扫描周期,即:只有在接收到数据的当前周期,此值不为0。 |
EN_R | 使能接收位,本例中为M20.0,常闭点, 始终保持接收状态。 |
R | 取消通讯,本例中不用。 |
NDR | 接收完成位,接收完成并没有错误为TRUE,只显示一个扫描周期。 |
ERROR | 错误位,为TRUE说明有错误,只显示一个扫描周期。 |
STATUS | 状态字,标识错误代码,只显示一个扫描周期,查看Modbus Master手册获得相应的说明。 |
其它参数 | 本例中不用 |
图11
图12
设备连接
本文档使用的CP341的接口是RS232C,因此需要通过标准的RS232C电缆来连接CP341和计算机的串口.
具体的电缆连接方法请查看:串口接线
如果使用的CP341是RS485接口的模块,需要使用RS232C/RS485转换器(需要选购第三方设备)。
通信测试
前面使用 TIA Step7 软件已经将通信CP341的通信工作做完,下面进行通信测试。这里使用串口通讯测试软件ModSim32软件来测试CP341和计算机的通信,步骤如下
1、双击ModSim32软件图标,新建项目,点击Port1,进入端口1做设置,本例计算机只有一个端口,所以就对端口1做设置,如果计算机有多个端口,要注意所选端口。
图13
2、进入Port1设置界面,设置波特率、数据位、奇偶校验等参数,要和CP341的参数相同。
图14
3、点击“OK”,选择软件的03功能码界面,本例设置03功能码的10个数据,其中前4个数据分别设置成1—4。
图15
4、首先将硬件配置和程序下载到CPU319-3PN/DP中,时钟脉冲信号M0.5从0跳变成1时,CP341将数据发送出去。
图16
5、M20.0为常闭点,程序下载完成,CPU运行后,就始终处于接收状态。在STEP7中打开接收数据块DB11监控接收到的数据,可以看到发送的数据被正确的接收。
图17
手册下载
更详细的资料请参看如下手册:
CP341使用手册
MODBUS RTU主站手册
湖南 西门子 6ES7902-3AC00-0AA0