0 引言
开放式数控系统已经成为当前CNC技术发展的必然趋势,而基于/PC+运动控制器0结构体系的开放式数控系统也已成为自动化领域备受关注的数控装置之一。含有DSP处理器的运动控制器,实现复杂的控制算法和功能,完成数控系统中补偿处理、速度控制、位置控制等实时性任务; PC机利用其丰富的软件资源,在Windows环境下开发相应的应用程序模块,专注于人机界面、输入输出、预处理、发送指令等弱实时和非实时性任务的实现。人机界面是集成各种应用程序模块的平台,设计一个界面简洁,操控方便的人机界面,是构建开放式数控系统的重要内容。本文介绍采用C++Builder编程语言构建基于固高GT400-SV型运动控制器的开放式数控系统人机界面的实现方法。
1 界面显示方案选择
在界面的设计初期,拟订了两种界面显示方案:多窗口模式和窗口分页显示模式。
在多窗口模式下,将每一个功能模块设计在一个功能子窗口上。即先设计一个主窗口,在主窗口下分设多个子窗口来作为各个功能模块的接口。但这种模式的界面整体性不够好,每需要一种功能时必须得激活相应窗口,其他窗口会被隐藏起来,而这种隐藏会使各个功能窗口混到一起,当需要激活某一特定功能时,无法确认所要打开的窗口。
单一窗口分页显示模式是在一个主窗口上设计出多个分页,将特定的功能模块设计在相应的分页上,这样每个分页在主窗口上都有确定的位置。这种显示方式能够很方便地在各个功能之间进行切换。通过两种方案的对比,决定采用第二种方案。
2 界面设计与文件衔接
界面设计与文件的衔接是界面设计的重点。下面针对具有代表性的模块论述衔接过程。在同一类功能当中,设计思想是一样的,不同的只是所响应的事件不同而已。
2.1 主程序文件与程序编辑器
设计程序编辑器是为了让主程序文件当中的函数能够读取和编辑程序编辑器当中的代码。通过以下函数来实现其衔接:
(1)Dword CallbackThreadFunc(void* ptr)
这个函数是一个线程回调函数,函数体实现的功能跟一般的函数类似,唯一不同的是这种函数只能够用于多线程,只能由某一线程调用。当一个线程建立起来后,它必须调用某一个线程函数才能够完成某一特定功能。例如在程序设计中,通过建立一个线程来执行G代码转换,这个线程的作用是从编辑器读取G代码,经过相应的转换,再调用GT400基本功能函数。由于C++Builder中的RichEdit编辑器控件本身的功能就很完善,所以只要一条原代码,就完成了从编辑器中读取G代码的功能。原代码是: pedit=Form1->RichEdit1->Lines->GetText();
(2)void _fastcallTForm1:: SetFileName(constAn-siString FileName)
这个函数完成的功能是为编辑器当中所编辑的未命名或重命名文件设定文件名并在标题栏显示出来。这个函数与界面的关系,可以从整条语句看出:TForm1是一个窗体类,而Form1为控制界面的主窗体,因而它属于主窗体文件,要连接到界面还须配合界面的相应功能按钮。
(3)void _fastcallTForm1::CheckFileSave(void)
这个函数检查G代码是否被修改过,如果被修改过则在文件关闭或进行一些其他操作时,提示是否要对当前文件进行存储。这个函数可以由其它函数调用,也可以响应界面编辑按钮来完成对G代码文件的检验。
(4)TTextAttributes* _ fastcall TForm1:: CurrText(void)
这个函数从编辑器中返回所选择字体的属性。这些函数完成了编辑器与主程序的连接,是界面和G代码转换的桥梁。