串口通讯数据处理算法分析与实现
LabWindows_CVI开发环境下实现串口通讯的方法

软件应用
表 4 串口设置函数功能
函数名 ComB reak Com SetE scap e F lu sh InQ F lu shO u tQ SetCT SM ode SetCom T im e SetXM ode
函数功能 设置通讯终止时间 设置各种通信握手信号
清空接收队列 清空发送队列 设置硬件握手 设置通讯超时时间 允许或禁止串口通讯的软件握手
B u tton
函数为 R eceiveD a te
Q u it
QU IT
Comm and 退出应用程序, 消息
B u tton
响应函数为 qu it
413 程序部分代码 在主函数中打开串口:
O p enCom Config (1, " " , 9600, 0, 8, 1, 512, 512) ;
打 开 并 设 置 串 口, 此 调 用 语 句 打 开 串 口 1, 波 特 率 为
L abW indow s CV I 有许多标准函数库, 其中的 R S232 函数库提供了各种方式的串口通讯控制函数和 I O 函数, 一共可分为打开 关闭函数、I O 读写函数、 调制解调器控制函数、 串口设置函数、 寄存器状态函
数和回调函数 6 类。 其中部分较常用的函数如下: 这些函数返回的各种状态信息可参阅相应函数面
收稿日期: 2003 11 15
62
软件开发的角度来看, L abW indow s CV I 具有以下一 些特点:
(1) 基于标准 C 语言, 简单易学。 (2) 可视化、 交互式的开发工具。 具有人机交互 界 面编辑器, 运用可视化交互技术实现 “所见即所 得”, 使人机界面的实现直观简单。对每一个函数都提 供了一个函数面板, 用户可以通过函数面板交互地输 入函数的每一个参数及属性值。 这种交互式编程技术 大大提高了工程设计的效率和可靠性。 (3) 具有程序自动生成的能力, 可减少软件开发 过程中代码编写的工作量。 设计好的人机交互界面 (虚拟仪器面板) 存储在后缀名为 1u ir 的文件中。L ab2 W indow s CV I 自动生成原码头文件 1h, 自动声明界 面对象常量及相关的回调函数, 编程人员不必钻研这 些技术。 (4) 具有齐全的软件工具包及功能强大的函数库, 通过简单调用库函数就能驱动相应的总线的各种仪器 和硬件板卡。这些工具包和函数库具有更高的效率, 他 使得程序的编写更简洁、 直观。 (5) 完善的兼容性。借助于L abW indow s CV I, 有 经验的 C C+ + 语言开发人员可以采用熟悉的 C 语言 环境, 如V C, BC 等开发自己的虚拟仪器系统。另外, 还可将仪器库函数及子程序编译成 32 位DLL , 以用 于任何 32 位 C C+ + 环境中以及 V isua l B a sic 或 L ab2
数据处理中的数据分析与建模技巧(七)

数据处理中的数据分析与建模技巧随着信息时代的到来,数据已经成为了现代社会发展的重要资源。
在各行各业中,数据分析和建模技巧的应用愈发普遍,因为它们能够从海量数据中提取有价值的信息,为决策提供科学的依据。
本文将讨论在数据处理中的数据分析与建模技巧,并探讨其应用的一些方法和策略。
首先,数据分析是指通过运用统计和数学方法,对数据进行抽样、观察和解释,从而得出数据中隐藏的规律和趋势。
数据分析与建模技巧的核心在于建立合适的模型来描述数据。
在进行数据分析时,一种常用的方法是通过探索性数据分析(Exploratory Data Analysis,EDA)来对数据进行初步的观察和整理,寻找数据中的异常值、缺失值等问题,并进行数据清洗和预处理。
在进行数据分析时,另一个重要的技巧是特征工程(Feature Engineering)。
特征工程是指通过对原始数据进行转换和提取,以提取出更具有表现力和预测力的特征。
这包括但不限于对日期和时间的处理、文本和语言处理、特征的缩放和归一化等。
通过合理的特征工程,可以提高建模的准确性和可解释性。
数据建模是在数据分析的基础上,建立数学模型来对数据进行预测和解释的过程。
在数据建模中,选择合适的模型和算法非常重要。
常见的建模方法包括线性回归、决策树、支持向量机、神经网络等。
在选择模型时,需要综合考虑数据的类型、特点和需求,以及模型的复杂度、解释性和可解释性等因素。
除了选择合适的模型,为了提高模型的泛化能力,还需要进行模型的评估和优化。
模型评估可以通过交叉验证等技术来实现,用于评估模型的预测能力、稳定性和鲁棒性等指标。
而模型的优化可以通过参数调节、特征选择和集成学习等方法来实现,以提高模型的预测精度和鲁棒性。
在实际应用中,数据分析与建模技巧的应用需要综合考虑数据的质量和可用性。
数据质量包括数据的完整性、准确性、一致性和时效性等方面,而数据的可用性则涉及数据的获取、存储和处理等技术问题。
为了保证数据分析与建模的准确性和可信性,在数据处理过程中需要进行严格的数据验证和验证。
plc工程师基础技能

