基本都是"一个工具管一个协议"------Modbus Poll 管 Modbus,UaExpert 管 OPC UA,MQTTX 管 MQTT,今天阿木想跟大家分享一个珍藏多年压箱底的工具,做设备通讯测试用得最多的一个测试工具------Hslcommunication,胡工通讯工具。这款工具融合了市场上90%以上常用品牌&型号的PLC通讯协议,包括Modbus,西门子S7,三菱MC,MQTT,罗克韦尔CIP,松下Mewtocol,台达TCP NET等等各种PLC协议,还有其它不常用到的一些品牌仪表的通讯协议也有,比如电力规约DLT645/IEC104等等,同时它还可以作为通讯协议测试服务器使用,拥有这一款协议测试工具之后,其它通讯测试工具基本上可以卸载大半了,我愿称之为"通讯百宝箱"。
除此之外,Hslcommunication还是一个可直接调用的.Net通讯库,对做上位机开发的同学尤其有用。只是新版本非开源,需付费授权使用。网络上有老的开源版本,小项目也够用。
HslCommunication(作者 Richard.Hu,圈内称"胡工")是国内使用极广的工业通信库,把几十种工业协议封装成同一套 API
两个重要功能:
| 形态 | 用途 |
|---|---|
| HslCommunicationDemo(图形工具) | 现场快速验证设备通不通、地址对不对 |
| HslCommunication.dll / NuGet 包 | 直接在你自己的上位机项目里调用(有C#/Java/Python版本都有) |
支持范围(这是它最值钱的地方):
PLC 品牌:西门子(S7-200/300/1200/1500)、三菱(FX/Q 系列)、欧姆龙、罗克韦尔 AB、基恩士、松下、倍福、汇川、台达、永宏、富士、信捷、横河、LS、GE......
协议:Modbus RTU / TCP / ASCII、OPC UA(客户端)、西门子 S7、三菱 MC、欧姆龙 FINS、自由协议......
不止 PLC:
-
机器人:ABB、库卡 KUKA、发那科 FANUC、安川、埃夫特
-
其他:Redis、MQTT、WebSocket、HTTP、CNC 数控机床、电能表(DLT645)、条码扫描、身份证读卡器、电子秤

一、当测试工具用(Demo 版)
Demo 是绿色软件,解压就能跑,依赖 .NET Framework。
使用步骤:
-
左侧选设备 ------ 找到对应品牌点开(如"西门子"→"西门子 PLC")
-
填参数 ------ IP、端口。常用默认端口:
-
西门子 S7:102(还要填机架号 0、槽号 1)
-
三菱 MC:6000
-
Modbus TCP:502
- 点连接 → 弹出框显示"连接成功",然后就能读写测试
实用功能:
-
地址直接用 PLC 地址 ------ 西门子写
DB1.DBW0、三菱写D100、Modbus 写40001,不用自己换算 -
批量读写、字符串读写、浮点数读写
-
实时日志 ------ 每一帧的错误信息都能看到,排查问题很快
-
字节序可切换 ------ 读浮点数不对时,找 ByteTransform / 字序设置,切 ABCD / CDAB 试试
-
还能当仿真服务器 ------ 可以模拟出一台虚拟 PLC(如西门子服务端),没有硬件也能练手
阿木的用法:在做现场PLC数据采集,或做上位机项目时拿到一台从没连过的 PLC,我先用 Demo 连一次。通了,说明链路和地址没问题,再往代码里搬;不通,先解决现场问题。 比闷头写代码快得多。
二、当开发库用(NuGet 安装)
这才是它真正的杀手锏。
安装步骤:
Visual Studio 里右键项目 → 管理 NuGet 程序包 → 搜索HslCommunication→ 安装。
或命令行:
Install-Package HslCommunication
认准作者 Richard.Hu / dathlin 的官方包。
三行代码读写 PLC:
// 西门子 S7-1200SiemensS7Net plc = new SiemensS7Net(SiemensPLCS.S1200, " 192.168.0.1"); ``plc.ConnectServer(); ``short value = plc.ReadInt16("DB1.DBW0").Content; // 读 ``plc.Write("DB1.DBW0", (short)666); // 写 ``plc.ConnectClose();
// Modbus TCP ModbusTcpNet modbus = new ModbusTcpNet("192.168.0.2", 502); modbus.ConnectServer(); short v = modbus.ReadInt16("40001").Content; modbus.Write("40001", (short)888);
特点:
| 特点 | 说明 |
|---|---|
| 统一 API | 所有品牌都是 ReadInt16 / ReadFloat / ReadString / Write,切换品牌只换类名 |
| OperateResult 统一返回 | 每次读写返回带 IsSuccess 和 Message 的结果对象,失败原因直接可读,不用猜 |
| 长短连接可选 | 默认短连接;高频采集可 SetPersistentConnection() 开长连接 |
| 内置断线重连 | 底层帮你处理网络异常,不用自己写重连逻辑 |
| 跨平台 | .NET Core 下可跑 Linux;另有 Java 版和 Python 版 |
关于授权(重要,务必看清楚):这块必须清楚,别稀里糊涂用。
| 版本 | 授权情况 |
|---|---|
| V7.0.1 及更早 | 最后一个开源版本。官网说明:个人用户可免费使用;企业商业使用仍需购买商业授权 |
| 新版本(V9 之后) | 闭源,需付费授权。未激活时有时限(早期 8 小时 / 24 小时,视版本而定) |
官网对"商业使用"的界定(这段建议仔细读):
-
二次开发软件后卖给其他企业使用 → 商业使用
-
二次开发软件后用于自己的工厂,因为产生经济效益 → 也算商业使用
个人的建议:
-
学习、自测、个人研究 → 用 V7.0.1 及更早的开源版本,主流品牌常用型号都够用;
-
企业项目、交付给客户、用在自己工厂产线上 → 请购买商业授权。一套授权的费用,远低于项目出问题时你要承担的责任;
-
别抱着侥幸心理。这个库作者一直在维护,用得放心,也该给开发者应有的尊重。
说句实在话------一个能让开发周期从两周缩短到两天、还长期有人维护的库,付费是合理的。 这也是国内工业软件生态能持续发展的基础。
常见问题:
| 现象 | 大概率原因 |
|---|---|
| 连接超时 / 失败 | IP 与电脑不同网段、防火墙拦截、PLC 端口未开放 |
| 读出来值不对 | 数据类型选错(int/float 混了)或字节序错,切字序试试 |
| 提示地址无效 | 地址格式写法不对,严格按 PLC 编程软件里的地址填 |
| 写入失败 | PLC 侧该地址不允许写,或正处于 RUN 保护状态 |
| 三菱连不上 | PLC 参数里 MC 协议端口没打开 |
| 西门子连不上 | 机架号/槽号填错(S7-1200/1500 通常 0 和 1) |
上位机开发替代方案:
-
西门子,你也可以看看开源免费的 S7NetPlus(GitHub 可搜);
-
Modbus,不同的开发语言网络上都能找到Modbus协议库,比如libmodbus、FreeModbus------C/C++;NModbus------C#/Modbus TCP;uModbus------Python
-
三菱/汇川,你也可以使用三菱官方API;
另外,阿木还想跟大家分享一个开源协议库:IoTClient,它是一个.NET 通信协议开源库,支持主流 PLC(西门子、三菱、欧姆龙等)、ModBus、Bacnet 等工业通信协议,基于.NET Standard 2.0,可跨平台运行(Windows、Linux、树莓派)。
网址:https://github.com/zhaopeiym/IoTClient/
同样,它同时还有配套的测试工具IoTClient Tool,绿色免安装版,比Hslcommunication更小,只是协议没有Hslcommunication全,但是常用的PLC品牌协议也都有,基本够用。如果大家有需要可以下方留言,阿木发给大家。
