🔧 丁丁深度评测系列 · 第4篇

ThingsGateway 深度评测

💡 .NET 生态有什么开源 PLC 采集网关?和 Neuron 比怎么选?

基于.NET的国产开源工业边缘采集网关,丁丁实战18个月,3个项目验证(冲床监控/能源管理/条码追溯)。20+协议驱动、Web化配置、多目标转发、边缘计算,但也踩了5个大坑——Modbus地址混乱、西门子S7频繁断线、大量变量性能瓶颈、MQTT断点续传不完善、驱动开发文档少,这篇评测全说透。

版本4.x
分类边缘采集网关
协议Apache 2.0
丁丁评分8.0/10
实战时长18个月
🎯 丁丁一句话结论

.NET/C# 团队、要国产开源、开箱即用的 Web 配置采集网关、支持多协议多转发——ThingsGateway 很合适(8.0分);追求极致性能、资源受限或 ARM,选 Neuron;要灵活低代码做流程,选 Node-RED。

01 软件定位与适用场景

ThingsGateway是什么:由.NET China组织维护的国产开源工业边缘采集网关,基于.NET 6/7/8开发,内置20+工业协议驱动(Modbus/OPC UA/西门子S7/三菱MC/欧姆龙Fins/AB Ethernet/IP/DLT645电表等),支持变量采集、协议转换、数据转发(MQTT/数据库/HTTP/OPC UA Server)、边缘计算(表达式/报警/过滤)。Web化配置界面,开箱即用,适合做设备统一采集、协议转换和上位机解耦。是国产开源里少有的"能直接上生产"的采集网关。

核心设计哲学:①"设备统一采集"——一个网关采集所有品牌的PLC/仪表/传感器,不用每个设备写一套采集程序;②"协议转换"——把Modbus/西门子/三菱等私有协议转换成标准的MQTT/OPC UA/数据库,上位机不用关心底层协议;③"上位机解耦"——采集层与业务层分离,ThingsGateway负责采集和转发,上位机/数据库/云平台只负责消费数据,互不影响;④"配置即代码"——所有配置都是JSON文件,可以版本管理、批量导入导出、自动化部署。

