文章目录

HMI配方数据的条形码扫描输入

发布于 2026-03-31 15:39:54 · 浏览 5 次 · 评论 0 条

HMI 配方数据的条形码扫描输入

在工业自动化生产中,人工输入配方参数效率低且易出错。通过条形码扫描枪配合 HMI(人机界面)实现配方自动加载,可显著提升换线速度。本指南将手把手教你完成硬件连接、数据定义及逻辑编写,实现扫描即切换。


1. 硬件连接与通信配置

扫描枪本质是一个输入设备,通常模拟键盘输入或通过串口发送数据。大多数现代 HMI 支持 USB 接口直接连接键盘式扫描枪。

  1. 连接 扫描枪至 HMI 的 USB 端口。
  2. 设置 扫描枪为 USB-HID 模式(即键盘模拟模式)。此模式下无需安装驱动,HMI 将其识别为普通键盘。
  3. 配置 扫描枪的前后缀字符。建议设置前缀为 STX (ASCII 02),后缀为 CR (ASCII 13) 或 CRLF。前后缀用于帮助系统识别数据包的开始与结束。
  4. 测试 打开 HMI 的文本输入框,扫描任意条形码。若输入框内出现字符且光标自动跳至下一位,说明硬件通信正常。

若使用串口扫描枪(RS232),则需确保 HMI 的串口波特率、数据位、停止位与扫描枪完全一致。通常默认设置为 9600, 8, N, 1


2. 条形码数据规则定义

为了让程序准确识别,必须制定统一的编码规则。条形码不能只包含配方号,还需包含校验位以防误读。建议采用以下结构:

字段名称 字符长度 内容说明 示例数据
起始符 1 字符 固定标识数据开始 *
配方编号 4 字符 对应配方在数据库中的 ID 0012
校验码 2 字符 防止扫描错误的验证位 A5
结束符 1 字符 固定标识数据结束 #

上方表格定义了总长度为 8 字符的标准数据包。例如,扫描 *0012A5# 代表加载第 12 号配方。

注意:若配方编号超过 4 位,需相应调整长度定义。所有字符建议使用英文半角,避免中文编码导致长度计算错误。


3. 逻辑流程设计

数据读取后,HMI 或 PLC 需要解析字符串并执行加载动作。以下流程图展示了完整的数据处理逻辑:

graph TD A["开始:监听扫描输入"] --> B["读取:获取完整字符串"] B --> C["判断:长度是否等于 8"] C -- "否" --> D["报错:数据格式错误"] C -- "是" --> E["提取:截取第 2 至 5 位"] E --> F["计算:验证校验码"] F -- "失败" --> D F -- "成功" --> G["写入:配方号至寄存器"] G --> H["触发:加载配方指令"] H --> I["结束:恢复监听状态"] D --> I

流程核心在于验证数据完整性。若长度不对或校验失败,系统应拒绝执行并提示操作员,防止错误配方下发导致产品质量事故。


4. 脚本编写与数据解析

在 HMI scripting 或 PLC 逻辑中,需使用字符串处理函数。以下以通用脚本语言为例,展示如何解析条形码数据。

  1. 定义 变量 RawData 用于存储扫描枪输入的原始字符串。
  2. 获取 输入框内容并赋值给 RawData
  3. 判断 字符串长度。使用 Len(RawData) 函数,若结果不等于 8,则弹出 报警窗口“扫描数据长度错误”。
  4. 截取 配方编号。使用 Mid(RawData, 2, 4) 函数。该函数意为从第 2 个字符开始,截取 4 个字符。将结果存入变量 RecipeID
  5. 验证 校验码。提取最后两位字符,与计算出的校验值比对。

校验码计算通常采用累加取模法。假设数据区为 0012,其 ASCII 码值之和为 $S$。校验码计算逻辑如下:

$$ CheckSum = S \mod 256 $$

将计算结果转换为 16 进制字符串,并与条形码中的校验位比对。若一致,则视为合法数据。

  1. 写入 配方号。将 RecipeID 转换为整数类型,写入 PLC 地址 MW100
  2. 触发 加载信号。置位位地址 M0.01,通知 PLC 开始执行配方下载程序。
  3. 清空 输入框。执行完成后,清除 输入框内容,准备下一次扫描。

以下代码片段展示了核心的校验逻辑:

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. 调试与常见问题排查

完成编程后,需进行现场测试。按照以下步骤逐一排查潜在问题。

  1. 检查 光标焦点。扫描枪模拟键盘输入,必须确保 HMI 上的输入框处于“激活”状态。若焦点在其他位置,数据将无法录入。设置 该输入框为默认聚焦,或使用全局键盘钩子捕获数据。
  2. 核对 字符集。若扫描枪设置为中文输入法模式,可能输入全角字符。强制 扫描枪重置为英文半角模式。
  3. 验证 回车符。部分 HMI 需要检测到回车键才触发数据读取事件。配置 扫描枪后缀包含 Enter 键,或在脚本中轮询检测 CR 字符。
  4. 测试 边界条件。尝试扫描损坏的条形码或模糊不清的标签。系统应能识别错误且不执行加载动作。若系统崩溃,增加 异常捕获机制(Try-Catch)。
  5. 确认 权限等级。某些配方可能涉及关键工艺参数。加入 权限验证步骤,扫描后提示输入密码,验证通过后方可加载。

若使用串口通信而非 USB 键盘模式,需监控 串口缓冲区。确保数据接收完整后再进行解析,避免粘包或断包现象。可通过检测结束符 # 来判断一帧数据是否接收完毕。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文