跳到主要内容

7.15.9 建立通信连接后,接收数据

功能

  • TRCV系统库用于异步接收指定数据
    • 不提供连接功能

设置并建立通信连接

  • 连接在成功建立后,用户给req一个上升沿,会触发一次接收数据函数;

  • 接收数据函数TRCV只有在通信连接已经成功建立的情况下才发挥作用;

  • 正确接收过程需要先给EN_R引脚置为 true,可以看到TRCV块中的状态字由0x7004(已经建立连接)→0x7006(正在接收数据)→0x7008(成功接收数据),表示数据已经发送成功;

  • 若接收过程未出现错误,且未接收到指定长度的数据,此时BUSY会保持为true,状态码为0x7006;

  • 给EN_R引脚置为true后,此时若未建立连接,此时会显示error = true,状态码为0x80A1(连接尚未建立)

LD图形

alt text

参数说明

接口变量声明数据类型说明
EN_RInputBOOLEN_R = True,开启接收功能
LENInputUDINT接收长度为LEN的数据
若为0,接收DATA大小的数据
若大于65535或者大于DATA的大小,会直接报错
接收长度还取决于是否开启ADHOC模式
ADHOCInputBOOL接收模式:
0:表示启用的是静态接收模式,只有当接收到指定大小的数据时,done才会置为true并保持一个周期
1:表示启用的是动态接收模式,只要接收到数据,哪怕是1个字节,done也会置为true并保持一个周期
CONNECTInOutTCP_ConnectConfig配置连接参数的函数块实例,具体参见TCP_Connectconfig
DATAInOutANY_TYPE存放接收数据的数据块
DONEOutputBOOL状态参数,可具有以下值:
0:接收数据尚未启动或仍在进行
1:接收数据已成功执行。此状态将仅显示一个周期
BUSYOutputBOOL状态参数,可具有以下值:
0:接收数据尚未启动或已完成
1:接收数据尚未完成
ERROROutputBOOL状态参数,可具有以下值:
0:无错误
1:接收数据出错
STATUSOutputWORD当前函数执行过程的状态
RCVD_LENOutputUDINT实际接收到的数据长度,只有当done = true时,会更新一次,并保持一个周期

状态码说明

STATUS(WORD 16#)说明
0000未调用
7006开启接收功能,接收数据过程中
7008成功接收到指定数据
以下为异常情况状态码说明
80A1尚未建立指定连接,用于发送和接收功能激活时,但连接尚未建立
80A4数据块为空
80A5出现80A5,原因有以下三种:
参数LEN大于65536;
LEN的值大于数据块的大小;
LEN为0,数据块大小大于65536
80A7获取发送缓冲区失败
80AA发送失败
80AC异步函数入队失败
80C3当前TConnectConfig对应的连接已经被其他TRCV块使用
80C5发送/接收数据过程中,对端主动断开连接

实例

  • LD示例如下动图所示:

alt text

  • ST示例如下代码所示:
TRCV_1(
EN_R:=bVar,
LEN:=0,
ADHOC:=true,
CONNECT:=TCP_CONNECTCONFIG_1,
DATA:=iVar,
NDR=>OUT,
BUSY=>OUT2,
ERROR=>OUT3,
STATUS=>OUT4,
RCVD_LEN=>OUT5
);