跳到主要内容

DALI(照明控制)驱动

概述

DALI(Digital Addressable Lighting Interface,IEC 62386)是建筑照明控制的标准协议。 一条 DALI 总线上可连接 64 个 short address(或 16 个 group、16 个 scene)的灯具 / 传感器 / 照度控制器,通过 broadcast / group / individual 级别的命令控制开关、调光和色温(DT8)。

项目
opc_typeDALI
实现类plantpulse.driver.protocol.dali.DALI_Driver
(无 —— stub)
read⛔ stub(返回 ""
write⛔ stub
安全不适用(总线层面的物理访问)
当前状态:stub 驱动

DALIplantpulse-edge-driver.jar 中仅存在形式上的 stub。 调用 read() 时返回空字符串,不会有任何流量发送到实际的 DALI 总线。 如需实际的 DALI 灯具监控 / 控制,请采用下文的替代运行方式


为什么 native 实现较为困难

PlantPulse Edge 是运行在普通 PC / 工控机 / Linux 服务器上的 Java 应用程序, 并不具备可直接连接 DALI 物理总线的接口。

进行 DALI 通信必须另行配备 DALI master / gateway 硬件

硬件类别示例产品上位接口
USB DALI masterLunatone DALI USB、Tridonic DALI USBUSB(厂商 SDK)
工业级 DALI gatewayTridonic DALI-2 SCI、Helvar 422 / 510、Lunatone DALI-2 IoTEthernet(Modbus TCP / BACnet/IP / REST / OPC UA)
楼宇自动化控制器内置Siemens DXR、Schneider SE8000BACnet/IP
Wireless meshCasambi、Silvair、Zigbee→DALI云端 / MQTT / REST

受电气与时序约束,PC 直接在 DALI 总线上产生位信号实际上不可行; 未通过 DALI-2 认证的自研实现,在建筑照明系统中往往无法合法使用。


替代运行方式

大多数商用 DALI gateway 都提供转换为标准工业协议的接口。 只需在 PlantPulse 现有驱动中选择一种进行注册即可。

DALI gateway 提供的上位接口使用的 PlantPulse 驱动页面
OPC UA ServerOPCUAOPC-UA
Modbus TCPMODBUSModbus
BACnet/IP(建议通过网关转换为内部协议 → Modbus/OPCUA)
REST / JSON APIHTTPHTTP
MQTT(Casambi 等 wireless)(MQTT 输入使用 Sparkplug 或外部 broker)Sparkplug B

推荐配置示例(Tridonic DALI-2 SCI / Lunatone DALI-2 IoT)


后续 native 实现时的考量事项

若自研实现进入评估阶段,应对以下方案进行评估。

方案依赖难度
Lunatone DALI USB SDK 绑定仅限 Windows 的 DLL + JNA
Helvar Designer Net(Router 422 over Ethernet)私有 TCP 协议(文档有限)中高
DALI-2 over IP(DiiA D4i 推进中)标准未确定
OPC UA Companion Spec for Lighting标准制定中(OPC Foundation)高(可通过 OPCUA 驱动解决)
结论

DALI 在标准层面已形成成熟的 gateway 转换模型。通过网关厂商提供的 OPC UA / Modbus TCP / REST 接口集成到 PlantPulse 是最稳定的方式, 新增 native 驱动的优先级较低。


stub 注册(仅供测试)

stub 驱动本身也可以完成 OPC 注册,但不会采集到数据。

curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_DALI_STUB",
"opc_type": "DALI",
"opc_name": "DALI stub",
"opc_agent_ip": "192.168.0.0",
"opc_agent_port": "0",
"site_id": "SITE_00001",
"auto_collect": false,
"timecycle": 5000,
"tag_list": []
}'