# EquipServer_win7 **Repository Path**: Equip_Workbench/equip-server ## Basic Information - **Project Name**: EquipServer_win7 - **Description**: EquipServer - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-25 - **Last Updated**: 2025-09-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README | 版本 | Ver 23.3520200.250725.1 | | ---- | ----------------------- | | 部门 | | | 密级 | 开放 | # 设备服务器 EquipServer
## 历史 | 时间 | 内容 | 作者 | 备注 | | ---------- | ------------------------------------------------------------ | ----- | ---- | | 2025-07-09 | 创建工程及文档 | Jinwg | | | 2025-07-13 | 完成vscode开发环境的配置 | Jinwg | | | 2025-07-18 | 完成modbus的功能
完成缓存队列(基于生产-消费者模型) | Jinwg | | | 2025-07-22 | 完成mqtt-client的数据定义,获取及发布
- 数据格式定义
- 数据采集 | Jinwg | | | 2025-07-29 | 基于JSON文件配置网络连接
部署mqtt代理和modbus slave,并测试equipserver的数据采集及服务功能; | Jinwg | | | 2025-08-05 | 采用模板技术,定义统一的json操作接口
- 实现modbusdata_config的json文件读写;
- 部分实现modbus_master采集数据到EquipDevice;
- modbus_thread()将EquipDevice压入缓存队列;
- mqtt_thread()逐个获取EquipDevice,并转换为NodeData_Config;
- 调用CNodeDataCofing::serialize(const NodeData_Config &data);
- 编译通过,未运行测试 | Jinwg | | | 2025-08-07 | 根据平谷718提的要求,完善modbus_data_config.json
- 增加 id
- 增加 Name
- 完善CNodeDataCofing中,对id和Name的读取(为实现write的相关操作) | Jinwg | | | 2025-08-12 | 完成主体功能
- 采集PLC数据
- 发布数据到mqtt borker云端
- 本地日志
- 网络配置json
- 数据配置json
完成测试环境部署
- PLC仿真:modbus salve及718_EquipPrt.mbs
- mqtt broker云端仿真:mosquitto (bin\test\mqtt_broker\bosquitto)及mosquitto.conf
- mqtt client网页端监控:mqtt client proxy.html (bin\test\mqtt_broker\proxy) | Jinwg | |
## 1.EquipServer介绍 EquipServer, 设备服务器。其功能包括: - 负责采集设备运行时的状态、数据、故障等设备信息; - 生成工艺、工单相关生产信息; - 使用日志,跟踪、监视设备运行状态; - 提供远程终端访问设备信息、生产信息的途径。 EquipServer运行在windows OS中,核心功能包括: - 采集数据(通过modbus协议,从modbus slave设备获取数据); - 发布数据(通过mqtt协议,向Broker发布主题,并发送主题相关数据);
## 2. 软件架构 ### 2.1.软件架构说明 架构如下图: ![image-20250812140337731](image/image-20250812140337731.png) > 其中: > > EquipServer内部: > > - **MQTT client**:向Broker发布主题,并发送主题相关数据; > - **modbus master**:从modbus slave设备(如PLC)获取数据; > - **Data Buffers**:缓存数据; > - **Log files**:记录设备运行 > - **Fault Handling**:故障处理 > > EquipServer外部: > > - **MES**: > - **modbus slave/PLC**: > - **HTML**: ### 2.2.工作原理 ```mermaid graph TB subgraph Equipment subgraph PLC PLC_memory[/PLC memory/] subgraph modbus_slave_plc Coil_status[/CS_01/] Input_status[/IS_02/] Hold_Registers[/HR_03/] Input_Registers[/IR_04/] slave(modbus slave) end PLC_memory-.-Coil_status-.-slave PLC_memory-.-Input_status-.-slave PLC_memory-.-Hold_Registers-.-slave PLC_memory-.-Input_Registers-.-slave end style PLC fill:#ECA,stroke:#EEE,stroke-width:1px,fill-opacity:0.5 subgraph PC subgraph EquipServer subgraph modbus_master master(modbus master) end subgraph BlockQueue BQueue((queue)) end subgraph mqtt_client mqttclient(mqtt client) end slave---master---BQueue---mqttclient end subgraph HTML monitor(monitor HTML) end end style PC fill:#ECA,stroke:#EEE,stroke-width:1px,fill-opacity:0.5 end style Equipment fill:#EFE,stroke:#EEE,stroke-width:1px,fill-opacity:0.5 subgraph MES user1(User1) user2(User2) usern(UserN) subgraph mqtt_broker mqttbroker(MQTT Broker) end mqttbroker--Subscription--> mqttclient monitor -.Subscription.->mqttbroker mqttclient--Publish--> mqttbroker -.Subscription.-user1 mqttbroker -.Subscription.-user2 mqttbroker -.Subscription.-usern end style MES fill:#EFE,stroke:#EEE,stroke-width:1px,fill-opacity:0.5 ``` ### 2.3.技术特征 #### 2.3.1. 数据采集能力 #### 2.3.2. 数据发布能力
## 3. 安装教程 ### 3.1.环境配置 #### 3.1.1.操作系统 至少window7 x64。 #### 3.1.2.目录配置 EquipServer项目目录如下: ```plaintext project_root/ ├── .vscode/ # VSCode配置目录 │ ├── c_cpp_properties.json # C/C++语法配置 │ ├── launch.json # 调试配置 │ ├── tasks.json # 构建任务配置 │ └── settings.json # 项目设置 ├── bin/ # 项目可执行文件 │ ├── data/ # │ │ ├── dataconfig_modbus.json # PLC数据配置(地址、类型、长度...) │ │ ├── nodeconfig_modbus.json # modbus通信配置 │ │ └── nodeconfig_mqtt.json # MQTT通信配置 │ ├── log/ # EquipServer运行日志 │ ├── test/ # EquipServer调试/测试 │ │ ├── mqtt_broker # │ │ │ ├── mosquitto # 实现broker接收EquipServer发布主题的消息 │ │ │ └── proxy # 实现浏览器端对broker端主题消息的监视 │ │ ├── 718_EquipFlatten.mbs # 压平机PLC仿真的数据配置 │ │ ├── 718_EquipPrt.mbs # 印刷机PLC仿真的数据配置 │ │ └── StartBroker.bat # 自动化启动broker代理以及mqtt浏览器客户端 │ ├── EquipServer.exe # 主程序——Win32控制终端 │ ├── EquipServer.lock # 主程序——文件锁,防止重复打开 │ ├── liblibmodbus.dll # 主程序——Win32控制终端 │ ├── libpaho-mqtt3a.dll # paho-mqtt库 │ ├── libpaho-mqtt3c.dll # paho-mqtt库 │ ├── Run.bat # 主程序执行脚本——CMD终端 │ ├── Check.bat # 主程序运行状态检查脚本——CMD终端 │ ├── Stop.bat # 主程序关闭脚本——CMD终端 │ └── Run_unshell.bat # 主程序执行脚本——无窗口运行 ├── doc/ # 项目开发相关文档 ├── build/ # cmake编译中间文件 ├── image/ # 项目文档中的图源文件 ├── lib/ # 第三方库 │ ├── modbus/ # libmodbus库(含include和lib) │ ├── mqtt/ # paho-mqtt-c库(含include和lib) │ ├── rapidjson/ # JSON解析库(头文件) │ └── plog/ # 日志库(头文件,轻量级) ├── src/ # 源代码目录 │ ├── main.cpp # 程序入口 │ ├── application.cpp # 内核 │ ├── application.h # │ ├── config/ # 配置解析模块 │ │ └── config.h # 头文件 │ ├── json/ # 配置文件读取模块 │ │ ├── json_handler.h # 统一json文件操作接口 │ │ ├── jsonTemplate.h # 模板文件 │ │ ├── modbus_config.cpp # modbus通信配置json操作 │ │ ├── mqtt_config.cpp # mqtt通信配置json操作 │ │ └── nodedata_config.cpp # PLC数据配置json操作 │ ├── log/ # log模块 │ │ ├── syslog.h # 使日志输入参数列表支持可变参数列表 │ │ └── syslog.cpp # │ ├── modbus/ # Modbus主站模块 │ │ ├── modbus_master.h # 头文件 │ │ └── modbus_master.cpp # 实现 │ ├── mqtt/ # MQTT客户端模块 │ │ ├── mqtt_client.h # 头文件 │ │ └── mqtt_client.cpp # 实现 │ └── utils/ # 工具模块 │ ├── BlockQueue.h # 阻塞队列(生产消费者模型)定义 │ ├── FileLock.h # 文件锁,实现单例程序 │ └── timer.h # 定时器实现 ├── thirdparty/ # 第三分库源码 │ ├── libmudbus/ # modbus库 │ │ ├── src # 源码 │ │ └── win32 # 可执行文件 │ └── mqtt/ # 项目设置 │ └── src # │ └── paho.mqtt.c # 源码 ├── CMakeLists.txt # 主CMake配置文件 ├── README.md/pdf # 项目说明文档 └── OpenProject.bat # vscode打开项目源码 ``` #### 3.1.3.开发工具 - `VSCode`开发环境 - `MinGW` - `CMake` - `modbus`调试工具 - `libmodbus` 的 `C++ SDK` - `modbus poll` 调试工具 - `modbus slave` 调试工具 - mqtt调试工具 - `paho-mqtt`的 `C++ SDK` - `mqtt`代理工具 - `git` - `TortoiseGit`本地代码仓库 - `gitee` 远程代码仓库 - 其它 #### 3.1.4.运行环境 - EquipServer运行配置 - 网络配置 - modbus端地址:bin\data\nodeconfig_modbus.json - mqtt端地址:bin\data\nodeconfig_mqtt.json - 设备类型 - 通信数据 - bin\data\dataconfig_modbus.json - 环境配置 - 运行环境 - OS:Windows 7 x64 - 依赖约束: - 测试/仿真环境(可选) - PLC仿真:modbus slave x64 ver 6.0.2 (718_EquipPrt.mbs) - MQTT Broker仿真:mosquitto ver 1.7.1(mosquitto.conf) ```shell mosquitto -c mosquitto.conf -v # 假设已配置WebSocket ``` - MQTT 消息监视: - Node.js ver13.14.0(for win7) - npm ver 6.14.4 - websocket - mqtt ```shell cd .....\bin\test\mqtt_broker\proxy npm init -y # 自动生成 package.json 配置文件 npm install ws@7.4.6 mqtt@4.3.7 # 指定兼容 Win7 的版本 ``` - node ver13.14.0 ```shell node tcp_proxy.js ``` 如果运行成功,显示 ```shell MQTT代理服务已启动,监听 ws://localhost:8080 ``` > tcp_proxy.js是javascript脚本,实现代理服务功能。 > > 因为浏览器无法直接响应tcp或mqtt协议,可以网页HTML使用 wws/ws协议连接代理服务,然后代理服务使用 tcp/mqtt协议连接Broker(mosquitto),如下图所示。 > > ```mermaid > graph LR > > HTML[HTML/javascript] > proxy[Proxy] > mosquitto[Broker] > > HTML--wws/ws--> proxy --tcp/mqtt--> mosquitto > ``` > > - pm2 ver 4.5.6(可选,使cmd或终端窗口关闭后仍能运行) ```shell # 安装pm2 npm install -g pm2@4.5.6 # 兼容Win7的版本 # 启动服务(后台运行) pm2 start proxy.js --name "mqtt-proxy" # 查看服务状态 pm2 status # 停止服务 pm2 stop mqtt-proxy ``` - 打开mqtt client proxy.html ![image-20250812113437820](image/image-20250812113437820.png) 输入代理地址:ws://localhost:8080 输入mosquitto地址:tcp://127.0.0.1:1883 点击 “连接” 按钮,若状态显示 “已连接”,则代理服务开始工作。 - 其它 ### 3.2.相关工具 #### 3.2.1. PLC仿真 安装modbus slave x64 ver 6.0.2; 并打开配置文件718_EquipPrt.mbs; 启动连接(F3/F5); 运行效果如下图所示: ![image-20250812115826610](image/image-20250812115826610.png) #### 3.2.2. MQTT Broker仿真 安装mosquitto ver 1.7.1; 修改配置文件mosquitto.conf; 运行效果如下图: ![image-20250812120136226](image/image-20250812120136226.png) #### 3.2.3. MQTT 消息监视 编写HTML+javascript; 安装node.js; 启动代理服务; ![image-20250812120318052](image/image-20250812120318052.png) 用浏览器打开html; 运行效果如图: ![image-20250812113437820](image/image-20250812113437820.png)
## 4. 使用说明 ### 4.1.环境要求 确保一下条件满足: - 操作系统 - 工具软件 - PLC - MQTT Broker ### 4.2.使用方法 #### 4.2.1. 打开源码 ​ 源码根目录下,执行批处理文件`OpenProject.bat` ,将会启动vscode开发环境,并自动加载源码文件。 #### 4.2.2. 编译源码 #### 4.2.3. 运行/调试源码 - 配置运行环境 - 启动程序及相关调试工具 - 执行测试数据并记录统计测试结果 ### 4.3.异常处理
## 参与贡献 1. Jinwg
## 支持 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)