工业一体机Linux系统部署实战:从系统安装到工业通信环境搭建
工业一体机是面向工业场景的集成化计算终端通常预装Windows或Linux操作系统支持串口通信、GPIO控制、工业总线协议等工业级接口。在ARM架构工业一体机上部署Linux系统并搭建工业通信开发环境是工业自动化项目的常见基础工作。之前在项目里给一台ARM架构RK3568的工业一体机部署Ubuntu系统做Modbus TCP通信和串口数据采集。整个过程踩了不少坑记录下来给需要的朋友参考。文中不涉及任何商业产品信息纯粹是技术实战笔记。## 系统安装与基础配置RK3568平台通常出厂自带Android或Debian但做工业开发我更习惯用Ubuntu。刷机工具用厂家的Rockchip烧录工具把Ubuntu镜像烧到eMMC里。烧录完成后第一件事配置网络和SSHbash# 配置静态IP工业现场通常用固定IPsudo nano /etc/netplan/01-netcfg.yamlyamlnetwork:version: 2ethernets:eth0:addresses:- 192.168.1.100/24gateway4: 192.168.1.1nameservers:addresses: [8.8.8.8, 114.114.114.114]bashsudo netplan apply然后装SSH方便远程操作bashsudo apt updatesudo apt install openssh-server -ysudo systemctl enable ssh## 串口环境配置工业一体机的串口设备通常映射为/dev/ttyS*或/dev/ttyUSB*。先确认串口节点bashls -l /dev/ttyS*# 输出示例# crw-rw---- 1 root dialout 4, 64 Jul 22 09:00 /dev/ttyS0# crw-rw---- 1 root dialout 4, 65 Jul 22 09:00 /dev/ttyS1# crw-rw---- 1 root dialout 4, 66 Jul 22 09:00 /dev/ttyS2确认串口能正常收发数据。用stty配置串口参数bash# 配置ttyS3为RS485模式波特率9600stty -F /dev/ttyS3 9600 cs8 -cstopb -parenb -crtscts# 测试发送echo -n test data /dev/ttyS3# 用cat监听接收cat /dev/ttyS3 RS485的收发切换是个常见的坑。有些平台的RS485引脚控制需要通过ioctl切换不是标准的硬件流控c#include sys/ioctl.h#include linux/serial.h// RS485收发方向切换struct serial_rs485 rs485conf;rs485conf.flags | SER_RS485_ENABLED;rs485conf.flags | SER_RS485_RTS_ON_SEND; // 发送时拉高RTSrs485conf.flags ~SER_RS485_RTS_AFTER_SEND; // 发送后拉低RTSrs485conf.delay_rts_before_send 1;rs485conf.delay_rts_after_send 1;ioctl(fd, TIOCSRS485, rs485conf);## Modbus TCP通信环境搭建工业通信最常用的协议就是ModbusTCP版本跑在以太网上部署简单。Python的pymodbus库很好用bashsudo apt install python3-pip -ypip3 install pymodbus写一个简单的Modbus TCP从站Slave模拟一个PLC设备响应主站请求pythonfrom pymodbus.server import StartTcpServerfrom pymodbus.datastore import ModbusSlaveContext, ModbusServerBlockfrom pymodbus.datastore import ModbusSequentialDataBlock# 初始化数据存储区store ModbusSlaveContext(diModbusSequentialDataBlock(0, [0]*100), # 离散输入coModbusSequentialDataBlock(0, [0]*100), # 线圈hrModbusSequentialDataBlock(0, [0]*100), # 保持寄存器irModbusSequentialDataBlock(0, [0]*100), # 输入寄存器)# 启动TCP从站监听502端口StartTcpServer(contextstore, address(0.0.0.0, 502))再写一个主站Master轮询多个从站设备的示例pythonfrom pymodbus.client import ModbusTcpClientimport time# 设备地址列表devices [{ip: 192.168.1.101, port: 502, unit_id: 1},{ip: 192.168.1.102, port: 502, unit_id: 2},{ip: 192.168.1.103, port: 502, unit_id: 3},]def poll_device(device):client ModbusTcpClient(device[ip], portdevice[port], timeout3)if not client.connect():print(f[ERROR] 连接失败: {device[ip]})return Nonetry:# 读取保持寄存器地址0开始读10个result client.read_holding_registers(0, 10, slavedevice[unit_id])if result.isError():print(f[ERROR] 读取失败: {device[ip]})return Nonereturn result.registersfinally:client.close()# 轮询采集while True:for dev in devices:data poll_device(dev)if data:print(f{dev[ip]}: {data})time.sleep(1)## GPIO控制ARM平台的工业一体机一般有GPIO引脚通过sysfs控制bash# 导出GPIO引脚假设使用GPIO编号17echo 17 /sys/class/gpio/export# 设置为输出方向echo out /sys/class/gpio/gpio17/direction# 设置高电平echo 1 /sys/class/gpio/gpio17/value# 设置低电平echo 0 /sys/class/gpio/gpio17/value# 取消导出echo 17 /sys/class/gpio/unexport如果用Python控制更方便pythonimport osclass GPIO:def __init__(self, pin):self.pin pinself.path f/sys/class/gpio/gpio{pin}def export(self):if not os.path.exists(self.path):with open(/sys/class/gpio/export, w) as f:f.write(str(self.pin))def set_direction(self, direction):with open(f{self.path}/direction, w) as f:f.write(direction)def write(self, value):with open(f{self.path}/value, w) as f:f.write(str(value))def read(self):with open(f{self.path}/value, r) as f:return f.read().strip()# 使用示例led GPIO(17)led.export()led.set_direction(out)led.write(1) # 点亮## 常见坑和解决方案| 问题 | 原因 | 解决方案 ||------|------|---------|| 串口打不开 | 权限不足 | sudo usermod -aG dialout $USER || RS485收不到数据 | 方向切换时序 | 调整delay_rts参数 || Modbus超时 | 网络或从站无响应 | 设置合理的timeout和重试 || GPIO不可用 | 内核未编译驱动 | 检查设备树配置 || 串口名称变化 | udev规则未固定 | 写udev规则绑定物理端口 |串口名称漂移的问题比较烦插拔USB转串口设备后/dev/ttyUSB0可能变成ttyUSB1。解决方法是写udev规则bash# 查看设备串号udevadm info -a -n /dev/ttyUSB0 | grep serial# 创建udev规则sudo nano /etc/udev/rules.d/99-usb-serial.rulesSUBSYSTEMtty, ATTRS{serial}FTS12345, SYMLINKttyPLC01SUBSYSTEMtty, ATTRS{serial}A1001XYW, SYMLINKttySensor01bashsudo udevadm control --reload-rulessudo udevadm trigger之后用/dev/ttyPLC01访问设备不管插拔顺序怎么变名称都固定。## 常见问题FAQ**QARM架构工业一体机部署Linux系统有什么注意事项**A需使用平台对应的Linux镜像通过厂家烧录工具写入eMMC。部署后注意配置静态IP工业现场固定地址、安装SSH服务、配置串口权限将用户加入dialout组。部分平台需要通过设备树Device Tree配置GPIO和串口引脚复用具体配置方式参考平台的BSP文档。**Q工业通信中RS485收发方向切换如何实现**ALinux下通过serial_rs485结构体配合ioctl的TIOCSRS485命令实现硬件自动收发切换。关键参数包括SER_RS485_ENABLED启用RS485模式、SER_RS485_RTS_ON_SEND发送时RTS电平和delay_rts_before_send/after_send方向切换延迟单位毫秒。不同平台时序要求不同需根据实际波特率调整延迟参数。**QLinux下如何固定USB转串口设备名称**A通过编写udev规则根据设备的serial号或其他唯一属性创建固定符号链接。使用udevadm info查询设备属性在/etc/udev/rules.d/下创建规则文件将特定serial的设备映射为固定名称如ttyPLC01。这样无论插拔顺序如何变化设备名始终固定保证应用程序引用正确。

