如何把工业通信协议转换成http websocket

1.现状

工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时,采集设备数据需要开发PN客户端;当设备上用的时欧姆龙FINS协议时,采集设备数据需要开发FINS协议。前面只是举例了几种工业通信协议,还有很多其它工业协议,比如:Ethernet IP、Ethercat、cc-link等。业务系统开发厂商不但要做业务程序开发,还有对接这些工业协议,且还要保证开发的工业协议程序稳定性。对于大多数业务软件开发商是不具备这样的能力的,这增加了项目完成的不确定性因素。

2.当前方案

针对前面描述的现状,当前已有的解决方案是部署一套物联网平台,或者使用协议转换网关。这两种方式虽然都能解决实际需求,但是如果使用IOT平台会让整个系统感觉到杀鸡用牛刀,如果使用协议转换网关会增加项目成本。基于此很多项目都显得不是很完美。

3.创新方案

创新方案是在已有硬件资源的基础上部署一套程序,程序的原理如下图:

软件提供modbus、欧姆龙FINS、西门子PN设备的协议接入,对外提供http服务器,用户通过http客户端查询设备数据、控制设备;对外提供http客户端,把数据主动推送到用户配置的http服务器;对外提供websocket用户可以订阅设备数据;通过这样的方案,用户可以在web前端页面直接获取设备数据,大大缩短项目交付周期,节约项目成本。

软件下载地址:https://download.csdn.net/download/mawanbing/90964240

技术支持微信号:mwbnull

软件配置说明:

a.config/config.json配置文件说明

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| { "UploadHttpNet": "127.0.0.1:6000", "UploadHttpInterface": "/data", "EnableUpload": 1, "ListenHttpAddr": "127.0.0.1:20080", "WsAddr": "127.0.0.1:15554", "LogParam":{ "LogModeDesc": "0-console,1-file", "LogMode": 0, "LogLevel": 7, "LogLevelDesc": "7-Debug,Warning,Error;4-Warning,Error;3-Error", "Addr": "log" } } UploadHttpNet:通过http post上传数据的服务器地址; UploadHttpInterface:通过http post上传的接口地址; EnableUpload:0-不启用http post上传数据,1-启用; ListenHttpAddr:开启http服务器监听的地址,其它平台可以通过此接口取数据; WsAddr:通过ws发布订阅的地址; LogParam:日志配置; |

b.config/device.json采集设备配置

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| { "DeviceList": [ { "ProtocolType": 0, "DeviceId": "001", "DeviceConnectInfo": { "MbOffset": 0, "MbSlaveIP": "127.0.0.1", "MbSlavePort": 502, "MbSlaveId": 1, "ReconnectInterval": 20, "WriteRegMethod": 0, "MbScanInterval": 5000 }, "DeviceTags": [ { "Tag": "电池电压", "Addr": "40015|word#(?/10)" }, { "Tag": "电池电流", "Addr": "40015|word#(?/10)" }, { "Tag": "功率", "Addr": "40015|word#(?/10)" } ] }, { "ProtocolType": 1, "DeviceId": "002", "DeviceConnectInfo": { "Ip": "192.168.1.60", "Port": 9600, "SourceNodeNum": 105, "DstNodeNum": 60, "ScanInterval": 5000 }, "DeviceTags": [ { "Tag": "1号环境检测_温度", "Addr": "float.D2070" }, { "Tag": "1号环境检测_湿度", "Addr": "float.D2072" }, { "Tag": "1号空调_内风机传感器故障", "Addr": "bool.D2000.00" } ] }, { "ProtocolType": 2, "DeviceId": "003", "DeviceConnectInfo": { "Ip": "192.168.1.106", "Port": 102, "LocalTSAP": 1, "RemoteTSAP": 1, "Rack": 1, "Slot": 1, "ScanInterval": 5000 }, "DeviceTags": [ { "Tag": "布尔", "Addr": "bool.M3.2" }, { "Tag": "字节", "Addr": "byte.MB1" }, { "Tag": "浮点数", "Addr": "float.M3" }, { "Tag": "字符", "Addr": "char.FC10" }, { "Tag": "DB块", "Addr": "byte.OB32" }, { "Tag": "DB DBX", "Addr": "bool.DB4.DBX71.00" } ] } ] } 1. ProtocolType:协议类型,0-modbus tcp,1-欧姆龙Fins,2-西门子s7; 1. Modbus tcp配置参数: MbScanInterval:数据采集间隔; MbOffset:modbus地址偏移量; MbSlaveIP:modbus从站(服务器)IP; MbSlavePort:modbus从站(服务器)端口; MbSlaveId:modbus从站ID; ReconnectInterval:网络重连间隔,单位秒; WriteRegMethod:0-写寄存器时采用多寄存器,1-写寄存器时采用单寄存器; Tag:modbus地址取的别名; Addr:modbus地址,40015|word#(?/10)标识地址15寄存器,word数据类型,采集到的结果再除以10;40015.0|bool标识15寄存器地址的第一位数据类型为bool; 1. 欧姆龙Fins配置参数: Ip:设备IP, Port: 设备端口, SourceNodeNum: 原节点号, DstNodeNum: 目标节点号, ScanInterval: 扫描间隔; Addr配置格式如下: 数据类型.内存区域.地址编号 或者 数据类型.H1 或者 数据类型.W50.02 或者 数据类型.D110 或者 数据类型.E2003 如: bool.CIO.486.06 1.内存区域 CIO:继电器区 DM:数据存储区 TIM:定时器 CNT:计数器 WR:内部辅助继电器区 HR:保持继电器区 AR:特殊辅助继电器区 TR:暂存区 IR:变址寄存器 DR:数据寄存器 H:保持继电器区 W:内部辅助继电器区 D:数据存储区 E:存储扩展数据 数据类型:bool byte word float string 1. 西门子s7配置参数: Ip:设备IP; Port:设备端口 LocalTSAP:本地TSAP RemoteTSAP:远程TSAP Rack:CPU机架 Slot:CPU槽 ScanInterval:扫描周期 |

testscript/index.html是测试页面直接打开用

支持:windows_x64、linux_x64、linux_arm32、linux_arm64

试用版本只能采集一种协议的2个点位地址

相关推荐
却道天凉_好个秋2 小时前
音视频学习(三十六):websocket协议总结
websocket·音视频
2501_9160137410 小时前
iOS 多线程导致接口乱序?抓包还原 + 请求调度优化实战
websocket·网络协议·tcp/ip·http·网络安全·https·udp
夏天想10 小时前
优化 WebSocket 实现单例连接用于打印【待测试 】
网络·websocket·网络协议
2501_915921431 天前
Fiddler 中文版怎么配合 Postman 与 Wireshark 做多环境接口调试?
websocket·网络协议·tcp/ip·http·网络安全·https·udp
游戏开发爱好者81 天前
iOS App首次启动请求异常调试:一次冷启动链路抓包与初始化流程修复
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915106321 天前
频繁迭代下完成iOS App应用上架App Store:一次快速交付项目的完整回顾
websocket·网络协议·tcp/ip·http·网络安全·https·udp
00后程序员张1 天前
免Mac上架实战:全平台iOS App上架流程的工具协作经验
websocket·网络协议·tcp/ip·http·网络安全·https·udp
某公司摸鱼前端2 天前
uniapp socket 封装 (可拿去直接用)
前端·javascript·websocket·uni-app
2501_915921432 天前
iOS IPA 混淆实测分析:从逆向视角验证加固效果与防护流程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915918412 天前
打造可观测的 iOS CICD 流程:调试、追踪与质量保障全记录
websocket·网络协议·tcp/ip·http·网络安全·https·udp