rs485-lpc/SETUP.md

114 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 搭建步骤说明 —— 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)
```bash
# 文件
~/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. 验证
```bash
# 发帧(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)。