# 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.软件架构说明
架构如下图:

> 其中:
>
> 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

输入代理地址: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);
运行效果如下图所示:

#### 3.2.2. MQTT Broker仿真
安装mosquitto ver 1.7.1;
修改配置文件mosquitto.conf;
运行效果如下图:

#### 3.2.3. MQTT 消息监视
编写HTML+javascript;
安装node.js;
启动代理服务;

用浏览器打开html;
运行效果如图:

## 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/)