一 | TCP 协议通讯介绍 |
TCP是一个因特网核心协议。在通过以太网通信的主机上运行的应用程序之间,TCP 提供了可靠、有序并能够进行错误校验的消息发送功能。TCP 能保证接收和发送的所有字节内容和顺序完全相同。TCP 协议在主动设备(发起连接的设备)和被动设备(接受连接的设备)之间创建连接。一旦连接建立,任一方均可发起数据传送。
TCP协议是一种"流"协议。这意味着消息中不存在结束标志。所有接收到的消息均被认为是数据流的一部分。
二 | s7-200 smart 与 s7-200 smart之间TCP通讯实例 |
S7 200 SMART与之间的TCP通讯可以通过两边调用**OUC(开放式用户通讯)**指令库中的TCP_CONNECT、TCP_SEND、TCP_RECV、DISCONNECT指令来实现。
- 开放式用户通信库需要使用 50 个字节的 V 存储器。
- 开放式的用户通讯连接资源包括8个主动连接和8个被动连接。
- 只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。
测试环境:
- 软件版本:STEP 7-Micro/WIN SMART V2.8
- SMART CPU固件版本:V2.6
- 通讯硬件:TP电缆(以太网电缆)
硬件配置:
序号 | 名称 | IP | 硬件型号 | 功能说明 |
1 | tcp客户端 | 192.168.0.101 | ST20 V2.06 | 发送VB0~VB3数据至服务器PLC的VB2000~VB20003中 |
2 | tcp服务端 | 192.168.0.102 | ST20 V2.06 | 接收客户端VB0~VB3数据并写入到VB2000~VB2003 |
三 | S7-200 SMART TCP 客户端编程 |
-
设置本机IP地址,客户端设置为192.168.0.101
-
建立TCP连接 调用TCP_CONNECT指令建立TCP连接。设置连接伙伴地址为192.168.0.102,远端端口为2001,本地端口为5000,连接标识ID为1。利用SM0.0使能Active,设置为主动连接。
注:在建立连接时需先触发服务器端的建立连接指令,再触发客户端。
参数说明
参数 声明 数据类型 描述 EN IN BOOL 使能输入 Req IN BOOL Req = TRUE,CPU 启动连接操作。
Req = FALSE,则输出显示连接的当前状态。Active IN BOOL TRUE = 主动连接
FALSE = 被动连接ConnID IN WORD CPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。 IPaddr1…IPaddr4 IN BYTE 这些是 IP 地址的四个八位字节。例如:192.168.0.101对应IPaddr1=192,IPaddr4=101 RemPort IN WORD RemPort 是远程设备上的端口号。 LocPort IN WORD LocPort 是本地设备上的端口号。 Done OUT BOOL 当连接操作完成且没有错误时,指令置位 Done 输出。 Busy OUT BOOL 当连接操作正在进行时,指令置位 Busy 输出。 Error OUT BOOL 当连接操作完成但发生错误时,指令置位 Error 输出。有关详细信息,请参见“开放式用户通信库指令错误代码”。 Status OUT BYTE 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 RemPort:远程设备上的端口号
- 有效端口号范围为 1 到 49151。
- 建议采用的端口号范围为 2000 到 5000。
- 对于被动连接,CPU 会忽略远程端口号(可以将其设置为零)。
LocPort:本地 CPU 上的端口号
- 有效端口号范围为 1 到 49151。
- 不能使用端口号 20、21、25、80、102、135、161、162、443 以及 34962 至 34964。这些端口具有特定用途。
- 建议采用的端口号范围为 2000 到 5000。
- 对于被动连接,本地端口号必须唯一(不重复)。
-
调用发送数据指令TCP_SEND 发送以VB0为起始,数据长度为DataLen长度的数据发送到连接ID为1指定的远程设备。使用1HZ脉冲触发发送请求;
参数说明
参数 声明 数据类型 描述 EN IN BOOL 使能输入 Req IN BOOL Req = TRUE,CPU 启动发送操作。
Req = FALSE,则输出显示发送操作的当前状态。ConnID IN WORD 连接 ID (ConnID) 是此发送操作所用连接的编号。 DataLen IN WORD DataLen 是要发送的字节。 DataPtr IN DWORD DataPtr 是指向待发送数据的指针。可以指向 I、Q、M 或 V 存储器 Done OUT BOOL 当发送操作完成且没有错误时,指令置位 Done 输出。 Busy OUT BOOL 当发送操作正在进行时,指令置位 Busy 输出。 Error OUT BOOL 当发送操作完成但发生错误时,指令置位 Error 输出。 Status OUT BYTE 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 注意事项:
-
在一个发送操作中最多可以发送 1024 字节的数据,DataLen 发送的字节数范围(1 到 1024)
-
当发送完成后,指令显示调用一次 TCP_SEND 的 Done 或 Error 状态。此后,TCP_SEND 通过错误代码 24 作出响应)。如果 Req 输入设置为 TRUE,则程序会启动另一个发送操作。
-
-
终止通讯连接 可通过DISCONNECT指令终止指定ID的连接。
参数说明
参数 声明 数据类型 描述 EN IN BOOL 使能输入 Req IN BOOL 如果 Req = TRUE,CPU 启动断开连接操作。 ConnID IN WORD CPU 使用连接 ID (ConnID) 标识要终止的连接(连接过程中定义)。 Done OUT BOOL 当断开连接操作完成且没有错误时,指令置位 Done 输出。 Busy OUT BOOL 当断开连接操作正在进行时,指令置位 Busy 输出。 Error OUT BOOL 当断开连接操作完成但发生错误时,指令置位 Error 输出。 Status OUT BYTE 如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。 -
分配库存储区 开放式用户通信库需要使用 50 个字节的 V 存储器,需手动分配 ,否则编译会报错;完成后,下载程序,TCP 客户端配置完成;
四 | S7-200 SMART TCP 服务端编程 |
-
设置本机IP地址,客户端设置为192.168.0.102
-
建立TCP连接 调用TCP_CONNECT指令建立TCP连接。设置连接伙伴地址为192.168.0.101,远端端口为5000(对应客户端本地端口),本地端口为2001(对应客户端远程端口),连接标识ID为1。利用SM0.0常闭点使能Active,设置为被动连接。
-
接收数据 调用TCP_RECV指令接收指定ID连接的的数据。接收的缓冲区长度为MaxLen,数据接收缓冲区以VB2000为起始。
注:VW1000长度与客户端长度一致,否则会出现“丢包现象”
-
**同样不要忘了,需要分配库存储器;**库存储器分配完成后,下载程序即配置完成;
五 | 加小编微信,邀您加入“工控技术交流群” |
六 | 样例程序下载 |
如果您觉得文章对您有帮助,欢迎评论、点赞、收藏,加关注!您的支持将是小编最大动力!
关注公众号,发送10006,获取样例程序