马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 朱鹏 于 2020-2-13 21:02 编辑
一、准备工作
- 新建一个功能块,包含TCP_Accept、TCP_Close、TCP_Receive、TCP_Send、TCP_Connect指令。
- 功能块包含1个输入参数——TCPStru结构体;1个输入输出参数——20长度的整型数组Socket_INT
- PLC做客户端时会用到TCP_Connect、TCP_Close、TCP_Receive、TCP_Send 这4条指令;
PLC做服务器时会用到TCP_Accept、TCP_Close、TCP_Receive、TCP_Send 这4条指令;
- 新建一个TCP_Listen_FB功能块,封装TCP_Listen指令,PLC做服务器时用于PLC开启监听端口
二、PLC做客户端
1.以太网自由协议TCP通讯_FB功能块实例化。
PLC要建立多少个客户端链接就实例化多少个功能块。例如:PLC做客户端需要与2台上位和3台扫码枪进行通信,就实例化5个功能块。
2.设置每个客户端链接要连接的服务器的IP和端口号
比如客户端链接1要连接的服务器为IP:10.0.0.6 ,端口号为6000。则IP转换成16进制H0A000006,端口号为10进制K6000。
3.连接服务器
将CT1.F.Connect_Execute置ON,
当收到CT1.F.Connect_Connected为ON时表示连接服务器成功。
如图中程序,CT1.F.Connect_Connected为ON后,发送H0102给服务器,并开始接收服务器消息。
如图:上位机调试助手服务器(10.0.0.6:000)收到了客服端PLC(10.0.0.30:50462)发来的消息H0102
4.收发数据
根据实际情况写收发数据处理程序。
接收数据:
CT1.F.Receive_Execute置ON,开始接收,接收完成后会自动复位。
接收完成后CT1.F.Receive_Done会置ON,数据处理完成需用户程序复位。CT1.F.Receive_Size为接收到的数据长度,接收到的数据放入CT1.F.Receive_Buffer[512]整型数组中。
发送数据:
CT1.F.Send_Size为要发送的数据长度,要发送的数据放入CT1.F.Send_Buffer[512]整型数组中。注意:如果CT1.F.Send_Size设置为0,则自动判断要发送的字符串数组的长度。当判断到数据为0时结束。样例程序中CT1.F.Send_Size设置为0
将CT1.F.Send_Execute置ON,开始发送,发送完成后会自动复位。
发送完成后CT1.F.Send_Done会置ON,数据处理完成需用户程序复位。
例如图中程序,当接收到服务器回复H01时,PLC会返回H0102给服务器,当接收到服务器回复H02时,PLC会返回H0304给服务器,
5.掉线判断
掉线后CT1.F.Connect_Connected会变为OFF,此时需要将CT1.F.Connect_Execute置为OFF一个扫描周期后,重新触发后再次与服务器建立链接。
6.其他客户端处理流程相同
如图,PLC做客户端IP为10.0.0.30,端口号自动分配,建立了5个客户端链接,连接PC以太网调试软件服务器IP为10.0.0.6,端口为6000。每个链接独立收发数据
三、PLC做服务器
1.实例化一个TCP_Listen_FB功能块,设置PLC要监听的端口。
将TCP_Listen_1.Execute置ON开始监听,TCP_Listen_1.Active表示监听状态。
2.以太网自由协议TCP通讯_FB功能块实例化
该服务器端口有几个客户端同时访问就实例化几个功能块。例如:PLC的1000端口会有5个客户端同时访问,就实例化5个以太网自由协议TCP通讯_FB功能块。并将TCP_Listen_FB功能块的实例TCP_Listen_1监听1000端口的Socket_INT,传入以太网自由协议TCP通讯_FB功能块的实例中。
3.等待客户端连接
TCP_Listen端口监听成功后(TCP_Listen_1.Active为ON时)开始等待客户端连接(SR1.F.Accept_Execute置ON),当客户端连接过来后(SR1.F.Accept_Connected为ON时)开始接收客户端消息(SR1.F.Receive_Execute)。
用上位机调试软件建立一个客户端链接,连接PLC服务器
连接成功后,SR1.F.Accept_Connected为ON
4.开始收发消息
根据实际情况写收发数据处理程序。
接收数据:
将SR1.F.Receive_Execute置ON,开始接收,接收完成后会自动复位。
接收完成后SR1.F.Receive_Done会置ON,数据处理完成需用户程序复位。SR1.F.Receive_Size为接收到的数据长度,接收到的数据放入SR1.F.Receive_Buffer[512]整型数组中。
发送数据:
SR1.F.Send_Size为要发送的数据长度,要发送的数据放入SR1.F.Send_Buffer[512]整型数组中。注意:如果SR1.F.Send_Size设置为0,则自动判断要发送的字符串数组的长度。当判断到数据为0时结束。
将SR1.F.Send_Execute置ON,开始发送,发送完成后会自动复位。
发送完成后SR1.F.Send_Done会置ON,数据处理完成后需用户程序复位。
例如图中程序,调用FreeTCP命令查询_FB实例来查询客户端发来的命令,获取到对应的回复内容,当接收到客户端发来的是H01时,PLC会返回H01给客户端;当接收到客户端发来的是H02时,PLC会返回H02给客户端;当接收到客户端发来的是H03时,PLC会返回H01020304给客户端,
5.掉线判断
断线后SR1.F.Accept_Connected会变为OFF,此时需要将SR1.F.Accept_Execute置为OFF一个扫描周期重新触发,才能再次允许客户端连接过来。
6.该端口的其它链接流程相同。
如图,PC以太网调试软件客户端IP为10.0.0.6,,建立了5个客户端链接,连接PLC服务器IP为10.0.0.6,端口为1000。
7.PLC再开一个端口做服务器流程相同。
如图将TCP_Listen_FB功能块的实例TCP_Listen_2监听2000端口,并允许同时5个客户端访问2000端口。
|