一:TCP 协议通讯
(一)S7 200 SMART之间的TCP通讯
TCP是一个因特网核心协议。在通过以太网通信的主机上运行的应用程序之间,TCP 提供了可靠、有序并能够进行错误校验的消息发送功能。TCP 能保证接收和发送的所有字节内容和顺序完全相同。TCP 协议在主动设备(发起连接的设备)和被动设备(接受连接的设备)之间创建连接。一旦连接建立,任一方均可发起数据传送。
TCP协议是一种\"流\"协议。这意味着消息中不存在结束标志。所有接收到的消息均被认为是数据流的一部分。
S7 200 SMART与之间的TCP通讯可以通过两边调用OUC(开放式用户通讯)指令库中的TCP_CONNECT、TCP_SEND、TCP_RECV、DISCONNECT指令来实现。
图1.开放式用户通讯库
开放式用户通信库需要使用 50 个字节的 V 存储器。
开放式的用户通讯连接资源包括8个主动连接和8个被动连接。
只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。 所需条件:
1、软件版本:STEP 7-Micro/WIN SMART V2.2 2、SMART CPU固件版本:V2.2 3、通讯硬件:TP电缆(以太网电缆) 所完成的通讯任务:
将作为客户端的PLC(IP地址为192.168.0.101)中VB0-VB3的数据传送到作为服务器端的PLC(IP地址为192.168.0.102)的VB2000-VB2003中。
精选资料,欢迎下载
。
S7-200 SMART 客户端编程 1、设置本机IP地址
在客户端设置IP地址为192.168.0.101
图2.设置IP地址 2、建立TCP连接
调用TCP_CONNECT指令建立TCP连接。设置连接伙伴地址为192.168.0.102,远端端口为2001,本地端口为5000,连接标识ID为1。利用SM0.0使能Active,设置为主动连接。
图3.调用TCP_CONNECT指令
精选资料,欢迎下载
。
指令的参数 输入参数: EN :使能输入 Req:沿触发
Active :TURE=主动连接(客户端) FALSE=被动连接(服务器)
ConnID:连接ID为连接标识符,可能范围为0-65534。
IPaddr1 ... IPaddr4 :IP 地址的四个八位字节。IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。
RemPort:远程设备上的端口号。远程端口号范围为 1 到 49151。对于被动连接,可使用零。
LocPort :本地设备端口号。范围为1-49151,但是存在一些限制。 本地端口号的规则如下:
有效端口号范围为 1 到 49151。
不能使用端口号 20、21、25、80、102、135、161、162、443以及34962至
34964。这些端口具有特定用途。
建议采用的端口号范围为 2000 到 5000。 对于被动连接,本地端口号必须唯一(不重复)。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应
详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
3、调用发送数据指令TCP_SEND
调用TCP_SEND指令发送以VB0为起始,数据长度为DataLen长度的数据发送到连接ID为1指定的远程设备。
精选资料,欢迎下载
。
利用1HZ的时钟上升沿触发发送请求。
图4.调用TCP_SEND指令
指令的参数 输入参数: EN :使能输入 Req:沿触发
ConnID:连接 ID (ConnID) 是此发送操作的连接ID号。 DataLen :DataLen 是要发送的字节数(1 到 1024)。 DataPtr:DataPtr 是指向待发送数据的指针。
输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
精选资料,欢迎下载
。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
4、终止通讯连接
用户可通过DISCONNECT指令终止指定ID的连接。
图5.调用DISCONNECT指令
参数说明: 输入参数: EN :使能
Req:沿触发指令。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
5、分配库存储区
开放式用户通信库需要使用 50 个字节的 V 存储器,用户需手动分配 。在指令树的程序中,以鼠标右键单击程序块,在弹出的快捷菜单中选择库存储器。如图所示:
精选资料,欢迎下载
。
图6.库存储器
在弹出的选项卡中设置库指令数据区:
图7.分配地址
S7-200 SMART 服务器端编程 1、设置本机IP地址
设置IP地址为192.168.0.102
精选资料,欢迎下载
。
图8.设置本机IP地址
2、建立TCP连接
调用TCP_CONNECT指令建立TCP连接。设置连接伙伴地址为192.168.0.101,远端端口为5000,本地端口为2001,连接标识ID为1。利用SM0.0常闭点使能Active,设置为被动连接。
图9.调用TCP_CONNECT指令
3、接收数据
调用TCP_RECV指令接收指定ID连接的的数据。接收的缓冲区长度为MaxLen,数据接收缓冲区以VB2000为起始。
精选资料,欢迎下载
。
图11.调用TCP_RECV指令
监控结果
其中客户端的VW1000是发送的数据长度,服务器端的vw1000是接收的数据长度。
图12.监控结果
例程
为了更好地理解 TCP的编程,可参考下面的例程。 注意:
1. 该例程使用 STEP 7-Micro/WIN SMART 编写。
2.在建立连接时需先触发服务器端的建立连接指令,再触发客户端。 TCP客户端程序 TCP服务器端程序 注意:
精选资料,欢迎下载
。
此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为 此联系西门子技术支持与服务部门。
(二)S7-200 SMART 与调试助手之间 TCP 通信
TCP协议通讯
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 TCP&UDP Debug通过 TCP 通信,在 TCP&UDP Debug建立客户端或服务器,在 S7-200 SMART 调用 Open User Communication 库指令( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源 S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件:
① PC (带以太网卡)(IP 地址 192.168.0.254 ;子网掩码 255.255.255.0) ② S7-200 SMART CPU (固件版本V2.2) ( IP 地址 192.168.0.20 ;子网掩码 255.255.255.0) ③ TP 以太网电缆 软件:
① TCP&UDP Debug
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① TCP&UDP Debug 发送 10 个字节数据: -->( S7- 200 SMART 侧 ) VB2000~VB2009 ② TCP&UDP Debug 接收 10 个字节数据: <-- ( S7-200 SMART 侧 ) VB0~VB9
TCP&UDP Debug设置(客户端设置) 1. 打开TCP&UDP Debug软件 2. 右键“客户端模式”---“创建连接”
精选资料,欢迎下载
。
如图1所示,创建连接
图1.创建连接
① 选择连接类型:TCP
② 填写S7-200 SMART的IP地址及端口号 ③ 设置PC的端口号 ④ 单击创建
3. 右键“客户端模式”----“连接”
精选资料,欢迎下载
。
图2. 建立连接
① 蓝色圆点:未建立连接;黄色三角箭头:正在建立连接;绿色三角箭头:连接建立成功;
② 勾选“自动连接”后,点击连接按钮。
TCP&UDP Debug设置(服务器设置) 1. 打开TCP&UDP Debug软件
2. 右键“服务器模式”---“创建服务器”
图3. 创建服务器
① 选择PC的端口号后,点击确定 3. 右键“服务器模式”----“启动服务器”
精选资料,欢迎下载
。
图4. 启动服务器
S7-200 SMART侧编程
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT,如图5、图6所示。
图5. 开放式以太网通讯指令库
精选资料,欢迎下载
。
图6. TCP连接块
表1. 引脚说明 TCP_CONNECT EN //调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。服务器侧IP地址写0,表示接收所有请求 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。对于被动连接,使用零。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 精选资料,欢迎下载
:SM0.0 Req :V6010.0 Active :SM0.0闭点 ConnID :1 IPaddr1~4 :0~0 RemPort :0 LocPort :2000 DONE :V6000.0 BUSY :V6000.1 。
ERROR :V6000.2 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) STATUS :VB6002 2.调用TCP_SEND 和 TCP_RCV 指令,如图7、图8所示。
图7. TCP发送块
表2.引脚说明 CALL TCP_SEND EN Req :SM0.5 :SM0.5 //调用TCP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) 精选资料,欢迎下载
ConnID DataLen DataPtr Done Busy Error :1 :10 :&VB0 :V6000.6 :V6000.7 :V6001.0 Status :VB6004 。
图8. 发TCP接收块
表3. 引脚说明 CALL TCP_RECV EN ConnID MaxLen DataPtr Done :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 :10 :&VB2000 :V6001.1 :V6001.2 :V6001.3 :VB6005 :VW6006 Busy Error Status Length // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 3.分配库存储区,如图9 所示。
精选资料,欢迎下载
。
图9. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
通信结果
以S7-200 SMART做服务器为例。将 S7-200 SMART 项目编译,下载并触发建立连接;在TCP&UDP Debug中点击连接。
通信结果如下:
图10. 测试结果
(三)S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为服务器
TCP 协议通信
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-1200 通过 TCP 通信,在 S7-1200 调用 T-block 指令 ( TCON, TDISCON, TSEND, TRCV ) ,在 S7-200 SMART 调用 Open User Communication 库指令
( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。双方的发送和接收指令必须成对出现。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源
精选资料,欢迎下载
。
S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件:
① S7-1200 CPU (IP 地址 192.168.0.100 ;子网掩码 255.255.255.0) ② S7-200 SMART CPU (固件版本V2.2) ( IP 地址 192.168.0.20 ;子网掩码 255.255.255.0) ③ PC (带以太网卡) ④ TP 以太网电缆 软件:
① STEP7 V13 SP1 Upd 9
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① S7-1200 发送 10 个字节数据:( S7-1200侧 ) DB4.DBB0~DB4.DBB9 --> ( S7- 200 SMART 侧 ) VB2000~VB2009
② S7-1200 接收 10 个字节数据: ( S7-1200 侧 ) DB4.DBB10~DB4.DBB19 <-- ( S7-200 SMART 侧 ) VB0~VB9
S7-1200 侧硬件组态和编程 ( 客户机侧组态编程 )
1. 使用 TIA V13 SP1 Upd 9 软件 Portal 视图中,创建新项目 2. 添加硬件并命名PLC
进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-1200 CPU 添加到机架上,命名为 PLC_1 如图1所示
精选资料,欢迎下载
。
图1. 添加新设备
3. 启用时钟位
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:
在 “项目树” > “PLC_1” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “系统和时钟存储器” 下,将时钟位定义在 MB0,如图2所示。
时钟位我们使用 M0.5 ,它是频率为 1 Hz 的脉冲,可以使用它去自动激活发送任务。
精选资料,欢迎下载
。
图2.启用时钟位
4. 为 PROFINET 通信口分配以太网地址
在 “设备视图”中点击 CPU 上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 S7-1200 CPU 的 IP 地址为 192.168.0.100 ,子网掩码为255.255.255.0,如图3 所示
精选资料,欢迎下载
。
图3. 分配 IP 地址
5.在S7-1200 中调用建立连接指令,进入 “项目树” > “ PLC_1” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令”> “通信”>“开放式用户通信”下调用 “TCON” 指令,配置连接参数,如图4所示。
图4. 调用TCON指令并配置连接参数
精选资料,欢迎下载
。
6.创建用于交换数据的全局DB块及定义变量
通过“项目树”>“PLC_1”>“程序块”>“添加新块”,选择“数据块” 创建全局 DB 块,点击“确定” 生成数据块。如图5所示。
图5.添加新块
通过“项目树”>“PLC_1”>“程序块”>点击生成的 “数据块_1” ( DB4 ) ,右键属性,取消勾选“优化的块访问”。如图6所示。
图6.取消勾选优化的块访问
精选资料,欢迎下载
。
双击生成的 “数据块_1” ( DB4 ) ,定义数组,10 个字节用于发送,10个字节用于接收,然后编译数据块。结果如图7所示。
图7. 定义交换数据区
7.在OB1中调用 TSEND 和 TRCV
指令块位置及调用方法参考 TCON 指令的调用,调用结果如图8所示。
CALL TSEND REQ ID DATA DONE BUSY ERROR , DB3 :M0.5 :1 :P#DB4.DBX0.0 BYTE 10 //调用TSEND,使用背景DB块:DB3 //使用1Hz的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致 // 发送数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 :M20.0 :M20.1 :M20.2 精选资料,欢迎下载
。
STATUS :MW22 // 有错误发生时,会显示错误信息号
CALL TRCV EN_R ID DATA DONE BUSY ERROR STATUS RCVD_LEN , DB5 :M1.2 :1 :P#DB4.DBX10.0 BYTE 10 :M30.0 :M30.1 :M30.2 :MW32 //调用TRCV,使用背景DB块:DB5 //准备好接受数据 ,常1接收 //连接号,要与连接配置中一致 // 接受数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 :MW34 // 实际接受数据的字节数 图8. 调用发送和接收指令 接收和发送指令调用需要注意:
程序块的 ID 要与指令 TCON 中的 ID 保持一致
精选资料,欢迎下载
。
DATA 参数的填写方法 ( 以 TRCV 程序块为例 ): 1、直接输入 : P#DB4.DBX10.0 BYTE 10
2、打开数据块,点击数据块右上角浮动按钮,移动数据块与OB1并排
显示,选中数据块变量名称 “ TCP_RCV ” 拖拽到 TRCV 指令 DATA 参数处,该区域显示为绿色,释放鼠标即可。
S7-200 SMART侧编程 ( 服务器侧组态编程 )
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT,如图9所示。
精选资料,欢迎下载
。
TCP_CONNECT EN :SM0.0 //调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。服务器侧IP地址写0,表示接收所有请求 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。对于被动连接,使用零。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) Req :V6010.0 Active :SM0.0闭点 ConnID :1 IPaddr1~4 :0~0 RemPort :0 LocPort :2000 DONE :V6000.0 BUSY :V6000.1 ERROR :V6000.2 STATUS :VB6002 图9. 指令位置及调用连接指令
2.调用TCP_SEND 和 TCP_RCV 指令,如图10 所示。
精选资料,欢迎下载
。
CALL TCP_SEND EN :SM0.5 :SM0.5 :1 //调用TCP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 Req ConnID DataLen DataPtr Done :10 :&VB0 :V6000.6 :V6000.7 :V6001.0 :VB6004 Busy Error Status // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) 精选资料,欢迎下载
。
CALL TCP_RECV EN ConnID MaxLen DataPtr Done :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 :10 :&VB2000 :V6001.1 :V6001.2 :V6001.3 :VB6005 :VW6006 Busy Error Status Length // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 图10. 调用发送和接收指令 3.分配库存储区,如图11 所示。
精选资料,欢迎下载
。
图11. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
通信结果
将 S7-1200 和 S7-200 SMART 项目编译,下载 ;
S7-1200 侧触发 TCON 指令的REQ (M10.0 置位为1),S7-200 SMART 侧触发 TCP_CONNECT 指令的Req (V6010.0 置位为1 )以建立连接;
通信结果如下:
(四)S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为客户端
TCP 协议通信
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-1200 通过 TCP 通信,在 S7-1200 调用 T-block 指令 ( TCON, TDISCON, TSEND, TRCV ) ,在 S7-200 SMART 调用 Open User Communication 库指令
( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。双方的发送和接收指令必须成对出现。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源
精选资料,欢迎下载
。
S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件:
① S7-1200 CPU (IP 地址 192.168.0.100 ;子网掩码 255.255.255.0)
② S7-200 SMART CPU (固件版本V2.2 ) ( IP 地址 192.168.0.55 ;子网掩码 255.255.255.0)
③ PC (带以太网卡) ④ TP 以太网电缆 软件:
① STEP7 V13 SP1 Upd 9
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① S7-200 SMART 发送 10 个字节数据:(S7-200 SMART 侧 ) VB0~VB9 --> ( S7-1200侧 ) DB4.DBB10~DB4.DBB19
② S7-200 SMART 接收 10 个字节数据: ( S7-200 SMART 侧 ) VB2000~VB2009<-- ( S7-1200 侧 ) DB4.DBB0~DB4.DBB9
S7-200 SMART侧编程 ( 客户机侧组态编程 )
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT,如图1所示。
精选资料,欢迎下载
。
TCP_CONNECT EN //调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。192.168.0.100为伙伴的IP地址 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) 精选资料,欢迎下载
:SM0.0 Req :V6010.0 Active :SM0.0 ConnID :1 IPaddr1~4 :192.168.0.100 RemPort :2001 LocPort :2000 DONE :V6000.0 BUSY :V6000.1 ERROR :V6000.2 STATUS :VB6002 。
图1. 指令位置及调用连接指令
2.调用TCP_SEND 和 TCP_RCV 指令,如图2 所示。
CALL TCP_SEND EN :SM0.5 :SM0.5 :1 //调用TCP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 Req ConnID DataLen DataPtr Done :10 :&VB0 :V6000.6 :V6000.7 :V6001.0 :VB6004 Busy // 当连接操作正在进行时,指令置位 Busy 输出。 Error // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) Status 精选资料,欢迎下载
。
CALL TCP_RECV EN ConnID MaxLen DataPtr Done :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 :10 :&VB2000 :V6001.1 :V6001.2 :V6001.3 :VB6005 :VW6006 Busy Error Status Length // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 图2. 调用发送和接收指令 3.分配库存储区,如图3 所示。
精选资料,欢迎下载
。
图3. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
S7-1200 侧硬件组态和编程 ( 服务器侧组态编程 )
1. 使用 TIA V13 SP1 Upd 9 软件 Portal 视图中,创建新项目 2. 添加硬件并命名PLC
进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-1200 CPU 添加到机架上,命名为 PLC_1 如图4 所示
图4. 添加新设备
3. 启用时钟位
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:
在 “项目树” > “PLC_1” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “系统和时钟存储器” 下,将时钟位定义在 MB0,如图5所示。
时钟位我们使用 M0.5 ,它是频率为 1 Hz 的脉冲,可以使用它去自动激活发送任务。
精选资料,欢迎下载
。
图5.启用时钟位
4. 为 PROFINET 通信口分配以太网地址
在 “设备视图”中点击 CPU 上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 S7-1200 CPU 的 IP 地址为 192.168.0.100 ,子网掩码为255.255.255.0,如图6 所示
精选资料,欢迎下载
。
图6. 分配 IP 地址
5.在S7-1200 中调用建立连接指令,进入 “项目树” > “ PLC_1” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令”> “通信”>“开放式用户通信”下调用 “TCON” 指令,配置连接参数,如图7所示。
图7. 调用TCON指令并配置连接参数
精选资料,欢迎下载
。
6.创建用于交换数据的全局DB块及定义变量
通过“项目树”>“PLC_1”>“程序块”>“添加新块”,选择“数据块” 创建全局 DB 块,点击“确定” 生成数据块。如图8所示。
图8.添加新块
通过“项目树”>“PLC_1”>“程序块”>点击生成的 “数据块_1” ( DB4 ) ,右键属性,取消勾选“优化的块访问”。如图9所示。
图9.取消勾选优化的块访问
精选资料,欢迎下载
。
双击生成的 “数据块_1” ( DB4 ) ,定义数组,10 个字节用于发送,10个字节用于接收,然后编译数据块。结果如图10所示。
图10. 定义交换数据区
7.在OB1中调用 TSEND 和 TRCV
指令块位置及调用方法参考 TCON 指令的调用,调用结果如图11所示。
CALL TSEND REQ ID DATA DONE BUSY , DB3 :M0.5 :1 :P#DB4.DBX0.0 BYTE 10 :M20.0 //调用TSEND,使用背景DB块:DB3 //使用1Hz的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致 // 发送数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 :M20.1 精选资料,欢迎下载
。
ERROR STATUS :M20.2 // 通信过程中有错误发生,该位置1 :MW22 // 有错误发生时,会显示错误信息号
CALL TRCV EN_R ID DATA DONE BUSY ERROR STATUS RCVD_LEN , DB5 :M1.2 :1 :P#DB4.DBX10.0 BYTE 10 :M30.0 :M30.1 :M30.2 :MW32 //调用TRCV,使用背景DB块:DB5 //准备好接受数据 ,常1接收 //连接号,要与连接配置中一致 // 接受数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 :MW34 // 实际接受数据的字节数 图11. 调用发送和接收指令
精选资料,欢迎下载
。
接收和发送指令调用需要注意:
程序块的 ID 要与指令 TCON 中的 ID 保持一致 DATA 参数的填写方法 ( 以 TRCV 程序块为例 ): 1、直接输入 : P#DB4.DBX10.0 BYTE 10
2、打开数据块,点击数据块右上角浮动按钮,移动数据块与OB1并排
显示,选中数据块变量名称 “ TCP_RCV ” 拖拽到 TRCV 指令 DATA 参数处,该区域显示为绿色,释放鼠标即可。
通信结果
将 S7-1200 和 S7-200 SMART 项目编译,下载 ;
S7-1200 侧触发 TCON 指令的REQ (M10.0 置位为1) ,S7-200 SMART 侧触发 TCP_CONNECT 指令的Req (V6010.0 置位为1 )以建立连接;
通信结果如下:
精选资料,欢迎下载
。
(五)S7-200 SMART 与 S7-300 集成 PN 口之间 TCP 通信— S7-200 SMART 作为服务器
TCP 协议通信
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-300 通过 TCP 通信,在 S7-300 调用 T-block 指令 ( TCON, TDISCON, TSEND, TRCV ) ,在 S7-200 SMART 调用 Open User Communication 库指令
( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。双方的发送和接收指令必须成对出现。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源 S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件:
① S7-300 CPU (IP 地址 192.168.0.101 ;子网掩码 255.255.255.0) ② S7-200 SMART CPU (固件版本V2.2) ( IP 地址 192.168.0.20 ;子网掩码 255.255.255.0) ③ PC (带以太网卡) ④ TP 以太网电缆 软件:
① STEP7 V13 SP1 Upd 9
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① S7-300 发送 10 个字节数据:( S7-300 侧 ) DB5.DBB0~DB5.DBB9 --> ( S7- 200 SMART 侧 ) VB2000~VB2009
② S7-300 接收 10 个字节数据: ( S7-300 侧 ) DB5.DBB10~DB5.DBB19 <-- ( S7-200 SMART 侧 ) VB0~VB9
S7-300 侧硬件组态和编程 ( 客户机侧组态编程 )
1. 使用 TIA V13 SP1 Upd 9 软件 Portal 视图中,创建新项目
精选资料,欢迎下载
。
2. 添加硬件并命名PLC
进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-300 CPU 添加到机架上,命名为 PLC_2 如图1 所示。
图1. 添加新设备
3. 启用时钟位
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:
在 “项目树” > “PLC_2” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “时钟存储器” 下,将时钟位定义在 MB0,如图2所示。
时钟位我们使用 M0.7 ,它是频率为 0.5 Hz 的脉冲,可以使用它去自动激活发送任务。
精选资料,欢迎下载
。
图2.启用时钟位
4. 为 PROFINET 通信口分配以太网地址
在 “设备视图”中点击 CPU 上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 S7-300 CPU 的 IP 地址为 192.168.0.101 ,子网掩码为255.255.255.0,如图3 所示。
图3. 分配 IP 地址
5.在S7-300 中调用建立连接指令,进入 “项目树” > “ PLC_2” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令”> “通信”>“开放式用户通信”下调用 “TCON” 指令,配置连接参数,如图4 所示。
精选资料,欢迎下载
。
图4. 调用TCON指令并配置连接参数
6.创建用于交换数据的全局DB块及定义变量
通过“项目树”>“PLC_2”>“程序块”>“添加新块”,选择“数据块” 创建全局 DB 块,点击“确定” 生成数据块。如图5所示。S7-300 生成的数据块都是非优化的数据块,不用单独设置。
精选资料,欢迎下载
。
图5.添加新块
双击生成的 “数据块_1” ( DB5 ) ,定义数组,10 个字节用于发送,10个字节用于接收,然后编译数据块。结果如图6.所示。
图6. 定义交换数据区
7.在OB1中调用 TSEND 和 TRCV
指令块位置及调用方法参考 TCON 指令的调用,调用结果如图7所示。
精选资料,欢迎下载
。
CALL TSEND REQ ID DATA DONE BUSY ERROR STATUS , DB3 //调用TSEND,使用背景DB块:DB3 //使用0.5Hz的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致 // 发送数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息 :M0.7 :1 :P#DB5.DBX0.0 BYTE 10 :M20.0 :M20.1 :M20.2 :MW22
精选资料,欢迎下载
。
CALL TRCV EN_R ID DATA , DB4 :M10.0 :1 :P#DB5.DBX10.0 BYTE 10 :M30.0 //调用TRCV,使用背景DB块:DB4 //准备好接受数据 //连接号,要与连接配置中一致 // 接受数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 // 实际接受数据的字节数 DONE BUSY :M30.1 ERROR :M30.2 STATUS RCVD_LEN :MW32 :MW34 图7. 调用发送和接收指令 接收和发送指令调用需要注意:
程序块的 ID 要与指令 TCON 中的 ID 保持一致 DATA 参数的填写方法 ( 以 TRCV 程序块为例 ): 1、直接输入 : P#DB5.DBX10.0 BYTE 10
2、打开数据块,点击数据块右上角浮动按钮,移动数据块与OB1并排
显示,选中数据块变量名称 “ TCP_RCV ” 拖拽到 TRCV 指令 DATA 参数处,该区域显示为绿色,释放鼠标即可。
S7-200 SMART侧编程 ( 服务器侧组态编程 )
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT ,如图8所示。
精选资料,欢迎下载
。
TCP_CONNECT EN Req :SM0.0 :V6010.0 :SM0.0闭点 :1 //调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。服务器侧IP地址写0,表示接收所有请求 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。对于被动连接,使用零。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输精选资料,欢迎下载
Active ConnID IPaddr1~4 :0~0 RemPort :0 LocPort DONE :2000 :V6000.0 。
出。 BUSY ERROR :V6000.1 :V6000.2 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) 图8. 指令位置及调用连接指令
2.调用TCP_SEND 和 TCP_RCV 指令,如图9 所示。
STATUS :VB6002
CALL TCP_SEND EN Req :SM0.5 :SM0.5 //调用TCP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为ConnID DataLen DataPtr :1 :10 :&VB0 Done Busy Error :V6000.6 :V6000.7 :V6001.0 Status :VB6004 精选资料,欢迎下载
。
零(无错误)
CALL TCP_RECV EN ConnID MaxLen DataPtr Done :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 :10 :&VB2000 :V6001.1 :V6001.2 :V6001.3 :VB6005 :VW6006 Busy Error Status Length // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 图9. 调用发送和接收指令
3.分配库存储区,如图10 所示。
精选资料,欢迎下载
。
图10. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
通信结果
将 S7-300 和 S7-200 SMART程序编译,下载 ;
S7-300 侧触发 TCON 指令的REQ (M10.0 置位为1),S7-200 SMART 侧触发 TCP_CONNECT 指令的Req (V6010.0 置位为1 )以建立连接 ;
通信结果如下:
(六)S7-200 SMART 与 S7-300 集成 PN 口之间 TCP 通信— S7-200 SMART 作为客户端
TCP 协议通信
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-300 通过 TCP 通信,在 S7-300 调用 T-block 指令 ( TCON, TDISCON, TSEND, TRCV ) ,在 S7-200 SMART 调用 Open User Communication 库指令
( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。双方的发送和接收指令必须成对出现。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
精选资料,欢迎下载
。
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源 S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件:
① S7-300 CPU (IP 地址 192.168.0.101 ;子网掩码 255.255.255.0) ② S7-200 SMART CPU (固件版本V2.2) ( IP 地址 192.168.0.55 ;子网掩码 255.255.255.0) ③ PC (带以太网卡) ④ TP 以太网电缆
软件:
① STEP7 V13 SP1 Upd 9
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① S7-200 SMART 发送 10 个字节数据: ( S7- 200 SMART 侧 ) VB0~VB9 -->( S7-300 侧 ) DB5.DBB10~DB5.DBB19 ② S7-200 SMART 接收 10 个字节数据: ( S7-200 SMART 侧 ) VB2000~VB2009<--( S7-300 侧 ) DB5.DBB0~DB5.DBB9
S7-200 SMART侧编程 ( 客户机侧组态编程 )
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT ,如图1所示。
精选资料,欢迎下载
。
TCP_CONNECT EN :SM0.0 //调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。192.168.0.101为伙伴的IP地址 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) 精选资料,欢迎下载
Req :V6010.0 Active ConnID :SM0.0 :1 IPaddr1~4 :192.168.0.101 RemPort :2000 LocPort :2000 DONE :V6000.0 BUSY :V6000.1 ERROR :V6000.2 STATUS :VB6002 。
图1. 指令位置及调用连接指令
2.调用TCP_SEND 和 TCP_RCV 指令,如图2 所示。
CALL TCP_SEND EN Req :SM0.5 :SM0.5 //调用TCP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 ConnID DataLen DataPtr :1 :10 :&VB0 :V6000.6 :V6000.7 :V6001.0 :VB6004 Done Busy // 当连接操作正在进行时,指令置位 Busy 输出。 Error // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) Status 精选资料,欢迎下载
。
CALL TCP_RECV EN ConnID MaxLen DataPtr Done Busy Error Status Length :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义) // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 :10 :&VB2000 :V6001.1 :V6001.2 :V6001.3 :VB6005 :VW6006 图2. 调用发送和接收指令
3.分配库存储区,如图3 所示。
精选资料,欢迎下载
。
图3. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
S7-300 侧硬件组态和编程 ( 服务器侧组态编程 )
1. 使用 TIA V13 SP1 Upd 9 软件 Portal 视图中,创建新项目 2. 添加硬件并命名PLC
进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-300 CPU 添加到机架上,命名为 PLC_2 如图4 所示
图4. 添加新设备
3. 启用时钟位
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:
在 “项目树” > “PLC_2” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “时钟存储器” 下,将时钟位定义在 MB0,如图5所示。
时钟位我们使用 M0.7 ,它是频率为 0.5 Hz 的脉冲,可以使用它去自动激活发送任务。
精选资料,欢迎下载
。
图5.启用时钟位
4. 为 PROFINET 通信口分配以太网地址
在 “设备视图”中点击 CPU 上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 S7-300 CPU 的 IP 地址为 192.168.0.101 ,子网掩码为255.255.255.0,如图6所示
图6. 分配 IP 地址
5.在S7-300 中调用建立连接指令,进入 “项目树” > “ PLC_2” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令”> “通信”>“开放式用户通信”下调用 “TCON” 指令,配置连接参数,如图7所示。
精选资料,欢迎下载
。
图7. 调用TCON指令并配置连接参数
6.创建用于交换数据的全局DB块及定义变量
通过“项目树”>“PLC_2”>“程序块”>“添加新块”,选择“数据块” 创建全局 DB 块,点击“确定” 生成数据块。如图8所示。S7-300 生成的数据块都是非优化的数据块,不用单独设置。
精选资料,欢迎下载
。
图8.添加新块
双击生成的 “数据块_1” ( DB5 ) ,定义数组,10 个字节用于发送,10个字节用于接收,然后编译数据块。结果如图9所示。
图9. 定义交换数据区
7.在OB1中调用 TSEND 和 TRCV
指令块位置及调用方法参考 TCON 指令的调用,调用结果如图10所示。
精选资料,欢迎下载
。
CALL TSEND REQ ID DATA DONE BUSY ERROR STATUS , DB3 //调用TSEND,使用背景DB块:DB3 //使用0.5Hz的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致 // 发送数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 :M0.7 :1 :P#DB5.DBX0.0 BYTE 10 :M20.0 :M20.1 :M20.2 :MW22 // 有错误发生时,会显示错误信息号 精选资料,欢迎下载
。
CALL TRCV EN_R ID DATA DONE BUSY ERROR STATUS RCVD_LEN , DB4 :M10.0 :1 :P#DB5.DBX10.0 BYTE 10 :M30.0 :M30.1 :M30.2 :MW32 //调用TRCV,使用背景DB块:DB4 //准备好接受数据 //连接号,要与连接配置中一致 // 接受数据区的数据,需要注意DB块要选用绝对寻址 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 :MW34 // 实际接受数据的字节数 图10. 调用发送和接收指令 接收和发送指令调用需要注意:
程序块的 ID 要与指令 TCON 中的 ID 保持一致 DATA 参数的填写方法 ( 以 TRCV 程序块为例 ): 1、直接输入 : P#DB5.DBX10.0 BYTE 10
精选资料,欢迎下载
。
2、打开数据块,点击数据块右上角浮动按钮,移动数据块与OB1并排
显示,选中数据块变量名称 “ TCP_RCV ” 拖拽到 TRCV 指令 DATA 参数处,该区域显示为绿色,释放鼠标即可。
通信结果
将 S7-300 和 S7-200 SMART程序编译,下载 ;
S7-300 侧触发 TCON 指令的REQ (M10.0 置位为1),S7-200 SMART 侧触发 TCP_CONNECT 指令的Req (V6010.0 置位为1 )以建立连接 ;
通信结果如下:
(七)S7-200 SMART 与 S7-300 CP 卡之间 TCP 通信— S7-200 SMART 作为服务器
TCP 协议通信
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-300 CP 卡通过 TCP 通信,CP343-1 侧在网络视图中组态 TCP 连接,调用 AG_SEND 和 AG_RECV 指令 ,在 S7-200 SMART 调用 Open User Communication 库指令( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。双方的发送和接收指令必须成对出现。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
精选资料,欢迎下载
。
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源 S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件: ① S7-300 CPU
② CP343-1 ( IP 地址 192.168.0.102 ;子网掩码 255.255.255.0) ③S7-200 SMART CPU (固件版本V2.2) ( IP 地址 192.168.0.20 ;子网掩码 255.255.255.0) ④ PC (带以太网卡) ⑤ TP 以太网电缆 软件:
① STEP7 V13 SP1 Upd 9
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① S7-300 CP卡发送 10 个字节数据:( S7-300 侧 ) DB5.DBB0~DB5.DBB9 --> ( S7-200 SMART 侧 ) VB2000~VB2009
② S7-300 CP卡接收 10 个字节数据: ( S7-300 侧 ) DB5.DBB10~DB5.DBB19 <-- ( S7- 200 SMART 侧 ) VB0~VB9
S7-300 侧硬件组态和编程 ( 客户机侧组态编程 )
1. 使用 TIA V13 SP1 Upd 9 软件 Portal 视图中,创建新项目 2. 添加硬件并命名PLC
进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-300 CPU 添加到机架上,命名为 PLC_2 如图1 所示
精选资料,欢迎下载
。
图1. 添加新设备
3. 启用时钟位
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:
在 “项目树” > “PLC_2” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “时钟存储器” 下,将时钟位定义在 MB0,如图2所示。
时钟位我们使用 M0.7 ,它是频率为 0.5 Hz 的脉冲,可以使用它去自动激活发送任务。
图2.启用时钟位
4. 组态 CP 343-1 并为通信口分配以太网地址
精选资料,欢迎下载
。
在“项目树” > “ PLC_2” >设备视图>硬件目录>通信模块>PROFINET/以太网>CP 343-1,选中并拖拽 6GK7 343-1EX30-0XE0 到相应插槽,点击 CP 343-1上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 CP 343-1 的 IP 地址为 192.168.0.102 ,子网掩码为255.255.255.0,如图3 所示
图3.为 CP 343-1 分配 IP 地址
5.网络组态TCP连接及配置通信参数
打开网络视图,检查连接类型为 TCP 连接,鼠标点中 PLC_2 上 CP343-1的 PROFINET 通信口的绿色小方框,拖拽出一条浅绿色的虚线通信口上出现可建立连接图标图4所示
,松开鼠标;再次回到 CP343-1 的
,双击通信口,连接已创建,高亮显示连接图标 ,如
精选资料,欢迎下载
。
精选资料,欢迎下载
。
图4. 配置TCP连接及参数填写
6.创建用于交换数据的全局DB块及定义变量
通过“项目树”>“PLC_2”>“程序块”>“添加新块”,选择“数据块” 创建全局 DB 块,点击“确定” 生成数据块。如图5所示。S7-300 生成的数据块都是非优化的数据块,不用单独设置。
图5.添加新块
双击生成的 “数据块_1” ( DB5 ) ,定义数组,10 个字节用于发送,10个字节用于接收,然后编译数据块。结果如图6所示。
精选资料,欢迎下载
。
图6. 定义交换数据区
7.在OB1中调用 AG_SEND 和AG_RECV
进入 “项目树” > “ PLC_2” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令”> “通信”> “通信处理器”> “Simatic NET CP”下调用 AG_SEND 和 AG_RECV 指令,调用结果如图7所示。
图7. 调用发送和接收指令
接收和发送指令调用需要注意:
程序块的 ID 要与网络视图建立TCP连接中设置的 ID 保持一致
SEND 和 RECV 为交换数据缓冲区 参数的填写方法 ( 以 AG_RECV 程序块为例 ): 1、直接输入 : P#DB5.DBX10.0 BYTE 10
精选资料,欢迎下载
。
2、打开数据块,点击数据块右上角浮动按钮,移动数据块与OB1并排
显示,选中数据块变量名称 “ TCP_RCV ” 拖拽到 AG_RECV 指令 RECV 参数处,该区域显示为绿色,释放鼠标即可。
S7-200 SMART侧编程 ( 服务器侧组态编程 )
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT ,如图8所示。
TCP_CONNECT EN :SM0.0 :V6010.0 ://调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 精选资料,欢迎下载
Req Active 。
SM0.0闭点 ConnID :1 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。服务器侧IP地址写0,表示接收所有请求 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。对于被动连接,使用零。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) IPaddr1~4 :0~0 RemPort :0 :2000 :V6000.0 :V6000.1 :V6000.2 :VB6002 LocPort DONE BUSY ERROR STATUS 图8. 指令位置及调用连接指令
2.调用TCP_SEND 和 TCP_RCV 指令,如图9 所示。
CALL TCP_SEND EN :SM0.5 //调用TCP_SEND //使能输入 精选资料,欢迎下载
。
Req ConnID DataLen DataPtr Done :SM0.5 :1 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 :10 :&VB0 :V6000.6 :V6000.7 :V6001.0 :VB6004 Busy Error Status // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)
CALL TCP_RECV EN ConnID MaxLen DataPtr Done :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 精选资料,欢迎下载
:10 :&VB2000 :V6001.1 。
Busy Error Status Length :V6001.2 :V6001.3 :VB6005 :VW6006 // 当接收操作正在进行时,指令置位 Busy 输出。 // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 图9. 调用发送和接收指令 3.分配库存储区,如图10 所示。
精选资料,欢迎下载
。
图10. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
通信结果
将 S7-300 和 S7-200 SMART程序编译,下载 ;
S7-200 SMART 侧触发 TCP_CONNECT 指令的Req (V6010.0 置位为1 )以建立连接 ; 通信结果如下:
(八)S7-200 SMART 与 S7-300 CP 卡之间 TCP 通信— S7-200 SMART 作为客户端
TCP 协议通信
TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-300 CP 卡通过 TCP 通信,CP343-1 侧在网络视图中组态 TCP 连接,调用 AG_SEND 和 AG_RECV 指令 ,在 S7-200 SMART 调用 Open User Communication 库指令( TCP_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV) 。双方的发送和接收指令必须成对出现。
客户端:主动建立连接,可以理解为主站 ; 服务器:被动建立连接,可以理解为从站。 注意:
S7-200 SMART 在 CPU 硬件固件及编程软件版本均升级到 V2.2 之后才开始支持开放式通信。编程软件版本低于V2.2,无 Open User Communication 库指令;硬件固件低于 V2.2,硬件不支持开放式通信协议。
S7-200 SMART TCP 连接资源:8个主动连接资源,8个被动连接资源
精选资料,欢迎下载
。
S7-200 SMART TCP 通信数据量:1024 字节 硬件和软件需求及所完成的通信任务
硬件: ① S7-300 CPU
② CP343-1 ( IP 地址 192.168.0.102 ;子网掩码 255.255.255.0) ③S7-200 SMART CPU (固件版本V2.2) ( IP 地址 192.168.0.20 ;子网掩码 255.255.255.0) ④ PC (带以太网卡) ⑤ TP 以太网电缆 软件:
① STEP7 V13 SP1 Upd 9
② STEP 7 Micro/WIN SMART ( 软件版本 V2.2 ) 所完成的通信任务:
① S7-200 SMART 发送 10 个字节数据:( S7- 200 SMART 侧 ) VB0~VB9 --> ( S7-300 侧 ) DB5.DBB10~DB5.DBB19 ② S7-200 SMART 接收 10 个字节数据: ( S7-200 SMART 侧 ) VB2000~VB2009 <--( S7-300 侧 ) DB5.DBB0~DB5.DBB9
S7-200 SMART侧编程 ( 客户机侧组态编程 )
1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Open User Communication ,调用TCP_CONNECT,如图1所示。
精选资料,欢迎下载
。
TCP_CONNECT EN :SM0.0 //调用TCP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。使用上升沿触发 //TRUE = 主动连接 ;FALSE = 被动连接 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 //IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。192.168.0.102为伙伴的IP地址 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151,但存在一些限制。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) Req :V6010.0 Active ConnID :SM0.0 :1 IPaddr1~4 :192.168.0.102 RemPort :2000 LocPort :2000 DONE :V6000.0 BUSY :V6000.1 ERROR :V6000.2 STATUS :VB6002 精选资料,欢迎下载
。
图1. 指令位置及调用连接指令
2.调用TCP_SEND 和 TCP_RCV 指令,如图2 所示。
CALL TCP_SEND EN :SM0.5 :SM0.5 :1 //调用TCP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号。使用您为 TCP_CONNECT 操作选择的 ConnID。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 Req ConnID DataLen DataPtr Done :10 :&VB0 :V6000.6 :V6000.7 :V6001.0 :VB6004 Busy Error Status // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误) 精选资料,欢迎下载
。
CALL TCP_RECV EN ConnID MaxLen DataPtr Done :SM0.0 :1 //调用TCP_RECV //使能输入,常1接收 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义) // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100) //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 :10 :&VB2000 :V6001.1 :V6001.2 :V6001.3 :VB6005 :VW6006 Busy Error Status Length // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 图2. 调用发送和接收指令
3.分配库存储区,如图3 所示。
精选资料,欢迎下载
。
图3. 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
S7-300 侧硬件组态和编程 ( 服务器侧组态编程 )
1. 使用 TIA V13 SP1 Upd 9 软件 Portal 视图中,创建新项目 2. 添加硬件并命名PLC
进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-300 CPU 添加到机架上,命名为 PLC_2 如图4 所示
图4. 添加新设备
3. 启用时钟位
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:
在 “项目树” > “PLC_2” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “时钟存储器” 下,将时钟位定义在 MB0,如图5所示。
时钟位我们使用 M0.7 ,它是频率为 0.5 Hz 的脉冲,可以使用它去自动激活发送任务。
精选资料,欢迎下载
。
图5.启用时钟位
4. 组态 CP 343-1 并为通信口分配以太网地址
在“项目树” > “ PLC_2” >设备视图>硬件目录>通信模块>PROFINET/以太网>CP 343-1,选中并拖拽 6GK7 343-1EX30-0XE0 到相应插槽,点击 CP 343-1上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 CP 343-1 的 IP 地址为 192.168.0.102 ,子网掩码为255.255.255.0,如图6 所示
精选资料,欢迎下载
。
图6.为 CP 343-1 分配 IP 地址
5.网络组态TCP连接及配置通信参数
打开网络视图,检查连接类型为 TCP 连接,鼠标点中 PLC_2 上 CP343-1的 PROFINET 通信口的绿色小方框,拖拽出一条浅绿色的虚线通信口上出现可建立连接图标图7所示
,松开鼠标;再次回到 CP343-1 的
,双击通信口,连接已创建,高亮显示连接图标 ,如
精选资料,欢迎下载
。
精选资料,欢迎下载
。
图7. 配置TCP连接及参数填写
6.创建用于交换数据的全局DB块及定义变量
通过“项目树”>“PLC_2”>“程序块”>“添加新块”,选择“数据块” 创建全局 DB 块,点击“确定” 生成数据块。如图8所示。S7-300 生成的数据块都是非优化的数据块,不用单独设置。
图8.添加新块
双击生成的 “数据块_1” ( DB5 ) ,定义数组,10 个字节用于发送,10个字节用于接收,然后编译数据块。结果如图9所示。
精选资料,欢迎下载
。
图9. 定义交换数据区
7.在OB1中调用 AG_SEND 和AG_RECV
进入 “项目树” > “ PLC_2” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令”> “通信”> “通信处理器”> “Simatic NET CP”下调用 AG_SEND 和 AG_RECV 指令,调用结果如图10所示。
图10. 调用发送和接收指令
精选资料,欢迎下载
。
接收和发送指令调用需要注意:
程序块的 ID 要与网络视图建立TCP连接中设置的 ID 保持一致。
SEND 和 RECV 为交换数据缓冲区 参数的填写方法 ( 以 AG_RECV 程序块为例 ): 1、直接输入 : P#DB5.DBX10.0 BYTE 10
2、打开数据块,点击数据块右上角浮动按钮,移动数据块与OB1并排
显示,选中数据块变量名称 “ TCP_RCV ” 拖拽到 AG_RECV 指令 RECV 参数处,该区域显示为绿色,释放鼠标即可。
通信结果
将 S7-300 和 S7-200 SMART程序编译,下载 ;
S7-200 SMART 侧触发 TCP_CONNECT 指令的Req (V6010.0 置位为1 )以建立连接 ; 通信结果如下:
精选资料,欢迎下载
。
(九)开放式以太网常见问题
常见问题
1、IP地址是否可以设置为0.0.0.0?
答:只可在服务器端将IP地址设置为0.0.0.0,此时S7-200 SMART CPU 接受来自任何远程 IP 地址的连接。
如果设置为非零地址,则CPU只接受指定IP地址的连接。客户端不可设置为0.0.0.0。 另,IP地址不能设置为:
(1)任何广播 IP 地址(例如,255.255.255.255) (2)任何多播地址
(3)本地 CPU 的 IP 地址
2、客户端建立连接需要多长时间?
答:最多30s,客户端可能最多需要 30 秒的时间来确定远程设备是否允许连接。 此时服务器端显示 Busy 置位,直到连接建立。 3、连接断开之后会自动恢复连接么?
答:连接关闭后,S7-200 SMART 不会自动尝试重新连接到设备。如果远程设备断开设备连接,您的程序必须执行另一个 TCP_CONNECT 指令以重新连接设备。主动连接和被动连接皆如此。
4、为什么ERROR显示24号错误?
答:24号表示目前没有操作正在进行。表示空闲状态。
精选资料,欢迎下载
。
二:ISO on TCP通讯
(一) S7-200 SMART与之间的ISO-on-TCP通讯
ISO-on-TCP 是一种使用 RFC 1006 的协议扩展。ISO-on-TCP 的主要优点是数据有一个明确的结束标志,可以知道何时接收到了整条消息。S7 协议 (Put/Get) 使用了ISO-on-TCP 协议。ISO-on-TCP 仅使用 102 端口,并利用 TSAP(传输服务访问点)将消息路由至适当接收方(而非 TCP 中的某个端口)。
S7-200 SMART与之间的ISO-on-TCP通讯可以通过两边调用OUC(开放式用户通讯)指令库中的ISO_CONNECT、TCP_SEND、TCP_RECV、DISCONNECT指令来实现。
图1.开放式用户通讯库
开放式用户通信库需要使用 50 个字节的 V 存储器。
开放式的用户通讯连接资源包括8个主动连接和8个被动连接。
只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。 所需条件:
1、软件版本:STEP 7-Micro/WIN SMART V2.2 2、SMART CPU 固件版本:V2.2 3、通讯硬件:TP电缆(以太网电缆) 4、PC(带以太网卡) 所完成的通讯任务:
将作为服务器端(192.168.0.102)的V3000-VB3003的数据传送到客户端(192.168.0.101)的VB3000-VB3003内。
精选资料,欢迎下载
。
S7-200 SMART 客户端编程 1、设置客户端的IP地址 设置IP地址为192.168.0.101
图2.设置IP地址
2、建立ISO-on-TCP 连接
调用ISO_CONNECT指令建立ISO连接。设置连接伙伴地址为192.168.0.102,连接标识ID为1,本地和远端的TSAP要交叉对应。TSAP不能少于三个字符。
利用SM0.0使能Active,设置为主动连接。
图3.建立ISO-on-TCP 连接
指令的参数 输入参数:
精选资料,欢迎下载
。
EN :使能输入 Req:沿触发
Active :TURE=主动连接(客户端) FALSE=被动连接(服务器) ConnID:连接ID为连接标识符,可能范围为0-65534
IPaddr1 ... IPaddr4 :IP 地址的四个八位字节。IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。
RemTsap:RemPort 是远程 TSAP 字符串。 LocTsap :LocPort 是本地 TSAP 字符串。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册 。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
3、接收数据
将数据接收缓冲区设为4个字节,接收数据缓冲区以VB3000起始。
图4.调用TCP_RECV指令
精选资料,欢迎下载
。
指令的参数 输入参数: EN :使能输入
ConnID:连接 ID (ConnID) 是此发送操作的连接ID号。 MaxLen :接收的最大字节数(1 到 1024)。 DataPtr :指向接收数据存储位置的指针。 输出参数:
Length :实际接收的字节数。仅当指令置位 Done 或 Error 输出时,Length 才有效。如果指令置位 Done 输出,则指令接收整条消息。如果指令置位 Error 输出,则消息超出缓冲区大小 (MaxLen) 并被截短。
4、终止通讯连接
用户可通过DISCONNECT指令终止指定ID的连接。
图5.调用DISCONNECT指令
参数说明: 输入参数: EN :使能 Req:沿触发。 输出参数:
精选资料,欢迎下载
。
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
5、分配库存储区
开放式用户通信库需要使用 50 个字节的 V 存储器,用户需手动分配 。在指令树的程序中,以鼠标右键单击程序块,在弹出的快捷菜单中选择库存储器。如图所示:
图6.库存储器
在弹出的选项卡中设置库指令数据区:
图7.分配地址
精选资料,欢迎下载
。
S7-200 SMART 服务器端编程 1、设置服务器的IP地址 设置IP地址为192.168.0.102
图8.设置IP地址
2、建立ISO-on-TCP 连接
调用ISO_CONNECT指令建立ISO连接。设置连接伙伴地址为192.168.0.101,连接标识ID为1,本地和远端的TSAP要交叉对应。TSAP不能少于三个字符。
利用SM0.0常闭点使能Active,设置为被动连接。
图9.建立连接
精选资料,欢迎下载
。
3、发送数据
调用TCP_SEND指令将以VB3000为起始,数据长度为4字节的数据发送到连接ID为1指定的远程设备。
利用1HZ的时钟上升沿触发发送请求。
图10.调用TCP_SEND指令
指令的参数 输入参数: EN :使能输入 Req:沿触发
ConnID:连接 ID (ConnID) 是此发送操作的连接ID号。 DataLen :DataLen 是要发送的字节数(1 到 1024)。 DataPtr:DataPtr 是指向待发送数据的指针。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
精选资料,欢迎下载
。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体的错误代码详见手册 。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
监控结果
图11.监控结果
例程
为了更好地理解 ISO-on-TCP的编程,可参考下面的例程。 注意:
1. 该例程使用 STEP 7-Micro/WIN SMART 编写。
2.在建立连接时需先触发服务器端的建立连接指令,再触发客户端。 ISO-on-TCP 客户端程序 ISO-on-TCP 服务器端程序 注意:
此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为 此联系西门子技术支持与服务部门。
精选资料,欢迎下载
。
(二)S7-200 SMART CPU与S7-1200 CPU集成PN口的ISO on TCP通信
S7-200 SMART CPU与S7-1200 CPU 通过ISO on TCP 通信,需要在双方都建立连接。在S7-1200调用 T-block 指令(TCON, TDISCON, TSEND, TRCV) 、在S7-200SMART调用Open User Communication库指令(ISO_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV)来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。 注意:
S7-200 SMARTPLC V2.2 版本才开始支持ISO on TCP通信,早期版本的CPU需要升级固件后方可支持ISO on TCP。
硬件和软件需求及所完成的通信任务
硬件:
① S7-1200 CPU (IP地址:192.168.0.3 子网掩码:255.255.255.0)
② S7-200 SMART CPU (固件V2.2)(IP地址:192.168.0.2 子网掩码:255.255.255.0) ③ PC(带以太网卡) ④ TP以太网电缆 软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2 所完成的通信任务:
① S7-1200 将通信数据区 DB11 中的200 个字节发送到 S7-200 SMART的VB 数据区。 ② S7-1200 读取 S7-200 SMART中的VB数据区存储到S7-1200 的数据区DB12
S7-1200侧硬件组态和编程
1. 使用TIA V13 软件新建一个项目,添加1个S7-1200站点并为其分配网络和IP地址 ,如图1.所示
精选资料,欢迎下载
。
图1.组态S7-1200并分配IP地址
为编程方便,使用CPU属性中定义的时钟位,在设备视图双击CPU设置\"系统和时钟存储器\",如图2所示。
精选资料,欢迎下载
。
图2. 启用时钟位
2.在S7-1200 中调用建立连接指令,进入 \"项目树\" > \" PLC_1\" > \"程序块\" > \"OB1\" 主程序中,从右侧窗口 \"指令\"> \"通信\">\"开放式用户通信\"下调用 \"TCON\" 指令,配置连接参数,如图3.所示。
精选资料,欢迎下载
。
图3.调用\"TCON\"指令并配置连接参数
表1.TCON 指令参数说明 REQ ID CONNECT DONE BUSY ERROR STATUS // 为1时,开始建立连接 // 连接号,在组态窗口配置后自动生成 // 连接数据,在组态窗口配置后自动生成 // 为1时,表示已成功建立连接 // 为1时,正在建立连接 // 为1时,有故障发生 // 状态代码 精选资料,欢迎下载
。
3.创建发送数据块DB11(接收区数据块DB12类似),数据块中定义200个字节的数组,数据块的属性中需要取消\"优化的块访问\"选项。如图4. 所示。
图4.创建发送数据块DB11
4.在OB1中调用TSEND指令来发送数据,如图5.所示
图5: 调用TEND发送指令
精选资料,欢迎下载
。
表2.TSEND 指令参数说明 REQ ID LEN DATA DONE BUSY ERROR STATUS // 在检测到上升沿时启动发送作业 // 连接号,要与TCON连接参数中的连接ID一致 // 发送的字节数 // 发送区,包含地址和长度 // 为1时,发送完成 // 为1时,发送作业仍未完成,此时无法启动新作业 // 为1时,有故障发生 // 状态代码
5.在OB1中调用TRCV指令来接收数据,如图6.所示
精选资料,欢迎下载
。
图6: 调用TRCV接收指令
表3.TRCV 指令参数说明 EN_R // 为1时,开始接收 ID // 连接号,要与TCON连接参数中的连接ID一致 LEN // 接收长度 DATA // 接收区,包含地址和长度 NDR // 为1时,接收完成 BUSY // 为1时,正在进行接收作业 ERROR // 为1时,有故障发生 STATUS // 状态代码 RCVD// 实际接收到的数据量(以字节_LEN 为单位) S7-200 SMART侧编程
1.调用ISO_CONNECT指令建立连接,伙伴TSAP(RemTsap)与本地TSAP(LocTsap)必须与S7-300中的连接配置交叉对应。如图7.所示
精选资料,欢迎下载
。
图7: 调用ISO_CONNECT建立连接指令
表4.ISO_CONNECT指令参数说明 Req Active ConnID RemTsap LocTsap DONE BUSY ERROR STATUS // 为1时,开始建立连接 // 是否主动建立连接,必须与S7-300中的连接配置相反。 // 连接ID // 伙伴TASP // 本地TSAP // 为1时,表示已成功建立连接 // 为1时,正在建立连接 // 为1时,有故障发生 // 状态代码 2.调用TCP_RECV指令接收数据。如图8.所示
图8: 调用TCP_RECV接收指令
表5. TCP_RECV 指令参数说明 ConnID MaxLen //连接号,要与ISO_CONNECT指令中填写的的连接ID一致 // 接收长度(超出此长度的消息无法接收) 精选资料,欢迎下载
。
DataPtr Done Busy Error Status Length // 接收区,包含地址和长度 // 为1时,接收完成 // 为1时,正在进行接收作业 // 为1时,有故障发生 // 状态代码 // 接收到的数据长度(字节) 3.调用TCP_SEND指令发送数据。如图9.所示
图9: 调用TCP_SEND发送指令
表6. TCP_SEND 指令参数说明 Req ConnID Datalen DataPtr Done Busy // 在检测到上升沿时启动发送作业 // 连接号,要与ISO_CONNECT指令中填写的的连接ID一致 // 作业要发送的最大字节数 // 发送区,包含地址和长度 // 为1时,接收完成 // 为1时,发送作业仍未完成,此时无法启动新作业 精选资料,欢迎下载
。
Error Status // 为1时,有故障发生 // 状态代码 4.为通信指令分配库存储器。如图10所示
精选资料,欢迎下载
。
监控通信结果
图11 监控结果
(三)S7-200 SMART CPU与S7-300 CPU集成PN口的ISO on TCP通信
S7-200 SMART CPU与S7-300 CPU 集成 PN 口通过ISO on TCP 通信,需要在双方都建立连接。在S7-300调用 T-block 指令(TCON, TDISCON, TSEND, TRCV) 、在S7-200SMART调用Open User Communication库指令(ISO_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV)来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。 注意:
S7-200 SMARTPLC V2.2 版本才开始支持ISO on TCP通信,早期版本的CPU需要升级固件后方可支持ISO on TCP。
硬件和软件需求及所完成的通信任务
本文采用1个S7-300PN CPU,1个S7-200SMART CPU为例,介绍它们之间的ISO on TCP通信。 硬件:
① S7-300PN CPU (IP地址:192.168.0.4 子网掩码:255.255.255.0)
② S7-200 SMART CPU (固件V2.2)(IP地址:192.168.0.2 子网掩码:255.255.255.0) ③ PC (带以太网卡) ④ TP以太网电缆
精选资料,欢迎下载
。
软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2 所完成的通信任务:
① S7-300 将通信数据区 DB11 中的200 个字节发送到 S7-200 SMART的VB 数据区。 ② S7-300 读取 S7-200 SMART中的VB数据区存储到S7-1200 的数据区DB12。
S7-300侧硬件组态和编程
1. 使用TIA V13 软件新建一个项目,添加1个S7-300站点并为其分配网络和IP地址 ,如图1.所示
图1.组态S7-300并分配IP地址
为编程方便,使用CPU属性中定义的时钟位,在设备视图双击CPU设置时钟存储器,如图2所示。
精选资料,欢迎下载
。
图2. 启用时钟位
2.在PLC_1的OB1中调用建立连接指令,进入 \"项目树\" > \" PLC_1\" > \"程序块\" > \"OB1\" 主程序中,从右侧窗口 \"指令\"> \"通信\">\"开放式用户通信\"下调用 \"TCON\" 指令,配置连接参
数,如图3.所示。
精选资料,欢迎下载
。
图3.调用\"TCON\"指令并配置连接参数
表1.TCON 指令参数说明 REQ ID CONNECT DONE BUSY ERROR STA// 为1时,开始建立连接 // 连接号,在组态窗口配置后自动生成 // 连接数据,在组态窗口配置后自动生成 // 为1时,表示已成功建立连接 // 为1时,正在建立连接 // 为1时,有故障发生 // 状态代码 精选资料,欢迎下载
。
TUS 3.在PLC_1中创建发送数据块DB11(接收区数据块DB12类似),数据块中定义200个字节的数组,如图4. 所示。
图4.创建发送数据块DB11
4.在PLC_1的OB1中调用\"TSEND\"指令来发送数据,如图5.所示
图5: 调用TEND发送指令
表2.TSEND 指令参数说明
精选资料,欢迎下载
。
REQ ID LEN DATA DONE BUSY ERROR STATUS // 在检测到上升沿时启动发送作业 // 连接号,要与TCON连接参数中的连接ID一致 // 发送的字节数 // 发送区,包含地址和长度 // 为1时,发送完成 // 为1时,发送作业仍未完成,此时无法启动新作业 // 为1时,有故障发生 // 状态代码 5.在PLC_1的OB1中调用TRCV指令来接收数据,如图6.所示
图6: 调用TRCV接收指令
表3.TRCV 指令参数说明 EN_R // 为1时,开始接收 精选资料,欢迎下载
。
ID LEN DATA NDR BUSY ERROR STATUS RCVD_LEN
// 连接号,要与TCON连接参数中的连接ID一致 // 接收长度 // 接收区,包含地址和长度 // 为1时,接收完成 // 为1时,正在进行接收作业 // 为1时,有故障发生 // 状态代码 // 实际接收到的数据量(以字节为单位) S7-200 SMART侧编程
1.调用ISO_CONNECT指令建立连接,伙伴TSAP(RemTsap)与本地TSAP(LocTsap)必须与S7-300中的连接配置交叉对应。如图7.所示
图7: 调用ISO_CONNECT建立连接指令
表4.ISO_CONNECT指令参数说明
精选资料,欢迎下载
。
Req Active ConnID RemTsap LocTsap DONE BUSY ERROR STATUS // 为1时,开始建立连接 // 是否主动建立连接,必须与S7-300中的连接配置相反。 // 连接ID // 伙伴TASP // 本地TSAP // 为1时,表示已成功建立连接 // 为1时,正在建立连接 // 为1时,有故障发生 // 状态代码 2.调用TCP_RECV指令接收数据。如图8.所示
图8: 调用TCP_RECV接收指令
表5. TCP_RECV 指令参数说明 ConnID MaxLen DataPtr Done //连接号,要与ISO_CONNECT指令中填写的的连接ID一致 // 接收长度(超出此长度的消息无法接收) // 接收区,包含地址和长度 // 为1时,接收完成 精选资料,欢迎下载
。
Busy Error Status Length // 为1时,正在进行接收作业 // 为1时,有故障发生 // 状态代码 // 接收到的数据长度(字节) 3.调用TCP_SEND指令发送数据。如图9.所示
图9: 调用TCP_SEND发送指令
表6. TCP_SEND 指令参数说明 Req ConnID Datalen DataPtr Done Busy Error Sta// 在检测到上升沿时启动发送作业 // 连接号,要与ISO_CONNECT指令中填写的的连接ID一致 // 作业要发送的最大字节数 // 发送区,包含地址和长度 // 为1时,接收完成 // 为1时,发送作业仍未完成,此时无法启动新作业 // 为1时,有故障发生 // 状态代码 精选资料,欢迎下载
。
tus 4.为通信指令分配库存储器。如图10所示
精选资料,欢迎下载
。
监控通信结果
图11 监控结果
(四)S7-200 SMART CPU与S7-300 CP343进行ISO on TCP通信
S7-200 SMART CPU与S7-300 CP343通过ISO on TCP 通信,需要在双方都建立连接。在S7-300通过网络组态创建连接并调用 AG_SEND和AG_RECV指令、在S7-200SMART调用Open User Communication库指令(ISO_CONNECT,DISCONNECT,TCP_SEND,TCP_RECV)来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。 注意:
S7-200 SMARTPLC V2.2 版本才开始支持ISO on TCP通信,早期版本的CPU需要升级固件后方可支持ISO on TCP。
硬件和软件需求及所完成的通信任务
硬件:
① S7-300 CPU 和 CP343(IP地址:192.168.0.5 子网掩码:255.255.255.0)
② S7-200 SMART CPU (固件V2.2)(IP地址:192.168.0.2 子网掩码:255.255.255.0) ③ PC (带以太网卡) ④ TP以太网电缆
精选资料,欢迎下载
。
软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2 所完成的通信任务:
① S7-300 将通信数据区 DB11 中的200 个字节发送到 S7-200 SMART的VB 数据区。 ② S7-300 读取 S7-200 SMART中的VB数据区存储到S7-1200 的数据区DB12。
S7-300侧硬件组态和编程
1. 使用TIA V13 软件新建一个项目,添加1个S7-300CPU以及CP343 ,并为CP343分配网络和IP地址 ,如图1.所示
图1.组态S7-300和CP343并分配IP地址
精选资料,欢迎下载
。
为编程方便,使用CPU属性中定义的时钟位,在设备视图双击CPU设置时钟存储器,如图2所示。
图2.启用时钟位
2.在S7-300中添加ISO on TCP连接,打开 \"设备组态\" > \"网络视图\" ,在窗口左上角选中\"连接\",然后右键点击CPU建立新连接,类型选择\"ISO-on-TCP\".如图3所示。
图3.在网络视图建立新连接
3.在\"常规\"和\"地址详细信息\"页面配置详细连接参数如IP地址、TSAP等,如图4. 所示。
精选资料,欢迎下载
。
图4.配置连接参数
4.创建发送数据块DB11(接收区数据块DB12类似),数据块中定义200个字节的数组,如图5.所示。
图5.创建发送数据块DB11
精选资料,欢迎下载
。
5.在OB1中,在 \"指令树\" > \"通信\" > \"通信处理器\"> \"Simatic NET CP\"下,调用AG_SEND指令发送数据,如图6.所示
图6: 调用AG_SEND发送指令
表1.AG_SEND 指令参数说明 ACT ID LADDR SEND LEN DONE ERROR 生 精选资料,欢迎下载
// 为1时,启动发送作业 // 连接号,要与图3 中的连接ID一致 // CP卡硬件地址,必须填写16进制数据 // 发送区,包含地址和长度 // 发送的字节数 // 为1时,发送完成 // 为1时,有故障发 。
STATUS // 状态代码 6.在OB1中,在 \"指令树\" > \"通信\" > \"通信处理器\"> \"Simatic NET CP\"下,调用AG_RECV指令接收数据,如图7.所示
图7: 调用AG_RECV接收指令
表2. AG_RECV 指令参数说明 ID LADDR RECV NDR ERROR STATUS LEN // 连接号,要与TCON连接参数中的连接ID一致 // CP卡硬件地址,必须填写16进制数据 // 接收区,包含地址和长度 // 为1时,接收完成 // 为1时,有故障发生 // 状态代码 // 实际接收到的数据量(以字节为单位) S7-200 SMART侧编程
1.调用ISO_CONNECT指令建立连接,伙伴TSAP(RemTsap)与本地TSAP(LocTsap)必须与S7-300中的连接配置交叉对应。如图8.所示
精选资料,欢迎下载
。
图8: 调用ISO_CONNECT建立连接指令
表3.ISO_CONNECT指令参数说明 Req Active ConnID RemTsap LocTsap DONE BUSY ERROR STATUS // 为1时,开始建立连接 // 是否主动建立连接,必须与S7-300中的连接配置匹配。 // 连接ID // 伙伴TASP // 本地TSAP // 为1时,表示已成功建立连接 // 为1时,正在建立连接 // 为1时,有故障发生 // 状态代码 2.调用TCP_RECV指令接收数据。如图9.所示
精选资料,欢迎下载
。
图9: 调用TCP_RECV接收指令
表4. TCP_RECV 指令参数说明 ConnID MaxLen DataPtr Done Busy Error Status Length //连接号,要与ISO_CONNECT指令中填写的的连接ID一致 // 接收长度(超出此长度的消息无法接收) // 接收区,包含地址和长度 // 为1时,接收完成 // 为1时,正在进行接收作业 // 为1时,有故障发生 // 状态代码 // 接收到的数据长度(字节) 3.调用TCP_SEND指令发送数据。如图10.所示
精选资料,欢迎下载
。
图10: 调用TCP_SEND发送指令
表5. TCP_SEND 指令参数说明 Req ConnID Datalen DataPtr Done Busy Error Status // 在检测到上升沿时启动发送作业 // 连接号,要与ISO_CONNECT指令中填写的的连接ID一致 // 作业要发送的最大字节数 // 发送区,包含地址和长度 // 为1时,接收完成 // 为1时,发送作业仍未完成,此时无法启动新作业 // 为1时,有故障发生 // 状态代码 4.为通信指令分配库存储器。如图11所示
精选资料,欢迎下载
。
监控通信结果
图12 监控结果
三:UDP通讯
(一)S7 200 SMART与之间的UDP通讯
UDP(用户数据报协议)
用户数据报协议 (UDP) 使用一种协议开销最小的简单无连接传输模型。UDP 协议中没有握手机制,因此协议的可靠性仅取决于底层网络。无法确保对发送、定序或重复消息提供保护。对于数据的完整性,UDP 还提供了校验和,并且通常用不同的端口号来寻址不同连接伙伴。
S7 200 SMART与之间的UDP通讯可以通过两边调用OUC(开放式用户通讯)指令库中的UDP_CONNECT、UDP_SEND、UDP_RECV、DISCONNECT指令来实现。
精选资料,欢迎下载
。
图1.开放式用户通讯库
开放式用户通信库需要使用 50 个字节的 V 存储器。
开放式的用户通讯连接资源包括8个主动连接和8个被动连接。由于UDP通讯只能
算作被动连接,所以UDP连接只有8个被动连接。
只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。 所需条件:
1、软件版本:STEP 7-Micro/WIN SMART V2.2 2、SMART CPU固件版本:V2.2 3、通讯硬件:TP电缆(以太网电缆) 4、PC(带以太网卡) 所完成的通讯任务:
将PLC_1(IP地址为192.168.0.101)中VB1000的数据传送到PLC_2(IP地址为192.168.0.102)的VB2000中
S7-200 SMART PLC 1侧编程 1、 设置本机IP地址
在系统块中设置PLC_1的IP地址为192.168.0.101
精选资料,欢迎下载
。
图2. 设置IP地址
2、调用UDP_CONNECT指令。
本地注册连接ID为15,本地端口为2000的UDP连接。
图3.调用UDP_CONNECT
参数说明: 输入参数: EN: 使能
Req :请求操作,沿触发。
ConnID: 连接ID是连接的标识符。范围为0-65534。
LocPort:本地 CPU 上的端口号,对于所有被动连接,本地端口号必须唯一。 本地端口号的规则如下:
有效端口号范围为 1 到 49151。
不能使用端口号 20、21、25、80、102、135、161、162、443以及34962至
34964。这些端口具有特定用途。
建议采用的端口号范围为 2000 到 5000。 对于被动连接,本地端口号必须唯一(不重复)。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
精选资料,欢迎下载
。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
3、调用发送数据指令UDP_SEND
UDP_SEND 指令将从VB1000开始的100个字节, 传输到通过 IP 地址192.168.0.102和端口 2001指定的远程设备。
利用1HZ的时钟上升沿触发发送请求。如果远程设备未接收到发送的信息,不会报错。
图4. 调用发送指令
参数说明: 输入参数: EN: 使能
Req :发送请求,沿触发。
ConnID: 连接ID是连接的标识符。范围为0-65534。 DataLen: 要发送的字节数(1 到 1024)。 DataPtr:指向待发送数据的指针。
IPaddr1 ... IPaddr4 :这些是 IP 地址的四个八位字节。IPaddr1 是 IP 地址的最高有效字节,IPaddr4 是 IP 地址的最低有效字节。
精选资料,欢迎下载
。
RemPort:远程设备上的端口号。远程端口号范围为 1 到 49151。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
4、终止通讯连接
用户可通过DISCONNECT指令终止指定ID的连接。
图5.调用DISCONNECT指令
参数说明: 输入参数: EN :使能
Req:沿触发指令。 输出参数:
Done:当连接操作完成且没有错误时,指令置位 Done 输出。 Busy: 当连接操作正在进行时,指令置位 Busy 输出。
Error:当连接操作完成但发生错误时,指令置位 Error 输出。
精选资料,欢迎下载
。
Status:如果指令置位 Error 输出,Status 输出会显示错误代码。具体错误代码对应详见手册。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
5、分配库存储区
开放式用户通信库需要使用 50 个字节的 V 存储器,用户需手动分配 。在指令树的程序中,以鼠标右键单击程序块,在弹出的快捷菜单中选择库存储器。如图所示:
图6.库存储器
在弹出的选项卡中设置库指令数据区:
图7.分配地址
S7-200 SMART PLC 2侧编程
1、在系统块中设置PLC_2的IP地址为192.168.0.102
精选资料,欢迎下载
。
图8. 设置IP地址
2、注册UDP连接
注册连接ID为1,本地端口号为2001的连接。
图9.调用UDP_CONNECT
3、调用接收数据指令UDP_RECV
UDP_RECV 指令通过现有连接接收数据。该指令仅用于 UDP 协议以及通过 UDP_CONNECT 创建的连接。
该指令将远程设备传送来的数据传送到VB2000中。
精选资料,欢迎下载
。
图10. 调用UDP_RECV指令
4、监控结果
图11.监控结果
例程
为了更好地理解 UDP的编程,可参考下面的例程。 注意:
该例程使用 STEP 7-Micro/WIN SMART 编写。 UDP PLC1程序 UDP PLC2程序 注意:
精选资料,欢迎下载
。
此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为 此联系西门子技术支持与服务部门。
(二)S7-200 SMART CPU与S7-1200进行UDP通信
S7-200 SMART CPU与S7-1200 CPU 通过UDP通信,需要在双方都注册服务。S7-1200侧调用 T-block 指令(TCON、TDISCON、TUSEND、TURCV),S7-200 SMART侧调用Open User Communication库指令(UDP_CONNECT、DISCONNECT、UDP_SEND、UDP_RECV)来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。
注意: S7-200 SMARTPLC V2.2 版本才开始支持UDP通信,早期版本的CPU需要升级固件到V2.2。
硬件和软件需求及所完成的通信任务
本文采用1个CPU1211C(6ES7 211-1AE40-0XB0),1个S7-200 SMART PLC为例,介绍它们之间的UDP通信。 硬件:
① S7-1200 CPU (固件V4.1)
② S7-200 SMART CPU (固件V2.2) ③ PC (带以太网卡) ④ TP以太网电缆 软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2 所完成的通信任务:
① S7-1200 将通信数据区MB100开始的10 个字节发送到 S7-200 SMART的VB数据区。 ② S7-1200 读取 S7-200 SMART中的VB数据区存储到MB200开始的10个字节 。
S7-1200侧硬件组态
1. 使用TIA V13 软件新建一个项目,添加硬件并命名为PLC_1,如图1所示。
精选资料,欢迎下载
。
图1. 添加新设备
为编程方便,使用CPU属性中定义的时钟位,在设备视图双击CPU设置系统和时钟存储器,如图2所示。
精选资料,欢迎下载
。
图2. 启用时钟位
2 为PROFINET通信口分配以太网地址,如图3所示。
图3 分配以太网地址
1200侧调用并配置\"TCON\"、“TUSEND”、“TURCV”通信指令 1 .在PLC_1的OB1中调用\"TCON\"通信指令,如图4 所示。
精选资料,欢迎下载
。
图4. 定义TCON连接参数(选择UDP连接)
2 .在PLC_1的OB1中调用\"TUSEND\"发送通信块接口参数,如图5 所示。
图5 调用TUSEND
定义UDP连接参数数据块,新建DB块,如图6所示。
精选资料,欢迎下载
。
图6 创建UDP连接参数数据块
定义PLC_1的“TUSEND”发送通信块接口参数,如图7所示。
图7 定义TUSEND接口参数
在UDP_CON DB块内设置连接设备的IP地址与端口号,如图8所示
精选资料,欢迎下载
。
图8 UDP连接详细参数
TUSEND接口参数说明如表1所示。 表1 CALL TUSEND REQ ID LEN DATA ADDR DONE BUSY ERROR STATUS , %DB3 :=%M0.3 :=1 :=10 :=P#M100.0 BYTE 10 :=%DB5 :=%M11.0 :=%M11.1 :=%M11.2 :=%MW22 //调用TUSEND,使用背景DB块:DB3 //使用2Hz的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致,见图4的连接ID // 发送数据长度 // 发送数据区的数据,M区或者DB块,需要注意DB块要选用绝对寻址 //UDP对方连接参数,包括对方IP地址及端口 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 3 在PLC_1的OB1中调用接受指令TURCV并配置基本参数,如图9所示。
精选资料,欢迎下载
。
图9 调用TURCV
定义PLC_1的“TURCV”发送通信块接口参数,如图10所示。
图10 定义TURCV接口参数
TURCV接口参数说明如表2所示。 表2 TURCV各参数意义 CALL TURCV REQ ID , %DB4 :=%14.0 :=1 //调用TURCV,使用背景DB块:DB4 //准备好接受数据 //连接号,要与连接配置中一致,见图4的连接ID 精选资料,欢迎下载
。
LEN DATA ADDR DONE BUSY ERROR STATUS RCVD_LEN :=10 :=P#M200.0 BYTE 10 :=%DB5 :=%M12.0 :=%M12.1 :=%M12.2 :=%MW24 :=%MW26 // 接受数据长度 // 接受数据区的数据,M区或者DB块,需要注意DB块要选用绝对寻址 //UDP对方连接参数,包括对方IP地址及端口 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 // 实际接受数据的字节数 S7-200 SMART编程 1 打开库如图11所示。
图11 开放式库指令
2 调用UDP_CONNECT如图12所示,各参数意义如图表3所示。
图12 定义UDP_CONNECT接口参数
表3 UDP_CONNECT各参数意义
精选资料,欢迎下载
。
UDP_CONNECT EN =M6.0 =M6.1 =15 =2000 =M0.0 =M0.1 =M0.2 =MB1 出 //调用UDP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输Req ConnID LocPort DONE BUSY ERROR STATUS // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 4 分配库存储区如图13所示。
图13 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
精选资料,欢迎下载
。
3 调用UDP_SEND如图14所示,各参数的意义如表4所示。
图14 定义UDP_SEND接口参数
表4 UDP_SEND各参数意义 CALL UDP_SEND EN Req ConnID DataLen DataPtr IPaddr1 IPaddr2 IPaddr3 IPaddr4 RemPo0 192 =M6.2 =SM0.5 //调用UDP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号(连接过程中通过 UDP_CONNECT 定义)。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 //IPaddr1 是 IP 地址的最高有效字节 15 10 =&VB100168 //IPaddr2 是 IP 地址的次高有效字节 0 //IPaddr3 是 IP 地址的次低有效字节。 103 2000 //IPaddr4 是 IP 地址的最低有效字节。 //RemPort 是远程设备上的端口号。远程端口号范围精选资料,欢迎下载
。
rt Done Busy Error =M2.0 =M2.1 =M2.2 为 1 到 49151。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 Status =MB3 4 调用UDP_RCV如图15所示,各参数的意义如表5所示。
图15 定义UDP_RCV接口参数
表5 UDP_SEND各参数意义 CALL UDP_RECV EN ConnID =M6.4 =15 //调用UDP_RECV //使能输入 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 精选资料,欢迎下载
MaxLen =10 DataPtr =&VB2000 。
Done Busy Error =M10.0 =M10.1 =M10.2 //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 //IPaddr1 是 IP 地址的最高有效字节 //IPaddr2是 IP 地址的次高有效字节 //IPaddr3是 IP 地址的次低有效字节。 //IPaddr4 是 IP 地址的最低有效字节。 //RemPort 是发送消息的远程设备的端口号。 Status =MB11 Length IPaddr1 IPaddr2 IPaddr3 IPaddr4 RemPort =MW12 =MB14 =MB15 =MB16 =MB17 =MW18 5 调用DISCONNECT如图16所示,各参数的意义如表6所示。
图16 定义DISCONNECT接口参数
表6 DISCONNECT各参数意义 CALL DISCONNECT EN =M6.//调用DISCONNECT //使能输入 精选资料,欢迎下载
。
5 Req =M6.6 =15 =M30.0 =M30.1 =M30.2 =MB31 //如果 Req = TRUE,CPU 启动断开连接操作。 // CPU 使用连接 ID (ConnID) 标识要终止的连接(连接过程中定义)。 // 当断开连接操作完成且没有错误时,指令置位 Done 输出 // 当断开连接操作正在进行时,指令置位 Busy 输出。 // 当断开连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 ConnID Done Busy Error Status 下载程序并监控通信结果
下载两个CPU中的所有硬件组态及程序如图17所示。
图17 监控表
精选资料,欢迎下载
。
(三)S7-200 SMART CPU与S7-300进行UDP通信
S7-200 SMART CPU与S7-300 CPU 通过UDP通信,需要在双方都注册服务。S7-300侧调用 T-block 指令(TCON、TDISCON、TUSEND、TURCV),S7-200 SMART侧调用Open User Communication库指令(UDP_CONNECT、DISCONNECT、UDP_SEND、UDP_RECV)来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。
注意: S7-200 SMARTPLC V2.2 版本才开始支持UDP通信,早期版本的CPU需要升级固件到V2.2。
硬件和软件需求及所完成的通信任务
本文采用1个CPU317(6ES7 317-2EK14-0AB0),1个S7-200 SMART PLC为例,介绍它们之间的UDP通信。 硬件:
① S7-300 CPU (固件V3.1)
② S7-200 SMART CPU (固件V2.2) ③ PC (带以太网卡) ④ TP以太网电缆 软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2 所完成的通信任务:
① S7-300 将MB1000开始的10 个字节的数据发送到 S7-200 SMART的VB数据区。 ② S7-300 读取 S7-200 SMART中的VB数据区到MB2000开始的10个字节 。
300侧硬件组态
1. 使用TIA V13 SP1软件新建一个项目,添加硬件并命名为PLC_3,如图1所示。
精选资料,欢迎下载
。
图1. 添加新设备
为编程方便,使用CPU属性中定义的时钟位,在设备视图双击CPU设置系统和时钟存储器,如图2所示。
图2. 启用时钟位
精选资料,欢迎下载
。
2 为PROFINET通信口分配以太网地址,如图3所示。
图3 分配以太网地址
300侧调用并配置\"TCON\"、“TUSEND”、“TURCV”通信指令 1 .在PLC_3的OB1中调用\"TCON\"通信指令,如图4 所示。
图4. 定义TCON连接参数(选择UDP连接)
精选资料,欢迎下载
。
2 .在PLC_3的OB1中调用\"TUSEND\"发送通信块接口参数,如图5 所示。
图5 调用TUSEND
定义UDP连接参数数据块,新建DB块,创建DB5,命名为UDP_CON,如图6所示。
精选资料,欢迎下载
。
图6 创建UDP连接参数数据块
定义PLC_3的“TUSEND”发送通信块接口参数,如图7所示。
图7 定义TUSEND接口参数
在UDP_CON DB块内设置连接设备的IP地址与端口号,如图8所示
图8 UDP连接详细参数
TUSEND接口参数说明如表1所示。 表1 CALL TUSEND REQ ID LEN , %DB3 :=%M0.3 :=1 :=10 //调用TUSEND,使用背景DB块:DB3 //使用2Hz的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致,见图4的连接ID // 发送数据长度 精选资料,欢迎下载
。
DATA ADDR DONE BUSY ERROR STATUS :=P#M1000.0 BYTE 10 :=%DB5 :=%M113.0 :=%M113.1 :=%M113.2 :=%MW222 // 发送数据区的数据,M区或者DB块,需要注意DB块要选用绝对寻址 //UDP对方连接参数,包括对方IP地址及端口 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 3 在PLC_3的OB1中调用接受指令TURCV并配置基本参数,如图9所示。
图9 调用TURCV
定义PLC_3的“TURCV”发送通信块接口参数,如图10所示。
精选资料,欢迎下载
。
图10 定义TURCV接口参数
TURCV接口参数说明如表2所示。 表2 TURCV各参数意义 CALL TURCV REQ ID LEN DATA , %DB4 :=%114.0 :=1 :=10 :=P#M2000.0 BYTE 10 :=%DB5 :=%M112.0 :=%M112.1 :=%M112.2 :=%MW226 :=%MW228 //调用TURCV,使用背景DB块:DB4 //准备好接受数据 //连接号,要与连接配置中一致,见图4的连接ID // 接受数据长度 // 接受数据区的数据,M区或者DB块,需要注意DB块要选用绝对寻址 //UDP对方连接参数,包括对方IP地址及端口 // 任务执行完成并且没有错误,该位置1 // 该位为1,代表任务未完成,不能激活新任务 // 通信过程中有错误发生,该位置1 // 有错误发生时,会显示错误信息号 // 实际接受数据的字节数 ADDR DONE BUSY ERROR STATUS RCVD_LEN S7-200 SMART编程 1 打开库如图11所示。
精选资料,欢迎下载
。
图11 开放式库指令
2 调用UDP_CONNECT如图12所示,各参数意义如图表3所示。
图12 定义UDP_CONNECT接口参数
表3 UDP_CONNECT各参数意义 UDP_CONNECT EN :=M6.0 :=M6.1 :=15 :=2000 :=M0.0 ://调用UDP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 Req ConnID LocPort DONE BUSY 精选资料,欢迎下载
。
=M0.1 ERROR :=M0.2 :=MB1 // 当连接操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 STATUS 4 分配库存储区如图13所示。
图13 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
3 调用UDP_SEND如图14所示,各参数的意义如表4所示。
图14 定义UDP_SEND接口参数
精选资料,欢迎下载
。
表4 UDP_SEND各参数意义 CALL UDP_SEND EN Req ConnID DataLen DataPtr IPaddr1 IPaddr2 IPaddr3 IPaddr4 RemPort Done Busy Error 0 192 =M6.2 =SM0.5 //调用UDP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号(连接过程中通过 UDP_CONNECT 定义)。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 //IPaddr1 是 IP 地址的最高有效字节 15 10 =&VB100168 //IPaddr2 是 IP 地址的次高有效字节 0 //IPaddr3 是 IP 地址的次低有效字节。 103 //IPaddr4 是 IP 地址的最低有效字节。 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 2000 =M2.0 =M2.1 =M2.2 Status =MB3 4 调用UDP_RCV如图15所示,各参数的意义如表5所示。
精选资料,欢迎下载
。
图15 定义UDP_RCV接口参数
表5 UDP_SEND各参数意义 CALL UDP_RECV EN ConnID =M6.4 15 //调用UDP_RECV //使能输入 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 //IPaddr1 是 IP 地址的最高有效字节 //IPaddr2是 IP 地址的次高有效字节 //IPaddr3是 IP 地址的次低有效字节。 //IPaddr4 是 IP 地址的最低有效字节。 MaxLen 10 DataPtr =&VB2000 Done Busy Error =M10.0 =M10.1 =M10.2 Status =MB11 Length IPaddr1 IPaddr2 IPaddr3 IPaddr4 =MW12 =MB14 =MB15 =MB16 =MB17 精选资料,欢迎下载
。
RemPort =MW18 //RemPort 是发送消息的远程设备的端口号。 5 调用DISCONNECT如图16所示,各参数的意义如表6所示。
图16 定义DISCONNECT接口参数
表6 DISCONNECT各参数意义 CALL DISCONNECT EN =M6.5 =M6.6 =15 =M30.0 =M30.1 =M30.2 =MB31 //调用DISCONNECT //使能输入 Req //如果 Req = TRUE,CPU 启动断开连接操作。 // CPU 使用连接 ID (ConnID) 标识要终止的连接(连接过程中定义)。 // 当断开连接操作完成且没有错误时,指令置位 Done 输出 // 当断开连接操作正在进行时,指令置位 Busy 输出。 // 当断开连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 ConnID Done Busy Error Status 下载程序并监控通信结果
下载两个CPU中的所有硬件组态及程序如图17所示。
精选资料,欢迎下载
。
图17 监控表
(四)S7-200 SMART CPU与S7-300 CP343进行UDP通信
S7-200 SMART CPU与S7-300 CP343 通过UDP通信,需要在双方都编写通讯程序。S7-300通过网络组态创建连接并调用AG_SEND和AG_RECV指令,S7-200 SMART侧调用Open User Communication库指令(UDP_CONNECT、DISCONNECT、UDP_SEND、UDP_RECV)来实现。通信方式为双边通信,因此双方的发送和接收指令必须成对出现。
注意: S7-200 SMARTPLC V2.2 版本才开始支持UDP通信,早期版本的CPU需要升级固件到V2.2。
硬件和软件需求及所完成的通信任务
本文采用1个CPU317(6ES7 317-2EK14-0AB0)、1个CP 343-1(6GK7 343-1EX30-0XE0)、1个S7-200 SMART PLC,介绍它们之间的UDP通信。 硬件:
① S7-300 CPU(固件V3.1)和CP343(固件V2.0) ② S7-200 SMART CPU (固件V2.2) ③ PC (带以太网卡) ④ TP以太网电缆 软件:
① STEP7 V13 SP1
② STEP 7 Micro/WIN SMART V2.2 所完成的通信任务:
① S7-300 将MB1100开始的10 个字节的数据发送到 S7-200 SMART的VB数据区。 ② S7-300 读取 S7-200 SMART中的VB数据区到MB1200开始的10个字节 。
精选资料,欢迎下载
。
S7-300侧硬件及网络组态
1. 使用TIA V13 SP1软件新建一个项目,添加硬件并命名为PLC_3,并为CP343-1分配网络和IP地址,如图1所示。
图1. 添加新设备
为编程方便,使用CPU属性中定义的时钟位,在设备视图双击CPU设置系统和时钟存储器,如图2所示。
精选资料,欢迎下载
。
图2. 启用时钟位
2 在S7-300中添加UDP连接,打开 \"设备组态\" > \"网络视图\" ,在窗口左上角选中\"连接\",类型选择\"UDP\", 鼠标点中CP343-1的 PROFINET通信口的绿色小方框,拖拽出一条线,然后再回到CP343-1的 PROFINET通信口的绿色小方框,双击鼠标,连接建立并高亮显示,如图3所示。
图3 建立UDP连接
配置UDP连接,如图4所示。
精选资料,欢迎下载
。
图4 连接配置
300侧调用并配置\"TCON\"、“TUSEND”、“TURCV”通信指令
1 .在PLC_3的OB1中调用“AG_SEND”通信指令,如图5 所示,AG_SEND各参数意义如表1所示。
精选资料,欢迎下载
。
图5 调用AG_SEND
表1 AG_SEND各参数意义 CALL AG_SEND ACT ID LADDR SEND LEN DONE ERROR STATUS :=M0.3 :=1 :=W#16#100 :=P#M1100.0 BYTE 10 :=10 :=%M20.1 :=%M20.2 :=%MW22 //调用AG_SEND //使用2HZ的时钟脉冲,上升沿激活发送任务 //连接号,要与连接配置中一致,见图4的连接ID // CP卡硬件地址,必须填写16进制数据 // 发送数据区的数据,M区或者DB块,需要注意DB块要选用绝对寻址 //发送的字节数 // 任务执行完成并且没有错误,该位置1 // 该位为1,有故障发生 // 有错误发生时,会显示错误信息号 2 在PLC_3的OB1中调用接受指令AG_RECV并配置基本参数,如图6所示,AG_RECV接口参数说明如表2所示。
精选资料,欢迎下载
。
图6 调用AG_RECV
表2 AG_RCV各参数意义 CALL AG_RECV ID LADDR RECV DONE ERROR STATUS LEN :=1 :=W#16#100 :=P#M1200.0 BYTE 10 :=%M10.0 :=%M10.1 :=%MW12 :=%MW14 //调用AG_RECV //连接号,要与连接配置中一致,见图4的连接ID // CP卡硬件地址,必须填写16进制数据 // 接受数据区的数据,M区或者DB块,需要注意DB块要选用绝对寻址 //任务执行完成并且没有错误,该位置1 // 该位为1,有故障发生 // 有错误发生时,会显示错误信息号 // 接收到的实际数据长度 S7-200 SMART编程 1 打开库如图7所示。
精选资料,欢迎下载
。
图7 开放式库指令
2 调用UDP_CONNECT如图8所示,各参数意义如图表3所示。
图8 定义UDP_CONNECT接口参数
表3 UDP_CONNECT各参数意义 UDP_CONNECT EN =M6.0 =M6.1 15 =2000 =M0.0 =M0.1 =M0.2 =MB1 出 //调用UDP_CONNECT //使能输入 //如果 Req = TRUE,CPU 启动连接操作。如果 Req = FALSE,则输出显示连接的当前状态。 // CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 // LocPort 是本地设备上的端口号。本地端口号范围为 1 到 49151。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输Req ConnID LocPort DONE BUSY ERROR STATUS // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 4 分配库存储区如图9所示。
精选资料,欢迎下载
。
图9 分配库存储区
注意:为保证指令库可以正常工作,分配库存储区的时候,一定不能与程序中使用
的其他 V 区地址重叠!!
3 调用UDP_SEND如图10所示,各参数的意义如表4所示。
图10 定义UDP_SEND接口参数
表4 UDP_SEND各参数意义 CALL UDP_SEND EN Req ConnI =M6.2 =SM0.5 15 //调用UDP_SEND //使能输入 //如果 Req = TRUE,CPU 启动发送操作。如果 Req = FALSE,则输出显示发送操作的当前状态。 //连接 ID (ConnID) 是此发送操作所用连接的编号精选资料,欢迎下载
。
D DataLen DataPtr IPaddr1 IPaddr2 IPaddr3 IPaddr4 RemPort Done Busy Error 0 192 10 =&VB100(连接过程中通过 UDP_CONNECT 定义)。 //DataLen 是要发送的字节数(1 到 1024)。 //DataPtr 是指向待发送数据的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 //IPaddr1 是 IP 地址的最高有效字节 168 //IPaddr2 是 IP 地址的次高有效字节 0 //IPaddr3 是 IP 地址的次低有效字节。 103 //IPaddr4 是 IP 地址的最低有效字节。 //RemPort 是远程设备上的端口号。远程端口号范围为 1 到 49151。 // 当连接操作完成且没有错误时,指令置位 Done 输出。 // 当连接操作正在进行时,指令置位 Busy 输出。 // 当连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 2000 =M2.0 =M2.1 =M2.2 Status =MB3 4 调用UDP_RCV如图11所示,各参数的意义如表5所示。
图11 定义UDP_RCV接口参数
精选资料,欢迎下载
。
表5 UDP_SEND各参数意义 CALL UDP_RECV EN ConnID =M6.4 15 //调用UDP_RECV //使能输入 //CPU 将连接 ID (ConnID) 用于此接收操作(连接过程中定义)。 // MaxLen 是要接收的最大字节数(例如,DataPt 中缓冲区的大小(1 到 1024))。 // DataPtr 是指向接收数据存储位置的指针。这是指向 I、Q、M 或 V 存储器的 S7-200 SMART 指针(例如,&VB100)。 //当接收操作完成且没有错误时,指令置位 Done 输出。当指令置位 Done 输出时,Length 输出有效。 // 当接收操作正在进行时,指令置位 Busy 输出。 // 当接收操作完成但发生错误时,指令置位 Error 输出 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 //Length 是实际接收的字节数。 //IPaddr1 是 IP 地址的最高有效字节 //IPaddr2是 IP 地址的次高有效字节 //IPaddr3是 IP 地址的次低有效字节。 //IPaddr4 是 IP 地址的最低有效字节。 //RemPort 是发送消息的远程设备的端口号。 MaxLen 10 DataPtr =&VB2000 Done Busy Error =M10.0 =M10.1 =M10.2 Status =MB11 Length IPaddr1 IPaddr2 IPaddr3 IPaddr4 RemPort =MW12 =MB14 =MB15 =MB16 =MB17 =MW18 5 调用DISCONNECT如图12所示,各参数的意义如表6所示。
精选资料,欢迎下载
。
图12 定义DISCONNECT接口参数
表6 DISCONNECT各参数意义 CALL DISCONNECT EN Req ConnID =M6.5 =M6.6 =15 //调用DISCONNECT //使能输入 //如果 Req = TRUE,CPU 启动断开连接操作。 // CPU 使用连接 ID (ConnID) 标识要终止的连接(连接过程中定义)。 // 当断开连接操作完成且没有错误时,指令置位 Done 输出 // 当断开连接操作正在进行时,指令置位 Busy 输出。 // 当断开连接操作完成但发生错误时,指令置位 Error 输出。 // 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 Done =M30.0 Busy =M30.1 Error =M30.2 Status =MB31 下载程序并监控通信结果
下载两个CPU中的所有硬件组态及程序如图13所示。
图13 监控表
精选资料,欢迎下载
。
Welcome !!!
欢迎您的下载, 资料仅供参考!
精选资料,欢迎下载
因篇幅问题不能全部显示,请点此查看更多更全内容