车间数据大屏
一、设备简介
车间数据大屏是数字化车间最容易落地、最容易产生管理价值的一环。它把分散在多条产线、多台设备上的生产数据实时汇总到:
- 车间大屏 (通常 55~86 寸, 班前会 / 巡视);
- 管理办公室屏 (计划员 / 工段长);
- 厂长 / 董事长手机 (移动端简化版);
- 集团总部大屏 (多分厂对标);
- 代工客户浏览器 (受限账号远程看厂)。
一份数据, 多终端同步投放, 延时 < 500ms (本厂) / < 2s (跨厂广域网)。Darra 方案所有终端授权免费, 10 设备 + 3 大屏 典型配置成本 ¥6~8 万, 部署周期 2~7 天。
Darra 在这里承担 L1-L2 的数据采集与可视化: 它把所采集设备的状态/产量/单设备 OEE 等数据汇总展示, 并通过 OPC UA/REST 向上层 MES/BI 暴露。跨产线、多分厂的排产、工单管理、跨线 OEE 对标分析等属于上层 MES/BI 职责, Darra 不实现这些业务逻辑, 大屏上看到的此类数据来自上层系统。
二、项目模块组成
| 模块 | 职责 | 载体 |
|---|---|---|
| 边缘采集服务 | 多协议 (Modbus / S7 / MC / OPC UA / EtherCAT / MQTT) 并发采集多台 PLC | Darra Runtime |
| 设备建模 | 车间 → 产线 → 工位 → 设备 四级树, 标准属性 (状态 / 计数 / OEE) | Device Model |
| 时序库 | 热数据 30 天 + 冷数据 1 年, 自动滚动归档 | InfluxDB / TSDB |
| OEE 计算引擎 | 可用率 / 性能率 / 合格率三要素班次滚动 | OEE FB |
| HMI 页面 | 首页 / OEE / 工单 / 状态矩阵 / 节拍 / 能耗 / 报警墙 / 质量 / 多厂对比 | HMI Designer |
| 多终端投放 | 大屏 / 办公室 / 手机 / 浏览器 / 投影仪 一份设计多分辨率 | HMI Runtime |
| DarraSync | 跨厂 / 跨地同屏 + 双向数据同步 | Sync Service |
| 推送网关 | 报警走 钉钉 / 企微 / 短信 / 邮件 | Alarm Gateway |
| 信息化对接 | DarraIPC SDK + OPC UA + REST API + MQTT | IPC Service |
| 权限系统 | 角色 / 页面 / 点位多级权限, 班次切换自动清零 | ACL |
三、机械装配架构 (网络布局)
布局要点:
- 边缘服务器 放在车间控制室, 集中接入所有 PLC / 机器人 / 电表;
- 各大屏独立小主机 (mini PC), 开机自启 Web 浏览器全屏, 指向边缘服务器;
- 办公室 / 手机 通过公司内网直接访问, 无需买 Client 授权;
- 跨厂 通过 DarraSync 走加密专线或公网 TLS, 聚合到云中继;
- 客户端受限账号 (代工客户远程看厂) 在权限层控制可见页面与点位。
四、程序架构
大屏相关 FB 清单
| FB 名 | 输入 | 输出 | 说明 |
|---|---|---|---|
FB_MultiProtocolCollect | DeviceList / ProtocolList | DataSet | 多协议并发采集 |
FB_TSDBWrite | PointId / Value / Timestamp | Done | 时序库写入 |
FB_OEECalculator | PlannedTime / RunTime / IdealCycle / Good / Total | A / P / Q / OEE | 三要素 |
FB_ShiftManager | ShiftDef | CurrentShift / ShiftChanged | 班次切换 |
FB_AlarmEngine | PointId / UpperLimit / LowerLimit | AlarmSet[] | 阈值报警 |
FB_AlarmPush | AlarmSet / Channels | PushCount | 报警推送 |
FB_DarraSync | Channel / Data / ToNodeList | Done | 跨站同步 |
FB_DarraIPC | ServiceName / Request | Response | 第三方 SDK 入口 |
FB_HMIBridge | PageId / DataSet | BindingMap | 页面数据绑定 |
五、硬件 BOM (国产优先)
| 类别 | 设备 | 型号 / 规格 | 数量 | 单价 (¥) | 小计 (¥) |
|---|---|---|---|---|---|
| 边缘服务器 | 工控机 | 研华 IPC-610 / i5-12400 / 32GB / 1TB NVMe | 1 | 7,500 | 7,500 |
| 车间大屏 | 55 寸商显 | 海信 XT536 / 4K / 哑光 | 1 | 4,500 | 4,500 |
| 车间大屏 (高端) | 65 寸商显 | 海信 XT536 / 4K | 1 | 6,500 | 6,500 |
| 办公室大屏 | 43 寸商显 | 创维 43G31 | 1 | 2,500 | 2,500 |
| 大屏主机 | mini PC | 零刻 SER5 / AMD 5560U / 16GB | 3 | 2,300 | 6,900 |
| 总部大屏 | 86 寸会议屏 | 海信 M86Pro | 1 | 12,000 | 12,000 |
| 交换机 | 千兆 | 华为 S5720 16 口 | 1 | 3,800 | 3,800 |
| 无线 AP | Wi-Fi 6 吸顶 | 锐捷 RG-AP840 | 2 | 1,200 | 2,400 |
| HDMI 延长器 | HDMI over IP 4K | 按需 | 2 | 800 | 1,600 |
| UPS | 在线式 | 山特 C1K | 1 | 1,500 | 1,500 |
| 电表 | 导轨式 | 威胜 DTSD341 / Modbus | 4 | 600 | 2,400 |
| 机柜 + 线缆 | 网络机柜 + 六类线 | 1 | 3,000 | 3,000 | |
| 软件 | Darra Runtime 授权 | 永久 + 1 年升级 | 1 | 9,800 | 9,800 |
| 合计 (车间 + 办公 + 总部) | ¥64,400 |
多终端 (手机 / 平板 / 浏览器) 授权全部免费。
六、IO 模块配置
6.1 采集协议与设备清单
| 设备 | 协议 | 接口 | 采集点数 | 周期 |
|---|---|---|---|---|
| 冲压线 PLC | Modbus TCP | 以太网 | 120 | 500ms |
| 装配线 PLC | S7 (西门子) | 以太网 | 200 | 500ms |
| 包装线 PLC | OPC UA | 以太网 | 180 | 1s |
| Darra Robot | Runtime 内部 | 共享内存 | 60 | 100ms |
| 机加中心 CNC | MC (三菱) | 以太网 | 80 | 1s |
| 总 / 分电表 | Modbus RTU | RS485 → 串口服务器 | 40 | 1min |
| 温湿度传感器 | MQTT | 无线 → 网关 | 30 | 10s |
| AGV 车队 | Darra 内部 | 以太网 | 50 | 200ms |
合计: 760 采集点, 单边缘服务器轻松支撑 (设计容量 2 万点)。
6.2 点表配置 (Excel 模板示例)
| DeviceId | PointName | Protocol | Address | DataType | ScanRate | Unit | UpperLimit | LowerLimit |
|---|---|---|---|---|---|---|---|---|
| PLC1 | Stamp_Count | Modbus | 40001 | DINT | 500 | 次 | - | - |
| PLC1 | Stamp_Status | Modbus | 40010 | INT | 500 | 枚举 | - | - |
| PLC1 | Stamp_Pressure | Modbus | 40020 | REAL | 500 | MPa | 200 | 50 |
| PLC2 | Assy_Cycle | S7 | DB1.DBD0 | REAL | 500 | s | 15 | 8 |
| CNC1 | Spindle_Load | MC | D100 | REAL | 1000 | % | 90 | - |
| METER_1 | Power_Total | Modbus | 40100 | REAL | 60000 | kW | - | - |
点表导入 IDE 设备向导, 一键批量建立设备模型, 不用手写代码。
6.3 绑定大屏页面操作流程 (IDE 内)
- 设备向导 → 导入点表 → 建立 760 个点位对象;
- 设备建模: 按车间→产线→工位→设备四级树组织, 每设备自动继承 "状态 / 计数器 / 节拍 / OEE" 标准属性;
- OEE 配置: 每产线定义班次 / 理论节拍 / 合格规则 / 计划停机窗口, 系统自动计算 A/P/Q;
- HMI 页面: 打开 HMI Designer, 从左侧控件库拖拽仪表盘 / 状态矩阵 / 趋势图 → 右侧属性面板绑定到设备属性或点位;
- 多屏发布: 每块大屏绑定独立页面 + 分辨率模板 (1080P / 4K / 32:9 超宽), 服务端推送, 客户端自适应;
- 多地同步: DarraSync 配置 "本厂 → 云中继 → 总部" 单向 / 双向, 同步周期 1s;
- 权限 + 班次: 分角色 (操作工 / 班长 / 厂长 / 董事长) 分配页面, 班次切换自动清零当日累计;
- 报警阈值: 对关键点位 (压力 / 节拍 / 温度) 设上下限, 超限滚入报警墙 + 推送到钉钉 / 企微。
七、核心数据结构
7.1 设备状态 UDT
TYPE UDT_Device :
STRUCT
sId : STRING[32]; // 唯一设备 ID
sName : STRING[64];
sLine : STRING[32]; // 所属产线
eState : E_DeviceState; // Running/Idle/Down/Alarm
nProduced : DINT; // 累计产量
nGood : DINT; // 合格数
nReject : DINT;
rCycleSec : REAL; // 当前节拍
rIdealCycle : REAL; // 理论节拍
tLastChange : LTIME;
nAlarmLevel : INT;
END_STRUCT
END_TYPE
7.2 OEE UDT
TYPE UDT_OEE :
STRUCT
sLine : STRING[32];
sShift : STRING[16]; // Day/Night/Weekend
tShiftStart : LTIME;
tShiftEnd : LTIME;
rPlannedTime : REAL; // 计划工时 (min)
rRunTime : REAL; // 实际运行 (min)
rAvailability : REAL; // A = Run / Planned
rPerformance : REAL; // P = (Ideal × Produced) / Run
rQuality : REAL; // Q = Good / Total
rOEE : REAL; // A × P × Q
nProduced : DINT;
nGood : DINT;
aDownReasons : ARRAY[0..9] OF UDT_Downtime;
END_STRUCT
END_TYPE
TYPE UDT_Downtime :
STRUCT
sReason : STRING[64];
rMinutes : REAL;
tStart : LTIME;
END_STRUCT
END_TYPE
7.3 工单 UDT
TYPE UDT_WorkOrder :
STRUCT
sOrderNo : STRING[32];
sLine : STRING[32];
sProductCode : STRING[32];
nTargetQty : DINT;
nCurrentQty : DINT;
tPlannedStart: LTIME;
tActualStart : LTIME;
tPlannedEnd : LTIME;
rProgress : REAL;
eStatus : E_OrderStatus; // Planned/Running/Paused/Done
END_STRUCT
END_TYPE
7.4 报警 UDT
TYPE UDT_Alarm :
STRUCT
sId : STRING[32];
sPoint : STRING[64];
sMessage : STRING[256];
nLevel : INT; // 1=Info 2=Warn 3=Error 4=Critical
tRaised : LTIME;
tAckAt : LTIME;
sAckBy : STRING[32];
bClosed : BOOL;
END_STRUCT
END_TYPE
7.5 全局变量
VAR_GLOBAL
G_Devices : ARRAY[0..63] OF UDT_Device;
G_OEE : ARRAY[0..15] OF UDT_OEE; // 每产线一份
G_Orders : ARRAY[0..99] OF UDT_WorkOrder;
G_Alarms : ARRAY[0..199] OF UDT_Alarm; // 活动报警
G_Shift : STRING[16];
G_ShiftIdx : INT; // 0=Day 1=Night
END_VAR
八、核心程序代码
8.1 FB_MultiProtocolCollect (多 PLC 并发采集)
FUNCTION_BLOCK FB_MultiProtocolCollect
VAR
fbModbus : ARRAY[1..16] OF FB_ModbusClient;
fbS7 : ARRAY[1..8] OF FB_S7Client;
fbOPC : ARRAY[1..8] OF FB_OPCUAClient;
i : INT;
END_VAR
// 并发从 N 个 PLC 批量读寄存器
FOR i := 1 TO N_MODBUS_DEVICES DO
fbModbus[i](
Host := G_ModbusCfg[i].sHost,
Port := G_ModbusCfg[i].nPort,
AddrList := G_ModbusCfg[i].aAddr,
Execute := TRUE
);
IF fbModbus[i].Done THEN
// 写入设备模型
MapToDeviceModel(fbModbus[i].Result, G_Devices);
END_IF;
END_FOR;
// 同理 S7 / OPC UA
8.2 FB_OEECalculator (班次滚动 OEE, 多 PLC 汇总)
FUNCTION_BLOCK FB_OEECalculator
VAR_INPUT
LineIdx : INT;
END_VAR
VAR
rIdeal, rTotalTime, rRunTime : REAL;
rGood, rAll : REAL;
END_VAR
// 计划工时 = 班次时长 - 计划停机
rTotalTime := LTIME_TO_REAL(G_OEE[LineIdx].tShiftEnd - G_OEE[LineIdx].tShiftStart);
G_OEE[LineIdx].rPlannedTime := rTotalTime - PlannedDowntime(LineIdx);
// 累计运行时间 (从设备状态)
rRunTime := AccumulatedRunTime(LineIdx);
G_OEE[LineIdx].rRunTime := rRunTime;
// A = 可用率
IF G_OEE[LineIdx].rPlannedTime > 0.0 THEN
G_OEE[LineIdx].rAvailability :=
G_OEE[LineIdx].rRunTime / G_OEE[LineIdx].rPlannedTime;
END_IF;
// P = 性能率 = 理论节拍 × 产量 / 运行时间
rIdeal := G_OEE[LineIdx].aIdealCycle[0];
IF rRunTime > 0.0 THEN
G_OEE[LineIdx].rPerformance :=
(rIdeal * INT_TO_REAL(G_OEE[LineIdx].nProduced)) / (rRunTime * 60.0);
END_IF;
// Q = 合格率
rAll := INT_TO_REAL(G_OEE[LineIdx].nProduced);
rGood := INT_TO_REAL(G_OEE[LineIdx].nGood);
IF rAll > 0.0 THEN
G_OEE[LineIdx].rQuality := rGood / rAll;
END_IF;
// OEE
G_OEE[LineIdx].rOEE := G_OEE[LineIdx].rAvailability
* G_OEE[LineIdx].rPerformance
* G_OEE[LineIdx].rQuality;
8.3 FB_ShiftManager (班次切换自动清零)
FUNCTION_BLOCK FB_ShiftManager
VAR
tNow : LTIME;
nHour : INT;
sNewShift : STRING[16];
END_VAR
tNow := LTIME();
nHour := GetHour(tNow);
IF nHour >= 8 AND nHour < 20 THEN sNewShift := 'Day';
ELSE sNewShift := 'Night';
END_IF;
IF sNewShift <> G_Shift THEN
// 班次切换: 归档当前班, 开新班
ArchiveShift(G_OEE);
FOR i := 0 TO 15 DO
G_OEE[i].sShift := sNewShift;
G_OEE[i].tShiftStart := tNow;
G_OEE[i].rRunTime := 0.0;
G_OEE[i].nProduced := 0;
G_OEE[i].nGood := 0;
END_FOR;
G_Shift := sNewShift;
END_IF;
8.4 FB_DarraSync (跨厂同屏)
FUNCTION_BLOCK FB_DarraSync
VAR
fbPush : FB_Sync_Push;
i : INT;
END_VAR
// 每 1s 推送关键数据到云中继
fbPush(
Channel := 'Factory_Hangzhou',
Data := G_OEE,
ToNodeList := ['HQ', 'BossMobile'],
Encrypt := TRUE,
Execute := TRUE
);
IF fbPush.Error THEN
// 断网缓存
LocalBuffer_Append(G_OEE);
END_IF;
// 断网恢复后自动补传
IF NET_Reconnected THEN
LocalBuffer_Flush();
END_IF;
8.5 FB_AlarmEngine + FB_AlarmPush (大屏报警墙 + 多渠道推送)
FUNCTION_BLOCK FB_AlarmEngine
VAR
i : INT;
fbPush : FB_AlarmPush;
END_VAR
FOR i := 0 TO N_POINTS - 1 DO
IF G_Points[i].rValue > G_Points[i].rUpperLimit
OR G_Points[i].rValue < G_Points[i].rLowerLimit THEN
IF NOT AlreadyRaised(G_Points[i].sId) THEN
RaiseAlarm(
sId := G_Points[i].sId,
sMsg := G_Points[i].sName + ' 超限 (' + REAL_TO_STRING(G_Points[i].rValue) + ')',
nLevel := 3
);
fbPush(
Alarm := Last_Alarm,
Channels := ['DingTalk', 'WeCom', 'SMS', 'Email'],
Execute := TRUE
);
END_IF;
END_IF;
END_FOR;
8.6 FB_DarraIPC (对外 SDK 接入)
FUNCTION_BLOCK FB_DarraIPC
VAR
fbHandler : FB_IPC_RequestHandler;
END_VAR
// 第三方 BI / MES 通过 DarraIPC SDK 请求数据
fbHandler(
Service := 'ReadOEE',
OnRequest := TRUE
);
IF fbHandler.NewRequest THEN
CASE fbHandler.Method OF
'GetOEE':
fbHandler.Reply := JSON_Serialize(G_OEE[fbHandler.Arg_Int]);
'GetDevice':
fbHandler.Reply := JSON_Serialize(G_Devices[fbHandler.Arg_Int]);
'GetAlarms':
fbHandler.Reply := JSON_Serialize(G_Alarms);
END_CASE;
fbHandler.Send();
END_IF;
九、运行与调试
9.1 首次部署流程
- 边缘服务器安装: 研华工控机装 Windows Server + Darra Runtime;
- 网络连通: 边缘 IP 固定 / 各 PLC IP 段互通 / 大屏 mini PC 同网段;
- 设备向导: Excel 导入 760 点位 → 一键建立 8 个设备模型;
- OEE 配置: 16 条产线按实际排班填 JSON → 保存;
- HMI 页面设计: HMI Designer 拖拽 → 各页面绑定数据 → 保存;
- 多终端发布: 给每块大屏 / 每个浏览器 分配一个 URL, mini PC 开机自启全屏浏览器;
- DarraSync: 配置云中继 → 总部大屏注册 → 获取 token;
- 报警推送: 钉钉 / 企微 Webhook 填好 → 阈值测试;
- 权限: 操作工 / 班长 / 厂长 / 集团领导 4 级角色 → 分配页面;
- 试运行: 上线 24 小时观察数据是否完整、OEE 是否合理、跨厂同步是否正常。
9.2 常见故障排查
| 现象 | 排查点 |
|---|---|
| 大屏帧率低 | GPU 驱动 / 刷新周期 / 趋势图点数 / 粒子特效 |
| 多厂品牌 PLC 接不进 | 协议选择 / IP 连通 / 寄存器地址格式 |
| 班次切换产量未清零 | FB_ShiftManager 时间判定 / 时区 |
| 断网大屏仍显示旧数据 | 本地缓存策略 / 是否配置离线模式 |
| 跨厂同屏延时 >5s | 网络 RTT / 同步周期 / 云中继负载 |
| OEE 偏高 (>100%) | 理论节拍设太慢 / 计划停机配置错 |
| 钉钉收不到报警 | Webhook URL / 签名 / 频率限制 |
9.3 日常运维
- 每天: 巡检边缘服务器磁盘占用 (时序库);
- 每周: 查看错报告警, 调整阈值;
- 每月: 导出 OEE / 产量 / 能耗 报表发管理层;
- 每季度: 备份工程与时序库冷数据。
十、Darra 功能对照表
| 需求 | Darra 功能 |
|---|---|
| 多 PLC 品牌统一接入 | 内置 Modbus / S7 / MC / OPC UA / MQTT / EtherCAT |
| OEE 实时计算 | FB_OEECalculator + 班次滚动 |
| 多地同屏 (本厂 + 总部 + 手机) | DarraSync + 多终端免费授权 |
| 大屏专业控件 | HMI Designer (50+ 基础 / 20+ 图表 / 30+ 工业) |
| 报警墙 + 多渠道推送 | FB_AlarmEngine + DingTalk/WeCom/SMS/Email |
| 3D 车间鸟瞰 | 内置 3D 部件 + URDF 设备模型 |
| AI 看板生成 | 自然语言描述 → AI 生成页面 |
| 第三方 BI / MES 对接 | DarraIPC + OPC UA + REST API |
| 工单进度跟踪 | UDT_WorkOrder + 大屏绑定 |
| 能耗监控 | 电表采集 + 峰谷分析 |
| 多班次对比 | 时序库归档 + 历史对比页 |
| 客户远程看厂 | 权限限制 + 浏览器访问 |
| 断网缓存补传 | LocalBuffer + NetReconnect |
| 无终端授权费 | 大屏 / 手机 / Web 全免费 |
十一、项目总结
成果指标
- 采集容量: 760 点 / 8 设备 (单边缘服务器), 设计 2 万点;
- 大屏刷新: 1Hz (关键数值 2Hz), WebGL 硬件加速 60FPS;
- 多屏延时: 本厂 < 500ms / 跨厂 < 2s (专线) / < 5s (公网 VPN);
- OEE 目标达成: 实施后某客户厂 OEE 从 62% 提升到 78%;
- 单厂成本: ¥6~8 万 (3 大屏 + 边缘 + 授权), 比传统 SCADA 省 60%+;
- 部署周期: 2~7 天 vs 传统 1~3 月;
- 授权节省: 10 终端原 Client 授权 ¥3~10 万, Darra 全免。
适配场景延伸
- 离散制造车间 (冲压 / 注塑 / 机加 / 焊装 / 装配);
- 流程工业 (食品饮料灌装 / 包装 / 涂装);
- SMT 电子车间;
- 立体仓库 / 物流中心 (AGV 调度 + 库位);
- 能源管控 (空压机 / 冷水机 / 照明);
- 安灯系统 (Andon) 可视化;
- 集团多厂对标;
- 代工客户远程看厂。
扩展方向
- AI 异常检测: 对趋势图做自动异常识别, 不用人工设阈值;
- 语音播报: 关键报警自动语音播报到车间广播;
- 数字孪生联动: 3D 车间鸟瞰加入实时动作, 配合数字孪生案例;
- 指标可视化: 大屏汇总展示上层 MES/APS 下发的排产与工单进度 (排产、插单决策由上层 MES/APS 负责, Darra 只做数据采集与展示);
- GIS 地图接入: 物流 / 多厂大屏用高德 / 百度地图底图;
- PDF 自动日报: 班后自动生成 PDF 日报推送到邮箱, 替代 Excel 手工汇总;
- 移动办公联动: 报警处理结果回写飞书 / 钉钉审批流。
Darra 让 "车间数据大屏" 从 SCADA 项目的高成本高门槛, 变成人人可快速搭建的标准交付物, 多地同屏 是 Darra 最具代表性的差异化能力。