摘要:本文是面向IIoT开发者的PLC数据采集实战指南。我们将深度分析欧姆龙PLC数据采集(FINS协议)和台达/汇川PLC数据采集(Modbus协议)的技术难点,并重点介绍如何在鲁邦通EG系列边缘计算网关(Debian+Docker)上,通过“低代码”(E2C Pro)与“高代码”(Python/C#)相结合的混合模式,实现异构PLC数据采集与统一的MQTT JSON输出。
导语:作为开发者,当接到需求:“把产线上欧姆龙、台达、汇川的数据都采上来,统一发到MQTT”,你的第一反应是什么?是去研究复杂的Omron FINS协议文档,还是去C#里折腾Socket和Modbus库?本文将提供一个更工程化、更优雅的思路:利用鲁邦通EG系列这种开放的边缘计算网关,实现统一数据采集,让你告别“造轮子”和“稳定性”的双重烦恼。
【PLC数采实战】C#或Python如何统一采集Omron FINS和Modbus (台达/汇川) 数据?

1. 痛点分析:为什么统一采集是“硬骨头”?
对于开发者而言,用代码搞定PLC数据采集,难点不在于Modbus,而在于各种“奇葩”的私有协议和混杂的物理接口。
1.1 协议栈差异:FINS vs Modbus
- Modbus (台达/汇川): 协议简单、开源库多(如NModbus、minimalmodbus),无论是RTU(串口)还是TCP(网口),实现起来都相对容易。
- Omron FINS (欧姆龙): 这是一个基于UDP或TCP的私有协议。你需要自己封包、解包,处理握手和节点寻址,调试过程非常痛苦,且缺乏稳定可靠的开源库。
1.2 物理接口混杂:RS485 vs 以太网
- 你需要同时处理串口(Modbus RTU)和网口(FINS TCP / Modbus TCP)。如果用PC自研,你还得搞定串口服务器或者多串口卡,硬件环境极其复杂。
2. 现代架构:边缘计算网关 (Debian + Docker)
与其在Windows PC上“缝合”各种驱动和硬件,不如直接采用工业级的边缘计算网关。
2.1 为什么是这个架构?
- 稳定性: 鲁邦通EG系列网关是ARM架构,工业级硬件,7x24小时运行不死机。
- 接口统一: 像鲁邦通EG3110,天生自带多个ETH网口和RS485串口,物理连接一步到位。
- 环境友好: 核心是它运行RobustOS Pro(基于Debian 11),并原生支持Docker。这简直是开发者的“福音”。
3. 方案A:“低代码”实现 (Edge2Cloud Pro)
这是最高效的“偷懒”方式。鲁邦通EG网关内置的Edge2Cloud Pro (E2C Pro)平台,已经帮我们把“轮子”造好了。
3.1 什么是Edge2Cloud Pro?
它是一个低代码的工业物联网边缘中间件,内置了上百种PLC驱动,包括Omron FINS和Modbus。
3.2 配置步骤
- 登录Web: 登录EG3110的Web管理界面。
- 配置南向:
- 新建一个“Omron FINS TCP”驱动,填入欧姆龙PLC的IP。
- 再新建一个“Modbus RTU”驱动,关联到RS485-1口,填入台达PLC的从站ID。
- 再新建一个“Modbus TCP”驱动,填入汇川PLC的IP。
- 配置北向:
- 新建一个“MQTT”服务,填入你的Broker地址。
- 配置规则:
- 拖拽一个规则,将3个PLC设备的数据,全部转发给MQTT服务。
3.3 统一的北向MQTT (JSON)
无需写一行代码,你就能在MQTT Broker收到统一格式的JSON:
JSON
{
"device_name": "Omron_PLC",
"values": { "DM100": 1234 }
}
{
"device_name": "Delta_PLC",
"values": { "D200": 5678 }
}
E2C Pro平台帮你抹平了所有协议差异。
4. 方案B:“高代码”实现 (Docker + Python)
如果E2C Pro内置的驱动满足不了你(比如遇到了罕见的私有协议),或者你需要在边缘做复杂的计算,Docker就上场了。
4.1 适用场景
- 某台达PLC的Modbus点位需要和欧姆龙的FINS点位进行边缘侧的复杂逻辑运算后,再上报结果。
- 你需要用Python的Pandas库在边缘做数据分析。
4.2 Dockerfile示例
Dockerfile
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
# 同时安装FINS和Modbus的库
RUN pip install pyfinc minimalmodbus paho-mqtt
COPY . .
CMD ["python", "main.py"]
4.3 Python伪代码(混合采集)
Python
import minimalmodbus
import paho.mqtt.client as mqtt
# import pyfinc # 假设的FINS库
# --- MQTT ---
mqtt_client = mqtt.Client()
mqtt_client.connect("your-broker.com")
mqtt_client.loop_start()
# --- 台达/汇川 (Modbus RTU) ---
delta_plc = minimalmodbus.Instrument('/dev/ttyS1', 1) # 假设是串口1
delta_plc.serial.baudrate = 9600
# --- 欧姆龙 (FINS TCP) ---
# omron_plc = pyfinc.FincClient(host='192.168.1.10', port=9600)
while True:
data = {}
try:
# 采台达
data['delta_D200'] = delta_plc.read_register(200)
# 采欧姆龙
# data['omron_DM100'] = omron_plc.read('DM100')
# 统一上报
mqtt_client.publish("plc/unified_data", str(data))
except Exception as e:
print(e)
time.sleep(1)
5. 最佳实践:混合模式
最专业的玩法是“混合模式”:
- 用E2C Pro: 负责所有标准的欧姆龙PLC数据采集和台达/汇川PLC数据采集,保证I/O的绝对稳定。
- 用Docker: E2C Pro将采集到的数据推送到本地的MQTT Broker。Docker中的Python程序订阅这个本地Broker,负责“高阶”的计算和分析,然后再将“结果”推送到云端。

常见问题解答 (FAQ)
问题1:这种“混合模式”的性能如何?
答: 性能极高。E2C Pro(低代码)负责稳定高效的I/O轮询,Docker(高代码)负责异步的复杂计算。两者各司其职,既保证了数据采集的实时性,又实现了边缘智能的灵活性。
问题2:Omron FINS协议和Modbus协议可以同时在一台网关上跑吗?
答: 可以。E2C Pro平台支持并行运行多个驱动实例。你可以在一台EG3110上,同时建立FINS TCP通道和Modbus RTU/TCP通道,它们互不干扰,数据统一采集。
总结:鲁邦通认为,对于欧姆龙(FINS)、台达/汇川(Modbus)的统一数据采集,鲁邦通EG系列边缘计算网关提供了“两条腿走路”的完美方案:它既有“低代码”的E2C Pro平台,让自动化工程师(AE)快速完成PLC数据采集任务;也提供了“高代码”的Debian+Docker环境,让IT/OT开发者能灵活实现复杂的边缘智能。这种“软硬兼施”的开放性,是现代异构PLC数据采集项目的最优解。
1809

被折叠的 条评论
为什么被折叠?



