xenomai环境下开源实时数控系统LinuxCNC EtherCAT编译安装

news/2024/12/23 21:00:48 标签: 实时linux, linuxcnc, xenomai, CNC

LinuxCNC是一款基于Linux操作系统的开源实时数控系统,可将普通计算机转变为高效的CNC(计算机数字控制)机器,本文记录xenomaiCNC.html" title=linuxcnc>linuxcnc的构建简单记录,xenomai下构建无特别之处,主要参考链接https://www.CNC.html" title=linuxcnc>linuxcnc.org/docs/devel/html/code/building-CNC.html" title=linuxcnc>linuxcnc.html。

文章目录

    • 1.环境
      • 软硬件环境
      • xenomai内核要求
      • xenomai库要求
      • 安装依赖包
    • 2.本地编译CNC.html" title=linuxcnc>linuxcnc
      • 配置
      • 配置编译
    • 3. 构建CNC.html" title=linuxcnc>linuxcnc debian安装包
    • 4.安装构建的CNC.html" title=linuxcnc>linuxcnc Debian软件包
    • 5. latency-test
    • 6. 安装ethercat主站
    • 7. 安装CNC.html" title=linuxcnc>linuxcnc-ethercat
    • 8. 安装hal-cia402
    • 9. 使用 Ethercat 测试 CNC.html" title=linuxcnc>linuxcnc
    • 其他
    • 参考链接

1.环境

软硬件环境

桌面环境:Ubuntu 24.04+xenomai3.3

硬件:rk3588(nanoPi R6/T6)

xenomai_14">对xenomai内核要求

要在使CNC.html" title=linuxcnc>linuxcnc在xenomai上运行,内核配置Local version必须是-xenomai,即CONFIG_LOCALVERSION="-xenomai",这样CNC.html" title=linuxcnc>linuxcnc编译配置时才能识别xenomai环境,否则不实时。

General setup  --->                                                                                             (-xenomai) Local version - append to kernel release

使用uname -a命令确认:

在这里插入图片描述

xenomai_25">对xenomai库要求

如果你需要编译生成CNC.html" title=linuxcnc>linuxcnc debian安装包,由于生成CNC.html" title=linuxcnc>linuxcnc debian安装包过程中会处理库的安装依赖生成依赖信息,这就要求xenomai库文件libcobalt.so属于某个debian包,通俗的说要求我们的xenomai库也是通过debian包安装的,而不是直接make install这种方式直接安装的,否则会产生如下类似错误。

