使用STL从串行通信数据中分离出帧

问题描述 投票:0回答:1

有一个键盘连接到PLC控制器。键盘正在向控制器发送帧。

下面是键盘发送的帧。

$200103001<000000008000000000000000000009$ 3$ 200103001<000000008000000000000000000009$ 3$ 200103001<000000008000000000000000000009$ 3$ 200103001<000000008000000000000000000009$ 3$ 200103001<000000008000000000000000000009$ 3$ 200103001<000000008000000000000000000009$ 3$ 200100?1$ 3

单帧的结构是STX(02),然后是有用数据,然后是ETX(03)。在上图中,您可以看到 STX 为 2 美元,ETX 为 3 美元。

这里的“$”符号代表什么?

我正在尝试使用结构化文本 IEC 编程语言。如何提取$2到$3之间的数据?

顺便说一句,接收到的帧保存为 STRING(255)。

我尝试使用FIND功能来定位STX和ETX位置。然而,由于$符号,它没有找到STX和ETX。

FIND (StringWhereDataIsSaved, '$3') -> 不起作用

FIND (StringWhereDataIsSaved, '03') -> 将在帧的数据部分找到 03 而不是 ETX

FIND (StringWhereDataIsSaved, '3') -> 将在帧的数据部分找到 3,而不是 ETX。

rs485 st
1个回答
0
投票

在允许您查看隐藏字符的文本编辑器中查看接收到的数据,例如Notepad++。 $ 和数字之间有一些东西,看起来是一个空格,但也可能是其他东西,例如回车符。修改您的

FIND
命令以搜索正确的字符串,它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.