咨询电话

ENGLISH0755-86329511
学习专题

咨询电话

0755-86329511
您的位置:首页 > 学习专题 > 专业技术专题 > 工业自动化称重仪表>详情页

基于RTX称重控制仪表的设计方案

发布时间:2020-10-12 10:50:59 |来源:网络转载

1引言
随着嵌入式系统EOS应用的日益广泛,控制系统的规模和难度也随之加大,对嵌入式系统的软件开发效率的要求也越来越高,像Ficos,Linux,RTX等,尤其RTX和acos更加突出其实时性,在称重控制行业,越来越多的称重控制仪表都采用嵌入式操作系统,在没有操作系统支持的情况下,多任务调度成为单片机应用系统构造上的重要难题叫比起传统在单片机上运行程序,它的运行效率更高,稳定性更好,实时性更好,同时也便于对产品软件进行维护,相比传统单片机裸奔,运用RTX开发称重控制仪表具有如下几个优点:
•可抢占的任务调度——根据需要进行调用,从而确保了更好的程序流和称重事件响应;
•多任务——任务调度会产生同时执行多个任务的效应;
•确定性的行为——在定义的时间内处理事件和中断;
•较短的ISR——实现更加确定的中断行为;
•任务间通信——管理多个任务之间的数据、内存和硬件资源共享,如见图1所示;
•自定义的堆栈使用——每个任务分配一个定义的堆栈空间,从而实现可预测的内存使用;
•系统管理——可以专注于应用程序开发而不是资源管理(内务处理)。

任务内存分配图

1任务内存分配

2RTX内核简介及称重仪表的原理
2.1RTX内核构架
IRTX定性为实时操作系统RTOS,适用于中断的嵌套;
•互斥事件Mutex,当共享内部资源时,设置互斥标志,可以防止共享冲突;
•内存分频MemoryPool,任务通过调用内存管理,分配和释放内存,节约空间;
•邮箱管理Mailbox,可通过邮箱管理,在任务与任务间进行数据交互;
•延时间隔Delay&Interval,通过延时间隔调用,提高运行的实时性;
•事件信号Event&Semaphore,实现任务间的等待执行。
2.2称重仪表原理
称重仪表如图3所示的部件主要完成称重数据采集、称重数据显示、参数存储、按键输入、任务调度Scheduler,完成任务间的切换和ARM核和Cortex-M3内核的设备。内核处理包含还包含串口通讯、10控制、打印输出等一系列任务,这些任务的执行都有一套参考标准,即必须严格按照GB/T7724-2008《电子称重仪表》冏和GB/T23111-2008《非自动衡器》回来处理数据。下面对框图的功能模块作分析。
2.2.1ARMCortexM3的处理器
它有1个128KBFlash,1个20KBSRAM,4个16位定时器,100个可编程的I/O引脚,具有I2C、SP1、USB、15SART和CAN接口,2路10通道12位A/D转换器,RTC功能模块,WDT功能和高级电源管理功能,最高支持72MHz主频;提高CPU的运行速率。
2.2.2AD称重数据采集
称重数据采集的是OmV-lOmV称重传感器电桥信号,我们在设计仪表时一般选择带内部增益放大器的AD,或者在传感器和AD设备之间增加一道信号放大环节,这样可以帮助我们釆集到更多的有用信号。本方案我们选择24bit高精度2-A型自带内部增益放大的AD转换器。
2.2.3显示器
一般常用七段数码管,也有采用点阵液晶,点阵液晶可以显示中文,方便HMI交互。
2.2.4存储器件
市场上的存储器很多,目前较流行的是电擦除的AT24CXX系列,我们采用铁电FM24CXX的存储器,铁电的速率比AT24CXX电擦除的要快,
而且无擦写次数限制,使用寿命更长。
225实时时钟
实时时钟可以提供准确的运行时间总和,可以用于实时打印和实时监控记录,方便根据日期调出数据等。
2.2.310扩展
由于MCU的10管脚驱动能力的限制,而带动设备通常不仅需要增加驱动能,还要防止设备对CPU的干扰,一般我们采用光隔离或磁隔离去驱动MOS管或继电器,这样设备的运行干扰就相对小很多,而且能增加驱动设备的能力。
2.2.7串口通讯
串口设计为了提高EMC特性和对外部的抗干扰,这里常选择ADI磁隔离器件,串口通讯一般有标准RS232/RS485信号,工业比较流行的总线还有Profibus-DP和CAN总线,主要用于与PLC、DCS等外设数据交互,控制和打印信息的输出。
3实时称重系统软件设计
3.1软件设计流程图(如图4所示)    .
任务分配完后必须根据需要分配优先级,比    「”
如想要得到较高的按键响应,可以把任务1的优先级设为最高,但是本文主要是分析称重数据的实时监控,所以我们需要将任务3的优先级设为最高,这样可以以最快的响应速度处理称重数据。
注解,配置ARM7内核的时钟和外设等信息,以保证外设的正确运行。
注解2:RTX内核的初始化,包含内核时钟,堆栈,任务数量等的分配,并创建第一个任务。
注解3:"_taskvoidTaskO_init()”任务作用是根据需要创建用户任务,流程图(如图4所示)

