嵌入式PLC的设计及实现
嵌入式PLC的模块组成
数控系统的PLC控制模块实时性要求较高,因而必须在系统的实时域内运行。根据通用数控系统的PLC控制以及数控系统软件模块化设计的要求,将数控系统的PLC控制模块作为RT-Linux系统的实时任务之一,其优先级和调用周期取决于数控系统各任务的实时性要求以及控制要求的响应时间。PLC控制模块主要完成数控系统的逻辑控制,而被控制的输入输出也就是I/O的输入输出由PC机I/O接口卡输入输出模块来完成,即完成数控系统的PLC控制需要两个RT-Linux实时任务,如图3所示,这两个任务分别为RT-Task1(以下称“适配卡输入输出”)、RT-Task2(以下称“PLC控制”)。
图3是基于RT-Linux系统的嵌入式PLC实时任务关系图,其中适配卡输入输出主要是完成数控系统的输入输出,即各轴位置控制命令的输出、I/O的输出、I/O输入以及位置反馈输入,它实际上是数控系统控制卡的设备驱动模块,其优先级在数控系统的各实时任务中为最高级。根据其硬件特征以及运动控制要求,其响应周期为100μs,响应时钟周期由PC机I/O接口卡上的硬件定时器产生。根据RT-Linux系统对硬件中断的响应机制,输入输出控制任务的实时性是可以保证的,这一点在我们的数控系统已经得到验证。
图3中PLC控制主要是完成数控系统的PLC控制功能,其任务优先级低于适配卡输入输出,同时也低于数控系统的精插补实时任务和位置伺服实时任务。根据通用数控系统的PLC控制要求,确定其响应周期为5ms,响应周期由RT-Linux的软件定时器产生,根据RT-Linux系统的实时多任务调度机制,PLC控制任务的实时性是可以保证的。在实际应用中也得到验证。
嵌入式PLC的实时任务模块数据通讯
完成数控系统PLC控制的两个实时任务之间由于需要输入输出的数据量(一般情况下为64输入,64输出,但输入输出根据需要还可以扩展)不太大,因而采用共享内存的通讯方式,在适配卡输入输出和PLC控制
两个实时任务之间开两块共享内存,一块用于适配卡向PLC控制传输I/O口状态信息,另一块用于PLC控制向适配卡输入输出任务传输经PLC逻辑处理后的控制信息。
在这里,两个实时任务间不采用RT-FIFO进行通讯的原因在于这两个实时任务间通讯的数据量不是很大,而这两个实时任务运行周期差别较大,采用RT-FIFO传输数据,为了避免FIFO的阻塞,相应地要增加两个任务间的协调机制,这样的通讯效果未必比采用共享内存好,而且共享内存的读写速度比FIFO相对较快。
嵌入式PLC的实时任务的实现
适配卡输入输出为动态可加载模块,适配卡输入输出模块(任务)以100μs为周期的硬件定时中断,完成各轴位置控制指令和I/O的输出、各轴位置反馈值和I/O的输入,适配卡输出值来自于位置伺服任务和PLC控制任务,输入值来自于适配卡的输入接口。PLC控制模块(任务)同样也是一个动态可加载模块,它以5ms的软定时,周期性地从它与总控模块通讯的RT-FIFO读取控制信息(如M指令,S指令及T指令),同时从它与适配卡输入输出模块通讯的共享内存中读取I/O信息,然后进行逻辑处理,最后将结果写入共享内存供适配卡输入输出模块读取并输出。
结论
目前该嵌入式PLC模块已成功应用于清华大学精仪系制造工程研究所THHP-III数控系统(基于RedHatLinux8.0+RTLinux3.1)中,该模块可以满足对普通数控系统和加工中心PLC控制要求。