本文说明如何将 DataAcquisition 部署为一个长期运行、可观测、以实时采集为优先的 PLC 数据采集系统。
推荐部署原则如下:
Edge Agent是采集主程序,必须部署在靠近 PLC 的节点InfluxDB是默认 TSDB 实现- 本地状态只保留日志与条件采集状态,不引入 WAL 或后台回放目录
Central API / Central Web是可选的中心控制面,不是采集前提
适合本地验证、实验室、单条产线:
- 1 个
Edge Agent - 1 个
InfluxDB - 可选 1 套
Central API / Central Web
适合多车间、多产线或多工厂:
- 每个采集节点部署自己的
Edge Agent - 每个采集节点保留自己的日志和条件采集状态库
- 中心侧部署统一的
Central API / Central Web InfluxDB可以集中部署,也可以按站点拆分
核心约束是:
Edge Agent必须在 PLC 可达的网络里- TSDB 可达性比中心侧可达性更关键
职责:
- 加载设备配置
- 建立 PLC 连接
- 执行 Always / Conditional 采集
- 按批次直接写 InfluxDB
- 暴露本地健康、日志、指标和诊断接口
职责:
- 作为默认时序存储实现
职责:
- 展示节点状态
- 查看心跳
- 聚合指标
- 代理边缘诊断接口
注意:
- 中心侧不可用时,采集主链路仍应继续运行
- 中心侧不是存储成功语义的一部分
生产环境推荐使用 dotnet publish 后的二进制部署,而不是直接在生产环境执行 dotnet run。
dotnet publish src/DataAcquisition.Edge.Agent -c Release -o ./publish/edge启动:
./publish/edge/DataAcquisition.Edge.Agentdotnet publish src/DataAcquisition.Central.Api -c Release -o ./publish/central-api启动:
./publish/central-api/DataAcquisition.Central.Apicd src/DataAcquisition.Central.Web
pnpm install
pnpm run build构建输出在 dist/,应由 nginx 或其他静态文件服务托管。
仓库里的 Compose 文件主要用于:
InfluxDBCentral APICentral Web
不建议把 Edge Agent 作为默认容器化部署模型写进主路径。
原因不是“不能容器化”,而是:
- Edge 需要稳定访问 PLC 网络
- 现场通常涉及真实网卡、VLAN、路由和防火墙
- 宿主机进程部署更容易排查网络问题
因此推荐策略是:
- 中心组件可以容器化
InfluxDB可以容器化Edge Agent优先作为宿主机进程部署
生产环境需要重点关注:
Data/logs.dbData/acquisition-state.db
含义:
logs.db:本地日志存储,默认保留 30 天Logging:RetentionDays:用于调整本地日志保留天数;设置为<= 0时关闭清理acquisition-state.db:条件采集的 active cycle 状态库
这里不保存原始采集数据的本地补偿副本。
至少确认这些配置:
UrlsLogging:DatabasePathLogging:RetentionDaysInfluxDB:*Acquisition:DeviceConfigService:ConfigDirectoryAcquisition:StateStore:DatabasePathEdge:EnableCentralReportingEdge:CentralApiBaseUrl
PlcCodeDriverHostPortProtocolOptionsChannels
上线前建议执行:
dotnet run --project src/DataAcquisition.Edge.Agent -- --validate-configs这是推荐流程的一部分,不是可选技巧。
系统启动后,先做这些检查。
Edge Agent是否在运行InfluxDB是否可访问
curl http://localhost:8001/healthcurl http://localhost:8001/metrics重点检查:
- 是否出现 PLC 连接错误
- 是否出现 TSDB 写入失败
- 配置变更是否被正确加载
确认 InfluxDB 中已经有对应 measurement。
如需保留诊断和条件采集上下文,至少备份这两类数据:
Data/logs.dbData/acquisition-state.db
如果需要更长的本地诊断窗口,应显式调大 Logging:RetentionDays,不要默认认为 logs.db 会无限增长。
- InfluxDB bucket 数据
项目当前不依赖本地原始数据补偿目录,因此备份策略应以 InfluxDB 为主。
- 使用
systemd、Windows Service 或其他服务管理器托管Edge Agent - 把中心服务和采集服务看作两个独立运行面
- 先保证
Edge -> InfluxDB正常,再考虑中心可视化 - 如果 TSDB 写入失败,应把它视为需要立即处理的运行告警,而不是等待后台补写