一. CNC的概念
数控技术产生于 20 世纪中期, 是一种用数字、 文字和符号组成的指令来实现控制一台或多台机械设备动作的技术。 数控技术的发展首先产生了以硬件数控系统(Numerical Control, NC) 为代表的产品, 硬件数控系统利用由逻辑元件和记忆元件组成的逻辑电路实现运算和控制功能,但具有灵活性差和柔性不好的缺点。 随着计算机技术的发展,利用一台计算机代替先前的逻辑电路实现数控装置所有功能的计算机数控系统(Computerized Numerical Control, CNC)逐渐成为市场的主流产品。
补充:传统的机械加工都是用手工操作普通机床作业的,加工时用手摇动机械刀具切削金属,靠眼睛用卡尺等工具测量产品的精度的。现代工业早已使用电脑数字化控制的机床进行作业了,数控机床可以按照技术人员事先编好的程序自动对任何产品和零部件直接进行加工了。这就是我们说的“数控加工”。数控加工广泛应用在所有机械加工的任何领域,更是模具加工的发展趋势和重要和必要的技术手段。
二、Linux 操作系统的实时性扩展
LinuxCNC 数控平台是基于 Linux 操作系统进行开发的。 Linux 操作系统是一个遵循GPL 协议且开放源代码的通用操作系统。虽然 Linux 操作系统具有运行稳定、系统平均响应时间短、吞吐量高等优点,但是 Linux 操作系统的进程调度方式、中断屏蔽、频繁的换页等约束限制了 Linux 系统的实时性能。实时系统是指系统中计算结果的正确性不仅取决于计算逻辑的正确性,还取决于产生结果的时间,即不管实时应用程序进行的是何种任务,它不仅需要正确进行该任务而且还必须及时完成它。常用的提高 Linux操作系统实时性能的方法有两种,分别是直接修改 Linux 内核源代码法和双内核法。由于 Linux内核复杂且发展速度快,所以直接修改 Linux内核源代码的方法难以保持同步。双内核法通过在 Linux 操作系统中引入一个实时内核负责管理实时任务, 同时把原来的Linux 内核作为一个普通进程在实时内核上运行。双内核法使得改造后的 Linux 操作系统既能够及时响应实时任务,同时还能管理复杂的非实时通用任务。常用的双内核法实时补丁包括 RTLinux/GPL、 RTAI 和 Xenomai。 Xenomai 和 RTAI都是利用Adeos(Adaptive Domain Environment for Operating Systems)技术构建的。 Adeos是一个实时系统框架,它在同一套硬件上提供多个互相独立的域,一个域通常包含了一个操作系统,但不一定所有域的实现都是操作系统,域的实现还可以是软件实体。这样, Xenomai 微内核和 Linux 内核就能在 Adeos 提供的灵活的、可扩展的环境中共存,共享硬件资源。为了保证系统的实时性, Adeos 在中断发生时,先调度 Xenomai 响应该中断并执行该中断相应的实时任务,只有当系统没有实时任务和中断发生时, Adeos 才会调度 Linux 运行。本论文采用 Xenomai 实时补丁改造 Linux 操作系统使其成为一个实时操作系统。虽然 Xenomai 的操作系统实时性能比 RTAI 稍低,但是 Xenomai 的实时性能表现足以满足绝大部分实时任务的需求,同时 Xenomai 还能为系统和实时任务程序提供更好的可移植性和兼容性。 此外, Xenomai 拥有一套称为“skin”的 API,该 API 能提供与传统的工业级实时操作系统(例如 VxWorks、 VRTX、 pSOS+、 RTDM 等)相同的功能,有利于将传统实时操作系统下的应用程序移植到基于 Linux 的实时操作系统。Xenomai 的结构如图 2-3 所示。 测试证明,利用 Xenomai 补丁改造 Linux 实时性的做法简单高效,能满足 LinuxCNC 数控平台的实时任务高效运行的要求。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSyOeuXM-1640700195833)(https://www.shanlily.cn/wordpress/wp-content/uploads/2020/03/LC2.png)]
三、LinuxCNC简介
软件平台采用最初由美国标准与技术研究院研制的一套用于机器人与通用数控机床等运动控制的开放式数控系统。原名为EMC2,后来改名为LinuxCNC,该系统是一个源代码公开的自由免费软件,该系统最大支持9轴联动控制,内置具有前瞻性的实时轨迹规划器,通过定制运动学模块可支持非笛卡尔空间的运动控制,支持的结构包括机器人关节控制和六轴连杆昆虫机器人控制等。
LinuxCNC 是一个在 Linux 下运行的开源数控机床控制器。 开始是美国国家标准与技术研究院(NIST)主持的增强型运动控制器 EMC(Enhanced Machine Controller)项目,用于机床的数控系统。经过十几年的发展, LinuxCNC 系统它可以驱动铣床、车床、 3D打印机、激光切割机、等离子切割机、机器人手臂、 六足机器人等。
四、LinuxCNC的优点
-
LinuxCNC支持最多9轴运动控制,内置具有前瞻性的实时轨迹规划器,可实时轨迹误差限制、轴同步运动控制、自适应进给率控制等功能。
-
提供一个适用于RS-274机床编程语言的G代码解析器,使得机床编程通俗易懂,降低了推广应用难度。
-
提供了用于模块化自由配置的HAL层,实现控制系统自由定制与功能灵活扩展。
-
通过定制运动学模块可支持非笛卡尔空间的运动控制。
-
支持多种人机交互图形界面。包括Tcl/Tk、Python实现的Tkinter、Pyqt等。
五、软件架构
LinuxCNC 数控平台主要由界面模块、任务控制器、运动控制器和、 IO 控制器和硬件抽象层(HAL)组成。
(1) 界面模块
界面模块是一个供用户与数控系统进行交互的模块。用户的操作命令经过界面模块被传入任务控制器,任务控制器解析该操作命令并分派到运动控制器或 IO 控制器执行。用户也可通过界面模块获取任务控制器、运动控制器、 IO 控制器的状态信息和出错信息。
(2) 任务控制器
任务控制器是数控系统各模块间的“协调者”,是整个数控系统的枢纽。任务控制器接收其他模块发出的命令,利用任务解析器分析该命令,最后把命令分派到对应的模块中。另外,任务控制器还能解析 NC 代码并生成标准指令。
(3) 运动控制器
运动控制器主要负责实现运动控制功能,包括运动轨迹计算、插补计算、伺服控制值计算等。运动控制器通过硬件抽象层间接控制电机等外部设备。
(4) IO控制器
IO 控制器负责数控系统输入输出的控制。 IO 控制器能从数控机床接收数字量信号,同时也能向数控机床输出控制信号。
(5) 硬件抽象层(HAL)
硬件抽象层是一个位于操作系统和驱动程序之上的服务程序,它主要为应用程序提供一个统一的与实际物理硬件无关的查询接口。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IPMnR9d6-1640700195834)(https://www.shanlily.cn/wordpress/wp-content/uploads/2020/03/LC1.png)]
六、LinuxCNC 硬件抽象层的原理
硬件抽象层(HAL) 采用模块化的方法表示数控系统的硬件资源,例如: IO 模块、ADC 模块、 DAC 模块、脉冲模块以及编码器模块等。硬件抽象层作为硬件与应用程序的“桥梁”,能为应用程序提供统一的与硬件无关的接口,提高了应用程序的可移植性。硬件抽象技术具有以下基本概念:
(1) 组件,组件是具有若干个输入/输出引脚的软件模块, 可动态地加载到 HAL 或从
HAL 中移除。
(2) 参数,参数用于调节组件, HAL 具有输入参数和输出参数两种类型。
(3) 引脚,引脚分为物理引脚和组件引脚两种类型,物理引脚与外部硬件相连,组件
引脚用于连接 HAL 组件,只存在于 HAL 中。
(4) 信号,信号用于连接 HAL 引脚,可随意连接或断开。
(5) 类型,引脚和信号都具有类型属性,信号只能连接相同类型的引脚。 HAL 具有
BIT(位)、 FLOAT(32 位浮点数)、 U32(32 位无符号整数)和 S32(32 位整
数) 四种类型。
(6) 函数,函数是一个执行具体行为的代码块,可使用 HAL 线程对函数进行调度。
(7) 线程,“线程”是实时任务的组成部分,以特定时间间隔运行。线程运行时会按
序执行加载到该线程的函数
七、G 代码功能指令介绍
G 代码是数控加工过程中最常见的编程语言。 LinuxCNC 的 G 代码基于RS274/NGC语言开发[22]。 G 代码文件通常由若干行代码组成,每行(也称为块)可能包括几条执行不同的事情的命令。典型的代码行由一个可选行号开头,后跟一个或多个代码组成。行号通常是一个字母 N 和数字组成,代码则是由一个非字母 N的字母加数字构成,一个代码可能是一条命令的一个参数或者直接就是一条命令。
例如, G1 X3 是具有两个字的有效代码行。 G1 是一个命令,意思是以编程给定的进给速度以直线移动到编程的终点, X3 表示 X 的值在移动结束时应为 3。大多数Linux CNC 加工代码命令以字母 G 或 M 开头(表示 General 和 Miscellaneous),分别称为 G 代码和 M 代码。
G 代码按工作模式分类如表 3-1 所示。
其中, 机床运动过程中常见的 G 代码及对应解释如下。
1) G0(默认速度直线运动)
指坐标轴将按默认最大速率直线运动到指定位置,各坐标轴的速率由该速率分解而来,如: G0 X1 Y-2.3,表示从当前位置以默认最大速度直线运动到点(1 ,-2.3)。
2) G1(指定速度直线运动)
编程给定进给速度的线性运动,如: G1 X1.2 Y-3 F10,表示从当前位置以进给
速度 10 直线运动到点(1.2 ,-3)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TRLKtym-1640700195834)(https://www.shanlily.cn/wordpress/wp-content/uploads/2020/03/LC3.png)]
3) G2、 G3(圆弧运动)
使用 G2(顺时针圆弧)或 G3(逆时针圆弧)表示以当前进给速率坐圆弧运动
或螺旋弧运动。命令使用格式是: G2(或 G3) <X1- X2 - I- J- P->,其中 X1, X2
指代两个不同的轴所形成的平面, I 指 X1 轴上的偏移, J 指 X2 轴上的偏移, P 指
旋转圈数,运动时以相对于当前位置的偏移量为(I-,J-)的点为中心作画圆弧运动到
点(X1-,X2-),示例代码如下: G0 X1 Y1 表示(先运动到起始点(1,1), G2 X1 Y2 I1
J0.5 F25,表示在 X 轴 Y 轴平面上,以坐标点(2,1.5)为弧中心用速度 25 顺时针方
向作画弧运动到点(1,2)。
4) G4(暂停等待)
G4 表示所有坐标轴暂时停止运动,等待一段时间。 G4 不影响主轴,冷却液和
任何 I/O 的功能使用。如: G4 P0.5 (所有坐标轴等待 0.5 秒后再前进)
5) G7(车床直径模式)、 G8(车床半径模式)
G7 表示进入车床 X 轴的直径模式; G8 表示进入车床 X 轴的半径模式。
6) G90、 G91(距离模式)
G90-绝对距离模式,表示以目前坐标系零点为参考,运动到到对应坐标; G91-
增量距离模式,表示以目前位置为参考,以一定偏移量运动。如:G90 G54 X0Y0Z0,表示运动到当前 G54 坐标系坐标原点; G91 X18 Y-20,表示以当前位置作参考,
向 X 正向移动 18 单位距离,向 Y 负向移动 20 单位距离。 G90 与 G91 两个命令互
斥, G91 模式下坐标系的设置对运动不会影响。
7) G54-G59(坐标系设定)
G54-G59 是坐标系的选择设定。
其它 G 代码指令,功能简单介绍如下: G10 L1 设置刀具表项; G10 L10 设置
工具台,计算工件; G10 L11 设置工具台,计算夹具; G10 L2 坐标系原点设定;
G10 L20 坐标系原点设定计算; G17 - G19.1 平面选择; G20 G21 测量单位设定;
G28 - G28.1 运动到设定位置; G40 取消刀具补偿; G41 G42 刀具补偿; G43 使用
工具表中的刀具长度偏移量; G92 坐标系偏移 G93 G94 G95 Feed 模式。
M 代码按工作模式分类如表 3-2 所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i8eaHIxz-1640700195835)(https://www.shanlily.cn/wordpress/wp-content/uploads/2020/03/LC4.png)]
M0 - 临时暂停正在运行的程序,该指令在自动模式下才能生效, MDI 模式和
其他手动操作不起作用;
M3 、 M4 、 M5-主轴控制, M3 表示以主轴设定速度 S 顺时针方向启动主轴运
动,M4 表示以主轴设定速度 S 逆时针方向启动主轴运动,M5 表示停止主轴运动;
M6-刀具更换;
M7 、 M8 、 M9-冷却液控制;
以下隐藏内容为LinuxCNC英文手册和LinuxCNC中文手册(部分翻译),有需要的可以下载。
[erphpdown]解压密码:ZMJPY123[/erphpdown]