张国宇 邹卫军
摘 要:本文提出了基于μC/OS-II和ModbusRTU协议的密集架控制软件在Stm32F103R8T6平台上的设计方法。重点阐述了μCOS-II操作系统的移植、ModbusRTU通信协议的实现方式和主要的应用程序开发。
关键词:Stm32;ModbusRTU;μCOS-II移植
密集架是自动化仓储领域具有代表性的一类系统。它由一个固定列和多个移动列组成,通常架体之间紧密排列,不预留任何通道;工作时通过PC机或固定列的人机交互界面打开指定的存取通道。这种“常态闭合,用时打开”的特点,使得密集架系统能够节省很大的仓储空间,同时具备较高的安全性。
密集架系统的核心是控制软件及通信协议。由于系统中移动列数目的不确定,使得固定列和移动列之间的通信复杂度大幅提升,传统的基于中断响应、前后台架构的控制软件设计方式,已经很难满足系统在可靠性、扩展性、开发效率以及模块化结构等方面的要求。引入嵌入式实时多任务操作系统和高效的通讯协议,就成为提高密集架系统整体性能的关键因素。
本文提出了基于多任务实时操作系统μCOS-II和ModbusRTU协议的密集架控制软件的设计方法。软件采用基于ModBusRTU协议的“主从式”通信架构,并利用操作系统特性,将功能模块划分为多个任务,由系统调度执行。经过实验测试,这种设计方法大大提升了密集架系统的稳定性及程序的开发效率。
1 密集架系统工作原理
密集架系统通常由一个固定列和若干个移动列组成,固定列和移动列由嵌入式控制器控制,其结构如图1所示。
在密集架系统中,固定列作为核心,主要完成以下任务:
⑴与PC上位机通信,处理下发的控制指令并反馈系统运行状态和传感器信息;
⑵与本列的人机交互单元通信,处理下发的控制指令并反馈系统运行状态和传感器信息;
⑶与所有的移动列通信,实时查询各个移动列状态并下发控制指令。
移動列作为实际运行的机构,需要处理以下任务:
⑴与本列的人机交互单元通信,接收控制指令并反馈运行状态;
⑵处理固定列下发的查询指令和控制指令;执行相应控制动作,反馈运行状态和传感器信息。
由此可以看出,密集架系统控制软件的核心,在于确保固定列和移动列通信稳定的基础上,协调好来自上位机、人机交互单元和各个嵌入式控制器的控制指令和任务,保证系统能够及时高效的响应控制动作。
基于此,在密集架控制软件的设计上,论文采用具有很强的实时性、较为完备的任务调度功能及稳定的通信管理机制的μCOS-II实时操作系统;并基于ModbusRTU协议构建了软件的通信框架。
2 μCOS-II操作系统移植
本文移植μCOS-II实时操作系统针对的是基于STM32F103R8T6 ARM芯片的硬件平台,需要完成与CPU相关和硬件相关的内容的修改。
2.1 移植CPU相关内容
和CPU相关内容的移植,主要是利用CPU的定时器给操作系统提供时钟。
μCOS-II为了处理任务延时和调度等一些时间相关任务,需要由CPU的硬件定时器产生一个毫秒(ms)级的周期性中断来提供一个系统时钟。最小时钟单位就是两次中断之间的时间,称为时钟节拍(Time Tick),考虑到CPU的执行效率,本系统选择10ms的时钟节拍。
Stm32F103R8T6中,μCOS-II时钟由“滴答时钟”的中断提供:
void SysTick_Handler(void)
{
OSIntEnter();//进入中断服务函数
OSTimeTick();//调用时钟节拍服务函数
OSIntExit();//退出中断服务函数
}
2.2 移植硬件相关内容
(1)OS_CPU.C中的OSTaskInit(),它是任务的堆栈初始化代码,在创建任务时必须成功调用这个函数,否则会导致系统崩溃。
(2)OS_CPU.H中主要包含三个重要的函数定义,分别是:
·OS_ENTER_CRITICAL():进入临界区函数,负责关中断及保存全局中断标志位;
·OS_EXIT_CRITICAL():退出临界区函数,负责恢复全局中断标志位,和OS_ENTER_CRITICAL()函数成对使用,两个函数之间的代码称为“临界段”。进入临界保护函数时中断关闭,临界段在运行期间不受中断干扰,临界段代码执行完毕,由OS_EXIT_CRITICAL()函数解除中断屏蔽;
·OS_TASK_SW():任务级任务切换函数,负责完成任务的正常切换,由任务级调度器OSSched()调用。
(3)OS_CPU_A.ASM是μCOS-II唯一的汇编文件,这个文件主要涉及到任务切换、启动优先级最高的任务、中断开关等函数。
·μCOS-II启动多任务的函数是OSStart(),用户在调用该函数之前至少需要创建一个任务。在执行OSStart()函数时,将调用OSStartHighRdy()运行多任启动前优先级最高的任务,使得系统整个得以运转。
·OSCtxSw()是任务级的上下文切换函数,它被OS_CPU.H中的OS_TASK_SW()所调用;OSIntCtxSw()是中断级的任务切换,它被OSIntExit()调用,在μCOS-II运行完中断服务程序之后完成中断级任务调度。
·OS_CPU_SR_Save()、OS_CPU_SR_Restore()分别被OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()调用,主要负责屏蔽中断和恢复中断。
在移植过程中,根据用户的实际需要,可以对配置文件OS_CFG.H进行修改,从而实现μCOS-II内核的剪裁。
3 基于μCOS-II和Modbus RTU协议的控制软件设计
根据密集架控制软件的设计架构,固定列控制软件所面临的数据通信处理的复杂程度远超移动列,且固定列ModbusRTU协议实现机理和移动列完全相同,主要的应用程序也涵盖了移动列应用程序的主要设计思想。因此,本文仅以固定列为样例,来介绍基于μCOS-II和Modbus RTU协议的控制软件设计。
3.1 Modbus RTU协议
在密集架系统中,使用“一主多从”的Modbus RTU通信模式,其中固定列作为主设备,移动列作为拥有唯一地址的从设备。固定列和移动列之间可以进行通信,而移动列之间则不能通信。通信的具体流程为:
⑴固定列以中断方式接收本列人机交互界面和上位机发送的功能码为06的控制帧;
⑵固定列以固定时间间隔依次向各移动列发送功能码为03的查询帧;
⑶收到查询帧的移动列向固定列反馈当前状态信息,包括:本列运行状态、本列人机交互界面下发的控制指令、本列传感器信息;
⑷固定列综合系统当前状态和控制指令要求,确定控制逻辑,并向相应移动列发送功能码为06的控制帧;
⑸收到控制帧的移动列根据指令要求完成控制动作。
3.2 基于μCOS-II的多任务机制设计
⑴用户任务:完成来自上位机、人机交互界面和移动列各种通信数据的综合解析工作,是控制指令得以正确实现的关键任务。
⑵RS232通信任务:负责和本列人机交互界面的通信工作,任务初始化后始终保持等待信号量状态。主芯片的串口中断实时接收触摸屏命令,当接收到完整的数据帧后,调用OSSemPost()函数发送信号量,通知RS232通信任务激活ModbusRTU协议解析任务,并根据解析出的控制指令反馈响应信息或者保存按键命令。
⑶RS485通信任务:和RS232通信任务类似,它由对应的RS485接收函数调用OSSemPost()函数激活,负责和各个移动列之间的信息交互,是密集架网络稳定运行的核心任务。移动列数目较多,通信非常复杂,为了保证控制指令的实时性,必须将RS485通信任务的优先级设为所有任务的最高级。它的主要工作是:解析并保存“轮询”到的移动列状态信息、传感器信息、按键信息,等待用户任务的使用。
⑷网络通信任务:由对应的网络接收函数调用OSSemPost()函数激活,主要负责和PC上位机之间的信息交互,使得用户可以借助网络实现远程控制密集架系统。
⑸ModbusRTU协议解析任务:该任务由以上三个数据通信任务中的任意一个激活,它的主要工作是:根据ModbusRTU数据帧规范,解析及保存固定列和上位机、固定列和移动列之间传输的数据帧。
ModbusRTU协议规定数据帧之间的间隔至少是3.5个字符,而Stm32F103R8T6的串口不具备超时中断。因此,采用基于定时器中断的串口数据接收方法以确定ModbusRTU数据帧是否传输完成。
ModbusRTU数据帧在串口传输过程中,字符与字符之间的数据间隔很短,如果串口接收数据过程,出现较长时间接收不到数据的情况,则说明当前ModbusRTU数据帧已经传输完毕,后面再有新的数据接收,则作为下一帧ModbusRTU数据帧处理。本文正是利用ModbusRTU协议的这种特性,借助定时器中断来实现ModbusRTU完整数据帧的判断的,串口中断接收到第一个字节的数据后,启动定时器,定时时间设为3.5个字符的串口传输时间(根据波特率进行计算)。若在定时时间未到时,收到下一字节,则保存到同一数据帧;若定时时间已到,仍然没有收到新的数据,则触发定时器中断,通知对应的通信处理任务已接收到完整数据帧,可以进行相关数据处理。相关软件流程见图2:
μCOS-II是抢占式内核,它按照任务优先级的高低对任务进行调度,因此任务优先级的合理设置,对于密集架这种实时性要求较高的控制软件来说尤为重要。在该软件系统中,各任务的优先级由高到低依次为:RS485通信任务、RS232通信任务、网络通信任务、用户任务。
综合多任务机制的控制软件主流程结构图如图3所示。
4 结束语
本文探讨了一种密集架控制软件的设计方法,软件基于ModbusRTU协议建立固定列和移动列的通信,并利用了μCOS-II操作系统的多任务机制来合理安排密集架软件各个功能模块的执行和协调。基于该架构的控制软件,已经应用于一套固定列+17列移动列的复杂密集架系统。实践表明,软件运行稳定可靠,系统对控制指令响应及时,有效保证了密集架系统的稳定性。
[参考文献]
[1]任哲.嵌入式实时操作系统μCOS-II原理及应用(第一版)[M].北京:北京航空航天大学出版社,2005年.
[2]意法半导体技术支持:STM32F103xxx参考手册.2010.
[3]意法半導体技术支持:Cotrex-M3权威指南.2007.
[4]李月恒,梁胜之,韩存武.基于STM32处理器的Modbus TCP/RTU网关设计[J].中国科技信息,2013,(9):76-77.