HMI 配方数据的条形码扫描输入
在工业自动化生产中,人工输入配方参数效率低且易出错。通过条形码扫描枪配合 HMI(人机界面)实现配方自动加载,可显著提升换线速度。本指南将手把手教你完成硬件连接、数据定义及逻辑编写,实现扫描即切换。
1. 硬件连接与通信配置
扫描枪本质是一个输入设备,通常模拟键盘输入或通过串口发送数据。大多数现代 HMI 支持 USB 接口直接连接键盘式扫描枪。
- 连接 扫描枪至 HMI 的
USB端口。 - 设置 扫描枪为
USB-HID模式(即键盘模拟模式)。此模式下无需安装驱动,HMI 将其识别为普通键盘。 - 配置 扫描枪的前后缀字符。建议设置前缀为
STX(ASCII 02),后缀为CR(ASCII 13) 或CRLF。前后缀用于帮助系统识别数据包的开始与结束。 - 测试 打开 HMI 的文本输入框,扫描任意条形码。若输入框内出现字符且光标自动跳至下一位,说明硬件通信正常。
若使用串口扫描枪(RS232),则需确保 HMI 的串口波特率、数据位、停止位与扫描枪完全一致。通常默认设置为 9600, 8, N, 1。
2. 条形码数据规则定义
为了让程序准确识别,必须制定统一的编码规则。条形码不能只包含配方号,还需包含校验位以防误读。建议采用以下结构:
| 字段名称 | 字符长度 | 内容说明 | 示例数据 |
|---|---|---|---|
| 起始符 | 1 字符 | 固定标识数据开始 | * |
| 配方编号 | 4 字符 | 对应配方在数据库中的 ID | 0012 |
| 校验码 | 2 字符 | 防止扫描错误的验证位 | A5 |
| 结束符 | 1 字符 | 固定标识数据结束 | # |
上方表格定义了总长度为 8 字符的标准数据包。例如,扫描 *0012A5# 代表加载第 12 号配方。
注意:若配方编号超过 4 位,需相应调整长度定义。所有字符建议使用英文半角,避免中文编码导致长度计算错误。
3. 逻辑流程设计
数据读取后,HMI 或 PLC 需要解析字符串并执行加载动作。以下流程图展示了完整的数据处理逻辑:
流程核心在于验证数据完整性。若长度不对或校验失败,系统应拒绝执行并提示操作员,防止错误配方下发导致产品质量事故。
4. 脚本编写与数据解析
在 HMI scripting 或 PLC 逻辑中,需使用字符串处理函数。以下以通用脚本语言为例,展示如何解析条形码数据。
- 定义 变量
RawData用于存储扫描枪输入的原始字符串。 - 获取 输入框内容并赋值给
RawData。 - 判断 字符串长度。使用
Len(RawData)函数,若结果不等于8,则弹出 报警窗口“扫描数据长度错误”。 - 截取 配方编号。使用
Mid(RawData, 2, 4)函数。该函数意为从第 2 个字符开始,截取 4 个字符。将结果存入变量RecipeID。 - 验证 校验码。提取最后两位字符,与计算出的校验值比对。
校验码计算通常采用累加取模法。假设数据区为 0012,其 ASCII 码值之和为 $S$。校验码计算逻辑如下:
$$ CheckSum = S \mod 256 $$
将计算结果转换为 16 进制字符串,并与条形码中的校验位比对。若一致,则视为合法数据。
- 写入 配方号。将
RecipeID转换为整数类型,写入 PLC 地址MW100。 - 触发 加载信号。置位位地址
M0.0为1,通知 PLC 开始执行配方下载程序。 - 清空 输入框。执行完成后,清除 输入框内容,准备下一次扫描。
以下代码片段展示了核心的校验逻辑:
def verify_checksum(data_body, checksum_str):
# 计算数据体 ASCII 码总和
total = 0
for char in data_body:
total += ord(char)
# 计算校验值
calc_val = total % 256
# 转换为两位十六进制字符串
calc_hex = format(calc_val, '02X')
# 比对
if calc_hex == checksum_str:
return True
else:
return False
将上述逻辑移植到 HMI 宏指令或 PLC 功能块中。确保所有变量类型匹配,字符串转整数时需处理异常情况。
5. 调试与常见问题排查
完成编程后,需进行现场测试。按照以下步骤逐一排查潜在问题。
- 检查 光标焦点。扫描枪模拟键盘输入,必须确保 HMI 上的输入框处于“激活”状态。若焦点在其他位置,数据将无法录入。设置 该输入框为默认聚焦,或使用全局键盘钩子捕获数据。
- 核对 字符集。若扫描枪设置为中文输入法模式,可能输入全角字符。强制 扫描枪重置为英文半角模式。
- 验证 回车符。部分 HMI 需要检测到回车键才触发数据读取事件。配置 扫描枪后缀包含
Enter键,或在脚本中轮询检测CR字符。 - 测试 边界条件。尝试扫描损坏的条形码或模糊不清的标签。系统应能识别错误且不执行加载动作。若系统崩溃,增加 异常捕获机制(Try-Catch)。
- 确认 权限等级。某些配方可能涉及关键工艺参数。加入 权限验证步骤,扫描后提示输入密码,验证通过后方可加载。
若使用串口通信而非 USB 键盘模式,需监控 串口缓冲区。确保数据接收完整后再进行解析,避免粘包或断包现象。可通过检测结束符 # 来判断一帧数据是否接收完毕。

暂无评论,快来抢沙发吧!