当前位置:首页 > 功能与样例:通过TCP协议(利用FC5\\"AG - SEND\\"和FC6\\"AG - RECV\\") 传送具有可变消息长度的数据
状 态机: 通过变量“STATE_CNT”来定义FB101中程序的输入点。 根据变量“STATE_CNT”的状态,跳 过与程序的进一步的处理相关的程序段。 按照“STATE_CNTP”的程序处理: ? \ 0 描述 已收到起始分隔符的第一个字节 (从NW9 跳至 NW13) 1 已收到起始分隔符的第二个字节 (从NW10跳至NW14) 2 已收到起始分隔符的第三个字节 (从NW11跳至NW15) 3 已收到起始分隔符的第四个字节 (从NW12跳至NW16) 4 已识别起始分隔符。正在接收数据信息 (从NW3跳至NW17) 5 已创建接收缓冲区且数据已接收 (从NW4跳至NW20) ? ? 接收起始分隔符(逐字节)并识别消息(程序段5-16)
使用FC6“AG_RECV”,逐字节地接收起始分隔符(4 字节)。
?
当调用FC6“AG_RECV”时,参数“ID” 和“LADDR”来自FB101的输入参数。在“RECV”中,需 要指定已接收字节的存储位置(SD缓冲区:字节变量)。输出参数“NDR”,“ERROR”和“STATUS”对于作业 评估是必需的,而 且只在同一个周期内有效。
?
如果块运行无错误,则保存接收的字节,用于进一步的处理。如果该块因出错而终止,则保存块的状态字用于错误分析。
?
已接收字节后,检验已定义的起始信息。(Byte0 = 11;Byte1 = 12;Byte2 = 13;Byte3 = 14)。< /p>
?
图 9:通过起始分隔符识别消息
接收S7串的长度信息(程序段3,17-20)
如果已接收的信息被识别为起始分隔符,那么利用FC6“AG_RECV”接收S7串的长度信息(两个字节)。
当调用FC6“AG_RECV”时,参数“ID” 和“LADDR”来自FB101的输入参数。在“RECV”中,需 要指定两个长度信息字节的存储位置(VAR_LEN:由两个字节构成)。输出参数“NDR”,“ERROR”和“STATUS”对于作业 评估是必需的,而且只在同一个周期内有效。
如果块运行无错误,则已接收数据的实际长度用于接收缓冲区(ANY指针)。如果该块因出错而终止,则 块的状态字作
为FB101的输出参数显示。
图10:接收长度信息
在创建接收缓冲区(ANY指针)时,有关串(VAR_LEN.ACT_LEN)的实际长度的信息是必需的。在此,当调用FB101时,使 用数据的实际长度来检验已指定的接收缓冲区(ANY指针),并将其存储在临时的ANY指针(VAR_BUF)。
共分享92篇相关文档