应用单元的各个模块由总控模块统一调度,并通过消息触发实现与总控模块的交互。基于消息的通信机制使应用单元独立于控制单元,应用单元模块根据用户的操作发出相应的消息,总控模块则根据消息类别生成控制单元能够识别的指令和数据。系统各个任务之间的通信均通过Linux内核提供的进程间通信机制进行。对于有顺序要求的数据交换采用先进先出队列(包括实时FIFO和非实时FIFO),而对于容量不大的数据交换则采用共享内存的方式进行。
数控系统的软件结构如图2所示。
控制单元按照任务实时性要求的不同可以划分为实时任务和非实时任务,对于实时性要求不高的任务如编译、预处理、状态监控等可以放在非实时域执行,而对于实时性要求比较高的任务如精插补、PLC控制、位置伺服等则需要在实时域执行,由RT-Linux对实时任务和非实时任务按照优先级统一调度。
3 嵌入式PLC的设计及实现
3.1 嵌入式PLC的模块组成
如图2所示,数控系统的PLC控制模块实时性要求较高,因而必须在系统的实时域内运行。根据通用数控系统的PLC控制以及数控系统软件模块化设计的要求,将数控系统的PLC控制模块作为RT-Linux系统的实时任务之一,其优先级和调用周期取决于数控系统各任务的实时性要求以及控制要求的响应时间。PLC控制模块主要完成数控系统的逻辑控制,而被控制的输人/输出也就是I/O的输人/输出由光纤通信适配卡输人/输出模块来完成,即完成数控系统的PLC控制需要2个RT-Linux实时任务,如图3所示,这2个任务分别为RT-Taskl(以下称“适配卡输人/输出”)、RT-Task2以下称“PLC控制”)。
图3中,适配卡输人/输出主要是完成数控系统的输人/输出,即各轴位置控制命令的输出、I/O的输出、I/O输人以及位置反馈输人,实际上是数控系统控制卡的设备驱动模块,其优先级在数控系统的各实时任务中为最高级,根据其硬件特征以及运动控制要求,其响应周期为100us,响应时钟周期由光纤通信适配卡上的硬件定时器产生。根据RT-Linux系统对硬件中断的响应机制,输人/输出控制任务的实时性是可以保证的,这一点在我们的数控系统已经得到验证。
图3中PLC控制主要是完成数控系统的PLC控制功能,其任务优先级低于适配卡输人/输出,同时也低于数控系统的精插补实时任务和位置伺服实时任务。根据通用数控系统的PLC控制要求,确定其响应周期为5 ms,响应周期由RT-Linux的软件定时器产生,根据RT-Linux系统的实时多任务调度机制,PLC控制任务的实时性是可以保证的。在实际应用中也得到验证。
3.2 嵌入式PLC的实时任务模块数据通信
完成数控系统PLC控制的2个实时任务之间由于需要输人/输出的数据量(一般情况下为64输人,64输出,但输人/输出根据需要还可以扩展)不太大,因而采用共享内存的通信方式,在适配卡输人/输出和PLC控制2个实时任务之间开两块共享内存,一块用于适配卡向PLC控制传输I/O口状态信息,另一块用于PLC控制向适配卡输人输出任务传输经PLC逻辑处理后的控制信息。