C++ builder 多进程串口通讯程序1 (项目分析)

来源:互联网 发布:手机遥控电视软件 编辑:程序博客网 时间:2024/04/29 04:17
  

总体实现过程:1.数据接收块  2.接收数据处理块  3.数据发送块,4.进程通讯块

 

 

         其中还有数据加密,电台译码,硬件操作指令选择等等

1. 数据协议= Head +Length+data1+data2+…+dataN+CheckSum

           Length= data1+......+dataN   的数据数量个数

           CheckSum(和校验)=Length+data1+….+dataN

           Head=0x0B;

 

     1.1.数据接收,API或者组件(MSComm我用这个,虽然非议很多),保证数据不丢失,就算是不完整的接收一个帧也不会丢掉。 只有当处理了一个完整的帧后才丢弃。

     1.2.如果遇到Head 取 length+1长度数据校验,数量不够则返回,等待下一帧数据接收后处理。

     1.3.扔掉数据的方法,每次循环找Head,直到找到一帧完整正确的帧,处理完后扔掉一帧数据,不是则每次只扔掉Head。

 

2.      完整数据解析,按照数据协议,进行解析处理。对要加密协议的转发。。

 

3.      发送部分,采用线程触发,沉睡100ms 是否收到应答,标志量IsSend=true,,IsReceive=true则不重发,IsReceive=false,则要重发,只重发一次。。

         及时的开启,及时的结束。。

 

4.      进程通讯,将解析出来的协议通过串口消息,发给需要这个消息进程。FindWindow(1,2),找到窗体句柄SendMessage(1,2,3,4).发给目标窗体。。

         将受到的进程消息发送给  Arm

 

            其中难点在于,C++builder在处理这些时候有一定的不方便之处,毕竟语言是C++支持标准STL库的,语言难度还是相当的。。

            后面的章节将会讲到我遇到和处理的问题,

 

           难点1.。接收数据用队列处理是比较好的,我用vector,

           难点2.。数据发送的时候用TThread线程类,自定义线程,要做到准确的时间检测表质量的变化,

           难点3.。在与进程通讯的时候保证字符数据的完整性,和准确性,基于消息循环的处理,才不会丢失消息。。接错消息。