# UDP操作手册

### 概述

UDP协议

UDP协议：用户数据报协议（User Datagram Protocol）,是OSI参考模型中的传输层协议，它与TCP协议一样用于处理数据包，是一种无连接的传输层协议。UDP有不断提供数据包分组、组装和不能对数据包进行排序，也就是说，当报文发送之后无法得知是否安全到达，是一种提供面向事务简单不可靠信息传送服务。

### 准备

安装要求

- 中科时代出厂的工智机；

- Device Manager组件管理器；

- 个人电脑安装中科时代IDE MetaFacture软件；

- 个人电脑需要联网

SF4200-sitcpudp组件安装

1.打开Device Manager 0.0.1.9组件管理器

2.选择左下角的“安装ACP服务”

3.设定IP、用户名和密码，选择“在线安装”。

（本例为192.168.110.155，用户名：sinsegye，密码：1）

4.安装完成后，点击“扫描”，出现目标工智机后，双击进入设备管理页面。

5.在设备管理页面，选择“安装RTE插件服务”

6.输入用户名sinsegye，密码1，点击“在线安装”

7.安装完成后，选择“组件”—“组件管理”

8.点击“浏览”，可以在线浏览工智机发布的组件。

9.选择“SF4200-sitcpudp”组件，点击“安装”

传输完成，确认安装插件。

安装完成，重启生效。

10.安装完成后，在本地可以显示已安装的SF4200-sitcpudp组件。

组件更新和卸载

打开Device Manager，进入工智机设备管理页面—“组件”—“组件管理”，选择需要更新或者卸载的组件，点击“卸载”或“更新”

### 示例

UDP Socket建立

1. 打开中科时代IDE MetaFacture，选择“新建工程”

2.选择标准工程，并命名UDP

3.选择中科时代Sinsegye设备，选择PLC编程语言(本例为ST语言)

4.选择“库管理器”—“添加库”—选择“SF4200_TcpUdp”—确定 SF4200_TcpUdp添加到库管理器中。

5.使用“输入助手”在PLC_PRG中声明UPD_Peer变量。鼠标右键选择“输入助手”。

选择“结构体类型”—“MetaCore_TcpUdp”—“FB_SocketUdpCreate”

功能块声明完成。

6.使用“输入助手”在程序中插入声明的UDP_Peer功能块。鼠标右键选择“输入助手”

选择“实例调用”—“Udp_Peer”

Udp_Peer通过输入助手自动插入到PLC程序中。

7.声明三个变量，用于设定Udp_Peer功能块的本机IP地址、端口和启动建立信号。

UDP Send功能

1.鼠标右键使用“输入助手”声明Udp_Send功能块和调用Udp_Send功能块。

2.新建以下三个变量，并且把Udp_Peer的输出信号hSocket和新建的三个变量传入到Udp_Send的输入设定中。

变量名称 | 类型 | 设定例 | 意义
--- | --- | --- | ---
RemoteAddr | STRING | ‘192.168.110.135’ | UDP连接的IP地址
RemotePort | UDINT | 9999 | UDP连接的端口
bSend | BOOL | FALSE | 发送信号

3.新建SendData变量，设定初始值为‘This is a teast’。将SendData指针和字节大小传入到Udp_Send的输入设定中

4.选择“Device”—输入工智机IP地址连接工智机。本例为192.168.110.155.

5.点击“登录”

6.登陆后，点击“运行”程序

7.使用个人电脑打开调试工具Socket Tool

8.选择“UDP Client”—“创建”

10.设定工智机IP地址、工智机端口，以及本机端口，点击确定。

11.将变量bCreat置True，建立UDP Socket。

12. 变量bSend置True，发送数据’This is a test’

13.查看Socket Tool，收到This is a test数据。

UDP Receive功能

1.鼠标右键使用“输入助手”声明Udp_Receive功能块和调用Udp_Receive功能块。

2.新建以下四个变量，并且把Udp_Peer的输出信号hSocket和新建的四个变量传入到Udp_Receive的功能块中。

变量名称 | 类型 | 意义
--- | --- | ---
bReceive | BOOL | UDP接收数据启动变量
ReceiveAddr | STRING | 发送数据端的IP地址
ReceivePort | UDINT | 发送数据的端口
ReceiveBytes | UDINT | 数据大小

