VisualHMI USB HID 扫码枪:on_key 扫描码转 ASCII

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

USB Host + 定制固件,直接接 HID 条码扫描枪,扫码内容经 on_key(key) 回调进 Lua。工业仓储、产线追溯用得着。HMI&M&DX 系列 + USB 接口 + 定制固件。

1. API:on_key(key)

key 为 16 位无符号整数:低 8 位 = USB HID Usage ID(扫描码),高 8 位 = Shift 状态(非 0 表示 Shift 按下,区分大小写)。低 8 位 == 0x28(Enter)表示条码结束,此时提交字符串并清空缓冲。

2. Lua:HID 扫描码转 ASCII

用查表把 Usage ID 映射成字符(含 Shift 大写态),遇到 0x28 结束符写 LW2000:

_barCode = ""
usbScanGun = {
  [0x04] = {"a","A"}, [0x05] = {"b","B"}, ... [0x1D] = {"z","Z"},
  [0x1E] = {"1","!"}, [0x1F] = {"2","@"}, ... [0x27] = {"0",")"},
  [0x2C] = {" "," "}, [0x28] = {"n","n"}  -- Enter
}
function on_key(key)
  local usage = key & 0xFF
  local shift = (key >> 8) & 0xFF
  if usage == 0x28 then        -- 结束符
    set_string(VT_LW, 0x2000, _barCode)
    _barCode = ""
    return
  end
  local ch = usbScanGun[usage]
  if ch then
    _barCode = _barCode .. (shift ~= 0 and ch[2] or ch[1])
  end
end

扫码枪本质是键盘模拟:HID 上报的是扫描码不是 ASCII,得自己查表转。Shift 状态在 key 高 8 位,大小写靠它区分。0x28 是回车结束符——收到就提交,别等超时。定制固件专属。

整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)其他技术教程「USB HID扫码枪」,版权归大彩科技所有。

来源/工具信息 —— 点击展开
来源 Modbus.cn — China's leading Modbus communication protocol technical community 分类 串口屏/HMI 开发 / 其他技术资料 字数 836 字 · 阅读约 3 分钟 更新 2026-08-04 永久链接 http://www.modbus.cn/en/51602.html
Recommended: Modbus Debug Assistant Mini Program
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

Your email address will not be published. 必填项已用 * 标注