图⽂详解S7-200SMART的TCP通信
200SMART的开放式通信(Open User Communication)包括TCP通信,UDP通信以及ISO-on-TCP通信,⽀持CPU固件版本V2.2以上,常⽤于与第三⽅⽀持相同协议的设备通信。开放式通信(OUC)编程可以通过指令或者调⽤OUC的指令库,通信双⽅均要调⽤指令,通信数据量可以达到1024个字节,这次我们将介绍OUC通信中的TCP通信。
TCP通信是⼀种⾯向连接的通信协议,通信之前需要先建⽴连接,是⼀种数据流的服务,不传输开始消息和结束消息,是⼀种可靠,安全的数据传输。所谓数据流,举⼀个简单的例⼦来说,发送⽅第⼀次发送10个数据,然后第⼆次再发送10个数据,然后接收⽅启⽤接受会⼀下⼦接收到20个数据。
TCP通信的编程可以通过通信指令或者开放式⽤户通信库指令,如图:
图⼀:通信指令
图⼆: 开放式⽤户通信库指令
这⾥建议使⽤开放式⽤户通信库指令,编程和填写参数都能简单⼀点。下⾯开始介绍⼀下TCP通信的流程:①:建⽴连接(关键!必须!)
②:交换数据(发送/接收)
③:断开连接(⼀般不⽤)
④:分配库存储器(必须!建议选择较⼤的地址避免冲突)
接下来介绍⼀下各个指令的每个引脚的含义,⾸先介绍TCP_CONNECT指令
参数ENReq
数据类
描述
型
BOOL使能输⼊BOOL
如果Req=TRUE,CPU启动连接操作。如果 Req = FALSE,则输出显⽰连接的当前状态。
设置本地CPU在通信中的⾓⾊
ActiveBOOLActive= TRUE为主动连接(⼀般⽤于客户端)
Active= FALSE为被动连接(⼀般⽤于服务器)
ConnIDWORDIPaddIPaddr4
CPU使⽤连接 ID (ConnID) 为其它指令标识该连接。可能的ConnID范围为0到65534。
BYTE这些是IP地址的四个⼋位字节。IPaddr1到IPaddr4 填写通信伙伴的IP地址
RemPort 是远程设备上的端⼝号。远程端⼝号范围为 1 到 49151。对于被动连接,使⽤零。
LocPort 是本地设备上的端⼝号。本地端⼝号范围为 1 到 49151,但存在⼀些。
RemPortWORDLocPortWORDDoneBusyErrorStatus
BOOL完成标志位,建⽴通信连接之后⼀直保持1。BOOL当连接操作正在进⾏时,指令置位 Busy 输出。BOOL当连接操作完成但发⽣错误时,指令置位 Error 输出。BYTE
如果指令置位 Error 输出,Status 输出会显⽰错误代码。如果指令置位 Busy或 Done 输出,Status 为零(⽆错误)。
这⾥我们再对⼀些参数进⾏⼀些补充解释:
1. ConnID:ConnID⽤于标识通信连接,不同的ConnID不能重复,且占⽤开放式通信资源最多16个,客户端的ConnID与服务器的ConnID⽆关。2. IPaddr:填写通信伙伴的IP地址,客户端填写服务器的IP,服务器填写客户端的IP。主动连接不能填0.0.0.0,被动连接可以填0.0.0.0,表⽰接受任意远程IP地址的连接。3. RemPort 和LocPort:端⼝号设置,建议采⽤2000~5000,主动⽅和被动⽅的RemPort 和LocPort交叉对应;对于被动连接,本地端⼝号必须唯⼀(不重复),且可以忽略远程端⼝号,RemPort可以填0。4. Req & Active:CPU作为客户端:Active设置为TURE,然后再触发Req,主动发送报⽂,请求建⽴连接。如图Active设置SM0.0。
CPU作为服务器先就绪,客户端发送请求报⽂后,才可建⽴连接,否则被拒绝。
例如我设置本地客户端IP为192.168.0.100,ConnID为10,端⼝号为2000;远程服务器IP为192.168.0.101,ConnID为20,端⼝号为2001;如图
这次关于200SMART的TCP通信就暂时介绍到这⾥,下⼀篇将继续为⼤家介绍TCP的发送和接收指令,以及TCP程序编写。