基于 FANUC 机床数控系统界面软件二次开发的研究
2023-9-15 来源: 上海机床厂有限公司 作者: 顾凯端
1.引言
数控系统及其人机界面的出现使机床加工操作变得便捷与高效,而随着行业发展,对加工精度、加工效率和工艺柔性的要求越来越高,数控通用人机界面已无法满足这些需求,因此对机床数控系统人机界面软件的二次开发成了数控机床生产厂家的重要任务。
目前市场上的数控机床人机界面多为嵌入式,面板尺寸小,操作工行动受到场地的局限,无法远距离实时进行工艺参数调整、监控等操作,从生产效率和安全性来说都存在一定的缺陷,自动化、生产效率受到了限制。FANUC 和SIEMENS 等国外数控厂商进口的数控系统,其随系统提供的人机界面是面向通用数控操作场景的,无法方便地制定机床配套工艺,不能满足用户的定制化需求。数控厂商在其配套的通用人机界面的基础上,提供了人机界面开发接口,机床制造厂家就可以对人机界面进行二次开发,扩展人机界面功能,提高人机界面软件的专用性、易用性,以更大限度地发挥机床的价值。
本文选取 FANUC Series 0i-MF 数控系统作为二次开发基础平台,采用面向对象的方法进行软件框架设计,二次开发接口为 FOCAS 库(即FANUC Open CNC API Specifications, 简 称FOCAS),利用 QT 提供基础编程库,确定程序达到的功能有显示界面、软硬件通讯、机床参数写入、机床参数读取以及系统报警监视等,实现对数控系统的二次开发。
2. 开发工具和总体框架
2.1 开发环境的选择
FANUC 0i-MF 数控系统提供了二次开发接口(即 FOCAS),包含了数控连接和数控数据、PMC 数据读写功能,以及界面开发接口,即意味着基于此数控系统的人机界面二次开发自由度很大,架构选取自由。可运行 FOCAS 库的操作系统目前主要是 Microsoft Windows,Windows操作系统使用简单,系统稳定,用户群体大,开发工具丰富,所以是 FANUC 数控二次开发首选。
软件功能与界面库可选用 MFC、.NET 和 Qt,MFC 虽然由微软开发功能强大,但已经过时不再维护,所以不建议选用,.NET 是微软主力开发库,但性能逊色于 C++ 开发的应用程序,Qt作为 C++ 语言开发的功能界面库,既能方便地进行界面开发,又有 C++ 便捷的底层访问能力,其可靠性和宽松的开源协议使得 Qt 库在工业界得到了广泛的应用。结合 Windows 操作系统、FOCAS 库和 Qt 编程库的选取,微软的 VisualStudio 就是较合适的开发工具了,安装有 Qt 插件的 Visual Studio 2015 可方便地创建 Qt 应用程序解决方案,借助开发工具强大的功能,可轻松开展 FANUC 机床数控系统界面软件的二次开发工作。测试环境可选用 FANUC 数控系统实体机或 FANUC CNC Guide。开发环境及工具如表 1 所示。
表 1 开发环境与工具表
2.2 总体框架的确立
由于要实现的二次开发的功能较为明确,所以采用清晰的分层架构,分层架构结构简单明了,各层职责分明。分层架构主要分为通信层、功能层、界面层。通信层负责软件功能层与数控系统的之间的数据交互,功能层负责软件的功能实现,向下与通信层交互数据,向上给界面层提供功能接口,界面层向下负责对功能层的调用,向上负责与操作者的交互。二次开发的软件总体框架图如图 1 所示。
图 1 总体框架图
3. 开发过程及结果
3.1 硬件连接
首先进行硬件连接,把 FANUC 0i-MF 数控单元的以太网网口(ETHERNET)通过网线连接至 PC 屏,达成将人机操作界面屏幕放大、分离式操作的目的 ; 其次,建立与数控单元的通讯连接,如利用 Visual Studio 2015 导入 FOCAS动态链接库,编写程序调用功能函数,与测试端 NC Guide 进行通讯 ; 再次,利用 FOCAS 库函数设计机床参数数据写入功能 ; 最后利用 QtDesigner 设计软件界面。
3.2 界面分析
界面设计是整体框架的基础,本文设计的人机界面采用多个窗口组合展示机床状态,展示程序号、三根轴四种坐标系的展示窗口、机床加工状态以及通讯设置按钮和界面切换按钮。
人机界面利用单行文本框,采用统一格式,把数据名标注在文本框左侧,用于直观地显示读取的信息。合理布局四个坐标显示窗口的空隙和比例大小。为增加人机交互友好,下方控件按钮分别对应调用通讯窗口和不同类型的坐标窗口切换,通过信号与槽的机制进行实现。
本文针对的数控系统是 FANUC 0i-MF 系列,仅支持以太网通讯,而在 FOCAS 控件库中,已经完成了对通讯协议的开发并将其封装,作为开发者,需要做的是导入 FOCAS 控件库,调用以太网通讯函数,其会通过代理函数,向功能函数发送请求,自动建立通讯。
为体现面向对象的设计方法,将窗口封装成单个类,通过在机床总界面依次创建窗口,在槽中利用枚举类的逻辑判断来删除或插入窗口达到切换窗口坐标显示的目的,实现人机交互。
3.3 人机界面框架设计
人机界面设计分为硬件连接和软件设计两部分,其中硬件连接用于实现人机界面的分离式设计,通过外部接口,将 FANUC 0i-MF 控制单元与上位机 PC 屏的网口相连。软件部分负责实现数控机床监控状态的功能,见图 2。
图 2 软硬件连接流程图
人机界面模块分为通讯层、功能层和界面层,见图 3,通讯层负责建立通讯和断开通讯。功能层主要负责对不同类型三轴坐标和加工状态的读写。界面层分为通讯窗口、坐标显示窗口和机床窗口这三部分。
图 3 人机界面程序框架
3.4 软件二次开发设计
在 VS2015 开发环境下,使用 Qt5 作为开发库,使用 VS 中的 QT GUI 框架开发机床人机界面,利用 FOCAS 1/2 Library 提供的函数作为接口,首先利用以太网建立通讯连接,然后建立数据写入的接口连接,实现对机床状态的读取,最后完成界面层的布局,使用多对话框窗口水平或垂直布局,参照 FANUC 系统原始操作界面,能够来回切换坐标显示窗口,完成对数据的显示(即可视化)。接下来参考图 4 所示的机床界面监控总体框架从通讯层、功能层和界面层逐一分析。
图 4 机床界面监控总体框架
3.4.1 通讯层
机床界面要能够动态显示机床数据,则须使界面与 CNC 系统通讯。FANUC 提供了 FOCAS通讯协议 , 使 PC 端与 FANUC 系统建立了通讯。在用户 PC 端的开发环境应用程序中,调取 FANUC 提供的 FWLIB32/64.DLL 动态链接库,由于 HSSB 需额外购买硬件来建立连接,因此没有采用 HSSB 库,而是选择以太网库。
FWLIB32/64.DLL 链接库包含了 FOCAS 的控件库,其目的是将目标包装,通过句柄来获取目标对象的属性。在以太网库中,通过将 CNC 的 IP地址参数传递给 CNC allclibhndl3 函数来创建TCP/IP 连接。
以太网板中的数据窗口函数会通过 TCP/IP栈数据传输与用户 PC 端进行以太网连接。两者在连接过程中用户 PC 端会将数据窗口函数的代理函数向以太网板发送打包请求,包括获取数据属性、数据数量等,以太网板响应请求、反馈发送数据内容、错误代码等。CNC 与以太网板通过 OPEN CNC I/F 在局部网络中进行数据传输。
以太网的通讯 功 能 在 基 类 为 QDialog 的 对话 框 窗 口 类 LoginDiolag 获取参数和在机床界面 FanucFrm 类中对通讯的槽定义来实现。
根据 FOCAS 库的 FWLIB64.h 头文件和文献手册,可以看到需要连接和断开以太网连接要使用函数 “cnc_allclibhndl3” 和 “cnc_freelibhnd”。
cnc_allclibhndl3 其功能是分配库的句柄并使用指定 IP 地址或主机名连接 CNC,实现以太网通信,需要以下参数 :
(1)输入 :ipaddr,使用字符串方式来确定需要连接的 CNC 测试端的 IP 地址或者是主机名。
(2)输入 :port,确定 TCP 需要连接的端口,通常固定为 8193.
(3)输入 :timeout,设定超时的时间,若设为0则忽略超时,库函数会一直等待。
(4)输出 :FlibHndl,指定一个包含库句柄信息的指针型或者整型变量。
cnc_freelibhndl 其功能是当程序终止时需要释放库句柄,防止数据累积报错,即为中断通讯连接,该函数需要输入 FlibHndl 参数,当程序结束时,需要释放的库句柄。
由此可以看出,程序以建立以太网通讯算作开始,以中断通讯连接、释放库函数作为结束,这两者分别调用 cnc_allclibhndl3 与 cnc_freelibhndl 都在通讯层实现。
通讯函数需要库句柄、CNC 测试端的 IP 地址、端口号等其他参数传递给 CNC 以太网通信函数进行连接。在 FWLIB64 库文件中,查FANUC 样例手册 ,可找到以太网通讯对应的 cnc 函数cnc_allclibnd3。在该函数中输入对应的参数即可建立连接。通过 cnc_freelibhndl 断开连接、输入 IP 地址、端口号、时间延时等,要得知通讯连接是否建立成功可通过接受返回值来判断弹出何种类型的提示窗。
3.4.2 功能层
需要实现的功能有显示程序状态,显示三轴的绝对坐标系、相对坐标系、剩余行程距离,显示伺服轴转速,显示加工状态。
根据 FOCAS 提供的 FWLIB64.DLL 中,要实现上述机床状态的监控主要分为三部分 :
(1)使用 FOCAS 库函数,从 CNC 测试端读取机床参数。
(2)将从 CNC 测试端的机床参数数值赋值给变量,通过传输,利用程序中读写的变量在界面层显示。
(3)将数据上传。从机床数据读取、机床数据用变量赋值写入,数据动态更新依次进行。其中机床数据读取使用 DataCollection 类,机床数据用变量赋值写入用 MachinePosition 类。
要从 CNC 测试端读取数据,调用使用FOCAS 提供的 FWLIB64.h 头文件中的 cnc 函数获取参数数值 ; 其次,是要想办法把储存在该函数里变量中的数值传递给与界面显示文本相关的函数。
以获取绝对坐标系的 X,Y,Z 三轴数值为例,使用数据采集类的成员函数 “voidabsolute(unsigned short h)” 作为读取 cnc 测试端参数的指令,其参数句柄 h 就好比钥匙,在调用 absolute 函数后把实参全局句柄 h 赋给absolute 函数的形参未定义的短句柄 h 后,解锁指令,进行读取。
在 absolute 函数中,需要读取绝对坐标系的三轴坐标数值,根据 FOCAS 库函数,应使用cnc 函 数 “cnc_absolute”。
cnc_absolute: 读 取 用 “ 轴 ” 指 定 轴 的 绝对位置数据。绝对位置存储在 “ODBAXIS” 的“data[0]” 中。其参数有 :
(1)输入 :FlibHndl,指定库句柄。
(2)输入 :axis,指定要读取的轴数,其中ALL_AXES 对 所 有 轴(ALL_AXES:-1),1,..,m 对单个轴(m: 控制轴数)。
( 3 )输 入 : length ,指 定 数 据 块 的 长度(ODBAXIS 结构的大小)。
(4)输出 : 指向 ODBAXIS 结构的指针,包括控制轴的绝对位置数据。
参照手册提供的 cnc_absolute 参数,在调用时,可以一次获取一系列数控轴的坐标数值,最后只读取需要的目标轴的数值即可。
使用ret储存返回值,用于判断输入的参数是否报错,若无错误,应为 EW_OK。之后, 用 浮 点 型 变 量 absoluteXf、absoluteYf、absoluteZf 分别储存从 CNC 测试端获取的 X,Y,Z 轴的数值,使用 Data[0] 读取单个轴的数值,从而避免了 Y 轴和 Z 轴出现重复读取的问题。最后,获取的数据成功储存在变量 absoluteXf、absoluteYf、absoluteZf 中。
如此就能实现对机床三轴绝对坐标系的监控功能,而接下来的相对坐标系、机床坐标系、剩余行程距离、进给速率、循环时间等数据的读取逻辑和读取绝对坐标系的流程相同。
3.4.3 界面层
通过 Qt 特有的信号与槽机制,采取通过对槽进行默认命名格式自动将控件信号与槽关联 ;也可以利用 connect 函数,手动建立信号与槽的连接,一个信号可指定一个或者多个槽函数接收。首先针对通讯窗口界面进行设计,利用QT Designer 编辑窗口界面 ui,根据 cnc_allclibhndl3 函数的对应参数,分别添加单行编辑框 QLineEdit,并在左侧添加标签,注释对应需要输入的内容,分别为 IP 地址、端口号和延时,使用水平布局和空格调整布局 ; 其次,要实现参数与文本连接的第一步首先是要获取编辑框输入的数值,设计一个函数专门用来读取编辑框数值,其中通过不同编辑框对应的指针变量名分别指向对应编辑框的文本获取函数 “text”,从而获取用户输入的内容。
之后利用 getIPStr 函数作为 cnc_allclibhndl3的参数,即可实现将输入的数值传递给 cnc 函数。要能够让 cnc 函数读取到用户输入的数值,需要利用 connect 机制,在 cnc_allclibhndl3 前添加条件。设计 “连接” 和 “断开” 按钮,同时以太网通讯的槽 onslot_Connect 的定义中,添加前置条件和调用 cnc 函数。
接下来是三轴坐标系显示窗口,包括 :
(1)利用 QT Designer 编辑 GUI。
(2)根据需求,创建四个坐标界面,分别用对象名 absolute_frm、relative_frm、machine_frm、left_frm,依次对应绝对、相对、机床和综合坐标系窗口。需要标明对象窗口所显示的坐标系的类型是什么。利用 TextLable 的对象名调用文本设置函数,使得设计命名函数 SetPosName有命名文本的功能。
(3)将文本框的数值同功能层获取函数进行关联,分为两步,通过对象调用命令函数,以及调用获取函数。
以绝对坐标系为例,定义数据采集对象,使用指针 dcThread 指向采集对象,并分配起始地址,如此可以通过调用 dcThread 指针达到等同于调用 DataCollection 的效果。
利用 dcThread 调用命令函数 ,如void absolute(h),将全局句柄放入作为参数,即开始读取 CNC 测试端的绝对坐标系数值,并将数值赋值给中间函数 setAbs 的变量,再由中间函数的变量赋值给获取函数 getAbs 的参数。若直接将储存 cnc_absolute 读取数值的变量作为文本内容,则会因为类的不同而无法读取。
想要将编辑框数据与 cnc 函数获取的数值同步,定义变量 ax,ay,az,调用 getAbs 函数,并将 ax,ay,az 代入参数,并由 getAbs 的默认参数赋值给变量。由此,可以通过 “setText”函数设置默认文本,将变量作为参数放入其中,实现动态读取数据、界面更新的效果。而相对坐标系、机床坐标系、剩余行程距离的三轴坐标显示原理和绝对坐标系相同。
3.5 结果显示
机床显示界面是一个总体界面,它集合了机床状态监控的各种内容。其主要目的有两种 :
(1) 动态显示机床进给速率、转速、加工件数、循环时间、运行时间,将功能层与界面层关联。
(2) 将三轴坐标显示窗口嵌入机床显示界面,通讯窗口利用按钮与机床显示界面关联。
机床进给速率、转速、加工件数、循环时间、运行时间动态读取原理和三轴坐标系显示窗口中绝对坐标系的原理相同。
三轴坐标显示窗口嵌入机床显示界面需要实现界面层分析中所述要求,能够全部显示以及能够单独显示。为此,可以通过点击不同按钮作为触发条件,并集 “和” 进行判断,由此来切换显示窗口。经过调试,动态显示的机床界面如图 5 所示。
图 5 动态显示的机床界面
4. 结语
使用 VS2015 和 Qt 跨平台开发,以 FANUC0i-F 为具体测试对象,进行了基于 FANUC 数控系统机床软件的二次开发工作,结论如下 :在硬件方面,通过硬件外部接口与 PC 端的连接,达成了远程操作显示界面、分离操作的目的。目前 CNC 侧和 PC 屏电脑间采用局域网传输,今后可以考虑使用广域网传输,进一步增加通讯距离 , 丰富应用场景。
在软件方面,使用 C++ 编程语言、DLL 动态链接库调用、FOCAS 库函数、QT 库框架编程实现了以太网通讯的功能,成功通过内部接口完成通讯 ; 实现了机床坐标动态读取、进给速率、转速的实时读取 ; 能够对运行时间、加工件数、循环时间进行计数 ; 实现了对机床基本功能状态的监控 ; 实现了通过按钮关联通讯窗口、弹出隐藏以及嵌入式等操作,简化了机床界面。
投稿箱:
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
更多相关信息