旋钮编码器是物理硬件控件:靠旋转(A/B 相正交脉冲)和按压(确认/전환)操作,用于无级微调、快速매개변수设定(온도、频率、偏移量)。표준产品如 DC40400DB016 支持旋转编码器인터페이스,编码器型号 EC11。
1. 属性介绍
| 属性 | 설명 |
|---|---|
| 编码器 | 编码순번 0~3,目前只支持 0 |
| 쓰기주소 | 编码器值自动累加출력到该주소 |
| 데이터유형 | UINT16/INT16/UINT32/INT32 |
| 下限值/上限值 | 编码器值范围 |

2. 关键行为
- 旋转动作:系统自初始化后自动把 A/B 正交脉冲转为数值——逆时针递增(步长1)、顺时针递减;到上下限钳位,不循环重置(工业安全设计)
- 按下动作:完全由用户层 Lua 스크립트处理(系统无内置回调),通过 GPIO 인터페이스检测——以 DC40400DB016 为例按键低电平有效(按下=0,释放=1)

3. LUA 스크립트(必须初始化)
使用旋钮编码器必须在 on_init 里初始化:
function on_init()
dofile("bspButtonV2.lua") -- 불러오기按键库
btn_manager = ButtonManager:new()
btn_manager:add("key1", Knob.pinKey, {
active_level = Knob.pinKeyActive, -- 0=低电平有效
long_press_time = Knob.pinKeyLongTime,-- 300ms 长按阈值
enable_repeat = true, -- 长按连续触发
enable_double_click = true, -- 双击检测
debug = false })
btn_manager:get("key1")
:on(Button.EVENT.SHORT_PRESS, KnobKey_Press)
:on(Button.EVENT.SHORT_RELEASE, KnobKey_Release)
:on(Button.EVENT.LONG_PRESS, KnobKey_LongPress)
:on(Button.EVENT.LONG_RELEASE, KnobKey_LongRelease)
:on(Button.EVENT.CLICK, KnobKey_Click)
:on(Button.EVENT.DOUBLE_CLICK, KnobKey_Double)
:on(Button.EVENT.REPEAT, KnobKey_Repeat)
set_rotate_decoder(0, Knob.pinA, Knob.pinB, Knob.ktype) -- 编码器初始化
시작_rotate_decoder() -- 启动编码器
set_run_cycle(10) -- 主循环 10ms
end引脚定义:GPIO 的 16 진법高 8 位=IO 组、低 8 位=引脚,PD0=0x0300、PD2=0x0302、PD3=0x0303。旋转动作启动后由内核异步更新绑定레지스터(如 LW1000),无需스크립트轮询;按下动作靠 on_run 里 btn_manager:update_all() 每 10ms 检测。

旋钮编码器必须实体屏测试(虚拟屏没有真实 IO)。上电时建议加一个单次定时器把绑定주소清 0——避免编码器抖动导致初值不为 0。另注意:旋钮到上下限是钳位不是循环,和화면里控件的循环调节是两码事。
整理自 广州大彩科技 VisualHMI 개발문서(hmi-doc.gz-dc.com)구성(SCADA)控件튜토리얼「旋转编码器」,版权归大彩科技所有。
답글 작성