使用场景
整体架构

主要功能及产品组件
注: 本手册中用到的中科时代的软件包,均可以从官网的子页面获取。官网提供的版本可能比本手册中提到的版本更高,一般情况下这不会影响您按照本手册的例子执行相应的操作
监听第三方TCP/IP客户端的连接,确认第三方客户端的连接,进行数据的收发,从而实现通信,当长时间不需要通信时,可以关闭建立的连接。
TCPIP Server产品包括两部分组件
| 产品组件 | 描述说明 |
|---|---|
| sf4200_0.0.5_amd64.deb | TCPIP RTE组件 |
| CmpTcpIp.library | 上位机程序使用的库文件 |
安装要求
中科时代出厂的工智机;
工智机可以访问互联网;
熟悉基础的Linux操作命令
安装过程
1、工智机端安装TCPIP RTE组件
上传deb包到工智机Linux环境的/home/sinsegye目录下
上传完成后在工智机上执行命令安装(参考下方截图,如果模块文件名发生变化则命令行中的文件名做相应更改)

修改RTE的配置文件,ComponentManger模块下加入SF4200
重启RTE服务,使新加入的SF4200被调用
2、IDE侧部署TCPIP Server的library
MetaFacture中点击最上面的菜单栏 ”工具“ -- ”库存储“ ;

弹出的对话窗中点击”安装“ -- 选中CmpTcpIp.library -- 点击“打开”;


工程中双击“库管理器” -- “添加库” -- 双击“Sinsegye Tcp/Ip” ,加载库完成;

更新安装
1、升级工智机TCPIP Server RTE组件
上传升级版deb包到工智机Linux环境的/home/sinsegye目录下,上传方法参考附录;
上传完成后在工智机上执行命令安装(参考下方截图,如果模块文件名发生变化则命令行中的文件名做相应更改)
重启RTE服务,使新升级的的SF4200被调用
2、升级IDE侧DataBase的library
MetaFacture中点击最上面的菜单栏 ”工具“ -- ”库存储“ ;

弹出的对话窗中点击”安装“ -- 选中CmpTcpIp.library -- 点击“打开”;


工程中双击“库管理器” -- “添加库” -- 双击“Sinsegye Tcp/Ip” ,加载库完成;

卸载过程
1、卸载工智机TCPIP Server RTE组件
工智机上执行命令卸载
修改RTE的配置文件,ComponentManger模块下去掉SF4200
重启RTE服务
2、卸载IDE侧的TCPIP library
MetaFacture界面点击“工具” -- “库存储”

对话框中选中安装的的TCPIP库,点击“卸载”

快速启动
(一)本例软、硬件配置
硬件:
SX5100工智机 MetaOS V24.08.15_SX5
Win10 PC
软件:
MetaFacutre V1.0.6.2
第三方TCPIP Client工具TCP/UDP Socket调试工具 V2.3
(二)本例实验要求及原理
1、实验原理

通过 FB_SocketListen监听第三方TCP/IP客户端的连接,返回监听连接句柄,根据监听句柄和FB_SocketAccept确认第三方客户端的连接,返回连接句柄,根据连接句柄结合FB_SocketSend和FB_SocketReceive进行数据的收发,从而实现通信,当长时间不需要通信时,可以根据FB_SocketClose关闭建立的连接。
上位机和工智机使用EtherNet连接。
上位机上,MetaFacture下装工程到工智机。工程中会包含下面的试验操作步骤中的配置。
工智机与第三方TCPIP客户端通过EtherNet连接。
(三)本例实验操作步骤
1、TCPIP Server开始监听client连接的实验步骤如下:
POU中声明区域调用TCPIP库的功能块FB_SocketListen
POU中程序区域调用fbSocketListen,配置TCPIP Server的ip、端口
触发bExecute上升沿即可开始监听

2、TCPIP Server接收Clinet连接的实验步骤如下:
POU中声明区域调用TCPIP库的功能块FB_SocketAccept
POU中程序区域调用fbSoccketAccept
第三方客户端发送连接请求后,TCPIP Server触发fbSoccketAccept的bExecute上升沿,接收Clinet连接;连接成功后bAccepted会变为True;

3、TCPIP Server接收Client数据的实验步骤如下:
POU中声明区域调用TCPIP库的功能块FB_SocketReceive
POU中程序区域调用fbSocketReceive
第三方Client发送数据后,TCPIP Server触发fbSocketReceive的bExecute上升沿,接收Clinet发送的数据;接收的数据保存到变量arrReceive中;

4、TCPIP Server发送数据的实验步骤如下:
POU中声明区域调用TCPIP库的功能块FB_SocketSend
POU中程序区域调用fbSocketSend
TCPIP Server触发fbSocketSend的bExecute上升沿,发送数据;第三方Client接收到数据;

5、TCPIP Server关闭连接
POU中声明区域调用TCPIP库的功能块.FB_SocketClose;
POU中程序区域调用fbSocketClose
TCPIP Server触发fbSocketClose的bExecute上升沿,关闭连接

