跳到主要内容

车间数据大屏

一、设备简介

车间数据大屏是数字化车间最容易落地、最容易产生管理价值的一环。它把分散在多条产线、多台设备上的生产数据实时汇总到:

  • 车间大屏 (通常 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) 并发采集多台 PLCDarra 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 + MQTTIPC Service
权限系统角色 / 页面 / 点位多级权限, 班次切换自动清零ACL

三、机械装配架构 (网络布局)

布局要点:

  1. 边缘服务器 放在车间控制室, 集中接入所有 PLC / 机器人 / 电表;
  2. 各大屏独立小主机 (mini PC), 开机自启 Web 浏览器全屏, 指向边缘服务器;
  3. 办公室 / 手机 通过公司内网直接访问, 无需买 Client 授权;
  4. 跨厂 通过 DarraSync 走加密专线或公网 TLS, 聚合到云中继;
  5. 客户端受限账号 (代工客户远程看厂) 在权限层控制可见页面与点位。

四、程序架构

大屏相关 FB 清单

FB 名输入输出说明
FB_MultiProtocolCollectDeviceList / ProtocolListDataSet多协议并发采集
FB_TSDBWritePointId / Value / TimestampDone时序库写入
FB_OEECalculatorPlannedTime / RunTime / IdealCycle / Good / TotalA / P / Q / OEE三要素
FB_ShiftManagerShiftDefCurrentShift / ShiftChanged班次切换
FB_AlarmEnginePointId / UpperLimit / LowerLimitAlarmSet[]阈值报警
FB_AlarmPushAlarmSet / ChannelsPushCount报警推送
FB_DarraSyncChannel / Data / ToNodeListDone跨站同步
FB_DarraIPCServiceName / RequestResponse第三方 SDK 入口
FB_HMIBridgePageId / DataSetBindingMap页面数据绑定

五、硬件 BOM (国产优先)

类别设备型号 / 规格数量单价 (¥)小计 (¥)
边缘服务器工控机研华 IPC-610 / i5-12400 / 32GB / 1TB NVMe17,5007,500
车间大屏55 寸商显海信 XT536 / 4K / 哑光14,5004,500
车间大屏 (高端)65 寸商显海信 XT536 / 4K16,5006,500
办公室大屏43 寸商显创维 43G3112,5002,500
大屏主机mini PC零刻 SER5 / AMD 5560U / 16GB32,3006,900
总部大屏86 寸会议屏海信 M86Pro112,00012,000
交换机千兆华为 S5720 16 口13,8003,800
无线 APWi-Fi 6 吸顶锐捷 RG-AP84021,2002,400
HDMI 延长器HDMI over IP 4K按需28001,600
UPS在线式山特 C1K11,5001,500
电表导轨式威胜 DTSD341 / Modbus46002,400
机柜 + 线缆网络机柜 + 六类线13,0003,000
软件Darra Runtime 授权永久 + 1 年升级19,8009,800
合计 (车间 + 办公 + 总部)¥64,400

多终端 (手机 / 平板 / 浏览器) 授权全部免费。

六、IO 模块配置

6.1 采集协议与设备清单

设备协议接口采集点数周期
冲压线 PLCModbus TCP以太网120500ms
装配线 PLCS7 (西门子)以太网200500ms
包装线 PLCOPC UA以太网1801s
Darra RobotRuntime 内部共享内存60100ms
机加中心 CNCMC (三菱)以太网801s
总 / 分电表Modbus RTURS485 → 串口服务器401min
温湿度传感器MQTT无线 → 网关3010s
AGV 车队Darra 内部以太网50200ms

合计: 760 采集点, 单边缘服务器轻松支撑 (设计容量 2 万点)。

6.2 点表配置 (Excel 模板示例)

DeviceIdPointNameProtocolAddressDataTypeScanRateUnitUpperLimitLowerLimit
PLC1Stamp_CountModbus40001DINT500--
PLC1Stamp_StatusModbus40010INT500枚举--
PLC1Stamp_PressureModbus40020REAL500MPa20050
PLC2Assy_CycleS7DB1.DBD0REAL500s158
CNC1Spindle_LoadMCD100REAL1000%90-
METER_1Power_TotalModbus40100REAL60000kW--

点表导入 IDE 设备向导, 一键批量建立设备模型, 不用手写代码。

6.3 绑定大屏页面操作流程 (IDE 内)

  1. 设备向导 → 导入点表 → 建立 760 个点位对象;
  2. 设备建模: 按车间→产线→工位→设备四级树组织, 每设备自动继承 "状态 / 计数器 / 节拍 / OEE" 标准属性;
  3. OEE 配置: 每产线定义班次 / 理论节拍 / 合格规则 / 计划停机窗口, 系统自动计算 A/P/Q;
  4. HMI 页面: 打开 HMI Designer, 从左侧控件库拖拽仪表盘 / 状态矩阵 / 趋势图 → 右侧属性面板绑定到设备属性或点位;
  5. 多屏发布: 每块大屏绑定独立页面 + 分辨率模板 (1080P / 4K / 32:9 超宽), 服务端推送, 客户端自适应;
  6. 多地同步: DarraSync 配置 "本厂 → 云中继 → 总部" 单向 / 双向, 同步周期 1s;
  7. 权限 + 班次: 分角色 (操作工 / 班长 / 厂长 / 董事长) 分配页面, 班次切换自动清零当日累计;
  8. 报警阈值: 对关键点位 (压力 / 节拍 / 温度) 设上下限, 超限滚入报警墙 + 推送到钉钉 / 企微。

七、核心数据结构

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 首次部署流程

  1. 边缘服务器安装: 研华工控机装 Windows Server + Darra Runtime;
  2. 网络连通: 边缘 IP 固定 / 各 PLC IP 段互通 / 大屏 mini PC 同网段;
  3. 设备向导: Excel 导入 760 点位 → 一键建立 8 个设备模型;
  4. OEE 配置: 16 条产线按实际排班填 JSON → 保存;
  5. HMI 页面设计: HMI Designer 拖拽 → 各页面绑定数据 → 保存;
  6. 多终端发布: 给每块大屏 / 每个浏览器 分配一个 URL, mini PC 开机自启全屏浏览器;
  7. DarraSync: 配置云中继 → 总部大屏注册 → 获取 token;
  8. 报警推送: 钉钉 / 企微 Webhook 填好 → 阈值测试;
  9. 权限: 操作工 / 班长 / 厂长 / 集团领导 4 级角色 → 分配页面;
  10. 试运行: 上线 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 最具代表性的差异化能力。