S7-1200 与 S7-300 CPU 集成 PN 口的 ISO on TCP 通信条目号 :79610922 日期 :2013-09-10 S7-1200 与 S7-300 CPU 集成 PN 口的 ISO on TCP 通信 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 以太网电缆 Page 1 of 15
2.2 软件环境 1 STEP7 Basic V10.5 SP2 2 STEP7 V5.4 SP5 3 通信所需的功能块, 请参见附件提供的例程 Sample_1Sample_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 之间切换的一个位, 可以使用它去自动激活发送任务 Page 2 of 15
图 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 调用并配置通信指令 Page 3 of 15
1 在 PLC_1 的 OB1 中调用 TCON 通信指令进入 Project tree > PLC_1 > Program blocks > OB1 主程序中, 从右侧窗口 Instructions > Exten Instructions > Communications 下调用 TCON 指令, 并选择 Single Instance 生成背景 DB 块, 4 所示 图 4 调用 TCON 指令 2 定义 PLC_1 的 TCON 连接参数 PLC_1 的 TCON 指令的连接参数需要在指令下方的属性窗口 Properties > Configuration > Conne parameter 中设置, 如图 5 所示 连接参数说明 : End point : 选择通信伙伴, 这里选择 unspecified Address : 指定通信伙伴 S7-300 站的 IP 地址 192.168.0.3 Connection type Connection ID Connection data Address details : 选择通信协议为 ISO on TCP : 连接的地址 ID 号, 这个 ID 号在后面的编程里会用到 : 创建连接时, 系统会自动生成本地的连接 DB 块, 所有的连接数据都会存在 DB 块中 : 选择本地 PLC_1 作为主动连接,S7-300 CPU 作为被动连接 : 设定 TSAP 地址这里本地设置成 PLC_1, TSAP ID 自动为 50.4C.43.5F.31, 伙伴方设置成不设置 TSAP(ASCII), 设置 TSAP ID 为 E0.02.50.4C.43.5F.31 Page 4 of 15
图 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 所示 Page 5 of 15
图 7 创建一个发送数据块 DB3 打开创建的发送数据块, 在数据块中定义发送数据区为 8 个字节的数组, 如图 8 所示 图 8 创建发送数据区 然后在 OB1 中调用 TSEND 发送通信指令, 并为 TSEND 指定参数 使用 M0.3( 2Hz 的时钟脉冲 ) 上升沿激活发送任务, 指定发送数据区为 P# DB3.DBX0.0 BYTE 8, 连接 ID = 1 与连接参数里面的设置相同, 发送长度 LEN=8 分配好参数的 TSEND 块如图 9 所示 Page 6 of 15
图 9 调用 TSEND 发送通信块 5 在 PLC_1 的 OB1 中调用 TRCV 接收通信指令同样, 先创建一个接收数据块 DB4, 如图 10 所示 TRCV 接收通信指令的调用方法与 TSEND 发送通信指令的调用方法相同,M8.1 作为接收指令的使能位, 如图 11 所示 图 10 创建接收数据区 图 11 调用 TRCV 接收通信块 6 在 PLC_1 的 OB1 中调用 TDISCON 通信指令最后, 为了断开通信链接, 我们需要调用 TDISCON 通信指令, 如图 12 所示 Page 7 of 15
图 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_1Sample_1 ( 50 KB ) 或参考下载中心文档 A0284 使用西门子 PLC 集成的 PN 口实现 S5 兼容通信使用入门 提供的例程 下载链接 :80490650 Page 8 of 15
从附件提供的例程 Sample_1Sample_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 地址 Page 9 of 15
图 15 设置时钟存储器字节 4.2 编写通信程序 1 从样例程序中拷贝通信所需的块从附件提供的 sample_1sample_1 ( 50 KB ) 例程中把需要的 FB420 FC21 与 UDT65 程序块拷贝到新创建的项目中, 如图 16 所示 图 16 2 生成数据块在程序中创建一个 DB 块, 块号不限 ( 本例为 DB101), 在块中建立变量 DB_VAR, 类型为 UDT65, 如图 17 所示 Page 10 of 15
图 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 所示 Page 11 of 15
图 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 启动作业, 执行连接的建立 Page 12 of 15
图 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" 用于评估工作的情况 Page 13 of 15
图 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 中, 同时, Page 14 of 15
S7-300 的 DB3 中接收到的数据又被发送到 S7-1200 的接收数据块 DB4 中 图 26 在线监控通信结果关键词 ISO on TCP,S7-1200,S7-300 PN CPU,OPEN IE, 以太网条目号 :79610922 日期 :2013-09-10 Siemens AG 2013 版权所有 - 法人信息 - 保密政策 - 应用条款 Page 15 of 15