plc工程师基础技能PLC工程师需要掌握的基础技能主要包括以下几个方面:1. 电路分析:PLC工程师需要掌握电路分析的基本知识,包括欧姆定律、基尔霍夫定律等,能够熟练计算功率、电流、电阻等。
这有助于理解电路原理和PLC的工作原理,以及在设计、调试和维护PLC控制系统时解决遇到的问题。
2. 编程语言:PLC工程师需要掌握PLC编程语言,如Ladder Diagram、Sequential Function Chart等,能够编写简单的逻辑控制程序。
此外,还需要了解其他编程语言,如C、C++、Java等,以便能够与上位机或嵌入式系统进行通信和控制。
3. 自动化控制理论:PLC工程师需要掌握自动化控制的基本理论,包括开环控制、闭环控制、PID控制等,了解各种控制算法的原理和应用。
这有助于在设计和调试控制系统时选择合适的控制算法,提高系统的稳定性和性能。
4. 通讯技术:PLC工程师需要掌握通讯技术,包括串口通讯、以太网通讯等,能够实现PLC与上位机、传感器、执行器等设备之间的数据交换。
这有助于在构建和调试整个自动化系统时实现设备间的协同工作。
5. 工业现场总线:PLC工程师需要了解常见的工业现场总线,如PROFIBUS、Modbus、CAN等,了解它们的通讯协议和工作原理。
这有助于在构建和调试自动化系统时实现设备间的互联互通和互操作性。
6. 数据库和脚本语言:PLC工程师需要了解数据库的基本概念和使用方法,如SQL语言等。
此外,还需要了解脚本语言,如VBScript、Python等,以便能够自动化处理和解析数据。
7. 硬件和软件调试工具:PLC工程师需要掌握常用的硬件和软件调试工具,如万用表、示波器、逻辑分析仪等,以便在调试过程中进行故障排查和性能测试。
8. 实际项目经验:最后,PLC工程师需要在实际项目中积累经验,提高自己的技能水平。
通过参与不同类型的项目,可以不断学习和掌握新的知识和技能,提升自己在自动化领域的专业能力。
LTE系统中混合基FFT算法分析与硬件实现

LTE系统中混合基FFT算法分析与硬件实现LTE系统是目前移动通信技术中使用最为广泛的一种制式,其核心技术之一就是基于正交频分复用(OFDM)的下行传输技术。
在LTE系统中,传输信号需要经过一系列的信号处理过程,其中包括基于快速傅里叶变换(FFT)的信号处理。
为了提高信号处理的效率和减少硬件复杂度,LTE系统中通常采用混合基FFT算法进行信号处理。
本文将对LTE系统中混合基FFT算法进行分析,并探讨其在硬件实现中的一些关键技术。
一、混合基FFT算法原理及优势混合基FFT算法是将传统的FFT算法与基于二进制分解的FFT算法相结合,通过在频域和时间域中同时进行基变换来实现信号处理。
混合基FFT算法的主要优势包括以下几点:1.减少计算量:传统的FFT算法需要进行复杂的分解和重组操作,计算量较大;而混合基FFT算法通过将基变换分解为不同基数的变换,可以减少计算量,提高算法的效率。
2.降低硬件复杂度:在硬件实现中,传统的FFT算法需要大量的存储器和计算单元来支持复杂的变换操作;而混合基FFT算法则可以通过简化的变换结构来降低硬件复杂度,减少硬件资源的消耗。
3.提高信号处理效率:混合基FFT算法可以同时在频域和时间域中进行基变换,实现信号处理的并行化,从而提高信号处理的效率和速度。
二、混合基FFT算法在LTE系统中的应用在LTE系统中,混合基FFT算法主要应用于下行链路的信号处理过程,包括信号的调制、编码、资源映射等操作。
通过混合基FFT算法,可以实现对下行传输信号的高效处理和快速解调,提高系统的数据传输速率和信号质量。
在LTE系统中,混合基FFT算法通常与信源编码、调制映射等技术结合使用,共同构成了完整的信号处理链路。
通过混合基FFT算法,可以对经过调制映射的信号进行快速变换和解调,实现对传输信号的快速解析和数据提取。
三、混合基FFT算法在硬件实现中的技术要点在LTE系统中,混合基FFT算法的硬件实现需要考虑以下几个关键技术要点:1.变换结构优化:混合基FFT算法的变换结构对算法的性能和硬件复杂度有着重要影响,需要设计优化的变换结构来降低计算量和资源消耗。
基于PLC自由通信的CRC校验算法实现