查看第三方Client,连接断开

(四)实验注意点
功能块FB_SocketListen介绍

参数介绍
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| sLocalHost | STRING | 设置TCPIP Server的IP |
| nLocalPort | UDINT | 设置TCPIP Server的端口 |
| bExecute | BOOL | 触发上升沿开始监听TCPIP客户端请求 |
| tTimeout | TIME | 触发该功能块允许的最大超时时间 |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| bBusy | Bool | 当功能块被激活时,被置为True,一直保持到收到确认信号 |
| bError | Bool | 如果在命令传输过程中发生错误,则在 bBusy 输出被重置后,此输出将被设置成True。 |
| nErrId | UDINT | 如果 bError 输出被设置成True,则此参数返回 MetaFacture TCP/IP 连接服务器的错误编号 |
| hListener | ST_HSOCKET | 新监听套接字的连接句柄。结构体变量 :句柄号、本地IP、远端IP |
功能块FB_SocketAccept介绍

参数介绍
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| hListener | ST_HSOCKET | 监听套接字的连接句柄。该句柄必须先通过功能块 FB_SocketListen 请求获取 |
| bExecute | BOOL | 上升沿触发接受客户端请求 |
| tTimeout | TIME | 该功能块执行允许的最大超时时间,即从触发到 到达该时间,如果还没有执行,就不执行,超时报警 |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| bAccepted | BOOL | 如果与远程客户端建立了新连接,则设置此输出为True |
| bBusy | BOOL | 当功能块被激活时,被置为True,一直保持到收到确认信号 |
| bError | BOOL | 如果在命令传输过程中发生错误,则在 bBusy 输出被重置后,此输出将被设置成True |
| nErrId | UDINT | ![]() |
| 如果 bError 输出被设置成True,则此参数返回 MetaFacture TCP/IP 连接服务器的错误编号 | ||
| hSocket | ST_HSOCKET | 新监听套接字的连接句柄。结构体变量 :句柄号、本地IP、远端IP |
功能块FB_SocketReceive介绍

参数介绍
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| hSocket | ST_HSOCKET | 要接收数据的通信伙伴的连接句柄 |
| cbLen | UDINT | 可用于读取数据的最大缓冲区大小(以字节为单位) |
| pDest | POINTER TO BYTE | 接收缓冲区的地址(指针) |
| bExecute | BOOL | 上升沿触发TCPIP Server接收数据 |
| tTimeout | Time | 该功能块执行允许的最大超时时间,即从触发到 到达该时间,如果还没有执行,就不执行,超时报警 |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| bBusy | BOOL | 忙碌状态,True为忙碌,Flase不忙碌 |
| bError | BOOL | 报错状态,True报错,Flase无报错 |
| nErrId | UDINT | ![]() |
| 如果 bError 输出被设置成True,则此参数返回 MetaFacture TCP/IP 连接服务器的错误编号 | ||
| nRecBytes | UDINT | 最后成功接收的数据字节数 |
功能块FB_SocketSend介绍

参数介绍
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| hSocket | ST_HSOCKET | 要发送数据的通信伙伴的连接句柄 |
| cbLen | UDINT | 要发送的数据字节数 |
| pSrc | POINTER TO BYTE | 传输缓冲区的地址(指针) |
| bExecute | BOOL | 通过该输入的上升沿触发功能块 |
| tTimeout | TIME | 该功能块执行允许的最大超时时间,即从触发到 到达该时间,如果还没有执行,就不执行,超时报警 |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| bBusy | BOOL | 当功能块被激活时,被置为True,一直保持到收到确认信号 |
| bError | BOOL | 如果在命令传输过程中发生错误,则在 bBusy 输出被重置后,此输出将被设置成True |
| nErrId | UDINT | ![]() |
| 如果 bError 输出被设置成True,则此参数返回 MetaFacture TCP/IP 连接服务器的错误编号 |
功能块FB_SocketClose介绍

参数介绍
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| hSocket | ST_HSOCKET | 要关闭的监听器、远程或本地客户端套接字的连接句柄。 |
| bExecute | BOOL | 通过该输入的上升沿触发功能块 |
| tTimeout | TIME | 该功能块执行允许的最大超时时间,即从触发到 到达该时间,如果还没有执行,就不执行,超时报警 |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| bBusy | BOOL | 当功能块被激活时,被置为True,一直保持到收到确认信号 |
| bError | BOOL | 如果在命令传输过程中发生错误,则在 bBusy 输出被重置后,此输出将被设置成True |
| nErrId | UDINT | ![]() |
| 如果 bError 输出被设置成True,则此参数返回 MetaFacture TCP/IP 连接服务器的错误编号 |
连接异常
连接异常导致数据收发异常;

分析:第三方客户端连接TCPIP Server,都需要TCPIP Server触发FB_SocketAccept来接受请求,否则连接不成功;