linux编程之传感器数据解析

来源:互联网 发布:郑源网络歌手 编辑:程序博客网 时间:2024/05/16 07:14

这半年做了很多传感器解析的工作,如三种不同的惯导:xsens,octsns,hydrins;激光传感器sick,trimble GPS 等;在这过程中总结出了一点经验。记录在此。

第一步:确定数据协议

每个公司的传感器都会有技术文档的,做数据解析最主要的是找到数据格式协议,数据格式协议主要告诉我们从传感器中出来的原始数据流是什么格式的,一般包含每个数据包的包头、数据体、包尾的结构,这里要精确到每个字节代表什么意思,这样后面才能从数据流中解析出正确的数据。

第二步:确定传输协议

传感器跟电脑之间通讯可以采用不同的协议,主要有串口通讯、网络通讯。串口通讯又分RS232、RS422、RS485等不同的传输协议。网络通讯主要分为TCP、UDP通讯协议。确定好协议后,我们就要写出我们自己的串口模块或TCP模块或UDP模块来与传感器实现联通。

第三步:配置传感器

配置传感器主要是为了让传感器在我们需要的模式下工作,因为一般传感器都有很多种的工作模式和输出模式,每种模式输出的信息和格式都是不同的,我们在第一步中就需要根据自己的需要来确定传感器的工作模式。不同的传感器有不同的配置方法,有的是通过传感器配套的软件在电脑中配置,有的需要我们通过网传感器中写指令,即通过代码来配置传感器,大部分的传感器都是可以通过代码往传感器写指令的形式配置,这种配置的好处是每次给传感器初始化的时候都可以重新配置,这样可以保证传感器在我们需要的模式下工作,如果是通过软件配置,当传感器出现故障后输出模式改变的话,我们就无法解析出正确的数据。

第四部:读取数据流

根据需要可以读取任意个字节的信息,但最好先估计出我们需要的字符串大小,然后读取其两倍的数据以保证肯定能完整读取到数据,传感器输出的信息是字符流,我们需要从中找到我们需要的信息,这就需要我们第一步中确定的数据头了,找到头后就找到了数据,后面就 根据协议在数据头后逐字节的解析数据就可以了。


另外,在解析是需要注意数据的编码形式,最常用的是ASCALL码和二进制形式,同一个数据在这两中形式下存储形式是不同的。下面举个例子说明这个问题:

整型数123:

二进制编码:00000000 00000000 00000000 01111011  占四个字节,c语言中解析该形式是主要用memcpy()函数。

ASCALL码:00110001 00110010 00000011 占三个字节,在该形式时会将每一位当作一个字符来编码,对应ASCALL码中的值来编码,c语言中解析主要用atof()函数。

0 0