相关新闻

Kimi K3引发华尔街震动:算力转化与商业化双突破,重塑行业估值逻辑?

Kimi K3引发华尔街震动:算力转化与商业化双突破,重塑行业估值逻辑?

让华尔街紧张的,其实是Kimi K3的算力转化效率?最近一周,华尔街陷入对芯片产业的“信任危机”。费城半导体指数一周内跌12.5%入技术性熊市,17家投行下调AI芯片企业目标价,高盛称“算力扩张时代”或近尾声。震荡源于月之…

2026/10/19 11:54:48 阅读更多 →
直角行星减速机替换中的方向问题:PXR与PAMG选型分析

直角行星减速机替换中的方向问题:PXR与PAMG选型分析

直角行星减速机替换中的方向问题:PXR与PAMG选型分析 一、为什么直角减速机替换更复杂? 普通同轴行星减速机的输入轴和输出轴处于同一轴线上,主要核对轴向尺寸即可。 直角行星减速机的输入轴与输出轴呈90布置。原设备使用PXR时,可以…

2026/10/17 5:14:02 阅读更多 →
无人机视角罂粟检测数据集VOC+YOLO格式3648张1类别

无人机视角罂粟检测数据集VOC+YOLO格式3648张1类别

注意数据集中存在增强图片主要是旋转增强,占据数据量大约一半,注意查看图片 数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&…

