1. 边缘网关硬件选型与接口规划

任务目标

为一套面向工业现场数据采集与边缘计算的IoT网关完成硬件选型与接口规划。场景约束:需接入Modbus RTU/RS485设备与以太网PLC,本地完成协议解析与轻量级规则判断,上行通过4G/5G或Wi-Fi传输,供电为24V DC工业电源,工作温度-20℃~70℃。输出一份可执行的硬件选型清单与接口分配表。

硬件选型决策

部件选型关键参数选型依据
CPUNXP i.MX6ULL (Cortex-A7, 528MHz)单核,工业级温度范围满足Modbus解析与边缘规则引擎的算力需求,工业级供货周期长,成本低
内存DDR3L 512MB16位总线,工业级支撑Linux系统与边缘运行时(约占用200MB),余量充足
存储eMMC 8GB + MicroSD卡槽eMMC为系统盘,SD卡作日志扩展系统与程序写入eMMC,现场日志与固件备份走SD卡,便于维护
有线通信2×RS485(隔离)+ 2×10/100M EthernetRS485支持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×8USB接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 实际可用) ```

运行与验证方法

  1. 将系统烧录至eMMC后,通过串口或SSH登录网关Linux系统。
  2. 将上述脚本保存为 verify_hw_plan.py,执行 python3 verify_hw_plan.py。
  3. 通过条件:RS485两端口均显示OK;eth0/eth1均显示OK;lsusb输出包含4G模块与Wi-Fi芯片的厂商ID;内存显示约512MB;根分区容量大于7GB。
  4. 若某接口FAIL,检查设备树配置或内核驱动是否已启用对应外设。

常见问题

  • RS485端口无法打开:确认内核设备树中该UART已使能且未配置为console。
  • 4G模块未枚举:检查Mini-PCIe槽位供电与模块的RESET引脚时序。
  • 内存显示不足512MB:部分内存被GPU/VPU保留,属正常现象,可用dmesg | grep Memory查看内核实际识别量。