✅
适用场景
  • 设备统一采集(多品牌PLC/仪表/传感器,一个网关搞定)
  • 协议转换(Modbus/西门子/三菱转MQTT/OPC UA/数据库)
  • 上位机解耦(采集层与业务层分离,互不影响)
  • 边缘计算(数据预处理/过滤/报警/表达式计算)
  • 数据转发(多目标同时转发:MQTT+数据库+HTTP)
  • 国产替代(替代KEPServerEX等收费采集软件)
  • .NET技术栈团队(C#开发者可以自己写驱动插件)
  • 中小规模部署(<500设备,<2000变量)
❌
不适用场景
  • 超大规模部署(>1000设备,>5000变量)——用Neuron或自研
  • 需要复杂业务逻辑(流程编排/条件分支/数据清洗)——用Node-RED
  • 嵌入式/资源受限环境(<256MB内存)——用Neuron(C语言,<50MB)
  • 需要官方SLA支持的核心系统——开源版无官方支持,用企业版或KEPServerEX
  • 非Windows环境且驱动未验证——虽然.NET跨平台,但驱动主要在Windows验证
  • 需要完整BI/报表功能——ThingsGateway是采集层,不是展示层,配合Grafana使用
  • 需要实时控制(毫秒级闭环控制)——ThingsGateway是采集网关,不是实时控制器
  • 协议极其小众(ThingsGateway没有的驱动)——需要自己写驱动,评估开发成本

02 丁丁的实战体验

👨‍🔧
丁丁智造
20年工业自动化全栈工程师 · 从ThingsGateway 3.x用到4.x
8.0
综合评分

用了多久:18个月(2025年4月开始,从ThingsGateway 3.x升级到4.x,经历了大版本重构)

用在哪些项目:

  • 30台冲床监控:30台冲床,三菱Q系列(MC协议)+西门子S7-1511(S7协议),共600变量,ThingsGateway做统一采集,转发MQTT给TDengine和Grafana
  • 能源管理:20台电表(Modbus RTU转TCP),ThingsGateway做Modbus采集和协议转换,转发MySQL做能耗分析
  • 条码追溯:PLC(三菱)+RFID读写器(私有TCP协议,自己写的驱动),ThingsGateway做统一采集,双写本地SQLite+MQTT云端

整体感受:ThingsGateway是国产开源里少有的"开箱即用"的采集网关。Web配置界面友好,非技术人员也能上手配置设备和变量。协议驱动丰富(20+),常见的Modbus/OPC UA/西门子/三菱/欧姆龙都有,不用自己写驱动。变量管理清晰(分组/类型/读写权限/缩放/表达式),转发目标多(MQTT/数据库/HTTP/OPC UA Server)。.NET技术栈对C#开发者友好,可以自己写驱动插件(我就写了一个RFID驱动)。社区活跃(.NET China组织维护,Gitee Star 5000+),作者响应快,QQ群里问问题基本当天有回复。

但也有明显短板:Modbus地址配置混乱(新手容易读错数据)、部分小众驱动稳定性参差不齐、大量变量需要手动优化批量读取、MQTT断点续传不完善(需要自己做兜底)、驱动开发文档少(需要看源码)。我的经验是:ThingsGateway适合做"采集层",不适合做"业务层"——采集和转发用ThingsGateway,复杂业务逻辑用Node-RED或微服务,展示用Grafana,这样分层架构既享受ThingsGateway的采集能力,又避免了它的灵活性不足。

👍 优点

  • 国产开源里少有的"开箱即用"采集网关,Web配置界面友好,非技术人员也能上手
  • 协议驱动丰富——Modbus/OPC UA/西门子S7/三菱MC/欧姆龙Fins/AB/DLT645等20+协议
  • .NET技术栈,C#开发者可以自己写驱动插件,扩展性强
  • 变量管理清晰——变量分组/类型/读写权限/缩放变换/表达式计算一应俱全
  • 转发目标多——MQTT/数据库(SQLite/MySQL/PostgreSQL)/HTTP/OPC UA Server/WebSocket
  • 边缘计算能力——变量表达式/报警规则/数据过滤/死区设置/变化上传
  • 社区活跃(.NET China组织维护),Gitee Star 5000+,问题响应快

👎 缺点

  • Modbus地址配置混乱——功能码/地址偏移/字节序/寄存器类型组合太多,初期经常读错
  • 驱动稳定性参差不齐——部分小众协议驱动有bug,生产环境需要充分测试
  • 大量变量采集性能瓶颈——1000+变量时采集周期变长,需要优化批量读取
  • MQTT转发断点续传不完善——网络中断后数据可能丢失,缓存机制需手动配置
  • 驱动插件开发文档少——自己写驱动时找不到完整文档,需要看源码和示例
  • 跨平台支持有限——虽然.NET Core跨平台,但驱动主要在Windows验证,Linux需测试
  • 社区规模相比Node-RED/Neuron较小,教程和案例不够多

03 核心功能演示

🔌
20+协议驱动
覆盖主流PLC/仪表/传感器,开箱即用
# 常用协议驱动
Modbus RTU/TCP    # 最常用,仪表/变频器/PLC
OPC UA Client      # 西门子1500/倍福/基恩士
OPC UA Server      # 把采集数据作为OPC UA暴露
西门子S7 (S7Net)   # S7-1200/1500/300/400/200Smart
三菱MC             # Q/L/R系列PLC
欧姆龙Fins         # CP/CJ/CS/NJ系列
AB Ethernet/IP     # 罗克韦尔PLC
DLT645             # 电表/水表/气表
三菱Melsec          # FX系列(编程口)
Profinet            # 部分支持
自定义驱动          # .NET插件,自己写
📊
变量管理
分组/类型/权限/缩放/表达式,Excel批量导入
# 变量属性
变量名: 冲床001_运行状态
地址: DB1.DBX0.0 (西门子) / 40001 (Modbus)
数据类型: Bool/Int16/UInt16/Int32/Float/Double/String
读写权限: 只读 / 读写
采集周期: 100ms / 1s / 5s / 自定义
表达式: x / 10  (缩放) / x > 100 ? 1 : 0 (判断)
死区: 0.5 (变化超过0.5才上传)
分组: 一车间 / 二车间 / 公用工程

# 批量导入
Excel模板: 变量名/地址/类型/周期/表达式
一次导入1000+变量,不用手动加
📤
多目标转发
MQTT/数据库/HTTP/OPC UA,同时转发不冲突
# 转发目标
MQTT: 阿里云/华为云/EMQX/自建
  - Topic前缀: /factory/press/
  - QoS: 0/1/2
  - 离线缓存: 内存/磁盘,可配大小
  - 变化上传/定时上传

数据库: SQLite/MySQL/PostgreSQL/SQL Server
  - 自动建表
  - 批量写入(性能优化)
  - 存储过程支持

HTTP REST API: POST/GET
  - 请求头/请求体模板
  - 变量插值
  - 失败重试

OPC UA Server: 把变量作为OPC UA节点
  - 其他OPC UA Client直接订阅
  - 安全策略支持
⚡
边缘计算
表达式/报警/过滤/死区,数据预处理在边缘完成
# 变量表达式
四则运算: x * 0.1 + 100
数学函数: Math.Round(x, 2) / Math.Abs(x)
条件判断: x > 100 ? 1 : 0
多变量: var1 + var2 * 0.5

# 报警规则
条件: 大于/小于/等于/不等于/变化
级别: 紧急/重要/一般
延时: 持续N秒才报警(防抖)
报警恢复: 自动恢复/手动确认
通知: MQTT/HTTP/邮件

# 数据过滤
死区: 变化超过阈值才上传/报警
变化上传: 只有变化时才转发(省带宽)
采样降频: 1秒采集,5秒上传
数据清洗: 异常值过滤(表达式实现)

04 5个真实踩坑(每个都花了时间和钱)

坑 01 Modbus地址配置混乱——功能码/地址偏移/字节序/寄存器类型组合太多,初期经常读错数据,要么读不到,要么读到的值差10倍
根因分析: Modbus协议本身就有"地址偏移"的历史包袱——PLC里的地址从1开始,但Modbus协议里从0开始,不同厂家的设备偏移量还不一样(有的0-based,有的1-based,有的40001-based)。ThingsGateway的Modbus驱动为了兼容所有设备,提供了"功能码"(01/02/03/04/05/06/15/16)、"起始地址"、"寄存器类型"(Coil/Discrete/Input/Holding)、"字节序"(Big-Endian/Little-Endian)、"字序"(Big-Endian/Little-Endian)、"数据类型"(Bool/Int16/UInt16/Int32/Float/Double)等一堆配置项。能源管理项目初期,电表数据一直读不对——读出来的电压是2200而不是220,查了半天才发现是"缩放因子"没配(电表寄存器存的是0.1V单位,需要除以10)。还有一次,32位浮点数一直读成乱码,最后发现是"字序"设反了(应该是Big-Endian Word Swap)。这些配置项单独看都简单,但组合起来有几十种可能,新手很容易踩坑
解决方案: Modbus配置的6条铁律:①先看设备手册的"Modbus地址表"——确认功能码、地址范围、数据类型、缩放因子,不要凭经验猜;②用"Modbus Poll"或"Modbus Slave"工具先测试通——确认能读到正确数据后,再把配置搬到ThingsGateway,不要直接在ThingsGateway里试错;③地址偏移统一用0-based(ThingsGateway默认),如果设备手册是1-based,起始地址减1;④32位数据(Int32/Float)必须确认"字序"——大多数设备是Big-Endian Word Swap(即高字在后),如果读出来是乱码就换字序试试;⑤缩放因子在变量的"表达式"里配——如电压寄存器是0.1V单位,表达式写"x / 10",不要在采集端配;⑥变量表用Excel整理好后批量导入——不要一个一个手动加,既慢又容易错。按这套方法,能源管理项目的电表数据一次就配对了,再也没出过读数错误
坑 02 西门子S7连接不稳定——S7-1500频繁断线重连,或者连接上了但读不到数据,报"连接被拒绝"或"PUT/GET权限不足"
根因分析: 西门子S7-1200/1500从固件V4.0开始,默认关闭了PUT/GET通信权限(出于安全考虑),第三方软件(包括ThingsGateway)用S7协议连接时需要在博途里手动开启。冲床监控项目初期,3台S7-1511一直连不上,ThingsGateway日志报"Connection refused",查了一天才发现是博途里的"允许PUT/GET通信"没勾。更坑的是,即使开了PUT/GET,S7-1500还有"连接数限制"——每个CPU默认支持8个S7连接(包括HMI/上位机/其他PLC),如果连接数超限,新的连接会被拒绝,表现为"有时能连上有时连不上"。冲床监控项目有3台S7-1511,每台接了ThingsGateway+触摸屏+调试电脑,刚好接近连接上限,导致ThingsGateway频繁断线重连。还有一个坑:S7-1200/1500的DB块默认是"优化的块访问",这种模式下第三方软件不能按偏移地址读取,需要在博途里关掉"优化的块访问",重新编译下载
解决方案: 西门子S7连接配置的5个要点:①博途里开启PUT/GET——设备配置→防护与安全→连接机制→勾选"允许PUT/GET通信",注意这是每个CPU都要单独设的;②检查连接数——S7-1200默认8个S7连接,S7-1500默认16个(可扩展到32/64),ThingsGateway+触摸屏+其他PLC的连接数加起来不能超限,如果超限就把触摸屏改成OPC UA连接(不占S7连接数);③DB块关掉"优化的块访问"——博途里DB块属性→取消"优化的块访问",重新编译下载,这样ThingsGateway才能按偏移地址读取;④DB块地址用"DB号.偏移量"格式——如DB1.DBX0.0(位)、DB1.DBW2(字)、DB1.DBD4(双字),不要用符号名(符号名需要额外配置);⑤ThingsGateway里S7驱动选"S7Net"驱动(不是旧的"S7"驱动),S7Net驱动更稳定,支持S7-1200/1500/300/400/200Smart。按这套配置,冲床监控的3台S7-1511连续运行30天+无断线,数据采集稳定
坑 03 大量变量采集性能瓶颈——1000+变量时采集周期从1秒变成5秒,数据更新不及时,CPU占用也飙升到50%+
根因分析: ThingsGateway的采集引擎默认是"每个设备一个采集线程,变量按顺序逐个读取"。这种模式在变量少的时候没问题,但变量多了(尤其是Modbus设备,每个寄存器都要单独读)就会成为瓶颈。冲床监控项目有30台冲床,每台20个变量,共600变量,初期配置时每台设备的变量都是单独读取(Modbus功能码03一次读1个寄存器),导致600变量需要600次Modbus请求,1秒周期根本跑不完,实际周期变成了5-8秒。更坑的是,ThingsGateway的"批量读取"优化需要手动配置——默认不会自动把连续地址的变量合并成一次读取,需要在设备配置里开启"批量读取"并设置"最大批量长度"。初期没开批量读取,性能极差,后来开了批量读取(最大100个寄存器),600变量的采集从600次请求变成了约20次请求,性能提升30倍。还有一个坑:变量分组不合理——把不同采集周期的变量放在同一个设备里,会导致所有变量都按最慢的周期采集
解决方案: 采集性能优化的6个手段:①必须开启"批量读取"——设备配置里开启批量读取,设置"最大批量长度"(Modbus建议100,OPC UA建议50),ThingsGateway会自动把连续地址的变量合并成一次读取;②变量按地址连续排列——在PLC/设备里把需要采集的变量放在连续的地址区域,这样批量读取效率最高,不要东一个西一个;③按采集周期分设备——1秒采集的变量放一个设备,5秒采集的变量放另一个设备,不要混在一起(混在一起会导致所有变量都按最慢周期);④合理设置采集周期——不是所有变量都需要1秒采集,状态变量可以5秒,累计量可以10秒,模拟量可以1-2秒,按重要性分级;⑤设备数量控制——单实例建议不超过50个设备、2000变量,超过就分多个ThingsGateway实例(可以部署在不同服务器上);⑥监控采集性能——ThingsGateway的Web界面有"系统监控"页面,可以看每个设备的采集周期、成功率、耗时,发现慢的设备及时优化。按这套优化,冲床监控600变量1秒采集周期稳定运行,CPU占用<15%,数据更新延迟<1秒
坑 04 MQTT转发断点续传不完善——网络中断后恢复,中断期间的数据丢失了,客户要求"数据不能丢",但ThingsGateway默认不缓存
根因分析: ThingsGateway的MQTT转发默认是"实时转发"——采集到数据就立即发MQTT消息,如果网络中断,消息就发不出去,也不会缓存,网络恢复后中断期间的数据就丢了。条码追溯项目要求"每一次扫码数据都必须上传到云端,不能丢",初期用ThingsGateway的MQTT转发,车间网络偶尔中断(每天1-2次,每次几分钟),导致每天丢失几十条扫码数据,客户很不满意。ThingsGateway虽然有"离线缓存"功能,但默认是关闭的,而且缓存机制比较简单——只缓存到内存(重启就丢),缓存大小有限制(默认10000条),缓存满了就丢弃旧数据。更坑的是,即使开了缓存,网络恢复后缓存数据的补发是"一次性批量发送",如果缓存了几万条,一次性发出去会导致MQTT broker压力过大,甚至被broker限流拒绝。还有一个坑:MQTT的QoS级别——ThingsGateway默认QoS 0(最多一次),要保证不丢需要设QoS 1(至少一次),但QoS 1会有重复消息的可能,需要消费端去重
解决方案: MQTT可靠转发的5个方案:①开启ThingsGateway的"离线缓存"——转发配置里开启"启用缓存",设置"缓存大小"(建议100000条),缓存路径设为磁盘(不要用内存缓存,重启会丢);②MQTT QoS设为1——至少一次投递,保证消息不丢,但消费端需要做去重(用消息ID或时间戳去重);③如果ThingsGateway的缓存不够用,在ThingsGateway和MQTT broker之间加一层"本地消息队列"——如用EMQX的本地桥接,或者用Redis List做缓存,ThingsGateway写Redis,另一个程序从Redis读并发MQTT,这样缓存容量和补发策略都可以自己控制;④关键数据(如条码追溯)做"双写"——ThingsGateway同时写本地SQLite数据库和MQTT,MQTT失败时从SQLite补传,本地数据库作为最终兜底;⑤监控转发状态——ThingsGateway的Web界面可以看MQTT连接状态和转发统计,设置"转发失败告警"(ThingsGateway支持变量报警,可以把MQTT连接状态作为变量,断开时报警)。条码追溯项目按方案④做了双写+补传,连续运行3个月,数据零丢失,客户满意
坑 05 驱动插件开发文档少——需要给一个小众设备(某品牌RFID读写器)写驱动,但找不到完整的开发文档,只能看源码和示例,踩了很多坑
根因分析: ThingsGateway的驱动插件是基于.NET的"DriverPlugin"接口开发的,理论上只要实现IDriver接口就能添加新协议。但实际开发时发现,官方文档只有一个"Hello World"级别的示例,缺少完整的API文档、最佳实践、调试方法。条码追溯项目需要接一个国产RFID读写器(支持TCP Socket通信,私有协议),ThingsGateway没有现成驱动,只能自己写。开发过程中踩了一堆坑:①驱动的生命周期不清晰——什么时候初始化、什么时候连接、什么时候采集、什么时候释放,文档没说清楚,看源码才搞明白;②变量读写的异步机制——ThingsGateway的采集是异步的,驱动需要实现ReadVariableAsync/WriteVariableAsync,但异步的超时、取消、异常处理文档没讲;③批量读取的优化——ThingsGateway会调用驱动的"批量读取"接口(如果驱动实现了),但接口的参数格式、返回值格式文档没说,不实现批量读取就会逐个变量读,性能差;④驱动的配置UI——ThingsGateway支持驱动自定义配置界面(用Blazor组件),但怎么写、怎么注册、怎么和驱动交互,文档几乎没有;⑤日志和调试——驱动里怎么打日志、怎么在Web界面看驱动日志、怎么远程调试,文档没说。最后花了一周时间(本来预计2天),看了5个现有驱动的源码,才把RFID驱动写出来
解决方案: 驱动开发的5条建议:①先看现有驱动的源码——ThingsGateway的Gitee仓库里有20+驱动源码,从最简单的"Modbus"驱动开始看,搞清楚生命周期、变量读写、批量读取、配置UI的实现方式,比看文档快得多;②从"TCP/IP协议驱动"模板开始改——如果你的设备是TCP Socket通信,直接复制"Modbus TCP"驱动的源码,把协议解析部分改成你的私有协议,其他部分(连接管理、变量管理、批量读取)都可以复用;③批量读取必须实现——实现IBatchRead接口,ThingsGateway会把连续地址的变量合并成一次批量读取请求,性能提升10-30倍,不实现的话驱动性能会很差;④配置UI用"简单属性"就行——不需要写复杂的Blazor组件,驱动的公共属性(如IP地址、端口、超时时间)会自动在Web界面生成配置表单,只有复杂配置才需要自定义UI;⑤加入ThingsGateway的QQ群/微信群——社区里有作者和其他开发者,遇到问题直接问,比自己看源码快,作者响应很及时。按这套方法,后来写第二个驱动(某品牌AGV通信)只花了2天,比第一个快了3倍

05 性能实测数据(冲床监控项目,4核8G服务器)

600变量/1秒
采集性能
30台设备,开启批量读取,CPU<15%
测试环境:冲床监控项目,4核8G服务器
50+设备
连接数
单实例支持同时连接设备数
测试环境:取决于协议类型,Modbus可更多
1000点/秒
MQTT转发
转发延迟<100ms(局域网)
测试环境:EMQX broker同机部署
150-400MB
内存占用
空闲约100MB,运行时150-400MB
测试环境:500变量,30设备
<15%
CPU占用
4核服务器,600变量1秒采集
测试环境:含MQTT转发+数据库写入
30天+
稳定性
连续运行无崩溃,自动断线重连
测试环境:冲床监控项目验证
📝 测试说明:
  • 服务器:4核8G,Windows Server 2019,.NET 8 Runtime,ThingsGateway 4.x
  • 设备:30台冲床(15台三菱Q系列MC协议 + 15台西门子S7-1511),每台20变量
  • 采集配置:所有设备开启批量读取(Modbus最大100寄存器,S7最大50变量),1秒采集周期
  • 转发配置:MQTT转发到同机EMQX(1000点/秒)+ SQLite本地存储(变化上传)
  • 测试时长:连续运行30天,取平均值和峰值
  • 结论:4核8G服务器跑ThingsGateway+600变量+MQTT转发完全无压力,CPU<15%,内存200-400MB。如果变量超过2000或设备超过50,建议升级到8核16G或分多实例部署。

06 vs Neuron / Node-RED 深度对比(10个维度)

对比维度 ThingsGateway Neuron Node-RED 胜出
定位 国产开源边缘采集网关 高性能边缘工业协议网关 低代码流程编排工具 各有侧重
开发语言 C#/.NET C语言 Node.js/JavaScript 看技术栈
协议数量 20+(较全) 30+(最多) 3000+节点(最广) Node-RED
Web配置 友好(开箱即用) 一般(需配置文件) 友好(流编程) ThingsGateway
采集性能 中(.NET开销) 极高(C语言) 低(单线程) Neuron
资源占用 中(150-400MB) 低(<50MB) 中(100-300MB) Neuron
灵活性 中(配置为主) 低(配置为主) 极高(流编程) Node-RED
国产支持 极强(国产协议全) 中(EMQ旗下) 弱(国外项目) ThingsGateway
开源协议 Apache 2.0 Apache 2.0(企业版收费) Apache 2.0 平手
社区规模 中(Gitee 5000+) 中(GitHub 5000+) 极大(GitHub 20000+) Node-RED

📊 对比总结

ThingsGateway胜出的维度(3项):Web配置友好度、国产协议支持、.NET技术栈适配

Neuron胜出的维度(3项):采集性能、资源占用、嵌入式适配

Node-RED胜出的维度(3项):灵活性、协议/节点生态、社区规模

丁丁的结论:这三者不是替代关系,而是互补关系,可以组合使用:ThingsGateway做设备采集层(多协议采集+协议转换),Node-RED做业务流程层(数据清洗+逻辑编排+报警通知),Grafana做展示层(可视化大屏+仪表盘)。如果资源受限(嵌入式),用Neuron替代ThingsGateway;如果需要极致灵活性,用Node-RED替代ThingsGateway(但采集稳定性和管理性会下降)。不要用一个工具打天下,分层架构才是最佳实践。

07 选型建议(什么场景选什么)

✅
选 ThingsGateway
  • 国产开源需求(替代KEPServerEX等收费软件)
  • .NET技术栈团队(C#开发者可自己写驱动)
  • 需要Web化配置(非技术人员也能上手)
  • 多协议采集(Modbus/西门子/三菱/欧姆龙等)
  • 中小规模部署(<500设备,<2000变量)
  • 需要协议转换(私有协议转MQTT/OPC UA/数据库)
  • Windows环境部署(驱动兼容性最好)
  • 需要边缘计算(表达式/报警/过滤)
🚀
选 Neuron
  • 超大规模部署(>1000设备,>5000变量)
  • 资源受限环境(嵌入式/ARM/<256MB内存)
  • 需要极致采集性能(C语言,毫秒级响应)
  • EMQ技术栈(配合EMQX/EMQX Enterprise)
  • 需要容器化部署(Docker/K8s友好)
  • 需要企业版支持(NeuronEX有官方SLA)
  • 需要多实例集群管理(NeuronEX支持)
  • Linux环境部署(Neuron Linux优化更好)
🔴
选 Node-RED
  • 需要灵活流程编排(条件分支/循环/数据清洗)
  • 低代码开发(非程序员也能写流程)
  • 复杂业务逻辑(ThingsGateway做不了的逻辑)
  • 需要快速原型验证(拖拽式,几分钟搭一个流程)
  • 需要丰富的节点生态(3000+节点,什么都有)
  • 需要HTTP API/WebSocket/REST等互联网协议
  • 需要与AI/LLM集成(Node-RED有AI节点)
  • 团队有JavaScript/Node.js开发能力

08 部署要点(6步上手指南)

01

安装ThingsGateway

Windows:下载Release压缩包,解压后运行ThingsGateway.exe,自动安装为Windows服务(管理员权限运行install.bat)。Linux:Docker部署(docker run -d --name=thingsgateway -p 5000:5000 -v /path/to/config:/app/config thingsgateway/thingsgateway),或下载linux-x64二进制包直接运行。默认Web管理端口5000,默认账号admin/123456(首次登录强制改密码)。生产环境建议Windows服务部署(驱动兼容性最好)

02

基础配置

Web管理界面(http://localhost:5000)登录后:①系统配置→修改管理员密码、配置日志级别(生产环境建议Info,调试用Debug);②插件管理→确认需要的驱动插件已启用(Modbus/OPC UA/S7Net等),不需要的插件可以禁用减少内存占用;③备份配置→系统配置→导出配置,定期备份(配置文件是JSON格式,存在config目录下);④配置开机自启——Windows服务自动自启,Linux用systemd配置自启([Unit] Description=ThingsGateway [Service] ExecStart=/path/to/ThingsGateway [Install] WantedBy=multi-user.target)

03

配置采集设备

①设备管理→添加设备→选择驱动插件(如Modbus TCP/S7Net/OPC UA Client);②配置设备连接参数——IP地址、端口、从站地址(Modbus)、机架/槽号(S7)、超时时间(建议3000ms)、重试次数(建议3次);③测试连接——点"测试连接"按钮,确认能连上设备;④添加变量——手动添加或Excel批量导入(变量名/地址/数据类型/读写权限/采集周期/表达式);⑤开启批量读取——设备配置里开启"批量读取",设置最大批量长度(Modbus建议100,OPC UA建议50);⑥查看实时数据——变量管理→实时数据,确认数据采集正确

04

配置转发目标

ThingsGateway支持多种转发目标,按需配置:①MQTT转发——转发管理→添加MQTT客户端→配置broker地址/端口/用户名/密码/Topic前缀/QoS级别(建议1)/开启离线缓存(缓存大小建议100000);②数据库转发——添加数据库客户端→选择数据库类型(SQLite/MySQL/PostgreSQL/SQL Server)→配置连接字符串→配置写入表结构(ThingsGateway自动建表);③HTTP转发——添加HTTP客户端→配置API地址/请求方法/请求头/请求体模板(支持变量插值);④OPC UA Server——ThingsGateway内置OPC UA Server,可以把采集到的变量作为OPC UA节点暴露给其他系统;⑤配置转发变量——选择哪些变量需要转发,设置转发周期(变化上传或定时上传)

05

边缘计算与报警

①变量表达式——变量配置里设置"表达式",支持四则运算/数学函数/条件判断,如电压缩放"x / 10"、状态判断"x > 100 ? 1 : 0";②报警规则——报警管理→添加报警规则→选择变量→设置报警条件(大于/小于/等于/变化)→设置报警级别(紧急/重要/一般)→设置报警延时(避免抖动误报);③死区设置——变量配置里设置"死区",只有变化超过死区才上传/报警,避免模拟量微小波动导致频繁上传;④变化上传——转发配置里选择"变化上传"(只有变量变化时才转发),比"定时上传"节省带宽和存储;⑤报警通知——报警可以通过MQTT/HTTP/邮件通知,配置报警转发规则

06

生产部署与运维

①性能监控——Web界面→系统监控,查看CPU/内存/磁盘使用率、每个设备的采集周期/成功率/耗时、转发统计,发现异常及时处理;②日志管理——日志级别生产环境设为Info(不要设Debug,会产生大量日志),日志文件按天轮转,保留7天;③备份恢复——定期导出配置文件(JSON格式),需要恢复时导入配置即可;配置文件存在config目录,也可以直接备份整个config目录;④升级——大版本升级前先备份配置,下载新版本解压后把config目录复制过去,启动后检查配置是否兼容(ThingsGateway配置向后兼容,但大版本可能有变化);⑤高可用——关键场景可以部署双实例(主备),用VIP或负载均衡切换,但ThingsGateway本身没有内置集群功能,需要自己做主备切换

09 用到ThingsGateway的真实方案

常见问题 FAQ(工程师最常问)

Q:ThingsGateway 是什么?

A:国产开源工业边缘采集网关,基于 .NET,提供 Web 界面配置采集 PLC/设备数据,再转发到 MQTT、数据库、HTTP 等。

Q:ThingsGateway 免费吗?

A:开源,Apache 2.0,可免费商用,源码在 Gitee。

Q:ThingsGateway 支持哪些协议?

A:20 多种,Modbus、OPC UA、西门子 S7、三菱 MC、欧姆龙 Fins、AB、DLT645 等,可自己写驱动插件扩展。

Q:ThingsGateway 和 Neuron 怎么选?

A:.NET 技术栈、要友好 Web 界面、自己写 C# 插件,选 ThingsGateway;追求极致性能、资源受限、ARM,选 Neuron。

Q:ThingsGateway 能把数据转发到哪?

A:MQTT、SQLite/MySQL/PostgreSQL、HTTP、OPC UA Server、WebSocket 等,支持变化上传和数据处理。

Q:ThingsGateway 支持边缘计算吗?

A:支持变量表达式、报警规则、数据过滤、死区设置、变化上传等,可在网关侧做基础处理。

Q:ThingsGateway 如何部署?

A:支持 Windows/Linux/Docker,提供 Web 配置界面,部署后浏览器访问配置,适合不熟悉 Linux 的工程师快速上手。

Q:不会 C# 能用好 ThingsGateway 吗?

A:可以,常用协议和转发靠 Web 配置即可,无需写代码;只有定制特殊驱动或复杂逻辑时才需要 C# 开发。

需要ThingsGateway部署/驱动开发/性能优化咨询?

丁丁有18个月ThingsGateway实战经验,3个项目验证,写过自定义驱动。可以帮你做设备采集方案设计、驱动开发、性能优化、MQTT可靠转发全流程服务。

联系丁丁咨询 →