dpkg-shlibdeps: error: no dependency information found for /usr/xenomai/lib/libcobalt.so.2 (used by debian/CNC.html" title=linuxcnc>linuxcnc-uspace/usr/lib/libuspace-xenomai.so.0)

解决方式1:xenomai通过构建debian库来安装,可以参考本博客其他文章编译构建xenomai库debian安装包

解决方式2:找到Debian/rules,打开之后找到override_dh_shlibdeps,在dpkg-shlibdeps那一行最后加上如下选项:

--dpkg-shlibdeps-params=--ignore-missing-info

以忽依赖信息。

安装依赖包

先安装依赖的工具和库,我遇到的有这些,不同的环境有差别,出错再对应安装不具备的即可。

 sudo apt install pkg-config build-essential  automake libtool m4 autoconf libudev-dev libmodbus-dev libusb-1.0-0-dev libgpiod-dev libglib2.0-dev libgtk-3-dev yapps2 intltool libboost-dev python3-dev libboost-python-dev  gtkwave bwidget tclx libeditreadline-dev python3-pip python3-tk libglu1-mesa-dev libxmu-dev asciidoc devscripts debhelper libtirpc-dev libtirpc-common tcl8.6-dev tk8.6-dev python3-opengl python3-full

CNC.html" title=linuxcnc>linuxcnc_52">2.本地编译CNC.html" title=linuxcnc>linuxcnc

首先需要安装该工具( sudo apt install git )然后拉取代码,如下所示:

$ git clone https://github.com/LinuxCNC/CNC.html" title=linuxcnc>linuxcnc.git CNC.html" title=linuxcnc>linuxcnc-source-dir

配置

拉代码生成配置文件

$ git clone https://github.com/LinuxCNC/CNC.html" title=linuxcnc>linuxcnc.git CNC.html" title=linuxcnc>linuxcnc-source-dir
$ cd CNC.html" title=linuxcnc>linuxcnc-source-dir/src
$ ./autogen.sh

生成得configure,它需要许多可选参数。通过运行以下命令列出configure的所有参数:

$ cd CNC.html" title=linuxcnc>linuxcnc-source-dir/src
$ ./configure --help

最常用的参数是:

  • --with-realtime=uspace

    为任何实时平台或非实时平台构建。生成的 LinuxCNC 可执行文件将在带有 Preempt-RT 补丁的 Linux 内核(提供实时机器控制)和普通(未打补丁)Linux 内核(提供 G 代码模拟,但不提供实时机器控制)上运行。

    如果安装了 Xenomai(通常来自 libxenomai-dev 软件包)或 RTAI(通常来自名称以 “rtai-modules ”开头的软件包)的开发文件,也将启用对这些实时内核的支持。

  • --with-realtime=/usr/realtime-$VERSION

    使用旧的“内核实时”模型构建 RTAI 实时平台。这要求您在/usr/realtime-$VERSION中安装 RTAI 内核和 RTAI 模块。生成的 LinuxCNC 可执行文件将仅在指定的 RTAI 内核上运行。

  • --enable-build-documentation

    除了可执行文件之外,还构建文档。此选项会显着增加了编译所需的时间,因为构建文档非常耗时。如果不需要构建文档,则可省略此参数。

  • --disable-build-documentation-translation

    禁用为所有可用语言构建翻译文档。翻译文档的构建需要花费大量时间,因此如果不是真正需要的话,建议跳过它。

$ ./configure --with-realtime=uspace --enable-build-documentation
....
checking for xeno-config... /usr/bin/xeno-config
checking for realtime API(s) to use... uspace+xenomai
...
######################################################################
#                LinuxCNC - Enhanced Machine Controller              #
######################################################################
#                                                                    #
#   LinuxCNC is a software system for computer control of machine    #
#   tools such as milling machines. LinuxCNC is released under the   #
#   GPL.  Check out http://www.CNC.html" title=linuxcnc>linuxcnc.org/ for more details.       #
#                                                                    #
#                                                                    #
#   It seems that ./configure completed successfully.                #
#   This means that RT is properly installed                         #
#   If things don't work check config.log for errors & warnings      #
#                                                                    #
#   Next compile by typing                                           #
#         make                                                       #
#         sudo make setuid                                           #
#          (if realtime behavior and hardware access are required)   #
#                                                                    #
#   Before running the software, set the environment:                #
#         . (top dir)/scripts/rip-environment                        #
#                                                                    #
#   To run the software type                                         #
#         CNC.html" title=linuxcnc>linuxcnc                                                   #
#                                                                    #
######################################################################

配置编译

$ make -j $(nproc)
...
Linking rtapi_app
Linking libuspace-xenomai.so.0
....

之后,如果只想构建 LinuxCNC 的特定部分,可以在make命令行上命名想要构建的部分。例如,正在开发名为froboz的组件,则可以通过运行以下命令来构建其可执行文件:

$ cd CNC.html" title=linuxcnc>linuxcnc-source-dir/src 
$ make ../bin/froboz

如果在支持实时的系统上运行(请参阅下面的实时部分),此时需要一个额外的构建步骤:

$ sudo make setuid

成功构建 LinuxCNC 后,就可以运行测试了:

$ source ../scripts/rip-environment
$ runtests

pi@NanoPi-R6S:~/CNC.html" title=linuxcnc>linuxcnc-source-dir/src$ CNC.html" title=linuxcnc>linuxcnc
LINUXCNC - 2.10.0~pre0
Machine configuration directory is '/home/pi/CNC.html" title=linuxcnc>linuxcnc-source-dir/configs/sim/axis'
Machine configuration file is 'canterp.ini'
Starting LinuxCNC...
CNC.html" title=linuxcnc>linuxcncsvr (61089) emcsvr: machine 'Canterp Example'  version '1.1'
CNC.html" title=linuxcnc>linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using XENOMAI (posix-skin) realtime
milltask (61103) task: machine 'Canterp Example'  version '1.1'
halui (61105) halui: machine 'Canterp Example'  version '1.1'
Found file(LIB): /home/pi/CNC.html" title=linuxcnc>linuxcnc-source-dir/lib/hallib/basic_sim.tcl
....

这也可能会失败!阅读整个文档,尤其是设置测试环境部分。

CNC.html" title=linuxcnc>linuxcnc_debian_175">3. 构建CNC.html" title=linuxcnc>linuxcnc debian安装包

构建 Debian 软件包时,LinuxCNC 从源代码编译并包含依赖信息,同时可选地包含文档(这会增加构建时间,但可以跳过)。编译后的 LinuxCNC 存储在 .deb 文件中,该文件可安装在相同架构的任何计算机上。安装后,LinuxCNC 可在 /usr/bin/usr/lib 中运行,如同其他系统软件。

此构建模式主要用于:

  • 打包软件以交付给最终用户。
  • 为未安装构建环境或无法访问互联网的计算机构建软件。

构建 Debian 软件包需要 dpkg-buildpackage 工具(由 dpkg-dev 提供),并确保所有必要的脚本都已安装,这通常通过安装 build-essential 虚拟包来实现。

$ sudo apt-get install build-essential 

构建 Debian 软件包还要求安装所有特定于软件包的构建依赖项。安装所有构建依赖项的最直接方法是执行(从同一目录):

$ cd CNC.html" title=linuxcnc>linuxcnc-source-dir
$ ./debian/configure
$ sudo apt-get build-dep .

可以使用dpkg-checkbuilddeps来检查依赖是否满足 (也来自作为构建必需依赖项的一部分安装的 dpkg-dev 软件包)程序来完成其工作(请注意,它需要从CNC.html" title=linuxcnc>linuxcnc-source-dir目录运行:

$ dpkg-checkbuilddeps

满足这些先决条件后,构建 Debian 软件包包括两个步骤。

第一步是通过运行以下命令从 git 存储库生成 Debian 包脚本和元数据:

$ cd CNC.html" title=linuxcnc>linuxcnc-dev
$ ./debian/configure

Note: debian/configure根据您构建的平台接受参数,

它默认在用户空间(“uspace”)中运行 LinuxCNC,期望 preempt_rt 内核将延迟降至最低。

  • no-docs:跳过构建文档。
  • uspace:配置为 Preempt-RT 实时或非实时(兼容两者),或使用 noauto 禁用自动检测。

配置 Debian 软件包脚本和元数据后,通过运行dpkg-buildpackage来构建软件包:

$ dpkg-buildpackage -b -uc -j$(nproc)

Note:

要构建的典型 Debian 软件包,您可以运行不带任何参数的 dpkg-buildpackage。如上所述,该命令传递了两个额外的选项。与所有优秀的 Linux 工具一样,手册页包含man dpkg-buildpackage的所有详细信息。

  • -uc

    不要对生成的二进制文件进行签名。仅当您想将软件包分发给其他人时,您才需要使用自己的 GPG 密钥对软件包进行签名。未设置该选项并且无法对包进行签名不会影响 .deb 文件。

  • -b

    这对于避免编译与硬件无关的内容非常有帮助,对于 LinuxCNC 来说就是文档。无论如何,该文档可以在线获取。

如果您在编译时遇到困难,请在线查看 LinuxCNC 论坛。目前正在出现的是对 DEB_BUILD_OPTIONS 环境变量的支持。将其设置为

  • nodocs

    要跳过构建文档,最好使用-B标志来 dpkg-buildpackage。

  • nocheck

    跳过 LinuxCNC 构建过程的自检。这可以节省一些时间并减少对某些可能不适用于您的系统的软件包(尤其是 xvfb)的需求。您不应该设置此选项来对构建按预期执行有额外的信心,除非遇到依赖项方面的困难。

环境变量可以与命令的执行一起设置,例如

DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -uc -B

CNC.html" title=linuxcnc>linuxcnc_Debian_256">4.安装构建的CNC.html" title=linuxcnc>linuxcnc Debian软件包

Debian 软件包可以通过其 .deb 扩展名来识别。安装它的工具dpkg是每个 Debian 安装的一部分。 dpkg-buildpackage创建的 .deb 文件可以在 CNC.html" title=linuxcnc>linuxcnc-source-dir 上面的目录中找到,即在..中。要查看包中提供了哪些文件,请运行

dpkg -c ../CNC.html" title=linuxcnc>linuxcnc-uspace*.deb

LinuxCNC 的版本将是文件名的一部分,旨在与星号匹配。列出的文件可能太多,无法显示在您的屏幕上。如果您无法在终端中向上滚动,请添加| more该命令的| more是使其输出通过所谓的“寻呼机”传递。用“q”退出。

要安装软件包,请运行

sudo dpkg -i ../CNC.html" title=linuxcnc>linuxcnc*.deb

如果依赖不全,使用sudo apt --fix-broken install自动安装缺失的依赖。

安装完成后在ubuntu应用列表即可看到CNC.html" title=linuxcnc>linuxcnc。

在这里插入图片描述

5. latency-test

通过命令行测试

pi@NanoPi-R6S:~$ latency-test
Note: Using XENOMAI (posix-skin) realtime

在这里插入图片描述

注意测试的是cpu0的实时性,会差一些,以隔离的cpu核latency测试为准。此时可以通过cat /proc/xenomai/sched/threads确认已经在xenomai内核调度运行。

pi@NanoPi-R6S:~$ cat /proc/xenomai/sched/threads
CPU  PID    CLASS  TYPE      PRI   TIMEOUT       STAT       NAME
  0  0      idle   core       -1   -             R          [ROOT/0]
  1  0      idle   core       -1   -             R          [ROOT/1]
  2  0      idle   core       -1   -             R          [ROOT/2]
  3  0      idle   core       -1   -             R          [ROOT/3]
  4  0      idle   core       -1   -             R          [ROOT/4]
  5  0      idle   core       -1   -             R          [ROOT/5]
  6  0      idle   core       -1   -             R          [ROOT/6]
  7  0      idle   core       -1   -             R          [ROOT/7]
  0  126087 rt     cobalt      0   -             X          rtapi_app
  0  126090 rt     cobalt     98   43us          D          rtapi_app
  0  126091 rt     cobalt     97   255us         D          rtapi_app
pi@NanoPi-R6S:~$ cat /proc/xenomai/sched/stat
CPU  PID    MSW        CSW        XSC        PF    STAT       %CPU  NAME
  0  0      0          2971573    0          0     00018008   83.6  [ROOT/0]
  1  0      0          0          0          0     00018000  100.0  [ROOT/1]
  2  0      0          0          0          0     00018000  100.0  [ROOT/2]
  3  0      0          0          0          0     00018000  100.0  [ROOT/3]
  4  0      0          0          0          0     00018000  100.0  [ROOT/4]
  5  0      0          0          0          0     00018000  100.0  [ROOT/5]
  6  0      0          0          0          0     00018000  100.0  [ROOT/6]
  7  0      0          0          0          0     00018000  100.0  [ROOT/7]
  0  126087 1          1          5          0     000680c0    0.0  rtapi_app
  0  126090 1          1759321    1759322    0     00048044   16.0  rtapi_app
  0  126091 1          43964      43964      0     00048044    0.4  rtapi_app

启动一个示例
在这里插入图片描述
在这里插入图片描述

6. 安装ethercat主站

详见本博客其他文章RK3588/RK3568/RK3562平台 IgH EthercAT主站编译安装.

CNC.html" title=linuxcnc>linuxcncethercat_334">7. 安装CNC.html" title=linuxcnc>linuxcnc-ethercat

  1. 安装CNC.html" title=linuxcnc>linuxcnc,上面的内容
  2. 下载、构建并安装 CNC.html" title=linuxcnc>linuxcnc-ethercat
git clone https://github.com/sittner/CNC.html" title=linuxcnc>linuxcnc-ethercat
cd CNC.html" title=linuxcnc>linuxcnc-ethercat
make configure
make
sudo make install

8. 安装hal-cia402

Hakan 改编了 @dbraun1981 的 hal-cia402 文件https://github.com/dbraun1981/hal-cia402

  1. 克隆存储库 git clone https://github.com/dbraun1981/hal-cia402.git
  2. cd 进入 repo cd hal-cia402
  3. 编译并安装它: sudo halcompile --install cia402.comp
git clone https://github.com/dbraun1981/hal-cia402.git
cd hal-cia402
sudo halcompile --install cia402.comp 

显示如下说明安装完成

pi@NanoPi-R6S:~/hal-cia402$ sudo halcompile --install cia402.comp
Compiling realtime cia402.c
Linking cia402.so
cp cia402.so /usr/lib/CNC.html" title=linuxcnc>linuxcnc/modules/

后面的内容对于博主来说就是外行了,来自LinuxCNC-Ethercat.md未经实测。

CNC.html" title=linuxcnc>linuxcnc_372">9. 使用 Ethercat 测试 CNC.html" title=linuxcnc>linuxcnc

  1. 运行CNC.html" title=linuxcnc>linuxcnc
  2. 选择sim→axis→axis,复制文件。轴应该启动。退出轴。
  3. 转到配置文件夹cd CNC.html" title=linuxcnc>linuxcnc/configs/sim.axis
  4. 编辑您选择的 ini 文件并添加到 [HAL] 部分HALFILE = ethercat.hal
  5. 使用下面内容创建ethercat.hal
loadusr -W lcec_conf ethercat-conf.xml
loadrt lcec
addf lcec.read-all servo-thread
addf lcec.write-all servo-thread
  1. 使用下面内容创建ethercat-conf.xml
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="5">
</master>
</masters>
  1. 启动linux cnc并加载刚刚编辑的ini文件CNC.html" title=linuxcnc>linuxcnc <yourinifile>.ini

  2. 例如,测试输出是否按预期工作

halcmd setp lcec.0.2.dout-7 1
# This will switch on the output 8 on the module No. 2, EL2008 in this example. 
halcmd setp lcec.0.<module-no>.dout-<output-no> <state>
# The physical hardware is needed for this, of course.

其他

Roshi 关于如何设置 ethercat-conf.xml 的教程: https://docs.google.com/document/d/1GiB065ZIAaoMHPtVfTg9JV1Kn-19xGQl2X9DM9-THNM/edit#heading=h.37frqspzljja

参考链接

CNC.html" title=linuxcnc>linuxcnc官方文档

LinuxCNC-Ethercat.md

B站


http://www.niftyadmin.cn/n/5796997.html

相关文章

【Spring】Spring框架之-AOP

目录 1. AOP的引入 2. AOP相关的概念 2.1 AOP概述 2.2 AOP的优势 2.3. AOP的底层原理--目前先不具体阐述&#xff0c;后面讲 3. Spring的AOP技术-配置文件方式 3.1 AOP相关的术语 3.2 基本准备工作 3.3 AOP配置文件方式的入门 3.4 切入点的表达式 3.5 AOP的通知类型 …

【CSS in Depth 2 精译_088】第五部分:添加动效概述 + 第 15 章:CSS 过渡特效概述 + 15.1:状态间的由此及彼

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 15 章 过渡】 ✔️ 15.1 状态间的由此及彼 ✔️15.2 定时函数 文章目录 第 5 部分 添加动效 Adding motion第 15 章 过渡 Transitions15.1 状态间的由此及彼 From here…

宝塔面板跨服务器数据同步教程:双机备份零停机

之前发布的教程不够完美&#xff0c;安全性也不够&#xff0c;所以优化了很多地方 ┌────────────────────────────────────────┐ │ 系统功能选项 │ ├─────────────────────────…

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…

架构师应如何考虑重构

目录 重构的目的、时机、难点 1.1重构的目的 1.2何时重构 1.2.1 添加新功能的时候对周边历史进行小型重构 1.2.2 cide review 时 1.2.3 有计划有目的的重构 1.2.5 何时不该重构 1.3、重构的难点 1.3.1 保证重构前后行为一致。 1.3.2 减少出现问题带来的影响 1.4 常见的重构…

SpringBoot3+Vue3开发在线考试系统

项目介绍 项目分为3种角色&#xff0c;分别为&#xff1a;超级管理员、老师、学生。超级管理员&#xff0c;负责系统的设置、角色的创建、菜单的管理、老师的管理等功能&#xff0c;也可以叫做系统管理员&#xff1b;老师角色&#xff0c;负责系统业务的管理&#xff0c;包括学…

安全算法基础(一)

安全算法是算法的分支之一&#xff0c;还的依靠大量的数学基础进行计算&#xff0c;本文参照兜哥的AI安全样本对抗&#xff0c;做一个简单的算法安全概括&#xff0c;从零学习。 最新的安全算法对于我们常规的攻击样本检测&#xff0c;效果是不理想的&#xff0c;为了探究其原…

如何正确计算显示器带宽需求

1. 对显示器的基本认识 一个显示器的参数主要有这些&#xff1a; 分辨率&#xff1a;显示器屏幕上像素点的总数&#xff0c;通常用横向像素和纵向像素的数量来表示&#xff0c;比如19201080&#xff08;即1080p&#xff09;。 刷新率&#xff1a;显示器每秒钟画面更新的次数&…