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