摘 要:本文描述了自动摊铺机控制系统的原理和结构,并在此基础上详细介绍了实时多任务操作系统CMX在自动摊铺机系统中的应用,包括CMX系统简介、系统主要函数、主控制器C164CI、自动摊铺机系统任务划分和部分程序设计。
关键词:自动摊铺机;CMX;C164CI
引言
随着高等级公路的不断发展,对于高等级公路的路面基层和底基层施工质量的要求也日益严格,采用常规的施工方法已难以满足其表面几何尺寸和平整度的要求,因此,采用摊铺机摊铺路面基层、底基层施工势在必行。公路工程任务中,质量要求高、时间紧、操作条件恶劣,迫切要求改善操作环境、降低劳动强度、提高摊铺机自动化程度。工程机械一体化和机器人化是工程机械未来的发展方向,融合电子技术、计算机技术、控制技术、通信技术实现机械产品的自动化和智能化,为机电一体化技术开辟了发展的广阔天地。该沥青混凝土自动摊铺机的研制与开发,将提高道路摊铺工程的自动化程度和智能化水平,改善道路工程的操作环境和劳动条件,降低劳动强度,提高摊铺机产品的档次,成为国内领先、国际先进的国产化产品,对促进我国公路交通事业的发展具有重要意义。
摊铺机工作原理
沥青混凝土道路的摊铺过程是:工作时,由装载机从沥青混凝土搅拌站将混合搅拌好的高温铺路材料快速运输到摊铺机前方,将原料倒入摊铺机料斗中。料斗的下方是左、右两条输料带,输料带将原料一直带到车体后方,从输料带上落下。分料架是两个螺旋杆,它们通过旋转将堆积在中间的原料向两边分开,基本均匀分布在路面上。车体的最后方是熨平板,熨平板用高强压和振捣器的高频率将原料压实,待摊铺机走过,原料冷却后,路面形成。
图1 摊铺机控制系统的结构和组成(略)
自动摊铺机系统的总体结构设计
自动摊铺机系统庞大且复杂,包括车体的方向、速度控制,输分料控制,大臂、熨平板、找平控制,发动机的起、停控制以及各种状态参数的测量、显示和故障报警。为了提高系统的可靠性,采用集散型计算机体系结构,实现了集中管理以及功能和危险的分散,方框图如图1所示。
CMX在自动摊铺机系统中的应用
CMX实时多任务操作系统简介
CMX公司开发的CMX-RTOS for 16X全功能多任务操作系统,最多可支持256个实时任务,可裁减其内核代码仅4K左右,提高了实时性。它可挂接CAN驱动程序,提供C语言源代码,并且完全支持选用的Tasking/166
C编译器或keil C166编译器。其主要特点如下。
■ CMX RTOS是一个多任务实时内核,主要应用于8位以及16位的单片机应用场合。
■ CMX以C编写,而且提供了一系列的内核服务,方便用户编程。CMX实时内核具有重新配置(可裁减)功能,用户可以根据应用的实际要求在系统中只包含必要的内核服务。
■ CMX提供了一个操作系统内核和一系列函数调用。其内核可以完成对任务的控制、发送和接收消息、处理事件、控制资源、用不同方法控制定时、提供内存管理以及任务切换和中断。
■ CMX还提供了PC机上的程序开发平台PcProto,可以在PC机上实现快速的应用开发。
■ CMX-CAN是一个复杂的CAN总线应用接口软件包,作为CMX的扩展。
■ CMX-TCP/IP是一个可移植、高性能的专家库函数。
■ CMX的PCMCIA在其提供的一系列函数调用中实现了PCMCIA的存储映射。
CMX实时多任务操作系统主要函数
CMX实时多任务操作系统分为八类函数:任务管理、定时管理 、存储器管理、资源管理、 事件管理、系统管理 、消息管理和排队管理,如表1
所示。一个任务有几种状态,如表2所示。
表1 CMX系统主要函数(略)
表2 任务状态(略)
主控制器
本系统中采用亿恒公司16位CMOS单片机系列的C164作为主控制器。亿恒C164的16位单片机结合了高性能CPU与功能丰富的外设,每秒可执行1250万条指令,在CPU时钟频率为20MHz时具有下面的性能特点:
带有4级流水线的高性能16位CPU
80ns最小指令循环时间,大多数指令仅需1个循环,即两个CPU循环;16 16位乘法需400ns(20个CPU循环),32位除16位需800ns(40个CPU循环),处理能力达到10MIPS。
集成片内存储器
64KB片内可编程FLASH;2KB内部RAM,用于变量存储器池、系统堆栈和代码;2KB片内高速RAM,用于变量、用户堆栈和代码;4KB片内数据EEPROM,用于非易挥发性变量。
外部总线接口
独立或复用总线配置;可产生段分配和片选信号;8位或16位数据总线。
16个优先级中断系统
图2 主交互机和任务模块之间的关系图(略)
中断节点可达33个,带有独立的中断矢量;在内部程序执行时,240ns/400ns的中断等待时间;快速外部中断。
智能在片外设子系统
8通道10位A/D转换器,带可编程转换时间(最小为7.76 s;5个定时/计数器;同步/异步串行通道;带有15个信息体的CAN模量;可编程时间间隔的看门狗定时器;实时时钟;用于系统初始化的程序引导装载器。
(6)59个I/O引脚
输入模式具有三态,具有位寻址功能。
主交互机多任务处理机制
主交互机在整个摊铺机系统中的作用是,为操作人员提供一个良好的操作界面和环境,提高工作效率和工作质量,协调各部分之间的工作。它作为整个控制系统的核心,一方面负责接受来自键盘的按键信息,把用户的控制命令下达给下位机;另一方面通过CAN总线在左右交互机、主交互机和下位机之间进行通信和联络,达到控制和交换信息的目的。
主交互机需要处理的任务比较多,如LCD液晶显示功能、专用PVC键盘功能、CAN总线通信功能和RS232串行通信功能。其中,PVC键盘功能部分包括处理键盘按键信息,给测量控制计算机发送控制命令,给显示部分提供控制命令,同时采样开关量和模拟量输入数据;LCD液晶显示部分根据键盘控制命令,显示相关的数据;CAN总线通信部分则负责联络整个系统之间的各计算机,保障整个系统协调一致地工作;RS232串行通信功能用于与远程通信模块进行通信。
由于上位机系统需要完成的任务比较繁重,同时有一定的实时性要求,因此在上位机的应用软件中决定采用CMX-RTOS操作系统作为整个系统设计的基础。CMX-RTOS是一个适用于单片机的实时多任务操作系统,多个不同的任务可以在宏观上同时执行,能够较好地满足上位机系统的要求。
下面是各模块之间的关系图:
其中:
KeyBoard Interrupt为键盘中断服务程序;
KeyBoard Process为键盘信息处理函数;
Timer0 Interrupt为定时器0中断服务程序,用于产生时间片;
Timer2 Interrupt为定时器2中断服务程序,用于定义传感器扫描时间间隔;
CANReceive Interrupt为CAN总线接收中断服务程序;
CANSend Interrupt为CAN总线发送中断服务程序;
Display Process为LCD液晶显示函数;
Sensor Task为传感器扫描函数;
SerialReceive Interrupt为串行接收中断服务程序;
SerialTransmit Interrupt为串行发送中断服务程序。
实时多任务程序的实现
下面主要介绍串口初始化函数、串行发送中断服务程序及系统初始化程序。
(1)串口初始化函数:
void serial_init(void)
{
P3 |=0x0400; //设置P3.10为输出锁存(TXD)
DP3 |=0x0400; //设置P3.10方向控制(TXD输出)
DP3 &=0xF7FF; //复位P3.11方向控制(RXD输入)
S0TIC=0x45; //发送中断开放
S0RIC=0x46; //接收中断开放
S0BG=0x0040; //设置波特率为9 600Bd
S0CON=0x8011; //设置串口模式
}
(2) 串行发送中断服务程序:
……………………….
#define OUTLEN 16 //串行通信发送缓冲区空间
unsigned char outstart; //发送缓冲区开始索引
unsigned char outend; //发送缓冲区结束索引
char OUTBUF[OUTLEN]; //发送缓冲区存储
int outtask=-1; //输出任务的任务号
bit sendfull; //标志:发送缓冲区满
bit sendactive; //标志:发送激活
bit sendstop; //标志:XOFF字符
…………………
void SerialTransmit(void) interrupt SERIAL_TRANSMIT0=0x2A using
S_RBANK
{
if(outstart!=outend) //如果字符在缓冲区
{
if(!sendstop) //如果未接收到结束符
{
S0TBUF=outbuf[outstart++ & (OUTLEN-1)]; //发送字符
Sendfull=0 //清"sendfull"标志
if(outtask!=-1) K_Task_Wake(outtask); //如果任务等待:信号准备
}
}
else sendactive=0; //如果所有址逊⑺驮蚯濉皊endactive"
}
(3) 系统初始化程序:
#include <reg166.h> //80C166特殊功能寄存器定义头文件
#include <rtx166t.h> //CMX系统库的头文件
#include <cpfuncs.h> //函数声明头文件
#include <stdio.h> //标准I/O文件
#include <ctype.h> //字符函数
#include <string.h> //字符串和存储器函数
extern void serial_init(void); //外部函数:初始化串口
#define INIT 0 //定义任务的任务号
#define KeyBoard Process 1
#define Display Process 2
#define Sensor Task 3
//任务INIT:初始化
void init(void) _task_INIT //程序运行开始处
{
unsigned char STATUS
DP2=0xFFFF; //数据方向寄存器
serial_init(); //初始化串口
STATUS =K_Task_Create(KeyBoard Process) //启动键盘处理任务
if(STATUS= =K_ERROR) //键盘任务启动异常处理
{
printf("Task_Create_KeyBoardProcess failed")
}
STATUS =K_Task_Create(Display Process) //启动LCD显示任务
if(STATUS= =K_ERROR) //LCD显示启动异常处理
{
printf("Task_Create_ DisplayProcess failed")
}
STATUS =K_Task_Create(Sensor Task) //启动传感器扫描任务
if(STATUS= =K_ERROR) //传感器扫描启动异常处理
{
printf("Task_Create_ SensorTask failed")
}
STATUS =K_Task_Kill(INIT) //停止初始化任务(不再需要)
if(STATUS!=K_OK) //初始化任务停止异常处理
{
printf("INIT failed")
}
}
结论
由于摊铺机的功能繁多,运作复杂,且有一定的实时性要求,因此在摊铺机的应用软件中采用CMX-RTOS操作系统作为整个系统设计的基础。经过反复设计、调试和修改,最终生成系统的应用程序。经过大量的现场实验,这套软件能很好地满足工程设计要求,运行稳定、可靠,并具有很高的实时性。
|