工业自动化中如何用 minicom 高效调试串口设备?从零配置到实战排错
在工业现场,你是否曾遇到这样的场景:一台老旧的 PLC 正常运行多年,突然通信中断;一个温湿度传感器接上后返回乱码;或者你在树莓派上连了个 Modbus 仪表,却始终收不到回应?
这时候,别急着换线、重启设备或怀疑协议栈。真正的问题可能出在最基础的一环——串口通信链路本身。
而要快速定位这类问题,你需要一个简单、稳定、无需图形界面就能工作的工具。它不需要花哨的界面,但必须能让你“看到”数据是怎么发出去、怎么回来的。
这个工具就是minicom。
为什么是 minicom?不是 Wireshark 或 Python 脚本?
你说,现在都 2025 年了,为什么不直接写个pyserial脚本,或者用更高级的串口分析仪?
答案很简单:在现场调试时,你往往没有时间搭环境、装依赖、跑代码。
你手上可能只有一台装了 Ubuntu 的工控机,或者一个通过 SSH 登录的嵌入式系统。你需要的是:
- 立即启动
- 快速连接
- 实时查看收发内容
- 不依赖 GUI
- 可记录日志供后续分析
这些正是minicom的强项。
它是 Linux 下的“超级终端”,轻量、成熟、跨平台、广泛预装于各类发行版。更重要的是——它足够底层,足够可靠。
哪怕你的 Python 虚拟环境崩了,SSH 断了,只要还能进终端,minicom 就能帮你把数据“打”出去,把响应“捞”回来。
安装和权限:第一步就卡住?别让权限拖后腿
先来装 minicom。以常见的 Ubuntu/Debian 系统为例:
sudo apt update sudo apt install minicom -y安装完检查版本:
minicom -v如果输出类似minicom version 2.8,说明安装成功。
但接下来最关键的一步来了:设备权限。
Linux 中串口设备(如/dev/ttyUSB0)默认只有 root 或dialout组成员才能访问。如果你是普通用户,直接运行 minicom 很可能会提示:
Could not open /dev/ttyUSB0: Permission denied解决方法很简单:
sudo usermod -aG dialout $USER⚠️ 注意:这行命令执行后,需要重新登录或重启系统才会生效。否则组权限不会加载。
不想改用户组?也可以临时授权(仅限调试):
sudo chmod 666 /dev/ttyUSB0但这只是权宜之计,生产环境中不推荐。
怎么知道我该连哪个端口?插上线就知道!
插入 USB 转串口模块后,系统会自动创建设备节点,通常是/dev/ttyUSB0、/dev/ttyACM0等。
想知道具体是哪个?用这条命令看内核日志:
dmesg | grep tty你会看到类似输出:
[ 1234.567890] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0看到了吗?ttyUSB0就是你要用的设备。
如果是树莓派原生串口,可能是/dev/ttyAMA0或/dev/serial0;PC 上的老式串口则是/dev/ttyS0。
记下来,后面要用。
第一次启动 minicom:别跳过 setup,否则全是坑
很多人图省事,直接敲:
minicom -D /dev/ttyUSB0结果打开一看,满屏乱码,输入也没反应。
为什么?因为你跳过了最关键一步:参数配置。
正确的做法是先进入 setup 模式:
minicom -s这时你会看到一个蓝色菜单界面(没错,就是那个复古风格),里面有多个选项。我们重点看Serial port setup。
按键盘上的字母A进入串口设备设置,填入你查到的设备路径,比如:
A - Serial Device : /dev/ttyUSB0然后按E设置波特率、数据格式。这里一定要和目标设备保持一致!
工业中最常见的是9600 8N1,也就是:
- 波特率:9600
- 数据位:8
- 校验位:无(None)
- 停止位:1
所以在 E 行输入:
9600 8N1其他常用值还包括 19200、38400、115200。Modbus RTU 设备多数用 9600,某些高速仪表可能用 115200。
再往下看:
- F - Hardware Flow Control: 是否启用 RTS/CTS 硬件流控
大多数工业设备不用流控,设为No - G - Software Flow Control: XON/XOFF 软件流控,基本不用,也设为
No
设置完按回车返回主菜单,选择Save setup as dfl把配置保存为默认,以后就可以直接minicom启动了。
想为不同设备保存多套配置?选Save setup as…,起个名字比如plc_modbus,之后用:
minicom plc_modbus就能一键调用。
连上了,然后呢?动手发一条 Modbus 指令试试
假设你现在要读一个 Modbus RTU 协议的温度传感器,地址是 0x01,想读寄存器 0x0000 的值。
标准请求帧是:
01 03 00 00 00 01 85 C4但在 minicom 里怎么发送十六进制数据?
原生 minicom不支持直接输入 Hex 字节流,这是它的短板之一。
怎么办?
有两个办法。
方法一:配合 shell 命令绕过限制
新开一个终端,用echo -ne发送原始字节:
echo -ne '\x01\x03\x00\x00\x00\x01\x85\xC4' > /dev/ttyUSB0然后回到 minicom 终端,你应该能看到返回的数据,比如:
01 03 02 00 AA 3E 8B其中00 AA是两个字节的数据,转换成十进制是 170。如果设备说明书写明每单位代表 0.1°C,那实际温度就是 17.0°C。
方法二:开启日志 + 手动粘贴(适用于少量测试)
在 minicom setup 中进入Logging options,启用日志记录,路径可以设为/tmp/serial.log。
然后启动通信,在 minicom 界面中尝试手动输入十六进制字符(注意:必须确保串口设置正确,且设备支持文本模式查询)。
不过这种方式对纯二进制协议不太友好,更适合调试 AT 指令类设备。
为什么没反应?这些“经典坑”你一定遇到过
❌ 问题1:启动 minicom 直接退出,报错 “Device or resource busy”
原因很可能是串口被其他进程占用了。比如系统启用了串口登录服务serial-getty。
查一下:
lsof /dev/ttyUSB0如果发现agetty或getty在占用,说明系统把这个串口当登录终端用了。
解决办法是禁用对应服务:
sudo systemctl disable serial-getty@ttyS0.service如果是 ttyUSB0,服务名可能是serial-getty@ttyUSB0.service,根据实际情况调整。
❌ 问题2:显示乱码
最常见的原因是波特率不匹配。
对方设备是 9600,你设成了 115200,结果当然是一堆符号。
解决方案:统一波特率。不确定时,优先试 9600 和 115200。
另外也要确认:
- 数据位是不是 8?
- 有没有校验?Even/None?
- 停止位是 1 还是 2?
任何一项不一致都会导致解码失败。
❌ 问题3:能发不能收,或数据丢失
检查接线!尤其是 RS-485 设备,经常因为 A/B 线反接导致通信失败。
如果是 RS-232:
- 主机 TX → 设备 RX
- 主机 RX ← 设备 TX
- 共地(GND)必须接通
可以用万用表测通断。别小看一根线没接好,足以让你折腾半天。
此外,长距离通信时建议开启硬件流控(RTS/CTS),防止缓冲区溢出。
高阶技巧:让 minicom 更好用
✅ 技巧1:命名配置管理多设备
你在现场可能同时对接西门子 PLC、丹佛斯变频器、霍尼韦尔传感器……每个设备串口参数都不一样。
不要每次都重配!使用命名配置:
minicom -s # 进入 setup → Save setup as... → 输入名称:siemens_plc_9600下次直接:
minicom siemens_plc_9600效率翻倍。
✅ 技巧2:开启日志,留存通信全过程
在 setup 的Logging options中启用日志功能,所有收发数据都会被保存到文件。
这对故障复现、客户争议、协议逆向都非常有用。
例如,客户说“昨天数据异常”,你可以拿出日志证明:“昨天根本没收到有效请求”。
✅ 技巧3:结合 pyserial 写自动化脚本
minicom 适合手动调试,但不适合批量测试。
这时可以用 Python +pyserial实现自动化:
import serial ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) request = bytes([0x01, 0x03, 0x00, 0x00, 0x01, 0x85, 0xC4]) ser.write(request) response = ser.read(100) print("Response:", response.hex())既能验证逻辑,又能生成测试报告。
minicom 的局限与替代方案
虽然 minicom 强大,但它也有缺点:
- 无原生 Hex 发送功能
- 界面复古,学习成本略高
- 不支持复杂协议解析(如自动计算 CRC)
如果你需要图形化操作,可以考虑:
- cutecom:带 Hex 输入的图形串口工具
- gtkterm:轻量级 GUI 终端
- Tera Term(Windows)或SecureCRT:功能全面但闭源
但对于远程服务器、嵌入式设备、无 GUI 环境,minicom 依然是首选。
写在最后:老工具也能扛大梁
在这个动辄谈 AI、边缘计算、工业互联网的时代,有人觉得串口已经过时。
可现实是:全国还有数百万台基于 RS-485 的 PLC、仪表、执行器在运行。它们不会轻易被淘汰。
而 minicom,就像一把螺丝刀,朴素、结实、随时可用。
当你面对一堆设备接口、不知道从哪开始的时候,不妨打开终端,输入一句:
minicom -s也许,答案就在第一帧返回的数据里。
如果你也曾在深夜靠 minicom 救回一条产线,欢迎在评论区分享你的故事。