2026/10/19 18:28:51 阅读更多 →

最新新闻

服务器磁盘管理实战:从选型、RAID到LVM与性能排障全解析

服务器磁盘管理实战:从选型、RAID到LVM与性能排障全解析

最近帮一个业务团队做新服务器选型与磁盘初始化配置时,发现很多开发同学对磁盘这块的知识还停留在“机械硬盘 vs 固态硬盘”的层面。真要落到服务器选型、多块硬盘怎么组合、RAID 怎么选、系统装完以后磁盘怎么规划、后续怎么扩容和排障,往往就缺乏一套完…

2026/10/21 2:49:01 阅读更多 →
RAG知识库问答实战:从原理、技术选型到工程落地优化

RAG知识库问答实战:从原理、技术选型到工程落地优化

1. RAG 到底解决了什么问题,为什么现在非学不可最近两年,大模型相关的技术方向非常多,微调、Agent、多模态、RAG……如果不深入去看,很容易被各种名词绕晕。尤其是 RAG(Retrieval-Augmented Generation,检索…

2026/10/21 2:49:01 阅读更多 →
RAG知识库问答实战:从原理到代码落地

RAG知识库问答实战:从原理到代码落地

前一阵子在做知识库问答项目时,发现网上 RAG 相关的教程虽然很多,但大部分要么只讲原理、不给可运行代码,要么代码能跑但不解释为什么这么设计。对刚接触大模型应用开发的同学来说,很容易卡在“原理看懂了,一动手就报错…

2026/10/21 2:49:01 阅读更多 →
RAG入门到实战:用LangChain+Chroma搭建知识库问答系统

RAG入门到实战:用LangChain+Chroma搭建知识库问答系统

先给结论:RAG 是目前搭建知识库问答最稳的基线方案。RAG 的全称是 Retrieval-Augmented Generation,检索增强生成。它解决的问题很直接:大模型不知道你的私有资料、内部文档、产品手册和业务数据,那就先把这些资料切块、向量化、存…

2026/10/21 2:49:01 阅读更多 →
火焰数据集YOLOv5训练实战:从标注文件到可推理模型

火焰数据集YOLOv5训练实战:从标注文件到可推理模型

简介:火焰数据集(含标注好的标签)面向从事目标检测的开发者与研究者,尤其适合使用 YOLOv5 训练火焰识别模型的场景,可用于火灾预警、视频监控等实际项目。资源包共 5260 个文件,包含 1853 张 jpg 图像、185…

2026/10/21 2:49:01 阅读更多 →
Quartz动态设置并发数量

Quartz动态设置并发数量

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:48:00 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →