串口通信协议数据处理二

该部分主要针对主动发送的连续仪表数据进行处理。只处理固定长度的数据。

在称重系统中,主要针对金钟和托利多的仪表进行处理。

串口的数据接收有两种方式,一种是通过事件触发方式,通过监听DataReceived事件;另一只就是通过循环主动查询BytesToRead属性,来判断是否有数据需处理。主动查询程序控制更方便,采用主动查询。

要进行通讯数据的处理,首先需要接收从com口获取的数据。接收到的数据需要一个内存空间进行存储。考虑到接收到的数据是连续数据,且数据接收后要进行后期的处理,处理后就要对数据进行移除,采用一个循环队列进行处理。

对数据的协议进行处理,首先要获取一个完整的数据包。获取的完整的数据包实体,主要包含两个属性,一个是数据包的内容,一个是获取到该数据包的时间戳。

要获取到这个完整的数据包,需要一个数据包的过滤器。数据包的过滤器主要包含协议包数据长度、特征码(特征码位置和特征码的值)。特征码:不仅包含开始字符、结束字符,还可包含指定位置的字符,例如倒数第二位字符,可更通用。

特征码的指定:主要包含特征码的位置和特征码的值。 通过这两个数组可灵活处理常见的情况。

获取得到完整的协议包之后,可再进一步的对数据进行处理。仪表数据主要包含重量数据、符号位、是否超载标志、是否稳定等标记。

对应的协议处理类

时间: 2024-11-06 10:51:47

串口通信协议数据处理二的相关文章

基于STM32之UART串口通信协议(二)发送

一.前言 1.简介 在上一篇UART详解中,已经有了关于UART的详细介绍了,也有关于如何使用STM32CubeMX来配置UART的操作了,而在该篇博客,主要会讲解一下如何实现UART串口的发送功能. 2.UART简介 嵌入式开发中,UART串口通信协议是我们常用的通信协议之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter). 3.准备工作 在UART详解中已经有了详细的说明,在这里就不说明了. 注: 建议每次编写好一个相关功

串口通信协议数据处理一

目前数据发送主要有两种方式: 主动连续发送方式和被动的命令问答发送方式. 要发送数据,进行串口通讯,首先要设置通讯参数. 串口通信首先设置通讯参数. 第一部分设置通用参数. 主要包括串口号:e.g.:COM1 通讯参数:波特率. 奇偶校验. 数据位. 停止位. 第二部分根据具体的协议进行数据处理. 在设置完第一部分的参数后,就可以正常的接收发送数据. 但接收和发送的数据,还需要根据约定的协议,对数据进行处理. 数据处理需分步骤进行处理. 串口通信也会存在TCP通讯中数据包的粘连. 首先需从接收到

自定义用户层的灵活性串口通信协议

想不到第一次接触串口就要去写一个自定义的灵活性串口通信协议,所以在这里记录一下自己的心得,有什么不合理的地方还请大佬们指出. 先说明这里提到的灵活性其实也是相对来说的,并不是说明数据包都可以定义. 一.用户层串口通信协议 简单的来说用户层的串口通信协议就是如何定义一个数据包格式,发送端按照规定的数据包格式发送出去,接收端按照规定的数据包格式解析出正确的数据. 那为什么又要在用户层定义呢,其一是因为底层的通信协议不是随随便便就可以写出来的,二是因为我们在市面上买到的串口模块本身就已经有了底层通信协

使用win32 API 实现串口通信 (二)

通常对于串口通信协议规定,有命令帧与应答帧. 1.协议规定,如头+命令字+数据块长度+数据块+校验. 对于协议规定的具体帧,可以为每一个帧,建立一个结构体数据,用于存储我将要接收的数据,这样我们可以事先建立多个结构体,通常大概会建立10到50不等,这与通信的数据协议有关. 2.现在我们要考虑的是如何将一个完整的数据帧去掉头.命令字.校验,存入结构体中,以便我们可以直接使用结构体中数据成员,也方便使用.通常C++的做法是使用运算符重载进行复制,将一个我们接收到buffer数据帧,复制到结构体中.

了解saltstack的通信协议zeromq(二)

上文讨论了PAIR/PAIR,REQ/REP两种模式,现在看看PUB/SUB和PUSH/PULL模式. PUB/SUB:发布订阅模式,跟我们订阅新闻类似的,采用异步IO,多对多模式,如果没有订阅,服务端发送的消息直接丢弃掉. pub_server.py import zmq import random import sys import time port = "5556" if len(sys.argv) > 1:         port =  sys.argv[1]    

单片机: 自定义串口通信协议的实现

使用51单片机完成一个简单的串口通信协议. 要求: 一个协议帧为8个字节,其中头部两个字节,分别是0xFF,0xFE; 第3个字节代表第一个数据,第4个字节代表第二个数据(均为正数); 第5个字节如果是0,代表两个数据的和,1的话代表两个数据的差; 第6个字节为0,代表使用十进制显示,为1代表十六进制显示; 最后两个字节代表协议尾部,值分别为0xFD,0xFC. 将传输的两个数据和他们的计算结果分别显示在数码管上. 注意,如果差为负数,要将负号显示出来. 思路:使用串口中断,先接收8个字节至数组

如何设置ubuntu系统的串口输出(二)

解决之前遗留问题: (1)开机后VGA上有"linux login:"登录提示,而串口侧没有 解决方法:将ttyS0.conf改为如下内容: [email protected]:~$ cat /etc/init/ttyS0.conf # ttyS- getty # # This service maintains a getty on tty1 from the point the system is # started until it is shut down again. sta

嵌入式linux串口编程(二)

/*com_writer.c*/#include "uart_api.h" int main(void){ int fd; char buff[BUFFER_SIZE]; if((fd=open_port(HOST_COM_PORT))<0)  /*打开串口*/ {  perror("open serial error");  return 1; } if(set_com_config(fd,115200,8,'N',1)<0) /*配置串口*/ {  

STM32串口中断实例二

int main(void) { uint8_t a=0;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时钟设置 /*嵌套向量中断控制器 说明了USART1抢占优先级级别0(最多1位) ,和子优先级级别0(最多7位) */ NVIC_Configuration(); //中断源配置 /*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz.PA9,PA10端口复用为串