rs485-lpc/SETUP.md

5.6 KiB
Raw Permalink Blame History

搭建步骤说明 —— 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. 硬件接线

  1. 发送方串口(USB-485 或 ESP32 UART+485 模块)A→A、B→B 接入 LPC 的 RS485 端口。
  2. LPC 串口参数:RS485 模式,9600 8N1(Designer → Network 视图 → Interfaces → Serial Port 设置)。
  3. DMX 输出:LPC DMX1 口接灯具/调光硅箱。
  4. 照度计接同一总线(注意其为 4800 波特率,与 LPC 9600 混跑,互不干扰)。

3. Designer 2 项目搭建(0140650.pd2)

3.1 灯具与 Patch

  1. Layout 视图:Fixture Library 选 Generic > Conventional 8 bit,取消 Auto finish, 在网格上连续点击放置 32 个(8 列 × 4 行),Finish。自动归入组 All Conventional 8 bit。
  2. Patch 视图:从左侧灯具树拖拽灯具到 DMX universe 1 的通道格子(点击/双击格子无效), 完成灯具 1~32 → 通道 1~32。
  3. 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 保存与上传

  1. 保存:Ctrl+S 或 Project 视图 → Save Project(标题栏的 "*" 是应用图标不是未保存标记; 以文件 LastWriteTime / Recent Projects 列表的 Last modified 更新为准)。
  2. Network 视图 → Upload → 选中设备行 → Upload All → 等 "Upload complete" → Close。
  3. 注意:Upload 会清空控制器上的 Override;SC 场景需重新下发。
  4. 归档:把 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)。