绣花机在缝制设备行业中占有极其重要的位置,在国内外都有广阔的市场。国产绣花机在速度、噪声、品质和功能等方面与国外高档机相比,存在着较大的差距,竞争优势较小,因此,加强绣花机的开发不仅是市场需求,更有助于提高民族产业,具有重要意义。目前随着SOC、ARM、FPGA 与CPLD 等嵌入式技术的不断发展,以嵌入式系统为主的绣花机主控制器在国内已占据了主流,具有较快处理速度的CPU 和多功能的模块扩展使绣花机运动控制系统更加强大,但高速度、高精度和高智能化的发展方向给绣花机运动控制系统提出了更高的要求,在硬件的不断完善基础上,软件的性能已成为评估系统性能优劣的一项重要考核指标,也是绣花机开发的难点之一。
本文运动控制系统软件实现是基于一种高速工业绣花机的体系结构,该体系结构以ARM9 处理器S3C2440 为CPU,结合CPLD 扩展模块,主要功能是满足绣花机在1200 转/分转速下的实时性要求(目前国内高速工业绣花机的主流转速为1000转/分),即在高速运转完成自动绣花、剪线和换色等工作的同时,保证刺绣品质和满足一些人性化要求。对此文中提出了一种基于Windows CE5.0 多线程机制的绣花机运动控制系统软件实现方案,该方案已应用于自主开发的高速工业绣花机中,取得了较好的效果。
1 运动控制系统实时性要求及模块分析
绣花机运动控制系统是强实时系统,系统所选择的运行环境必须能及时响应绣花机运动控制系统的实时性任务,如果系统响应的实时性不够,会导致绣花机在自动运行过程中出现断续等不稳定现象。由于Windows CE 系统在界面、人机交互能力、多任务以及开放性等方面的优势,开发基于Windows CE 的工控系统称为一种趋势。
Windows CE5.0 属于实时性操作系统,在Windows CE5.0 系统中,合理应用Windows CE 多线程技术来解决系统的实时多任务成为开发技术的关键。绣花机运动控制系统对各个电机以及其它模块的实时性提出了很高的要求。Windows CE 多线程机制因其能同时执行多项任务而能较好的满足这一要求,同时结合采用有效的中断方式来加强对实时性要求的实现。
根据运动控制系统的功能要求,整个系统主要分为以下几个模块:(1)主轴控制模块,控制主轴电机运转,带动绣针上下移动。(2)XY 步进电机控制模块,控制XY 步进电机,移动绣框。(3)剪线模块,控制剪线电机,完成自动剪线操作。(4)换色模块,控制换色电机,完成自动换色操作。(5)光电检测模块(A 相Z 相),主轴电机旋转位置及圈数的计数反馈。(6)限位处理模块,防止步进电机移框时越位。(7)断线检测模块,检测绣针上的线是否断掉。(8)报警模块,绣花机异常状态报警。各个模块之间的通信关系如图1 所示:
2 多线程技术在运动控制系统中的应用
Windows CE5.0 是一个多线程的多任务操作系统,一个进程由一个或多个线程组成,线程来负责执行包含在进程地址空间的代码。实际上,操作系统以一种轮转的方式为每个独立的线程分配CPU 时间片,客观上是所有的线程近乎同时执行。根据线程任务的特点,在进行运动控制系统结构设计时,将功能相关、相互之间通信较多的任务,设计成一个进程中的多个线程,使这些任务共享该进程的地址空间,减小通信和同步的开销。本文设计中,就是根据这一机制实现的。
在整个绣花机系统中。运动控制部分为一个单独的进程,在这个进程中根据图1 中的各个模块之间的关系,划分处几个线程,这些线程主要由两个大的部分组成:强实时线程部分,包括主轴电机线程、步进电机线程、光电编码器线程、限位中断线程和断线处理线程;实时线程部分,包括换色线程、剪线线程和报警线程。系统中的线程同步主要是针对强实时线程而言的,而实时线程是通过像调用函数一样被调用来实现功能的。
2.1 多线程优先级设置
在多线程系统中,由于高优先级的线程能随时中断低优先级的线程,获得运行权,这样在设计系统时就要精心安排各个线程的优先级,只有合理的划分应用线程的优先级,系统才能合理调度这些线程,从而保障系统的实时性能要求。
Windows CE5.0 支持0~255 共256 了优先级,其中0 优先级最高,255 优先级最低。根据Windows CE 操作系统中的线程的优先级层次安排,0~96 为高实时性程序的线程[2],再结合绣花机整体系统的任务安排,运动控制系统部分的线程对象的优先级也主要安排在这个层次。运动控制部分的线程任务根据系统中的模块来划分,其内容和优先级安排如表1 所示:
为了设置和获得一个线程的优先级,在系统中可以使用CeSetThreadPriority()和CeGetThreadPriority()函数来实现。线程创建完其优先级也被确定下来。
2.2 线程之间的协调与通信
在多线程系统中,同步不同线程的活动是很重要的。WindowsCE5.0 提供了多种方法来实现线程之间的协调和同步,有信号量(Semaphore)、临界区(Critical Section)、事件(Event)、互斥体(Mutex)、对点的消息队列等。各个方法都有各自的特点和适用的场合。在设计中的运动控制系统中,线程同步主要用的是事件和中断来实现的。
2.2.1 事件Event 的应用
事件是用的比较广泛的同步对象,如果一个线程需要通知其它线程某个时间发生,可以使用事件(Event)同步对象,前一个线程给时间发送一个通知信号,其他对事件发生感兴趣的线程一般调用等待函数在时间上等待。初始化线程将事件设置为无信号状态后开始进行初始化。当初始化完成后,线程把事件设置为有信号态,通知下一个线程来完成余下的工作。在运动控制系统中主要定义了以下事件:
Event_EncoderA //编码器A 相计数事件, 标志主轴电机所在位置(100°和220°)
Event_MotorX //X 轴电机移动事件,标志X 轴电机运行完。
Event_MotorY //Y 轴电机移动事件,标志Y轴电机运行完。
Event_EncoderZ //编码器Z 相中断事件,标志电机旋转完一周。
Event_Limit //限位中断事件,标志绣框越界。
事件创建采用CreateEvent()函数来实现,同时再创建好事件后要对其进行初始化。
2.2.2 运动控制系统中断处理
在运动控制系统中,中断处理是重要部分。事件的创建也是为中断处理准备的,中断响应是根据事件触发来实现的。中断源的配置是由Windows CE 中的OAL(OEM 适配层)操作的[3][5],OAL 将物理中断号映射成逻辑中断号,并关联具体的事件。实现方法如下面的两个步骤:
(1)申请g_ Count1sysint 为IRQ_EINT8 的逻辑中断号:KernelIoControl (IOCTL_HAL_REQUEST_SYSINTR,&IRQ_EINT8,sizeof(UINT32),&g_Count1sysint,sizeof(UINT32), NULL) ;
(2)逻辑中断号g_ Count1sysint 关联事件Event_MotorX:InterruptInitialize(g_ Count1sysint,Event_MotorX ,0,0);同样的操作对其它物理中断号的逻辑中断号进行申请和事件关联。物理中断、逻辑中断、事件和线程之间的关系如图2所示。
每个事件对应系统中的一个中断响应,当事件被触发时,根据事件类型和时间做相应的处理。中断处理线程是驱动程序编写的关键,其效率的高低直接关系到系统的实时性性能。
2.2.3 线程通信的实现
运动控制系统软件实现要紧密结合伺服电机的机械特性和绣花机各电机工作原理来完成,整个程序围绕着主轴电机在转一圈的过程中如何实现与其它模块的通信协作来实现,主要包括电机在220°~100°(约240°) 之间可移动步进电机阶段和在100°~220°(约120°)禁止步进电机阶段,通过事件置位来响应两个阶段中相关的中断处理,实现各个线程之间同步。在整个的系统中,主轴电机运转为软件的主线程,线程运行过程中,通过中断事件来等待、通知和调用其它线程,完成刺绣操作,主轴电机线程程序流程图如图3 所示,步进电机线程流程图如图4 所示:
主轴电机线程根据花样文件的控制码来确定剪线、换色、跳针和刺绣等运动方式,当为正常刺绣状态时,主轴电机线程处于阻塞状态,要等到Event_MotorX 和Event_MotorY 两个电机移动完事件置位后才可以移动主轴电机,同时在移动主轴电机过程中,由于光电编码器线程的优先级高于主轴电机线程,故可以响应A 相编码器中断,置位事件Event_EncoderA(100°)和Event_EncoderA(220°),可以触发优先级比主轴电机线程优先级高的步进电机线程,完成220°~100°移动步进电机阶段和在100°~220°禁止步进电机操作,之后步进电机线程中初始化Event_EncoderA (100°) 和Event_EncoderA (220°), 置位Event_MotorX 和Event_MotorY 事件通知主轴电机线程运行,而步进电机线程又回到了阻塞状态,等待Event_EncoderA(100°)和Event_EncoderA(220°)事件的置位,到此绣花机完成了刺绣一针的操作。在步进电机运行过程中,如果绣框越界,运动控制系统会响应中断,置位Event_Limit,执行高优先级的限位越界线程并报警。在主轴电机运行过程中,系统也会响应断线检测中断,如果断线,也会进行报警处理。
3 试验测试
文章中采用Windows CE5.0 多线程机制,完成了电脑绣花机运动控制系统功能的实现,在这种体制下,使整合系统在控制、调度、通信和同步等方面都有较小的开销,同时结合中断,很好的满足了系统的强实时性的要求,该方案已经运用于到了自主开发的高速工业绣花机中。在试验过程中我们可以看到,绣花机在正常工作的时候,启动较快,在1200 转/分高速运行时平稳可靠且噪声较小,并能够精确的停车,在刺绣过程中,各个功能执行比较协和,同时刺绣品质和效率也有很大的提高,系统各方面性能都达到了预期目的。
4 结束语
本文的创新点在于将Windows CE5.0 的多线程机制与硬件中断技术相结合应用于强实时性要求的绣花机运动控制系统中,以最小的计算资源消耗实现了其预定的功能,在满足系统实时性要求的同时,避免了资源浪费,提高系统软件的运行效率。经测试,表明绣花机高速运行时在响应速度、控制精度、减少噪声等方面性能有明显的改善,有较高的工程价值。
参考文献
[1]苏兢.电脑绣花机控制系统的设计与实现[D]. 西安:西北工业大学软件工程学院, 2007.
[2]张冬泉,谭南林,王雪梅等.Windows CE 实用开发技术[M].北京:电子工业出版社, 2006.
[3]何宗键. Windows CE 嵌入式系统[M].北京: 北京航空航天大学出版社, 2006.
[4]贾立山,王立文,邢志伟,韩俊伟.基于多线程技术的3R 机器人控制系统[J].微计算机信息,2007,6-2:243-245.
[5]黄丹,邵惠鹤. 基于Windows CE 平台的多线程编程[J].微计算机信息,2007.12-2:53-55.