西门⼦PLCs7-1200modbus-tcp通信实例编程详细指导
西门⼦S7-1200 Modbus-TCP
【】绝密
【】NDA
【X】公开
⼀、组⽹概述
本⽂以 ZKA-4488-ETH 为例介绍西门⼦PLC与深圳市综科智控科技开发有限公司的IO设备进⾏Modbus通
讯的步骤设置。ZKA-4488-ETH 是 8 路数字量输⼊(DI),8 路数字量输出(DO),4路模拟量输⼊(AI,0/4-20mA),4 路模拟量输出设备(AO,0/4-20mA),以太⽹通信。
以 ZKA-4488-ETH 为例,出⼚默认通讯参数如下:
ZK模块 IP 为:192.168.0.105
TCP 端⼝为:10001
(注意:我们模块出⼚时默认端⼝为10001,客户也可以通过ZK模块的配置⽂件把ZK通讯端⼝改成modbus-tcp的默认端⼝502)
⼯作模式为:服务器模式
⼆、S7-200 Modbus TCP通信
1 S7-200 Modbus T CP 通信简介
Modbus 是公开通信协议,详细的协议和规范,请访问Modbus 组织的⽹站:/
S7-1200 CPU 本体上集成了⼀个 PROFINET 通信⼝,⽀持以太⽹和基于TCP/IP和UDP 的通信标准。这个PROFINET 物理接⼝是⽀持10/100Mb/s的 RJ45⼝,⽀持电缆交叉⾃适应,因此⼀个标准的或是交叉的以太⽹线都可以⽤于这个接⼝。使⽤这个通信⼝可以实现 S7-1200 CPU 与编程设备的通信,与HMI触摸屏的通信,以及与其它 CPU 之间的通信,
S7-1200 CPU 的PROFINET 通信⼝主要⽀持以下通信协议及服务
Profinet IO (V2.0开始)
S7 通信(V2.0开始⽀持客户端)
TCP
ISO on TCP
UDP(V2.0开始)
Modbus TCP
HMI通信
Web通信(V2.0开始)。
硬件版本V4.1 ⽀持的协议和最⼤的连接资源:
S7-1200的连接资源
分配给每个类别的预留连接资源数为固定值;您⽆法更改这些值。但可组态 6个"可⽤⾃由连接"以按照应⽤要求增加任意类别的连接数。
连接数。
● ⽰例1: 1 个 PG 具有 3 个可⽤连接资源。根据当前使⽤的 PG 功能,该 PG 实际可能使⽤其可⽤连接资源的 1、2 或 3。
在S7-1200 中,始终保证⾄少有1 个 PG,但不允许超过 1 个 PG。
在CPU属性>常规>连接资源显⽰:
硬件版本V3.0 ⽀持的协议和最⼤的连接资源:
3个连接⽤于操作⾯板
1个连接⽤于编程设备(PG)与 CPU 的通信
8个连接⽤于Open IE ( TCP, ISO on TCP, UDP) 的编程通信,使⽤T-block 指令来实现
3个连接⽤于S7 通信的服务器端连接,可以实现与S7-200,S7-300以及 S7-400 的以太⽹S7 通信
8个连接⽤于S7 通信的客户端连接,可以实现与S7-200,S7-300以及 S7-400 的以太⽹S7 通信
连接数是固定不变的,不能⾃定义。
注意:建⽴被动的TCP 、ISO on TCP 和UDP的连接时,建议使⽤端⼝范围: 2000~5000。⼀些端⼝号和TSAP 号是受到限制不能被使⽤的。下列端⼝号和TSAP号不能使⽤:
ISO TSAP (passive): 01.00, 01.01, 02.00, 02.01, 03.00, 03.01
TCP/UDP port (passive): 20, 21, 25, 80, 102, 135, 161, 34962 … 34964,53, 80, 162, 443, 520, 9001
2 Modbus TCP 指令库
S7-1200集成PN接⼝MODBUS TCP通信概述
Modbus TCP是标准的⽹络通信协议,通过CPU上PN接⼝进⾏TCP/IP通信,不需要额外的通信硬件模块,Modbus TCP使⽤开放式⽤户通信连接作为Modbus通信路径,所⽀持的混合客户机和服务器连接数最⼤为CPU所允许的最⼤开放式⽤户通信连接数8个。
软件 STEP7 V11 SP1版本开始,S7-1200CPU 从Firmware V1.0.2开始,不再需要安装Modbus TCP的库⽂件,可以直接调⽤Modbus TCP的库指令“MB_CLIENT”和“MB_SERVER”使⽤实现Modbus TCP通信功能,如图1所⽰。
图1. Modbus TCP的库指令
3 Modbus TCP 功能编程
S7-1200 做Modbus T cp Client(客户端)
MB_CLIENT 进⾏客户机和服务器TCP连接、发送命令消息、接收响应以及控制服务器的断开。
1.调⽤MB_CLIENT通信指令,进⼊ “Program blocks” > “OB1” 主程序中,调⽤MODBUS TCP客户机指令,如图2所⽰。
图2. MB_CLIENT通信指令
功能块参数意义如下表1.:
管脚说明
REQ使能: False-⽆Modbus通讯请求,True-请求与服务器通讯,Done完成位来后才可以执⾏下次请
求,建议采⽤上升沿触发请求;
DISCONNECT控制与服务器建⽴和终⽌连接:0-建⽴与指定IP地址和端⼝号的通讯连接,默认为0;1-断开通讯连
接,在终⽌连接的过程中,不执⾏任何其他功能;
CONNECT_ID连接的ID号:每个连接只有⼀个唯⼀的ID号;
IP_OCTET_1~4ZKA-4488-ETH的IP地址
IP_PORT ZKA-4488-ETH上使⽤TCP/IP协议与客户端建⽴通讯的IP端⼝号
MB_MODE选择请求模式(读取、写⼊或诊断),具体对照参照表1.;
MB_DATA_ADDR访问数据的起始地址;
MB_DATA_LEN数据长度:数据访问的位数或字数;
MB_DATA_PRT 指向Modbus数据寄存器的指针:⽤于缓存从Modbus服务器接收的数据或将发送到Modbus服务器数据的缓冲区,可以是DB块或M区,如果是DB块则需要定义为“标准与S7- 300/400兼容”的类型,
见下图3;
DONE完成位:作业完成,⽆错误,该位置1;
BUSY作业状态位:0-当前没有正在处理的“MB_CLIENT”作业;1-“MB_CLIENT”作业正在处理;
ERROR错误位:0-⽆错误;1-出现错误,错误原因查看STATUS;
STATUS错误代码;
表1. 功能块参数意义
2.MB_DATA_PTR数据块的新建
通过“Program blocks”>“Add new block”,选择“Data block”创建 DB 块,选择“标准与S7- 300/400兼容” ,点
击“OK”键,定义数据区为100个字的数组,如图3所⽰。
图3. 创建MB_DATA_PTR数据块
3. MB_MODE、MB_DATA_ADDR和功能码的关系
MB_CLIENT指令中,MB_MODE、MB_DATA_ADDR和MB_DATA_LEN三个参数组合定义了当前Modbus消息中所⽤的功能代码,如表2.。
Modbus
功能MB_MODE MB_DAT A_ADDR操作和数据类型数据长
功能度FC01000001~09999读取输出位每个请求1~2000个位1~2000 FC02010001~19999读取输⼊位每个请求1~2000个位1~2000
FC03040001~49999 或
400001~465535
读取保持寄存器每个请求1~125个字1~125 FC04030001~39999读取输⼊字每个请求1~125个字1~125 FC05100001~09999写⼀个输出位每个请求1个位1
FC06140001~49999 或
400001~465535
写⼀个保持寄存器每个请求1个字1 FC15100001~09999写多个输出位每个请求2~1968个位2~1968
FC16140001~49999 或
400001~465535
写多个保持寄存器每个请求2~123个字2~123
FC15200001~09999写⼀个或多个输出位每个请求1~1968个
1~1968
FC16240001~49999 或
400001~465535写⼀个或多个保持寄存器每个请
求1~123个字
1~123
FC1111读取服务器通信状态字和事件计数器:状态
字反映处理状态(0-未处理;0XFFFF-处
理中);每次成功发送⼀条消息后,事件计
数器都将递增。执⾏功能
时,MB_CLIENT指令
的MB_DATA_ADDR和MB_DATA_LEN参
数都将被忽略。
FC0880通过数据诊断代码0X0000检查服务器状态
每次请求1个字
plc模拟量怎么编程1
FC0881通过数据诊断代码0X000A重新设置服务器
事件计数器每次请求1个字
1 3~10、12~79、82~255保留
表2. MB_MODE、MB_DATA_ADDR和功能码的关系
如上例中S7-1200作客户机,⽤FC04功能码读取ZKA-4488-ETH的模拟输⼊AI1通道的读数的两个字,起始从Modbus地
址30001开始,接收的数据存放在缓冲区DB3.DBX0.0开始区域,设置如
上:MB_MODE=0,MB_DATA_ADDR=30001,MB_DATA_LEN=2,对应关系为:30001->DB3.DBW0 ,30002-
>DB3.DBW2。
注意:Slave ID 是ZKA-4488-ET H的站地址,和客户机中“MB_CLIENT” 中的“CONNECT_ID” 不是⼀个概念,实际上与客户机中“MB_CLIENT”的背景数据块中的ST AT变量“MB_UNIT_ID”需要⼀致,在1200中该地址默认
为16#00FF,实际使⽤时可以改成1,即:与ZKA-4488-ET H配置⽂件中的站号保持⼀致,当S7-1200挂接了多
个ZKA-4488-ET H时,该值可以按序编号,也可以都使⽤值1,因为modbus-tcp依然可以根据指向的IP地址发送数据。
图7. 客户机中“MB_CLIENT”的背景数据块中的STAT变量“MB_UNIT_ID”
5.通讯测试
S7-1200作客户机,⽤FC04功能码读取ZKA-4488-ETH的两个字,设置客户机和ZKA-4488-ETH的功能、起始地址、端⼝等参数相对应,具体设置如上,设置M5.0和M0.0为1,触发请求,如图8
所⽰。