多项式除法可用除法电路来实现。C C编码采 R 用的除法运算是模 2 除法, 它与算术除法类似, 但每一 位除( 的结果不影响其他位, 减) 即不向上一位借位, 故实际上就是异或, 因此,R C C校验的除法电路可由 一组移位寄存器和模 2 加法器( 异或单元) 组成。 以c CI u为例, 6 级移位寄存器和 3 R一 T 它由1 个 加法器组成, 1 如图 所示( 编码/ 解码共用) 。编码/ 解 码前将各寄存器初始化为“ ” 信息位随着时钟移人。 1, 当信息位全部输人后, 从寄存器组输出 C C结果。 R c c校验码的计算可以靠专用的硬件电路来实 R
该算法的基本依据为: 计算本字节后的 C C码, R 等于
上一字节余式 C C码的低 8 R 位左移 8 加上上一字 位, 节 C C右移 8位和本字节之和后所求得的 C C码。 R R
信号长度为 叭生成多项式用以x 表示,( 的最高 ) 9x ) 幂次为n一 k二r R 校验码多项式用 R x 表示; C ; C ( ) 编
码后将一组由原始信息码和 C C校验码组成的数据 R 块称为一个码元 , T 劝 表示。 用( 发送方编码方法 : 尸 x 乘以 了( 将 ( ) 即对应的二进 制码序列左移 ; , 尸 x 的右边就会空出n一 位)这样 ( ) k
以 C CIU为例,R R一 T C C校验码的计算步骤如下:
ie r c ai o t yt . n r e e bi f h 出 m t n e f l y t es e
HUJ 一u i ha n
K yw 川5 ccc dnac cek( R ) p Cfeo o m n ao ; R 一 U cd addcd eo : yl r udny hc C C ; L r dmCm ui tn C CI ; oe n eoe ie e ci T
qplc编程手册

QPLC编程手册一、引言本手册旨在对QPLC(Quantum Programming Language)编程语言进行全面深入的介绍,包括QPLC的概述、编程环境、基本指令集、数据类型与变量、程序结构、常用算法与功能、系统配置与通讯、安全性与防护措施、常见问题与故障排除以及案例分析与实践等方面。
通过阅读本手册,读者将能够全面了解QPLC编程语言,并掌握其基本语法和常用功能,提高编程效率和程序质量。
二、 QPLC概述QPLC是一种通用的、结构化的编程语言,用于编写控制系统的程序。
它具有简单易学、功能强大、灵活多变等优点,广泛应用于工业自动化、智能家居、机器人等领域。
QPLC语言支持模块化编程,可实现复杂控制系统的分解和组织,提高程序的复用性和可维护性。
三、编程环境介绍QPLC编程环境提供了集成开发环境(IDE),支持语法高亮、代码自动补全、调试器等功能,方便用户进行程序的编写和调试。
同时,还提供了丰富的库函数和工具包,以支持各种硬件设备和控制系统的开发。
四、基本指令集QPLC的基本指令集包括输入输出指令、控制流程指令、函数调用指令等。
通过这些指令,可以实现对硬件设备的控制、数据的处理和算法的实现。
QPLC的指令集具有简洁明了、易于掌握的特点,为初学者提供了方便的学习途径。
五、数据类型与变量QPLC支持多种数据类型,包括整型、浮点型、字符型等基本数据类型,以及数组、结构体等复合数据类型。
同时,QPLC还支持全局变量和局部变量的定义和使用,以及变量的作用域和生命周期的管理。
这些特性使得QPLC能够满足各种复杂的数据处理需求。
六、程序结构QPLC的程序结构包括顺序结构、选择结构和循环结构。
顺序结构按照代码的先后顺序执行;选择结构根据条件判断执行不同的分支;循环结构则重复执行一段代码直到满足结束条件。
此外,QPLC还支持模块化编程和函数封装,使得程序的组织更加清晰和易于维护。
七、常用算法与功能QPLC提供了丰富的算法和功能函数,包括数学运算、逻辑运算、数据处理、时间处理等。
MSP430单片机入门例程

MSP430单片机入门例程MSP430单片机是一款低功耗、高性能的16位单片机,广泛应用于各种嵌入式系统。
下面是一个简单的MSP430单片机入门例程,可以让大家初步了解MSP430单片机的基本使用方法。
所需材料:1、MSP430单片机开发板2、MSP430单片机编译器3、MSP430单片机调试器4、电脑和相关软件步骤:1、安装MSP430单片机编译器首先需要安装MSP430单片机的编译器,该编译器可以将C语言代码编译成MSP430单片机可以执行的机器码。
在安装编译器时,需要选择与您的单片机型号匹配的编译器。
2、编写程序下面是一个简单的MSP430单片机程序,可以让LED灯闪烁:c本文include <msp430.h>int main(void)本文P1DIR |= 0x01; //设置P1.0为输出while(1){P1OUT ^= 0x01; //反转P1.0的状态,LED闪烁__delay_cycles(); //延时一段时间,控制闪烁频率}本文上述程序中,首先定义了P1DIR寄存器,将P1.0设置为输出。
然后进入一个无限循环,在循环中反转P1.0的状态,使LED闪烁。
使用__delay_cycles()函数实现延时,控制LED闪烁频率。
3、编译程序使用MSP430单片机编译器将程序编译成机器码,生成可执行文件。
在编译时,需要注意选择正确的编译器选项和单片机型号。
4、调试程序使用MSP430单片机调试器将可执行文件下载到单片机中,并使用调试器进行调试。
在调试时,可以观察单片机的输出口状态和LED灯的闪烁情况,确保程序正常运行。
随着嵌入式系统的发展,MSP430单片机作为一种低功耗、高性能的微控制器,在各种应用领域中得到了广泛的应用。
为了更好地理解和应用MSP430单片机,我在学习过程中积累了一些经验,现在分享给大家。
MSP430单片机是一种超低功耗的微控制器,由德州仪器(Texas Instruments)推出。
三菱PLC多机串口通讯的应用

三菱PLC多机串口通讯的应用作者:李怀祎来源:《科学与财富》2011年第08期[关键词] 油压控制系统组态软件 RS-485总线串行通信1、引言山东境内多家小氮肥企业均采用间歇制气法生产半水煤气,随着DCS集散控制系统被大量应用,各单位自动化程度不断提高。
但在制气工序油压控制系统(包括PLC油压控制、数据采集与历史记录、其他重要参数调控)仍被广泛应用,组态软件可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯,根据用户对被控对象和控制目的的要求,在模块间进行任意组合,生成面向最终用户的实时控制系统。
本文着重讲述三菱FX系列PLC、智能模块、变频器、智能调节器与PC机在组态王下串口通讯的应用,以完善氮肥制气工序油压控制系统。
2、油压控制系统的硬件构成本系统硬件结构采用后台PC机、智能调节器、三菱FX系列PLC、中泰RM系列模块、配套硬件(MAX232、75LBCl84)及RS-485总线构成分布式油压控制系统,硬件连线如图1所示。
采用三菱FX系列PLC分布式系统作为下位机数据采集系统,具有计量精度高、功耗低、稳定可靠、成本低等特点。
三菱FX系列PLC从机完成现场数据采集和作数据处理,每台从机采集的数据通过RS-485总线按一定的协议传送给单片机主机。
单片机主机在系统中承担数据采集与处理任务,将从机单片机仪表设备组成单片机主从形式的多机通信网络。
单片机主机再通过硬件MAX232电路连接到后台PC机RS-232接口,通过串行口通信方式将数据传送到后台PC机。
单片机主机将从机采集的数据(电压、电流、开关位置、变压器状态等)组成一定格式的帧上传给PC机进行统计、二次处理。
3、组态王与单片机的串口通讯方法利用组态王的驱动程序开发包开发通信驱动程序,直接让单片机主机和组态王6.5x串行通信。
接口的驱动程序是组态软件和硬件设备连接的桥梁。
驱动程序采用微软标准的COM组件技术,创建多个互相独立的对象,每个对象都可以拥有自己的变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口通讯数据处理算法分析与实现
【摘要】本文介绍了串口通讯数据接收处理的一般方法。
该方法利用循环FIFO缓冲区,获取串口数据,并根据状态转移法对通讯报文进行分析,从而获得符合协议要求的有效报文。
文章通过实例验证了状态转移法分析串口通讯数据的有效性,为实际的工程应用提供了一定的指导。
【关键词】循环缓冲区;串口通讯数据处理;状态转移法
1.应用背景
在目前很多的工程化控制应用中,大部分采用了PC机和多台单片机构成的主从系统。
单片机主要进行数据采集,处理现场信号,驱动执行机构;PC机则通过对单片机进行集中管理,完成信息显示,数据运算并做出决策以分配任务。
PC 机与单片机之间则需通过通讯方式完成数据交互,在众多通讯接口中,串口通讯应用比较普遍。
串口通讯方式有三种:RS232、RS422和RS485;RS-232是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。
RS-422由RS-232发展而来,它是为弥补RS-232的不足而提出的。
为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。
RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。
为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。
由于EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓。
串口通讯是按照字节流的方式来进行的,即每中断一次,表明成功传送或者接收一个字节。
2.通讯协议
要进行数据通讯,那么通讯双方必须遵循一定格式的协议,这样,通讯双方才能够相互理解从对方所接收过来的数据。
串口通讯协议一般包含这样几个域:帧头、用户数据和帧尾。
为保证数据的有效性,一般加强了帧头和帧尾,帧头包含前导码、帧长度和帧号,有的增加了发方地址和收方地址,有的通讯协议将帧长度放在帧号的后面;帧尾主要是整个数据域与帧头校验的结果,类型有CRC检验、奇偶检验或异或偶校验等。
有的
协议帧尾也采用了固定的数据,甚至没有帧尾。
表1 串口通讯协议一般格式
前导码帧长度帧号数据域校验
帧头用户数据帧尾
同时通讯协议还需定义各个域的长度和每一个bit的确切的含义。
3.循环FIFO缓冲区
在通信程序中,经常使用环形缓冲区作为数据结构来存放通信中发送和接收的数据。
环形缓冲区是一个先进先出(FIFO)的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。
环形缓冲区通常有一个读指针和一个写指针。
读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。
通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。
在通常情况下,环形缓冲区的读数据仅仅会影响读指针,而写数据仅仅会影响写指针。
进行串口数据接收和发送一般也采用具有先进先出功能的FIFO循环缓冲区,如图1所示:
Tail
0 1 2 3 4 5 6 7 …… SIZE-1
Head
图1 FIFO循环缓冲区示意图
从图中可以看出,先进先出功能的FIFO缓冲区须定义一个大小为SIZE的缓冲区,存放数据,Tail指针表示该缓冲区中接收到的有效数据位置,表示写入的数据位置;Head指针表示该缓冲区中已经处理的有效数据位置,表示读出的数据位置;初始化时,Head指针和Tail指针都指到0的位置;当串口接收到数据存放到缓冲区后,Tail就加1,当Tail大于SIZE-1时,将Tail等于0,数据接收时,线性缓冲区变成一个回环;当系统从缓冲区取出一个数据进行分析,Head就加1,当Head大于SIZE-1时,将Head等于0,数据分析时,线性缓冲区也变成一个回环;依据这种方法,可以看出,数据先到的,数据先分析,建立了先进先出功能的FIFO循环缓冲区。
根据上述说明,可以使用如下结构体来定义FIFO缓冲区:
Typedef Struct Buffer_t{
Int Head;
Int Tail;
Char data[SIZE];
}Buffer;
这个结构体很简单,Tail表示写入的数据位置,Head表示读出的数据位置,data用来存放数据。
在对Head和Tail修改时,需要对SIZE取模,防止溢出。
SIZE一般根据串口采用的波特率,数据流量和计算机的处理速度来决定大小。
4.缓冲区数据的操作
根据FIFO的方式实现缓冲区的初始化、写入和读出的操作时,需要注意以下几点:
1)缓冲区的有效数据长度
缓冲区的有效数据长度表示在缓冲区中存在的没有及时处理的数据长度;可以这样计算:(Tail +SIZE- Head)%SIZE。
2)缓冲区的可以写入数据长度
缓冲区的可以写入数据长度表示在当前缓冲区中还能写入的数据长度;可以这样计算:SIZE-(Tail +SIZE- Head)%SIZE。
3)缓冲区空和满的判断条件
当Head和Tail相等的时候,缓冲区空,而当缓冲区中已经写入了SIZE-1个有效数据时,缓冲区满。
4)写入和读出的策略
当读取或者写入缓冲区时,需要检查缓冲区中的数据或者空间是否足够。
在读取时,如果没有足够的数据,是读取已有的数据还是不读取任何数据,而在写入时,如果空间不够,是部分写入还是不写入任何数据,这取决于软件开发人员的应用程序采用的策略。
一般情况下,在空间不够时,可以不做任何操作。
当出现上述情况,留给上层的程序去处理。
在实际应用中,如果读取和写入的程序设计的合理,缓冲区的大小合适,一般是不会出现写入失败的情况的。
5.串口数据的分析
使用循环缓冲区,可以非常方便的实现对串口数据的分析,而要完成协议的各个域的严格检查,实现对部分含有错误域的包和不完整的包的完美过滤,以及对混乱数据中正确包准确无误的抽取,还须对FIFO缓冲区重新定义,具体情况
如下:
Typedef Struct Buffer_t{
Int Head;
Int Tail;
Int HeadBak;
Char data[SIZE];
}Buffer;
增加的HeadBak为Head的备份,当帧头分析结束后,记录下Head的位置,以防后续数据不符合协议要求后,根据HeadBak重新恢复Head的位置。
依据前面制定的协议,需依次完成前导码的搜索,数据长度的检查、校验和的检查以及错误包的处理。
利用状态转移法,程序循环一次,从数据缓冲区读出一个字节,改变状态,每次分析结束后,Head++;在进行串口数据分析之前,必须判断缓冲区不空或缓冲区的有效数据长度不为零时,才读取数据进行分析。
分析具体流程如下:
1)判断前导码:如果成功,转到2。
2)帧长度的检查:对照协议中对长度域可能出现的最大和最小包长检查,如果正常,则转到3,否则若不是前导码,转到1。
3)帧号的检查:检查帧号是否为有效的帧号,有效,则转到4,HeadBak 等于Head,否则若不是前导码,转到1,若是前导码,转到2。
4)数据域的接收:根据帧长度判断包是否完整,若完整,转5。
5)校验和的检查:根据协议算出校验和,检查校验和是否正确,错误则Head=HeadBak,转到1。
如果正确,则读取(Head-HeadBak+SIZE)%SIZE的长度数据,根据帧号,执行相应的操作。
根据上述的处理流程,完成了协议的各个域的严格检查,实现了对部分含有错误域的包和不完整的包的完美过滤,以及对混乱数据中正确包准确无误的抽取。
6.实例验证
假如一帧正确数据如表2所示:
表2 一帧正确数据格式
前导码帧长度帧号数据域校验
0x55 0x01 0x02 0x03 0x50
帧长度表示数据域的长度,数据长度在0~32之间,帧号在0x00~0x0F之间,校验采用异或检验。
为验证上述流程的正确性,我们采取了各种案例进行验证,具体情况如下:
表3 串口数据处理流程正确性案例验证结果
通过表3中各种案例进行验证,都可以得到正确结果,每次取出的数据都符合协议,证明串口数据分析的状态转移法流程满足要求。
7.结束语
以上给出的是根据一个简单的协议,构造了一个串口接收数据缓冲区,根据缓冲区如何得到正确包的基本思路。
我们根据这个思路,在多个产品上已经得到了成功的运用。
但实际的通信系统中协议远比这个要复杂,而且涉及到数据包响应、命令错误、延时等等一系列的问题,不过有了这样的一个基础,通过克服这些困难我们就可以实现较为稳定可靠的系统。
参考文献
[1]李现勇.Visual C++串口通信技术与工程实践(第二版)[M].人民邮电出版社,2004.
[2]周立功,张华等.深入浅出ARM7-LPC213x/214x(上册)[M].北京航空航天大学出版社,2005.。