1. 边缘网关硬件选型与接口规划
任务目标
为一套面向工业现场数据采集与边缘计算的IoT网关完成硬件选型与接口规划。场景约束:需接入Modbus RTU/RS485设备与以太网PLC,本地完成协议解析与轻量级规则判断,上行通过4G/5G或Wi-Fi传输,供电为24V DC工业电源,工作温度-20℃~70℃。输出一份可执行的硬件选型清单与接口分配表。
硬件选型决策
| 部件 | 选型 | 关键参数 | 选型依据 |
|---|---|---|---|
| CPU | NXP i.MX6ULL (Cortex-A7, 528MHz) | 单核,工业级温度范围 | 满足Modbus解析与边缘规则引擎的算力需求,工业级供货周期长,成本低 |
| 内存 | DDR3L 512MB | 16位总线,工业级 | 支撑Linux系统与边缘运行时(约占用200MB),余量充足 |
| 存储 | eMMC 8GB + MicroSD卡槽 | eMMC为系统盘,SD卡作日志扩展 | 系统与程序写入eMMC,现场日志与固件备份走SD卡,便于维护 |
| 有线通信 | 2×RS485(隔离)+ 2×10/100M Ethernet | RS485支持Modbus RTU主/从模式;以太网支持Modbus TCP | 现场仪表多为RS485总线,PLC上行走以太网 |
| 无线通信 | 4G LTE模块(Mini-PCIe接口)+ Wi-Fi模块(USB) | 4G为数据主通道,Wi-Fi为本地调试备用 | 工业现场通常无有线外网,4G保证上行链路 |
| 电源 | 24V DC输入,板载DC-DC降压至5V/3.3V | 输入范围18~36V,带反接与浪涌保护 | 工业标准供电,宽压输入适应现场波动 |
| 扩展接口 | 1×USB 2.0 Host,1×Mini-PCIe,GPIO×8 | USB接Wi-Fi或调试设备,Mini-PCIe接4G模块 | 预留外设扩展能力 |
接口规划与地址分配
RS485-1: /dev/ttymxc1 → Modbus RTU 主站,轮询 3 台温湿度传感器(地址 0x01~0x03)
RS485-2: /dev/ttymxc2 → Modbus RTU 从站,向上位机开放数据(地址 0x10)
Ethernet1: eth0 → 连接 PLC(Modbus TCP,IP 192.168.1.10)
Ethernet2: eth1 → 预留/级联
4G LTE: wwan0 → APN 拨号,数据上云
Wi-Fi: wlan0 → 本地调试(静态 IP 192.168.0.1)
核心验证代码
以下代码验证硬件接口在Linux下的可用性与地址映射,确保选型与规划落地正确:
```python #!/usr/bin/env python3 # verify_hw_plan.py — 验证网关硬件接口映射 import os, serial, subprocess, sys def check_rs485(port, baud=9600): """验证RS485端口是否存在且可打开""" try: s = serial.Serial(port, baud, timeout=1) s.close() return f"{port}: OK" except Exception as e: return f"{port}: FAIL ({e})" def check_eth(iface): """验证以太网接口是否注册""" path = f"/sys/class/net/{iface}" return f"{iface}: {'OK' if os.path.exists(path) else 'FAIL'}" def check_usb_dev(): """列出USB设备,确认Wi-Fi/4G模块枚举""" out = subprocess.check_output(["lsusb"]).decode() return out.strip() or "No USB devices" if __name__ == "__main__": print("=== RS485 端口检查 ===") print(check_rs485("/dev/ttymxc1")) print(check_rs485("/dev/ttymxc2")) print("\n=== 以太网接口检查 ===") print(check_eth("eth0")) print(check_eth("eth1")) print("\n=== USB 设备枚举(确认无线模块) ===") print(check_usb_dev()) print("\n=== 内存与存储 ===") mem = subprocess.check_output(["free", "-m"]).decode().splitlines()[1] print(f"内存: {mem.split()[1]} MB 总计") disk = subprocess.check_output(["df", "-h", "/"]).decode().splitlines()[1] print(f"eMMC根分区: {disk.split()[1]} 容量") # 预期输出(基于硬件配置的确定性结果) # RS485-1/2 应显示 OK;eth0/eth1 应显示 OK; # lsusb 应能看到 4G 模块(如华为ME909s)与 Wi-Fi 适配器; # 内存约 512MB,eMMC 根分区约 7.2G(8G eMMC 实际可用) ```运行与验证方法
- 将系统烧录至eMMC后,通过串口或SSH登录网关Linux系统。
- 将上述脚本保存为
verify_hw_plan.py,执行python3 verify_hw_plan.py。 - 通过条件:RS485两端口均显示OK;eth0/eth1均显示OK;lsusb输出包含4G模块与Wi-Fi芯片的厂商ID;内存显示约512MB;根分区容量大于7GB。
- 若某接口FAIL,检查设备树配置或内核驱动是否已启用对应外设。
常见问题
- RS485端口无法打开:确认内核设备树中该UART已使能且未配置为console。
- 4G模块未枚举:检查Mini-PCIe槽位供电与模块的RESET引脚时序。
- 内存显示不足512MB:部分内存被GPU/VPU保留,属正常现象,可用
dmesg | grep Memory查看内核实际识别量。