软件流程图

的os_tsk_create(Taskl_Key,13),就是创建了以TaskLKey为函数名的任务1,并且分配了其优先级为13,而且把创建任务时的任务序号存放在以TID_为前缀的变量里面,这是因为以后对任务的操作都需要用到此任务序号,这个序号是RTX内核自动分配的,具有唯一性。
注解七多任务的调度和切换详见3.2章节举例说明。
注解\RTX系统自带的任务当TCB(任务管理器)列表内无就绪可执行任务,内核暂时会切换执行空闲任务。
注解气中断入口函数。
注解七用户函数可以根据用户需要任意增加和减少,RTX内核任务最大可运行255个。
3.2任务切换举例
任务的切换是要通过内核TCB来管理的,假如当前正在运行任务2“VoidTask2_Disp°”,此时AD转换完成,给CPU发送一个中断信号进入中断,中断的任务就是告诉RTX内核,任务3“VoidTask2_Disp°”已经就绪,内核则会判断任务3的优先级是否比任务2优先级高,如果是,则重新分配任务,把显示任务的运行状态压入显示任务的堆栈,再把数据采集任务的信息从数据采集任务的堆栈中恢复到MCU工作寄存器中,启动数据采集任务,而显示任务则被挂起暂停,直到任务3完成,把CPU控制权释放。任务切换流程如图5所示。
4需要注意的问题
在应用RTX时应注意以下几点:
4.1尽可能不使用循环任务切换。如果由os_dly_wait()函数来进行任务触发,则不需要保存任务内容。由于正处于等待运行的任务并不需要等待全部循环切换时间结束,因此os_dly_wait0函数可以改进RTX内核系统响应时间,更加突出实时效果。
4.2如果使用时间片,不要将时钟节拍中断速率设置得太高或太低,设定为一个较低的数值在增加每秒的时钟节拍个数的同时会增加RTX内核调度所产生的开销,因为每次时钟节拍中断大约需要100个〜200个CPU周期;也不可将时钟节拍率太高,否则会增加中断响应时间,导致中断响应不及时,所以个人建议不使用时间片任务切换。

任务切换流程图

图5任务切换流程换。我们做软件的时候,可以在有较大数据量处理的任务中间穿插。sJly.waitO函数,以便其它任务得到响应,又不影响本次任务的运行。
4.3_alloc_boxO函数比较方便的根据需要随时分配内存给任务,但是当我们使用完本次内存后一定要利用_free_box()释放内存,否则不停的被创建内存而不去释放,那么运行时间一长,内存占用达到饱和,内存溢出了直接会导致系统瘫痪,这个错误是致命性的,而且有时候不容易被发现,是一个隐患。
4.4每一个任务必须都是一个死循环,例如:
_taskvoidTaskl_key(void)
(
********    /*添加任务变量,给设备
初始化*/
os_itv_set(2);/*设置本任务每20ms发生一次*/
while⑴
(
KeyManageQ;    /*按键扫描和处理*/
os_itv_waitO;    /*等待下一个20ms的到来
如果没有while(l)把PC指针控制在Taskl_key(void),那么当运行完一次任务后,PC指针就会跑飞,程序就会乱掉,直接导致系统崩溃。
4.5称重过程是一个强实时过程,需要CPU及时采集秤台过程的数据并快速分析有效数据,从而计算其重量。如果CPU速度过慢或者程序逻辑结构设计不合理,必然会导致仪表在稳定性和实时称重控制方面的不足囹,所以必要时我们可以把称重数据采集任务的优先级设为最高。
5结论
本文介绍了多任务的创建、切换和并发多任务运行,并分析了RTX高效率数据采集的实时性,RTX内核一旦接收到事件响应,可以在最短的时
换的机制。且每个任务都可以随时被创建和删除,不仅可以把暂时不用的任务先从TCB中抽出挂起,也可以当再次需要的时候再把它拉入运行TCB列表。本文只提到了几个运用RTX设计称重仪表的关键点,希望对同类系统设计有一定的借鉴意义。    

 

文章来源于网络转载,侵删

分享到