商铺名称:上海晨莅自动化科技有限公司
联系人:李艳(小姐)
联系手机:
固定电话:
企业邮箱:20131179@qq.com
联系地址:金山区枫泾镇枫弯路500弄
邮编:201501
联系我时,请说是在电子快手网上看到的,谢谢!
西门子模块6ES73225GH000AB0
6ES7322-5GH00-0AB0 SIMATIC S7-300,数字输出 SM 322,电位隔离, 16 DA(固态继电器), AC/DC 24-48V;0.5A mit 一个一组,1x 40极 |
1 概述
S7-1200 与 S7-300 之间的以太网通信方式比较多,可以采用ISO on TCP、TCP和 S7 的方式进行通信。在S7-1200 CPU 中采用ISO on TCP和TCP这两种协议进行通信所使用的指令是相同的,都使用 T-block ( TSEND_C, TRCV_C, TCON, TDISCON, TSEN, TRCV ) 指令编程。S7-300 CPU一侧如果使用的是CPU集成的PN接口,连接不在STEP7的NetPro中建立连接,而是使用西门子提供的OPEN IE 的方式来实现。
本文主要介绍了如何实现在S7-1200 和S7-300 CPU集成PN口之间的ISO on TCP通信,包括通信的基本步骤、配置及编程等内容。具体的实现方法有多种,比如在S7-1200中可以使用不带连接的通信指令(TCON, TDISCON, TSEN, TRCV),也可以使用带连接的通信指令(TSEND_C, TRCV_C);在S7-300中可以采用功能块编程的方式来实现,也可以使用Open Communication Wizard工具(OPEN IE向导)的方式来建立OPEN IE的通信。
为了方便理解,本文在S7-1200中使用不带连接的通信指令TCON, TDISCON, TSEN, TRCV,在S7-300侧通过功能块编程的方式来实现。
关于S7-1200和S7-300 OPEN IE通信的文档可以登录西门子自动化与驱动集团网站的下载中心,网址:http://www.ad.siemens.com.cn/download/ ,根据如表1提供的文档编号搜索并下载相关文档。
文档编号 | 中文标题 |
A0426 | 西门子 S7-1200 PLC 技术参考Version 1.5 |
A0416 | S7-1200与S7-300 的以太网TCP 及ISO on TCP通信 |
A0421 | 如何实现两个S7-1200 CPU之间的以太网通信 |
A0415 | 通过S7协议实现S7-1200 与S7-300的通信 |
A0414 | S7-1200基本以太网通信使用指南 |
A0284 | 使用西门子PLC集成的PN口实现S5 兼容通信使用入门 |
A0345 | 使用 Open Communication Wizard 建立开放式 ISO on TCP 通信 |
A0346 | 使用 Open Communication Wizard 建立开放式 UDP 通信 |
A0347 | 使用 Open Communication Wizard 建立开放式 TCP 通信 |
A0344 | S7-300和S7-400集成PN口的S7通信 |
A0334 | PN CPU/CP的开放式通讯-Open IE |
表1 下载中心文档列表
2 软硬件及所要完成的通信任务
2.1硬件设备
实验的硬件设备:
1、S7-1200 CPU,CPU1212 AC/DC/RLY(6ES7 212-1BD30-0XB0)
2、S7-300 PN CPU,CPU317-2PN/DP(6ES7 317-2EH13-0AB0 V2.6.7)
3、PC机(带以太网卡)
4、SCALANCE X216交换机,S7-1200、S7-300和PC通过交换机互连起来
5、TP以太网电缆
2.2 软件环境
1、STEP7 Basic V10.5 SP2
2、STEP7 V5.4 SP5
3、通信所需的功能块,请参见附件提供的例程 ”Sample_1 ( 50 KB ) ” 或参考下载中心文档:《A0284 使用西门子PLC集成的PN口实现S5 兼容通信使用入门》提供的程序。下载链接:80490650
2.3 所要完成的通信任务
本例中所要完成的通信任务定义为:
1、 将S7-1200的发送数据块DB3里的8个字节数据发送到S7-300的DB3中。
2、 将S7-300 DB3里接收到的8个字节数据再发送到S7-1200的接收数据块DB4中。
3 S7-1200 CPU的组态编程
3.1创建新项目
1、打开STEP 7 Basic 软件并新建项目
在STEP 7 Basic 的 “Portal View”中选择“Create new project”创建一个新项目,项目名称为“GS_ISO”。
2、添加硬件并命名PLC
然后进入 “Project view”,在“Project tree” 下双击 “Add new device”,在对话框中选择所使用的S7-1200 CPU(6ES7 212-1BD30-0XB0)添加到机架上,设备名为 PLC_1,如图1所示。
图1 添加新的PLC站
为了编程方便,我们使用 CPU 属性中定义的时钟位,定义方法如下:
在“Project tree> PLC_1 > Device configuration” 中,选中 CPU ,然后在下面的属性窗口中,“Properties > System and clock memory” 下,将系统位定义在MB1,时钟位定义在MB0,如图2所示。程序中我们主要使用 M0.3,它是以2Hz 的速率在0和1之间切换的一个位,可以使用它去自动激活发送任务。
图2 系统和时钟存储器
3、为 S7-1200 CPU的PROFINET 通信口分配以太网地址
在 “Device View”中点击 CPU 上代表PROFINET 通信口的绿色小方块,在下方会出现PROFINET 接口的属性,在 “Ethernet addresses”下分配IP 地址为 192.168.0.2 ,子网掩码为255.255.255.0,如图3所示。
图3为 S7-1200 CPU的PROFINET 接口分配IP地址
3.2调用并配置通信指令
1、在 PLC_1 的 OB1 中调用 “TCON”通信指令
进入“Project tree > PLC_1 > Program blocks > OB1” 主程序中,从右侧窗口 “Instructions > Extended Instructions > Communications” 下调用 “TCON” 指令,并选择 “Single Instance” 生成背景 DB块,如图4所示。
图4 调用TCON指令
2、定义PLC_1 的 “TCON” 连接参数
PLC_1 的 TCON 指令的连接参数需要在指令下方的属性窗口“Properties > Configuration > Connection parameter”中设置,如图5所示。
连接参数说明:
End point |
:选择通信伙伴,这里选择“unspecified” |
Address |
:指定通信伙伴S7-300站的IP地址“192.168.0.3” |
Connection type |
:选择通信协议为ISO on TCP |
Connection ID |
:连接的地址 ID 号,这个 ID 号在后面的编程里会用到 |
Connection data |
:创建连接时,系统会自动生成本地的连接 DB 块,所有的连 接数据都会存在这个 DB 块中。 |
|
:选择本地 PLC_1作为主动连接,S7-300 CPU作为被动连接 |
Address details |
:设定 TSAP 地址这里本地设置成“PLC_1”, TSAP ID自动为“50.4C.43.5F.31”,伙伴方设置成不设置TSAP(ASCII),设置TSAP ID 为“E0.02.50.4C.43.5F.31”。 |
图5 “TCON” 指令的连接参数
3、分配 “TCON” 的块参数
在指令下方的属性窗口“Properties > Configuration > block parameter”中设置,可以根据需要自己为“TCON” 块指定相应的输入输出参数。指定好参数的块,如图6所示。其中M8.0作为启动连接的触发位,连接ID = 1与连接参数里面的设置相同。
图6 “TCON” 的块参数
4、在 PLC_1 的 OB1 中调用 “TSEND” 发送通信指令
首先创建一个发送数据块,通过 “Project tree > PLC_1 > Program blocks > Add new block”,选择 “Data block” 创建 DB 块,选择绝对寻址,点击“OK”键,如图7所示。
图7 创建一个发送数据块DB3
打开创建的发送数据块,在数据块中定义发送数据区为 8个字节的数组,如图8所示。
图8 创建发送数据区
然后在OB1 中调用“TSEND”发送通信指令,并为“TSEND”指定参数。使用M0.3( 2Hz 的时钟脉冲)上升沿激活发送任务,指定发送数据区为P# DB3.DBX0.0 BYTE 8,连接 ID = 1与连接参数里面的设置相同,发送长度LEN=8。分配好参数的“TSEND”块如图9所示。
图9 调用“TSEND”发送通信块
5、在 PLC_1 的 OB1 中调用“TRCV”接收通信指令
同样,先创建一个接收数据块DB4 ,如图10所示。“TRCV”接收通信指令的调用方法与“TSEND” 发送通信指令的调用方法相同,M8.1作为接收指令的使能位,如图11所示。
图10创建接收数据区
图11 调用“TRCV”接收通信块
6、在 PLC_1 的 OB1 中调用 “TDISCON”通信指令
最后,为了断开通信链接,我们需要调用“TDISCON”通信指令,如图12所示。
图12 调用“TDISCON”通信块
3.3下载程序
至此,S7-1200侧的组态和编程都已经完成,可以在项目编译无错误后,直接下载到S7-1200 CPU中,并启动CPU的运行。
4 S7-300 CPU的组态编程
S7-300带PN接口的CPU支持ISO on TCP通信功能,通过该集成以太网接口组态ISO on TCP通信时,只能使用开放式通信专用的功能块,这些专用的功能块可以在STEP7 “ 通讯块”的 “标准库 ”中找到,如图13所示。
图13 S7-300 CPU通信指令库
库中提供了下列通信功能块:
′> FB 65 "TCON",用于建立连接,连接时需要UDT65来提供参数
> FB 66 "TDISCON",用于终止连接
> FB 63 "TSEND",用于发送数据到S7站点、S5站点、PC站或者第三方设备
> FB 64 "TRCV" 用于从S7站点、S5站点、PC站或者第三方设备接收数据
要通过CPU 的 集成PN 接口实现开放的ISO on TCP通信,不能在Netpro网络组态中直接建立连接,必须通过程序指定每个连接的参数。用于通信的FB标准功能块,请参见附件提供的例程 ”Sample_1 ( 50 KB ) ” 或参考下载中心文档《A0284 使用西门子PLC集成的PN口实现S5 兼容通信使用入门》提供的例程。下载链接:80490650
从附件提供的例程 ”Sample_1 ( 50 KB ) ” 中将把需要的程序块拷贝到新建的项目中,包括:
> UDT 65 "TCON_PAR",存放用户通信参数
> FB420 "SET_ISO_ENDPOINT" ,用于修改UDT65内通信对象参数
> FC21, 被FB420调用
随后,使用通信功能块 FB65 "TCON"、FB66 "TDISCON"、FB63 "TSEND" 和 FB64 "TRCV" 完成程序的编写。
4.1创建新项目
1、打开STEP7,新建一个项目
2、在项目中插入一个SIMATIC 300的站
3、组态硬件,插入一个CPU317-2PN/DP的CPU,并为PN接口分配IP地址“192.168.0.3”,如图14所示。同时,在CPU的“Cycle/Clock Memory”属性页中指定MB0为时钟存储器,在程序中可以使用M0.3(2Hz 的时钟脉冲)去自动激活发送任务,如图15所示。
图14为PN接口分配IP地址
图15设置时钟存储器字节
4.2编写通信程序
1、从样例程序中拷贝通信所需的块
从附件提供的sample_1 ( 50 KB ) 例程中把需要的FB420、FC21与UDT65程序块拷贝到新创建的项目中,如图16所示。
图 16
2、生成数据块
在程序中创建一个DB块,块号不限(本例为DB101),在块中建立变量DB_VAR,类型为UDT65,如图17所示。
图17
3、生成并调用FB块
首先生成一个FB块(本例为FB400),在FB400静态变量区建立一个结构“T_TSAP“,包含如下变量,并为变量分配初始值,如图18所示。
1) LOC_RACK_SLOT (BYTE)= B#16#2 表示有两个前导字符 0xE0 (CPU31x-2PN/DP 或者 CPU319-3PN/DP规定)和 0x02(CPU槽号)
2) LOC_TSAP(STRING14)= 本地用户定义的ASCII字符'PLC_1' (注意要与S7-1200侧设置保持一致)。
3) REM_RACK_SLOT(BYTE)= B#16#0 不使用两个前导符。
4) REM_TSAP (STRING16)= 远程用户定义的ASCII字符'PLC_1' (注意要与S7-1200侧设置保持一致)。
图18
然后在生成的FB400中调用FB420,如图19所示。
图19
其中参数的含义如下:
1)ID: 连接ID,与S7-1200里的设置保持一致
2)DEV_ID:用于本PLC型号(注意不是通信对方)
DEV_ID = B#16#1本PLC型号为 IM151-8 PN/DP CPU
DEV_ID = B#16#2本PLC型号为CPU31x-2PN/DP或IM154-8 CPU
DEV_ID = B#16#3本PLC型号为CPU319-3PN/DP
DEV_ID = B#16#5本PLC型号为CPU41x-3PN/DP
3)ACTIVE: 主动或是被动建立连接,通信双方必须一个主动,一个被动,本例中S7-300侧为被动方。
4)T_TSAP: 静态变量区的结构变量,用于ISO ON TCP 通信的TSAP地址
5)IP_ADDR1 ... IP_ADDR4: 通信伙伴的IP地址,即S7-1200的IP地址192.168.0.2
6)CON_DB: 用UDT65生成的变量,即DB101
4、在OB1中调用发送和接收功能块
在OB1中先调用FB400功能块,为其指定背景数据块DB400,如图20所示。
图20
然后再在OB1中依次调用通信功能块FB65、FB64、FB63、FB66。其中发送和接收功能块FB64、FB63的数据区都为DB3,建立DB3如图21所示。关于块的使用请参考STEP7的在线帮助或相关文档说明。
图21
FB65 “TCON”,建立连接功能块,如图22所示。通过输入参数 "REQ"一个上升沿来建立连接。 “ID” 为连接ID,“CONNECT” 参数填写用 UDT65 生成的变量, 连接建立后会一直保持,直到调用FB66 "TDISCON" 断开连接、CPU停止或者断电。其中CONNECT指定为通过UDT65生成的DB块,即DB101, ID = 1。通过M8.0启动作业,执行连接的建立。
图22
FB64 “TRCV”,接收功能块,如图23所示。"TRECV" EN_R始终为TRUE, ID 填写连接ID,”DATA” 填写接收数据区,输出参数 "NDR" 用于表示新的数据已经收到,输出参数 "LEN" 表示接收的数据长度。本例中连接ID = 1。指定DB3作为接收数据块,接收数据的字节长度为8,接收作业通过M8.1使能。
图23
FB63 “TSEND”,发送功能块,如图24所示。连接ID = 1。指定DB3为发送数据块,发送字节长度为8,发送作业通过M0.3触发。"TSEND" 发送请求依靠输入参数"REQ"的上升沿来实现,如果“BUSY”位为true时不要触发"REQ"。输出参数 "DONE", "ERROR" 和 "STATUS" 用于评估工作的情况。
图24
FB66 “TDISCON”,取消连接功能块,如图25所示。可以根据需要取消ID=W#16#1的连接,作业通过M8.2使能。
图25
4.3下载程序
S7-300侧的组态和编程都完成后,直接下载到S7-300 CPU中,并启动CPU的运行。
5 监控通信结果
对S7-1200和S7-300都组态和编程后,下载所有组态及程序并搭建好网络后,首先在在S7-1200中将M8.0置位为1,然后再在S7-300中将M8.0置位为1,两个站的“TCON” 被激活,建立两个站之间的ISO on TCP连接。
连接正常建立后,即可以进行数据的交换。在S7-1200和S7-300站中将 ”TRCV” 功能块的EN_R置位为1,使能接收,监控通信结果如图26所示。
通过监控结果可以看到,S7-1200中发送数据块DB3的8个字节数据被发送到S7-300站的DB3中,同时,S7-300的DB3中接收到的数据又被发送到S7-1200的接收数据块DB4中。
图26 在线监控通信结果
1. 概述
在现场应用中,很多仪表和设备仅支持Modbus RTU的通讯协议,第三方仪表可以做Modbus主站或从站,西门子的通讯模块CP341 / CP441-2 通过Dongle(硬件狗)可以扩展该协议,S7-200 集成的口可以支持自由口通讯,通过指令库也可以方便的实现Modbus RTU通讯。本文以S7-200作为Modbus 主站,CP341作为Modbus 从站,实现Modbus RTU通讯,阐述两者在通讯方面的设置和注意事项。
2. 软件环境西门子模块6ES73225GH000AB0
2.1 STEP7 V5.4 SP4
用于编写 S7-300/400程序,此软件需要从西门子购买,本文档中的300的程序是使用Step7 V5.4 SP4的软件编写。
2.2 CP PTP Param V5.1 SP11
串行通讯模板的驱动程序,安装此驱动后才能对PtP模板进行参数配置,并在Step7中集成通讯编程需要使用的功能块。此驱动随购买模板一起提供,也可以从以下的链接下载:27013524
2.3 CP PTP Modbus Slave V3.1 SP7
CP341或CP441-2用于Modbus从站时,需要安装此驱动协议,但安装之前必须先安装PtP Driver,此驱动可以在购买Modbus Dongle时选择购买,也可以从以下的链接下载:27774276
2.4 STEP7 Micro/WIN V4.0 SP6
用于S7-200编程的软件,本文档中的200的程序是使用Step7 Micro/win 的软件编写。此软件可以从西门子下载中心免费下载,也可以从以下的链接下载。
http://www.ad.siemens.com.cn/download 网站 自动化系统>>S7-200>>软件,文档编号S0002。
2.5 Toolbox_V32-STEP 7-Micro WIN 32 Instruction Library
S7-200实现Modbus RTU功能,可以使用Modbus的指令库,要使用西门子的标准指令库,必须先安装指令库的软件包 Instruction Library,安装后,可以在Step 7-Micro/WIN软件的库中找到Modbus相关的指令,该软件包可以从以下的链接下载。http://www.ad.siemens.com.cn/download 网站 自动化系统>>S7-200>>软件,文档编号S0010。
3. 硬件列表和接线
3.1 硬件列表
S7-300从站 | CPU315-2DP | 6ES7 315-2AG10-0AB0 |
CP341 RS422/485 | 6ES7 341-1CH01-0AE0 | |
Dongle | 6ES7 870-1AB01-0YA0 | |
PC 适配器(USB) | 6ES7 972-0CB20-0XA0 | |
S7-200主站 | CPU 224XP | 6ES7 214-2BD23-0XB0 |
表1 硬件设备
3.2 硬件接线
3.2.1 接口定义
S7-200的通讯口为RS485物理口(9针口),CP341是RS422/485的接口类型(15针口),两种设备的接口引脚的示意图如下所示,更详细的信息可以参考CP341及S7-200通信接口的手册。
图1 S7-200 CPU通信口引脚定义
图2 S7-300 CP341 RS422/485 通讯口引脚定义
3.2.2 接线示意图
图3 硬件结构和接线示意图
4. 组态设置和编程
4.1 S7-200做Modbus主站的设置
S7-200 CPU上的通信口在电气上是标准的RS-485半双工串行通信口,此串行字符通信的格式:1个起始位;7/8位数据位;1位奇/偶/无校验;1停止位。通信波特率可以设置为1200、2400、4800、9600、19200、38400、57600或112500,符合这些格式的串行通讯设备可以和S7-200进行自由口通讯,Modbus RTU指令库就是使用自由口编程实现的。
4.1.1 Modbus RTU主站库
使用Modbus 主站指令库时需要注意的几点:
图4 库存储区设置
Modbus 地址 | 读 / 写 | Modbus 从站须支持的功能 |
00001~09999 | 读 | 功能1:读输出点 |
数字量输出 | 写 | 功能5:写单个输出点 |
功能15:写多个输出点 | ||
10001~19999 | 读 | 功能2:读输入点 |
数字量输入 | ||
30001~39999 | 读 | 功能4:读输入寄存器 |
输入寄存器 | ||
40001~49999 | 读 | 功能3:读保持寄存器 |
保持寄存器 | 写 | 功能6:写单个寄存器 |
功能16:写多个寄存器 |
表2需要从站支持的功能
4.1.2 S7-200 Modbus主站编程
编程时,使用SM0.0调用MBUS_CTRL完成主站的参数初始化,详细见下表,参数的说明也可以从子程序的局部变量表中找到。
图5 Modbus RTU 主站初始化
图中各参数含义如下
编号 | 符号/含义 | 说 明 |
a | EN / 使能 | 必须保证每一扫描周期都被使能(使用SM0.0)。 |
b | Mode / 模式 | 为1时使能为Modbus协议;为0时恢复为PPI协议。 |
c | Baud / 波特率 | 支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。 |
d | Parity / 校验 | 校验方式选择:0=无校验;1=奇校验,2=偶校验。 |
e | Timeout / 超时 | 主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000毫秒,允许设置的范围为1-32767。这个值必须设置足够大以保证从站有时间响应。 |
f | Done / 完成位 | 初始化完成,此位会自动置1。 |
g | Error / 错误位 | 初始化错误代码。 |
表3
调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求。
图6 调用Modbus RTU 主站读写子程序
图中各参数含义如下
编号 | 符号/含义 | 说 明 |
a | EN / 使能 | 同一时刻只能有一个读写功能使能。 |
b | First / 读写请求位 | 每一个新的读写请求必须使用脉冲触发。 |
c | Slave / 从站地址 | 可选择的范围1–247。 |
d | RW / 读写操作位 | 0=读, 1=写。 |
e | Addr / 读写从站的数据地址 | 选择读写的数据类型: |
00001 至 0xxxx - 开关量输出 | ||
10001 至 1xxxx - 开关量输入 | ||
30001 至 3xxxx - 模拟量输入 | ||
40001 至 4xxxx - 保持寄存器。 | ||
f | Count / 数据的个数 | 通讯的数据个数(位或字的个数)。 |
g | DaptPtr / 数据指针 | 如果是读指令,读回的数据放到这个数据区中; |
如果是写指令,要写出的数据放到这个数据区中。 | ||
h | Done / 完成位 | 读写功能完成位。 |
i | Error / 错误代码 | 只有在Done位为1时,错误代码才有效。 |
表4
从上图中可见,S7-200作为Modbus RTU主站,波特率9.6Kb/s,偶校验,连接从站的站地址是3,数据存储区为VB2000开始的区域。
4.2 CP341 做Modbus 从站的硬件组态
4.2.1 硬件组态
图7 S7-300侧硬件组态
4.2.2 设置Modbus参数
图8 消息桢字符结构
按照上述操作设置参数,从上图可以看出,本例中的传输波特率9.6Kb/s,1位起始位,8位数据位,偶校验位,1位停止位,从站站地址是3,主从通讯设备的字符帧格式和波特率等参数设置需要一致。
图9 RS422/485 接口组态
RS422/485接口只能一个有效,接口的选择只需要组态而不需要在硬件上短接。
4.2.3 Modbus驱动的下载
当配置好Modbus通信的参数后,保存前需要向CP341下载Modbus Slave的驱动,一旦下载完成后无需再次下载。
需要注意的是,在下载驱动时(可以在无Dongle情况下下载),需要将CPU停机,然后下载,操作过程如下所示。
图10 下载Dongle时,需要CPU停机
图11 从站驱动下载后结果
4.2.4 CP341做Modbus从站的编程
从Step7 软件下的EXAMPLE目录中,找到项目名“zXX21_05_PtP_Com_MODSL”的项目,打开,然后将Modbus通讯模块FB80传递到用户项目中,打开路径如下所示。
图12 Modbus Slave 例程打开路径
OB1中调用FB80编程如下:
图13 FB80程序块调用
CP卡初始化正常后,CP_START,CP_START_FM和CP_START_OK为1信号,否则CP_START_ERROR为1,同时可以从ERROR_NR察看错误信息,也可以在硬件组态中在线后的CP341的诊断缓冲区察看详细的错误信息,错误信息对照和处理方式可以参考
《S7-300以用于PtP CP Modbus 协议RTU格式S7的可装载驱动程序为从站》的手册。
FB80的各参数含义如下
LADDR | 硬件组态中CP341的起始逻辑地址,本例中为256 |
START_TIMER | 初始化超时定时器,本例中为T120 |
START_TIME | 初始化定时器时间,本例中为5S |
OB_MASK | I/O访问错误屏蔽位,本例中为True(I/O访问错误已屏蔽) |
CP_START | FB初始化使能位,本例中为M0.0 |
CP_START_FM | CP_START 初始化的上升沿位,本例中为M0.1 |
CP_NDR | 从CP卡写操作位,本例中为m0.2 |
CP_START_OK | 初始化完成且无错误,本例中为M0.3 |
CP_START_ERROR | 初始化完成,但有错误,本例中为M0.4 |
ERROR_NR | 错误号,本例中为MW2 |
ERROR_INFO | 错误信息,本例中为MW4 |
表5
5. 通讯测试
Modbus RTU格式通信协议是以主从的方式进行数据传输的,在传输的过程中主站是主动方,即主站发送数据请求报文到从站,从站返回响应报文。Modbus 系统间的数据交换是通过功能码来控制的,以下对现场常用的功能码进行分类测试,关于功能码的详细信息请参考手册。
5.1 FC01/05/15功能码
CP341从站的通讯区域配置
图14 FC01/05/15 参数组态界面
FC01、FC05、FC15对应的数据区为位输出,数据的传递以位为单位,可以读写操作,用户地址区为0xxxx,Modbus地址在信息传递中从0开始。如上图,左边为信息传递地址(地址区不能冲突),右边对应的是S7-300的数据区。例如左边信息传递地址从0 ~ 7对应用户地址区为00001 ~ 00008,对应S7-300的M10.0 ~ M10.7,并且以此为例说明FC01功能码的通讯。
S7-200主站程序调用
图15 功能码FC01使用
S7-200主站,用功能码FC01读取从站8点数字量输出,接收的数据存放在VB2000开始的区域,测试截图结果如下。
图16 FC01功能码数据交换
5.2 FC02功能码
CP341从站的通讯区域配置
图17 FC02 参数组态界面
FC02对应的数据区为位输出,数据的传递以位为单位,只读操作,用户地址区为1xxxx,Modbus地址在信息传递中从0开始,如上图,左边为信息传递地址(地址区不能冲突),右边对应的是S7-300的数据区。例如左边信息传递地址从0 ~ 7对应用户地址区为10001 ~ 10008,对应S7-300的M20.0 ~ M20.7,并且以此为例说明FC02功能码的通讯。
S7-200主站程序调用
图18 功能码FC02使用
S7-200主站,用功能码FC02读取从站8点数字量输入,接收的数据存放在VB2000开始的区域,测试截图结果如下。
图19 FC02功能码数据交换
5.3 FC03/06/16 功能码
CP341从站的通讯区域配置
图20 FC03/06/16参数组态界面
FC03/06/16 对应的数据区为寄存器,数据的传递以字为单位,可以读写操作,用户地址区为4xxxx,Modbus地址在信息传递中从0开始。如上图,左边为信息传递地址,右边对应的是S7-300的数据区,左边传输地址不可改,右边只对应一个数据区。例如用户地址
区为40001 ~ 40004,对应S7-300数据区为DB1.DBW0 ~ DB1.DBW6,并且以此为例说明
FC03功能码的通讯。
S7-200主站程序调用
图21功能码FC03使用
S7-200主站,用功能码FC03读取从站4个字寄存器,接收的数据存放在VB2000开始的区域,测试截图结果如下。
图22 FC03功能码数据交换
5.4 FC04 功能码
CP341从站的通讯区域配置
图23 FC04参数组态界面
FC04对应的数据区为寄存器输入,数据的传递也以字为单位,只读操作,用户地址区3xxxx,Modbus地址在信息传送中从0开始。如上图,左边为信息传递地址,右边对应的是S7-300的数据区,左边传输地址不可改,右边只对应一个数据区。例如用户地址区为30001 ~ 30004,对应S7-300数据区为DB1.DBW0 ~ DB1.DBW6,并且以此为例说明FC04功能码的通讯。
S7-200主站程序调用
图24功能码FC04使用
S7-200主站,用功能码FC04读取从站4个字输入寄存器,接收的数据存放在VB2000开始的区域,测试截图结果如下。
图25 FC04功能码数据交换
5.5 Limits 栏
图26 Limits 参数组态界面
对于写功能码FC05、06、15、16,可以禁用或限制访问相关S7-300存储区,即使用这些功能码时,S7-300存储区需要在设定的最小和最大的范围之间,如果访问的区域超出这个范围,则访问会被拒绝,同时输出报错误信息。
6. 总结
本文档以S7-200为主站和CP341为从站简单介绍了Modbus RTU通讯,关于通讯的组态设置,编程以及常用功能码的使用,其具体的使用可以作为西门子串行通讯模块与第三方的仪表、设备等进行串行通信的参考。
S7300电源模板
6ES7307-1BA00-0AA0
6ES7307-1EA00-0AA0
6ES7307-1KA01-0AA0
CPU
6ES7312-1AE13-0AB0
6ES7312-5BE03-0AB0
6ES7313-5BF03-0AB0
6ES7313-6BF03-0AB0
6ES7313-6CF03-0AB0
6ES7314-1AG13-0AB0
6ES7314-6BG03-0AB0
6ES7314-6CG03-0AB0
6ES7315-2AG10-0AB0
6ES7315-2EH13-0AB0
6ES7317-2AJ10-0AB0
6ES7317-2EK13-0AB0
6ES7318-3EL00-0AB0
内存卡
6ES7 953-8LF20-0AA0
6ES7 953-8LG11-0AA0
6ES7 953-8LJ20-0AA0
6ES7 953-8LL20-0AA0
6ES7 953-8LM20-0AA0
6ES7 953-8LP20-0AA0
开关量模板
6ES7 321-1BH02-0AA0
6ES7 321-1BH10-0AA0
6ES7 321-1BH50-0AA0
6ES7 321-1BL00-0AA0
6ES7 321-7BH01-0AB0
6ES7 321-1EL00-0AA0
6ES7 321-1FF01-0AA0
6ES7 321-1FF10-0AA0
6ES7 321-1FH00-0AA0
6ES7 321-1CH00-0AA0
6ES7 321-1CH20-0AA0
6ES7 322-1BH01-0AA0
6ES7 322-1BH10-0AA0
6ES7 322-1CF00-0AA0
6ES7 322-8BF00-0AB0
6ES7 322-5GH00-0AB0
6ES7 322-1BL00-0AA0
6ES7 322-1FL00-0AA0
6ES7 322-1BF01-0AA0
6ES7 322-1FF01-0AA0
6ES7 322-5FF00-0AB0
6ES7 322-1HF01-0AA0
6ES7 322-1HF10-0AA0
6ES7 322-1HH01-0AA0
6ES7 322-5HF00-0AB0
6ES7 322-1FH00-0AA0
6ES7 323-1BH01-0AA0
6ES7 323-1BL00-0AA0
模拟量模板
6ES7 331-7KF02-0AB0
6ES7 331-7KB02-0AB0
6ES7 331-7NF00-0AB0
6ES7 331-7NF10-0AB0
6ES7 331-7HF01-0AB0
6ES7 331-1KF01-0AB0
6ES7 331-7PF01-0AB0
6ES7 331-7PF11-0AB0
6ES7 332-5HD01-0AB0
6ES7 332-5HB01-0AB0
6ES7 332-5HF00-0AB0
6ES7 332-7ND02-0AB0
6ES7 334-0KE00-0AB0
6ES7 334-0CE01-0AA0
附件
6ES7 365-0BA01-0AA0
6ES7 360-3AA01-0AA0
6ES7 361-3CA01-0AA0
6ES7 368-3BB01-0AA0
6ES7 368-3BC51-0AA0
6ES7 368-3BF01-0AA0
6ES7 368-3CB01-0AA0
6ES7 390-1AE80-0AA0
6ES7 390-1AF30-0AA0
6ES7 390-1AJ30-0AA0
6ES7 390-1BC00-0AA0
6ES7 392-1AJ00-0AA0
6ES7 392-1AM00-0AA0
6ES7 392-1BM01-0AA0
功能模板
6ES7 350-1AH03-0AE0
6ES7 350-2AH00-0AE0
6ES7 351-1AH01-0AE0
6ES7 352-1AH02-0AE0
6ES7 355-0VH10-0AE0
6ES7 355-1VH10-0AE0
6ES7 355-2CH00-0AE0
6ES7 355-2SH00-0AE0
6ES7 338-4BC01-0AB0
6ES7 352-5AH00-0AE0
6ES7 352-5AH00-7XG0
通讯模板
6ES7 340-1AH02-0AE0
6ES7 340-1BH02-0AE0
6ES7 340-1CH02-0AE0
6ES7 341-1AH01-0AE0
6ES7 341-1BH01-0AE0
6ES7 341-1CH01-0AE0
6ES7 870-1AA01-0YA0
6ES7 870-1AB01-0YA0
6ES7 902-1AB00-0AA0
6ES7 902-1AC00-0AA0
6ES7 902-1AD00-0AA0
6ES7 902-2AB00-0AA0
6ES7 902-2AC00-0AA0
6ES7 902-2AG00-0AA0
6ES7 902-3AB00-0AA0
6ES7 902-3AC00-0AA0
6ES7 902-3AG00-0AA0
6GK7 342-5DA02-0XE0
6GK7 342-5DF00-0XE0
6GK7 343-5FA01-0XE0
6GK7 343-1EX30-0XE0
6GK7 343-1EX21-0XE0
6GK7 343-1CX00-0XE0
6GK7 343-1CX10-0XE0
6GK7 343-1GX20-0XE0
6GK7 343-1GX21-0XE0
6GK7 343-1HX00-0XE0
6GK7 343-2AH00-0XA0
6ES7971-1AA00-0AA0
6ES7971-5BB00-0AA0
6ES7314-6EH04-0AB0
西门子模块6ES73225GH000AB0