3.新建ReceiveData变量，将ReceiveData指针和字节大小传入到Udp_Receive的输入设定中.

4.选择“Device”—输入工智机IP地址连接工智机。本例为192.168.110.155.

5.点击“登录”

6.登陆后，点击“运行”程序

7.使用个人电脑打开调试工具Socket Tool

8.选择“UDP Client”—“创建”

10.设定工智机IP地址、工智机端口，以及本机端口，点击确定。

11.将变量bCreat置True，建立UDP Socket。

12. 变量bReceive置True，使用Socket Tool发送数据‘ABCdef1234567890’

13.查看PLC程序中的ReceiveData，收到数据。

UDP Socket close关闭

1.鼠标右键使用“输入助手”声明Udp_Close功能块和调用Udp_Close功能块。

2声明执行关闭的变量bClose:BOOL,并将想要关闭的hSocket传入到输入接口中，本例为Udp_Peer.hSocket。

3.选择“Device”—输入工智机IP地址连接工智机。本例为192.168.110.155.

5.点击“登录”

6.登陆后，点击“运行”程序

7.将bCreat置True，建立UDP Socket

8. 将bClose置True，关闭UDP Socket

### 功能介绍

功能块FB_SocketUdpCreate

输入参数

参数名 | 类型 | 设定例 | 意义
--- | --- | --- | ---
sLocalHost | STRING | ‘192.168.110.155’ | 本机IP地址
nLocalPort | UDINT | 9000 | 本机端口
bExecute | BOOL | TRUE | 0→1时，建立UDP Socket
tTimeout | TIME | T#5S | 超时时间，默认5s

输出参数

参数名 | 类型 | 意义
--- | --- | ---
bBusy | BOOL | 是否在执行中
bError | BOOL | 是否发送错误
nErrId | UDINT | 错误代码
hSocket | ST_HSOCKET | 建立的Socket信息

功能块FB_SocketUdpSendTo

输入参数

参数名 | 类型 | 设定例 | 意义
--- | --- | --- | ---
hSocket | ST_HOCKET | FB_SocketUdpCreate.hSocket | 已建立的Socket
sRemoteHost | STRING | '192.168.110.135' | 接收数据到的IP地址
nRemotePort | UDINT | 9990 | 接收数据到的端口
cbLen | UDINT | SIZEOF(data) | 发送数据的大小
pSrc | POINTER TO BYTE | ADR(data) | 发送数据的内容
bExecute | BOOL | TRUE | 0→1时，发送数据
tTimeout | TIME | T#5S | 超时时间，默认5s

输出参数

参数名 | 类型 | 意义
--- | --- | ---
bBusy | BOOL | 是否在执行中
bError | BOOL | 是否发送错误
nErrId | UDINT | 错误代码

### 3.功能块FB_SocketUdpReceiveFrom

输入参数

参数名 | 类型 | 设定例 | 意义
--- | --- | --- | ---
hSocket | ST_HOCKET | FB_SocketUdpCreate.hSocket | 已建立的Socket
cbLen | UDINT | SIZEOF(Rdata) | 接收存储数据的大小
pDest | POINTER TO BYTE | ADR(Rdata) | 接收存储数据的地址
bExecute | BOOL | TRUE | 0→1时，接收数据
tTimeout | TIME | T#5S | 超时时间，默认5s

输出参数

参数名 | 类型 | 意义
--- | --- | ---
bBusy | BOOL | 是否在执行中
bError | BOOL | 是否发送错误
nErrId | UDINT | 错误代码
sRemoteHost | STRING | 远程发送数据方的IP地址
nRemotePort | UDINT | 远程发送数据方的端口
nRecBytes | UDINT | 接收数据的大小

### 4.功能块FB_SocketClose

输入参数

参数名 | 类型 | 设定例 | 意义
--- | --- | --- | ---
hSocket | ST_HOCKET | FB_SocketUdpCreate.hSocket | 已建立的Socket
bExecute | BOOL | TRUE | 0→1时，关闭Socket
tTimeout | TIME | T#5S | 超时时间，默认5s

输出参数

参数名 | 类型 | 意义
--- | --- | ---
bBusy | BOOL | 是否在执行中
bError | BOOL | 是否发送错误
nErrId | UDINT | 错误代码