基于PC的CNC软件的设计与实现
摘 要 本文提供了一种Windows环境下基于PC的CNC软件的总体结构,并且对于其中的若干实现方法进行了探索。
关键词 CNC,多任务,实时处理
1 总体结构及实现方法
1.1 软件的总体结构
CNC系统常常作为一个独立的过程控制单元用于工业自动化生产过程中,因此它的系统软件必须完成管理和控制两大功能。CNC系统是由软件和硬件组成的,硬件为软件的运行提供支持环境。由于硬件和软件在逻辑上是等价的,由硬件完成的工作原则上也可以由软件完成。因此软件的结构取决于软件和硬件的分工,也取决于软件本身的工作性质。根据目前该系统的设计,下位机只负责位置伺服控制,因此上位机负责其余的管理工作和控制工作。
数控软件的总体结构可以设计成六层,即输入层,译码层,刀补层,协调层,监控层,设备驱动层。输入层是数控程序。译码层将数控指令解释成为数控系统的内部数据格式。刀补层进行刀具补偿。协调层将指令分解到数控系统的各个功能部件。如数控指令翻译、辅助功能设备控制和运动控制。监控层对于系统当前的状态和当前指令的合法性进行检验。设备驱动层直接实现对系统功能部件的控制。
在该数控系统的软件中,采用了前后台型的结构形式,前台程序即实时中断程序完成全部的实时功能(包括协调层、监控层、设备驱动层),主要是插补功能和系统诊断功能、I/O处理等。后台程序的主要功能是插补前的准备功能及调度管理(包括输入层、译码层、刀补层),具体地讲,是数控程序输入、译码、刀具补偿、显示及上述任务之间的调度管理功能。后台程序是一个循环运行程序,在运行过程中,前台程序(中断服务程序)不断插入,共同完成零件加工任务。而位置伺服的任务主要由下位机完成。
在译码层和刀补层中,我们采用多任务调度的方式协调系统的工作,进行优化后可以最充分地利用系统的资源。加工程序由上位机进行译码、刀具补偿、速度处理后,得到刀具中心的插补指令数据,上位机将这些插补指令数据和其它的指令数据以固定格式存放于一缓冲区中,每次中断发生时,上位机根据这些指令数据进行相应的处理,如果存在插补指令则实时计算出插补数据,并且送入下位机,下位机从缓冲区根据这些数据控制相应轴的电机动作。当上位机中的一帧指令数据被读完后,在插补间隙自动计算出新的插补指令数据,填入缓冲区。
数控软件总体结构图
在上位机的内存中设置若干个插补缓冲区,用标志字指示当前数据块 的位置,引导下位机读取当前指令数据。当下位机进行控制时,上位机不断进行预插补计算,直至所有插补缓冲区填满为止,当接收到下位机的中断信号后,上位机进行实时的插补计算,并且将数据送到下位机。采用这样方式能够最充分地利用上位机CPU的时间,真正实现并行实时工作。
1.2 软件的具体实现方法
1.2.1 软件的运行环境和开发环境
采用Microsoft Windows 3.1作为开发环境,采用Borland C++ 3.1作为编程语言。
1.2.2 具体实现方法
. 启动画面的修改
在Windows启动时,会出现一幅带有Microsoft标志的启动画面,但作为专用数控系统,我们希望能用自己的启动画面代替该启动画面,显示具有数控系统标志的启动画面。方法如下:
方法一:
(a) 创建一幅BMP图,再它压缩成RLE文件,命名为CNC.RLE;
(b) 执行下面的命令形成新的WIN.COM模块:
COPY/B WIN.CNF +VGALOGO.LGO+CNC.RLE
(c) 重新启动Windows,可看到新的启动画面。
方法二:
(a) 编制一个DOS下显示图形的程序,图形可以是任意格式(*.bmp,*.gif,*.jpg等均可),选择自己需要并且喜欢的图形作为启动标志;
(b) 编制一个批处理文件,将图形显示程序放在前面,将Windows的启动命令Win/B放在后面(/B选择项使启动标志不出现);
(c) 用生成的批处理文件代替原来的Windows的启动命令,运行即可。
. 多任务调度的实现
在我们的数控系统中,为了实现多个任务之间的协调与管理,我们采用非抢先式的多任务调度和多缓冲区的方式实现了对于实时性不强的任务(数控程序输入、译码、刀具补偿、显示等)的调度,其具体实现方法是:
(a) 规定每个任务优先级计算方法(优先级为非固定的);
(b) 建立任务队列,排列当前需要完成的任务,此队列不考虑优先级;
(c) 在每个任务周期,计算每个任务的优先级,执行优先级最高的任务;
(d) 将每次任务执行的结果存储在多个缓冲区中,然后可以执行下一个同类任务。
在数控系统中,显示的任务优先级始终是最低的,而其它的任务的优先级则是变动的。通过变动各个任务的优先级进行协调,虽然每次都执行的是优先级最高的任务,但实际上各个任务都会得到执行,在没有其它任务的情况下显示,也可以得到执行。
. 多缓冲区的实现方法
为了协调多个任务之间的运行,在软件中建立多个数据缓冲区,具体的实现方法是:
(a) 为多缓冲区分配内存,建立指向当前缓冲区的读、写指针,构成一个环形多缓冲区;
(b) 为每块内存设置一个标志位,作为对各缓冲区进行操作的判断依据;
(c) 每读一个缓冲区,对该缓冲区设置已读标志,当前读指针向前移动一个缓冲区;
(d) 每写一个缓冲区,对该缓冲区设置已写标志,当前写指针向前移动一个缓冲区;
(e) 对于当前操作未结束的缓冲区,设置正在操作标志,禁止其它操作。
采用这种方法,将系统中必须在单个插补周期内完成的运算“均化”在多个插补周期内完成,有效地利用了CPU的计算时间,提高了系统的工作效率。
. Windows环境下的中断的实现
Windows是一种非独占式的多任务系统,应用程序通过应用程序队列来接收输入,然后消息循环从应用程序队列中获取输入消息,并把它发送给相应的窗口。在这种工作模式下,实现实时控制较为困难。然而,从另外一个角度看,用户的键盘、鼠标及定时器输入都是硬件中断,而Windows提供的设备驱动程序实际上是中断服务程序。由于实际加工对于实时性的要求很高,因此必须采用中断的方式实现实时性强的任务。由于中断可以在任何时刻发生,而不限于使用设备的应用程序运行期间,所以中断服务程序必须在固定代码段中。在大框架EMS内存配置中,只有一种类型的代码才能保证任何时刻均可用来进行此类中断服务,这种类型的代码就是动态连接库(DLL)的固定代码段中的代码。在保证可靠性的前提下,必须采用DLL来实现中断。在我们的系统中采用DLL实现了硬件中断,运行可靠。
. 替换系统外壳,成为专用系统
Windows中Progman.exe是Windows的外壳,是Windows的重要组成部分,但并不是Windows中的必备成分,每个用户都可以编制自己的外壳程序。由于数控系统与生产设备直接连接,用户常常希望数控系统是一个专用系统,另外,Windows本身是一个多任务系统,同时执行多个应用程序可能会发生程序间的冲突,因此,有必要对Windows进行改造,改造方法很简单,采用数控软件代替Windows的“Shell”——Progman.exe,这样,Windows启动后直接运行数控软件,在用户的操作中,感受不到Windows的存在,同时避免了应用程序之间的软硬件的冲突。
2 后语
以PC为基础的CNC是NC技术发展的必然趋势,它保证了CNC的基础软硬件随PC技术的而不断更新,使NC技术紧跟PC技术的发展,可直接应用PC的发展成果,这对节省开发费用、缩短开发周期具有重要的意义。
作者:西部车床,如若转载,请注明出处:https://www.lathe.cc/2023/12/5772.html