第2章:操作系统与驱动安装

好,咱们直接进入正题。工控机要干活,第一步就是选对操作系统、装好驱动。这一步要是没走稳,后面数据采集、存储全得翻车。我见过太多项目,硬件选得挺好,结果系统没配好,现场跑起来各种卡顿、丢包。嗯,今天我就把这块的经验掰开揉碎了讲给你听。

2.1 Windows vs Linux:到底选哪个?

这个问题,几乎每个刚入行的朋友都会问我。我的回答很简单:看你的实时性要求和生态依赖。

对比项 Windows Linux
实时性 一般(非实时内核) 强(可打RT补丁)
驱动生态 丰富,厂商支持好 部分硬件需要自己编译
稳定性 中(蓝屏风险) 高(7×24小时运行)
开发工具 Visual Studio、LabVIEW GCC、Python、Eclipse
成本 需要授权费 免费开源

我个人习惯是:如果项目里用了很多PLC、运动控制卡,而且厂商只给了Windows驱动,那就老老实实用Windows。但如果你要做高速数据采集、精密运动控制,或者系统需要跑几个月不重启,那Linux是更好的选择。

我的经验: 有一次做激光测距项目,Windows下采集频率只能到1kHz,换了RT-Linux后直接飙到10kHz。说白了,实时性差的系统,数据采集就是“随缘”。

2.2 实时系统RT-Linux:为什么需要它?

普通Linux,它的内核调度是有延迟的。你想想看,一个中断来了,内核可能先处理别的任务,等个几毫秒才响应你的采集程序。对于工控来说,这几毫秒可能就是灾难。

RT-Linux,说白了就是在Linux内核下面加了一个实时微内核。它把实时任务和非实时任务隔离开,实时任务优先执行。这样,你的数据采集周期就能稳定在微秒级。

安装RT-Linux,我建议你走这条路:

  1. 下载内核源码:去kernel.org下载你需要的版本。
  2. 打RT补丁:从rt.wiki.kernel.org下载对应版本的补丁文件。
  3. 配置内核:运行make menuconfig,开启Preemption ModelFully Preemptible Kernel (RT)
  4. 编译安装make -j4 && make modules_install && make install
  5. 更新引导update-grub,重启选择RT内核。
注意: 我曾经在打补丁时没注意版本号,结果内核编译失败,折腾了一整天。记住,内核版本和补丁版本必须严格对应,差一个字母都不行。

2.3 驱动安装与调试:别让硬件“哑巴”

驱动装不上,工控机就是块砖。我见过最坑的情况是,采购的采集卡厂商说支持Linux,结果给的驱动是2.6内核的,而系统是4.19的。嗯,这种时候只能自己动手改源码。

驱动安装一般分三步:

  • 确认硬件ID:用lspci -vlsusb查看设备VID/PID。
  • 下载对应驱动:去厂商官网或GitHub找。
  • 编译安装make && make install,然后modprobe加载。

调试驱动时,我习惯用dmesg看内核日志。如果驱动加载失败,dmesg | tail -20会告诉你原因。比如“Unknown symbol”说明有依赖没解决,“Permission denied”就是权限问题。

避坑指南: 我曾经在调试一个USB采集卡时,驱动加载成功但设备节点没出现。查了半天,发现是udev规则没写。后来加了SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", MODE="0666"才搞定。

2.4 系统优化:让工控机跑得更稳

系统装好了,驱动也认了,但别急着跑数据。优化这一步,能让你少掉很多头发。

我一般会做这几件事:

  • 关闭不必要的服务:比如蓝牙、打印服务、桌面环境(如果是服务器)。用systemctl disable关掉它们。
  • 调整内核参数:在/etc/sysctl.conf里加kernel.sched_rt_runtime_us=-1,让实时任务不受限制。
  • 设置CPU亲和性:把采集进程绑定到特定CPU核心,用taskset -c 0 ./采集程序
  • 内存锁定:用mlockall()防止内存被换出,保证采集不卡顿。
小技巧: 你想想看,如果系统里有个定时任务突然跑起来,占用了CPU,你的采集周期就会抖动。所以,我建议把采集程序设为实时优先级,用chrt -f 99 ./采集程序

嗯,操作系统和驱动这块,说白了就是打好地基。地基不稳,上层建筑再漂亮也没用。下一章,咱们聊聊数据采集的硬件接口和协议,那才是真正开始“干活”的时候。