数据监测模块的实时性分析与设计
在分析实时数据监测模块实时性需求的基础上,提出一个通用实时数据监测模块系统结构,并阐述该模块的软件实现。该系统采用MODBUS_RTU通信协议,采集各个监测模块的实时数据,并在LCD上以图形方式显示系统运行的情况。
关键词 实时性 数据监测 LCD μC/OS-II
实时数据监测是保证大中型旋转机械安全运行的重要手段。随着工业自动化程度的日益提高,对旋转机械的实时数据监测的实时性、可靠性也提出了更高的要求。
笔者在S3C44B0上基于μC/OS-II进行通用实时数据监测模块的设计,并将其应用在旋转机械监视保护系统中,实现了很好的实时性。该监测模块具有对32个模拟量测点进行采集、显示、通信与管理的功能。
1 系统实时性需求
该实时数据监测模块是基于μC/OS-II进行设计的,而保证系统实时性的重要策略是系统的中断处理机制。下面首先对系统设计的中断处理机制进行分析。
1.1 中断处理机制分析
实时系统最根本的特点是实时性,而中断处理程序是实时系统的重要组成部分,是RTOS实时性的重要体现。系统通过中断机制了解外部世界,并对外部事件立刻作出响应。实时系统的反应速度取决于系统对于中断的响应速度和中断处理程序的处理速度。为了获取对外部事件的最短反应时间,μC/OS-II系统中断响应过程如图1所示。第①阶段是中断延迟时间,从出现中断请求到当前任务开中断这一过程。实时系统在进入临界区代码段之前都要关中断,执行完临界代码之后再开中断。关中断的时间越长,中断延迟就越长。第②阶段是内核保存当前任务的状态,将CPU寄存器压栈,以便为中断服务。第③阶段调用OSIntEnter()函数或把中断嵌套层数计数器直接加1,用OSIntExit()函数,将中断嵌套层数计数器减1,当嵌套计数器减到零时,μC/OS-II要判定有没有优先级较高的任务被中断服务子程序唤醒。如果有优先级高的任务进入了就绪态,μC/OS-II就返回到那个优先级高的任务B。如果中断嵌套层数计数器大于0,μC/OS-II将被返回到被中断了的任务A。OSIntExit()函数的作用是进行中断级的任务调度。第④阶段恢复已压栈的寄存器值;最后执行中断返回指令,结束中断。
根据上述中断处理机制,中断响应时间是影响中断实时性的最重要指标,而中断延迟是其主要因素,延迟时间主要由系统时钟和关中断的时间决定。由于系统存在对任务和多中断的调度,所以中断延迟是个变量,一般为4~28个处理器周期。
1.2 实时数据监测模块实时性需求分析
该实时数据监测模块最多同时对32个测点的数据进行实时监测。下面就以32个测点数目对该系统的实时性进行分析,并从系统测量时间、功能要求两个方面说明系统保证实时性的时间条件。
1.2.1 功能要求
① 32同步采样,即系统能够进行多通道采样,并且系统的A/D转换芯片对采样信号可以进行高速动态采集波形的要求,通道采集频率高达240 Hz。
② A/D转换位数,不小于16位。
③ 要求系统必须与计算机接口进行通信,并且接口具有足够的传输速率来满足系统的实时性要求。
④ 要求该系统具有即插即用功能,在即插即用的同时,系统能够实时更新测点的数据以及状态参数。
⑤ 该系统必须具有报警延时和报警保持功能。各个通道的报警延时用户可以根据自己的需要设定,并且报警状态可以被保持。
1.2.2 测量时间
因为每个测点就是需要采集的一个数据源,因此系统需要同时对32个数据源的数据进行采集。每个测点可以分为多个通道(假设都为2个通道),系统需要同时采集的数据有64个。这样可以计算出系统测量周期t为:
t=64×系统对每个通道数据源的测量时间
每个通道的测量时间包括通信时间和A/D采集时间、显示时间。
(1) 通信时间
系统通信采用工业控制和分布式系统协议MODBUS_RTU通信协议。通信协议采用十六进制的形式,所有寄存器采用的都是16位寄存器。寄存器中数据的排列采用大端格式。MODBUS_RTU基本帧格式如表1所列。
该系统按照上述MODBUS_RTU的基本帧格式发送命令。发送命令基本流程如下:上位机按照表1叙述的MODBUS_RTU基本帧格式向下位机发送,下位机接收到上位机发送过来的命令后,执行相应的操作,然后将返回上位机应答信号。这一过程成为一个通信过程。该系统的一个通道的通信时间为10 ms。
(2) A/D采集时间
系统A/D采集转换需要采用高速动态的波形采集方式,每秒最高可采50 000个数据,那么采集一个数据源的时间为 2 μs。完成对32个测点64个数据源的采集时间仅为2 μs×64=128 μs。
采集数据的频率最低可以为每秒钟采集2500个数据,那么采集一个数据的时间最大值为0.5 ms。
(3) 显示时间
嵌入式触摸屏装置是一种人机交互设备,将触摸屏安装在LCD液晶屏上,配以相应的控制电路对触摸屏和LCD进行控制。用户通过触摸操作,就可以对相应的设备进行交互。触摸屏由触摸检测部件和触摸屏控制器组成。
采集到的数据送回到触摸屏控制器的X与Y值仅是对当前触摸点的电压值的A/D转换值,它不具有实用价值。这个值的大小不但与触摸屏的分辨率有关,也与触摸屏与LCD的贴合情况有关。因此,要想得到比较精确的体现LCD坐标的触摸屏位置,还需要在程序中进行转换。假设LCD的分辨率是320×240,坐标原点在左上角;触摸屏分辨率是900×900,坐标原点在左上角,则转换公式如下:
式中:X、Y是对当前触摸点电压值的A/D转换值;X1、X2、Y1、Y2分别是触摸屏坐标的最大值和最小值。
LCD显示时将采集到的坐标经过具体的转换程序进行转换。转换需要有一定的时间,所以LCD的显示时间t包括取得当前触摸点的电压值的时间以及由程序转换得到当前A/D转换值的时间。触摸屏采用中断方式对数据进行采样,可以利用定时器对触摸屏的采样基准时间进行设定,一般设定触摸屏的采样基准时间为10 ms。触摸屏每隔10 ms对数据进行一次采样,即每隔10 ms对每个通道的数据进行一次采样,并将其显示在LCD上。
根据以上所述,系统对每个通道数据源的测量时间tchannel =通信时间tc +采集时间ts+显示时间tl=10 ms + 0.5 ms +10 ms = 20.5 ms。此时系统中最多64个通道,那么系统完成64个通道的测量周期为T=64×tchannel=64×20.5 s≈1 s,实时数据监测模块的设计必须满足上述要求才能很好地满足系统的实时性。
2 系统设计
根据上述对实时数据监测模块实时性的需求分析,将整个系统的体系结构分为3个模块: 第1个模块是LCD显示模块,第2个模块是采集和通信模块,第3个模块是监测点模块。如图2所示,LCD显示模块用于显示采集数据和以按键方式发送命令。通信模块中LCD通过按键操作的方式通过MODBUS_RTU通信协议与各个监测点之间的通信连接,通信采用RS232/RS485无源转接器连接。该实时数据监测模块通过RS232/RS485对各个监测点的数据进行采集,并将采集到的数据送入各个监测点的数据缓冲区(数据缓冲区包括保持寄存器、控制寄存器和状态寄存器)。系统的数据链路层采用MODBUS_RTU通信协议。
3 软件设计
通过对各嵌入式操作系统的特点、性能进行可行性分析及比较,本模块采用了μC/OS-II作为该模块需要移植的操作系统。
3.1 任务划分
μC/OS-II是一种占先式多任务内核,其实现的任务调度是基于优先级的,即优先级最高的任务一旦准备就绪,就取得CPU的所有权开始投入运行。目前,μC/OS-II管理多达64个任务,其中8个保留给系统,应用程序最多有56个任务,能满足一般嵌入式系统的需要。在μC/OS-II中,每个任务的优先级要求不一样且是唯一的,所以任务调度工作非常简单,即查找准备就绪的最高优先级任务,然后进行上下文切换。μC/OS-II下每个任务有休眠、就绪、运行和中断等状态。
分析μC/OS-II的源码会发现,它把任务的优先级作为任务的标识符来使用。只有进入就绪态的最高优先级的任务才能得到CPU的使用权。任务划分是开发实时系统软件的重要一步。要基于简化任务间的通信这一目的进行任务划分,使各任务程序实现的功能模块化。在此模块中,将处理采集和通信任务都设置了较高的任务优先级,通信任务为Task40_ComputerCom,采集任务划分为TMapStaticData和TMapDynamicData。为使系统能够及时更新管理模块中的静态数据,将对功能模块静态数据进行更新的任务的优先级设置成两者中的最高。在模块中的其他任务可根据具体情况进行设置。表2详述此模块中创建的各任务的任务说明及优先级划分。
3.2 任务调度策略
TMapDynamicData任务轮询所有在线测点的实时数据;同时,该实时数据监测模块在RAM中为每个功能模块建立一个数据映射区,并在映射区中保存各功能模块的表号、变量参数、报警状态、工作状态等实时信息。在映射区中的数据可分为动态数据和静态数据。动态数据是各个功能模块的实时测点参数和状态数据。当用户使用触摸屏按键方式完成对某一测点的动态数据映射区进行操作时,应用系统将立即唤醒任务TMapDynamicData,来更新在映射区中对应于此测点的动态数据,并且在触摸屏上会显示出各个测点的动态数据信息。静态数据是反映各个测点相关的配置信息,不会时刻变化,但却反映了测点的数据参数的特性。一旦测点的这些数据信息被修改了,映射区中对应数据就必须更新。为了降低整个系统的通信开销,在实际应用中,没有频繁地更新映射区中的静态数据。当用户触摸屏按键方式完成对某一测点的静态数据进行操作后,应用系统立即唤醒任务TMapStaticData,来更新在映射区中对应于此测点静态数据。
此实时数据监测模块任务调度策略实现了多个不同优先级的任务与TMapDynamicData任务间的通信。比如,LCD的主界面显示任务Tmain_Board,详细显示界面任务Tcheck_Board以及巡检界面任务Tcheck_system都与TMapDynamicData进行任务间的通信。模块必须优先处理LCD通过TComputerCom任务修改某一测点的静态数据,同步更新各个监测点的静态数据的情况。此任务通信过程不仅包含触发事件的通知,还要考虑任务间相应数据的传递。因此必须通过消息邮箱、消息队列或者事件标志组方式来实现此数据传递的情况。经进一步分析得出,由于负责映射静态数据的TMapStaticData任务优先级高,模块设计中采用了消息邮箱方式来处理其他任务与此任务间的通信过程。模块设计任务逻辑关系如图3所示。
笔者认为,在开发基于多任务的嵌入式项目时,为使整个模块的设计具有结构化、模块化、标准化的特点,也便于将来模块实现的维护与升级,应该尽量简化各个任务间的逻辑关系,体现各个任务功能的独立性和完整性。每个任务实现一个或若干个功能,但必须成为一个单独的模块。任务间的调度策略主要通过延时以及信号量、消息邮箱、消息队列来完成。
3.3 程序实现
基于μC/OS-II嵌入式实时操作系统处理并发任务,该实时数据监测模块软件设计部分伪代码如下:
void Tstart(void * pdata) {
while(1) {
创建TMapStaticData 通信任务;
创建TMapDynamicData 通信任务;
创建LCD的TMain_Board主界面显示任务;
创建LCD的Tcheck_Board测点数据详细显示界面任务;
创建LCD的Tcheck_system测点数据显示巡检任务;
};
}
结语
基于μC/OS-II的旋转机械监视实时数据监测模块利用了μC/OS-II能够稳定、安全处理并发多任务这一特点,并按所述调度策略协调多任务运行,提高了模块程序的运行效率。该模块一直稳定运行,体现出较高的实时性和可靠性,取得了较好的实际效果。
评论
查看更多