5.6 KiB
搭建步骤说明 —— RS485 → Pharos LPC 灯光控制系统
日期:2026-10-09
1. 系统组成
发送方(PC / ESP32 / 任意串口主机)
│ RS485 总线 A/B 双绞线(9600 8N1,ASCII 帧 \n 结尾)
▼
Pharos LPC 控制器(0140650,IP 192.168.58.109)
│ DMX universe 1 通道 1~32
▼
32 路灯光(Generic Conventional 8 bit 调光通道)
照度计(仁科 485 型,Modbus 地址 2,4800 8N1)挂在同一 485 总线,
由 Ubuntu 主机(192.168.58.7,/dev/ttyUSB0)轮询后转发 LUX=/LX2= 帧给 LPC。
2. 硬件接线
- 发送方串口(USB-485 或 ESP32 UART+485 模块)A→A、B→B 接入 LPC 的 RS485 端口。
- LPC 串口参数:RS485 模式,9600 8N1(Designer → Network 视图 → Interfaces → Serial Port 设置)。
- DMX 输出:LPC DMX1 口接灯具/调光硅箱。
- 照度计接同一总线(注意其为 4800 波特率,与 LPC 9600 混跑,互不干扰)。
3. Designer 2 项目搭建(0140650.pd2)
3.1 灯具与 Patch
- Layout 视图:Fixture Library 选
Generic > Conventional 8 bit,取消 Auto finish, 在网格上连续点击放置 32 个(8 列 × 4 行),Finish。自动归入组All Conventional 8 bit。 - Patch 视图:从左侧灯具树拖拽灯具到 DMX universe 1 的通道格子(点击/双击格子无效), 完成灯具 1~32 → 通道 1~32。
- Patch 视图 → DMX universe 1 → eDMX Pass-Through 设为 None(本地模式; 直通优先级高于本地输出,二者不可叠加)。
3.2 Timeline(FX 效果)
Timeline 视图 → 工具栏 New 建 4 条 Timeline。块放置方法: 双击右侧 Built-in 面板的效果图标(画布出现蓝框)→ 单击画布空白处提交; 块只在选中时渲染;紧邻后块会锁定前块 Release 字段(先设好 Release 再放下一块); 属性在右侧面板直接编辑(Start / Length / Fade / Release)。
| Timeline | 效果 | 配置 |
|---|---|---|
| 1 | 常亮 | White 块 0-30s,Level 255 |
| 2 | 呼吸 | 4 个 White 块:0-8 / 8-16 / 16-24 / 24-30s,Fade 4 / Release 4(末块 3/3) |
| 3 | 闪烁 | White 块 0-30s,Shape=Square,Base 0 / Size 255 / Loop Period 1.00s |
| 4 | 缓变 | White 块 0-30s,Fade 15 / Release 15 |
循环播放(2026-10-10 补):Timeline 默认播完 Length 即 released(灯灭)。 工具栏 Loop 按钮(↻ 单环图标,悬停提示 "Loop",位置约 x=358;标尺末端出现循环标记为开启) 已给 4 条 Timeline 逐一开启,但实测单独开启对控制器运行不生效; 实际由触发器 #13 FXLoop(Type=Timeline Ended, Timeline=Any → Run Script 重启该时间线)实现循环。 注意区分另两个相似按钮:Hold At End(→|,x=326,末端保持不释放)和 Enable Looping(↻ 带两点,x=768,仅编辑器仿真循环,不上传控制器)。
3.3 触发器(Trigger 视图)
工具栏 Trigger → New... → Serial Input,每个触发器加 Action → Run Script → Quick Script 粘贴对应 Lua。
| # | String | 脚本文件 | 功能 |
|---|---|---|---|
| 2 | BRT=<3d> |
lpc_serial_brt.lua | 手动亮度 0~100% → master_intensity |
| 8 | LUX=<6d> |
lpc_serial_lux.lua | 照度闭环自动调光 |
| 9 | LXT=<6d> |
lpc_serial_lxt.lua | 设定目标照度(变量 lux_target) |
| 10 | LX2=<6d> |
lpc_serial_lx2.lua | 照度→亮度对数映射(指示模式) |
| 11 | FX=<2d> |
lpc_serial_fx.lua | 效果选择:清 Override + get_timeline(N):start_release_others() |
| 12 | SC=<2d> |
lpc_serial_sc.lua | 场景选择:释放全部 Timeline + get_group_override(0):set_intensity(level, 1.0) |
| 13 | Timeline Ended(Any) | lpc_fxloop.lua | 时间线到末尾自动重启实现循环;SC 释放属 Timeline Released 不会误触发 |
SC 亮度预设:01=255 全亮 / 02=128 半亮 / 03=26 微亮 / 04=0 全灭。
3.4 保存与上传
- 保存:Ctrl+S 或 Project 视图 → Save Project(标题栏的 "*" 是应用图标不是未保存标记; 以文件 LastWriteTime / Recent Projects 列表的 Last modified 更新为准)。
- Network 视图 → Upload → 选中设备行 → Upload All → 等 "Upload complete" → Close。
- 注意:Upload 会清空控制器上的 Override;SC 场景需重新下发。
- 归档:把
C:\Users\tonycao\Documents\0140650.pd2复制到本项目目录。
4. Ubuntu 侧部署(192.168.58.7)
# 文件
~/rs485-lpc_test_rs485.py # 串口收发工具
~/rs485-lpc/lux_sync.py # 照度轮询→BRT 帧推送(反逻辑:越暗越亮)
~/rs485-lpc/scan_modbus.py # Modbus 地址/寄存器扫描
~/rs485-lpc/loop_test.sh # BRT 回归
~/rs485-lpc/lux_test.sh # 照度闭环回归
~/rs485-lpc/api_smoke.sh # LPC API 冒烟
# 启动照度同步(后台常驻)
setsid bash -c 'nohup python3 ~/rs485-lpc/lux_sync.py > ~/rs485-lpc/lux_sync.log 2>&1 < /dev/null &'
上传文件用 Put-Remote.ps1(-Remote 参数必须是目录 /home/tonycao/rs485-lpc),
远程执行用 Run-Remote.ps1 -Cmd "..."(Posh-SSH,密码 "0";Windows 自带 ssh.exe 会挂死,勿用)。
5. 验证
# 发帧(Ubuntu)
python3 ~/rs485-lpc_test_rs485.py -s 'FX=02'
# 查 LPC 状态(Windows)
curl.exe http://192.168.58.109/api/timeline # running/released/none
curl.exe "http://192.168.58.109/api/output?universe=dmx:1" # 32 通道实时值
curl.exe http://192.168.58.109/api/group # master_intensity 回读
回归脚本:loop_test.sh(5/5)、lux_test.sh(7/7)、lx2_test.sh(8/8)。