如何实现串口通信机制

唐顿庄园 发布于 2012/11/20 00:36
阅读 950
收藏 0

通过串口异步方式进行通信,程序初始状态是一直间隔1s的循环发送命令,例如
【发】 02 00 4D 52 00 01 0C 00 50 FC 03 12 12 12 12 12 12 12 12 12 12
【发】02 01 4D 52 50 01 0C 00 50 4D 03 12 12 12 12 12 12 12 12 12 12
数据帧结构是:02+序列号+数据+校验+03.后面的12是间隔。直到程序不论顺序的接收到上面2条发送命令的应答时,接收到的应答如下,很长,帧格式相同:
接收到的应答:
【收】02 01 4D 44 00 01 0C 00 50 08 00 A8 00 10 82 00 28 00 B8 10 82 10 94 00 F0 10 82 10 94 00 80 10 82 10 94 00 28 10 83 10 94 00 AE 06 1C 00 9A 00 AC 00 A8 00 AC 00 CC 00 AC 00 A2 04 10 94 00 81 04 10 94 00 4C 04 10 94 00 7D 04 10 94 00 60 10 83 10 94 00 65 04 10 94 00 73 04 10 94 00 FC 04 10 94 00 60 2D 6C 00 E3 16 10 94 00 39 03

【收】02 10 82 4D 44 50 01 0C 00 50 05 0D 10 94 00 61 0D 10 94 00 59 01 5C 01 B7 01 5C 01 7D 16 10 94 00 57 15 10 94 00 DD 16 10 94 00 00 00 00 00 82 20 8C 01 CE 05 10 94 00 92 05 10 94 00 A7 01 24 01 13 01 5C 01 3B 01 5C 01 80 10 82 10 94 00 80 10 82 10 94 00 80 10 82 10 94 00 80 10 82 10 94 00 80 10 82 10 94 00 80 10 82 10 94 00 FE 03
接收玩应答之后,换用另外一条命令发送,且以后每隔3s会发送一次:
【发】02 36 4D 44 08 00 A8 00 01 10 83 7B 03
接收到相应的应答:
【收】4D 44 08 00 A8 00 01 10 83
然后发送如下数据,应该是对需要接收的数据的一个请求设置,此段发送数据为上面接收数据4D 44 08的回应,每次发送一次。
02 06 45 4F 00 00 00 00 00 9A 03 12 12 12 12 12 12 12 12 12 12 
02 07 54 49 2A 00 F5 00 00 C3 03 12 12 12 12 12 12 12 12 12 12 
02 08 54 49 30 00 C3 00 FF 97 03 12 12 12 12 12 12 12 12 12 12 
发送玩后会接收到:
【收】45 44 10 83 00 01 00 08 10 82 00 05 00 00 00 00 00 ,以及54 44的所需要的具体数据,作为上面的应答。

此后,就是一样的发送数据:
4D 52 08 00 A8 00 01 10 83 这个发送一条
4D 52 B8 10 82 10 94 00 37 这个发送五条。
接收的数据为上面2条发送命令的应答外加所需要的数据,格式头尾54 44的数据。
用表格描述就是这样:


请问要如何实现这样的通信机制,一直有发送,然后用waitonmask 监视接收,如何让接收数据作为匹配判断条件等等,期待高手的解答。

加载中
0
cut
cut
纯纯的伸手党,这个东西已经到业务上的了吧,看看多少RMB
唐顿庄园
唐顿庄园
主要就是不知道如何对接收数据进行对比判断。
0
firstrose
firstrose

状态机

做一个接收缓冲,直接判断开头的02以及校验,不是则丢弃直到下一个02

对于非伸手党来说,我说的应该够多了

唐顿庄园
唐顿庄园
这个我知道的。 主要的问题是如何对接收数据进行条件判断。如果是用每一位指针进行匹配,那么段落就会太长了。不知道有没有简便方法。
0
firstrose
firstrose
至少我不知道有
返回顶部
顶部