名称:UDP接收

符号:UDP_RECV

说明:

        远程UDP主机发送给本机消息数据将被保存在套接字缓存区中，通过UDP_RECV指令从指定套接字缓存区中获取已经收到的消息数据。

图片:

参数:

参数名称 | 数据类型 | IN/OUT | 参数作用 | 说明
--- | --- | --- | --- | ---
EXECUTE | BOOL | IN | 功能块触发 |
    上升沿触发指令执行
SOCKFD | DINT | IN | 套接字 |
    套接字
DATA | REF_TO_BYTE | IN | 存储首地址 |
    待发送数据块首地址（不可为空/NULL）
LENGTH | WORD | IN | 最大长度 |
    数据长度：1-1400，不可超过DATA实际大小
BUSY | BOOL | OUT | 执行中 |
    TRUE：执行中
DONE | BOOL | OUT | 成功标志 |
    TRUE：执行完成
ERROR | BOOL | OUT | 出错标志 |
    TRUE：执行出错
ACTUALLEN | WORD | OUT | 接收长度 |
    已接收数据长度
IPADDR | ARRAY[0..3] OF BYTE | OUT | IP地址 |
    远程发送方IP地址
PORT | WORD | OUT | 端口号 |
    远程发送方端口号
ERRORID | WORD | OUT | 错误码 |
    0：正常；其它：错误码值

错误码:

错误码 | 说明
--- | ---
0 |
    无错误
4001H |
    客户逻辑取数据过慢，导致接收缓冲区内存不够
4002H |
    套接字号不是允许的范围
4004H |
    套接字没有连接

示例:

LD:

ST:

UDP_RECV_inst1(EXECUTE := Execute_UdpRecv1, SOCKFD := Sockfd1, DATA := REF(DataRecv_UDP1), LENGTH := 10, BUSY => ISBUSY_UDP1, DONE => DONE_UDP1, ERROR => ISERROR_UDP1, ACTUALLEN => ACTUALLEN_UDP1, IPAddr => IPADDR1, Port => PORT1, ERRORID => ERRORID_UDP1);

解释:

           当“Execute_UdpRecv1”操作数的信号状态从“0”变为“1”时，执行该指令,把收到的数据存入“DataRecv_UDP1”数组中,并且从“IPADDR1”和“PORT1”中得到远程设备的IP和端口号。每检测到一个信号上升沿，就执行一次接收。当实际接收大小“ACTUALLEN_UDP1”等于“10”时，表示接收完成，“DONE_UDP1”输出状态会变“1”，否则“ISBUSY_UDP1”输出状态为“1”，当发生错误的时候，“ISERROR_UDP1”输出状态变为“1”，且“ERRORID_UDP1”输出具体的错误码。