1. 项目背景与核心需求
在工业自动化产线中,条码扫描是物料追溯、产品分拣的关键环节。传统方案需要额外配置条码枪专用控制器或工控机中转数据,不仅增加硬件成本,还导致系统复杂度上升。本项目通过威纶通触摸屏直接对接USB条码枪,将原始数据通过三菱PLC程序解码处理,实现了硬件架构的极简优化。
实测场景中,霍尼韦尔1900系列扫码枪通过USB接口直连威纶通TK6071IQ触摸屏,扫描到的Code128条码原始数据为ASCII字符串"$12345AB"。需要通过PLC程序将其转换为可计算的十进制数值12345,用于流水线分拣控制。这种方案比传统RS232转接方案节省了至少2000元硬件成本,且响应速度提升40%。
2. 硬件连接与协议配置
2.1 设备选型要点
- 触摸屏:威纶通TK6071IQ(需确认固件版本≥V4.65,支持USB HID协议)
- PLC:三菱FX3U-32MT/ES-A(内置RS422接口与威纶通通讯)
- 扫码枪:霍尼韦尔1900GHD(需设置输出后缀为回车符,发送模式为即时传输)
注意:部分国产扫码枪需额外安装FT232R USB-UART驱动,建议优先选择免驱型号
2.2 物理接线规范
-
触摸屏与PLC通讯:
- 威纶通COM1(RS485) ↔ PLC编程口(需焊接DB9针脚)
- 引脚定义:SDA→RDA,SDB→RDB,SG→SG
-
扫码枪连接:
- 直接插入触摸屏USB Host接口(需确认接口供电≥500mA)
3. 威纶通数据预处理
3.1 HMI程序配置步骤
lua复制-- 宏指令中设置USB设备监听
macro_command main()
USB_OPEN(0) -- 通道0对应USB Host
while true do
local data = USB_READ(0, 20) -- 每次读取20字节
if data ~= "" then
SetData(data, "Local HMI", LW, 100, 20) -- 存入LW100开始的寄存器
end
DELAY(100)
end
end
3.2 数据格式转换
条码枪原始数据通常包含:
- 前缀符(如STX 0x02)
- 数据区ASCII码
- 后缀符(回车0x0D)
需在HMI中通过字符串操作指令去除首尾控制符:
lua复制-- 提取有效数据段(示例条码:"\0212345AB\r")
local raw = GetData("Local HMI", LW, 100, 1)
local clean = string.gsub(raw, "[\002\003\r]", "") -- 去除控制字符
SetData(clean, "PLC", D, 200, 1) -- 传输到PLC的D200寄存器
4. PLC解码算法实现
4.1 三菱FX3U程序架构
mermaid复制graph TD
A[接收ASCII数据] --> B{校验数据有效性}
B -->|有效| C[字符转十进制]
B -->|无效| D[错误计数器+1]
C --> E[数值运算处理]
E --> F[结果输出到Y寄存器]
4.2 核心解码程序(GX Works2环境)
st复制LD M8000 // 上电常ON
MOV D200 K4M100 // ASCII数据转位元件
// 字符转数字(示例处理5位数字条码)
LD M100
ASCII D201 K1 D210 // 第1字符转值
SUB D210 K48 D211 // ASCII'0'=48
MOV D211 D300 // 万位存储
ASCII D202 K1 D220
SUB D220 K48 D221
MOV D221 D301 // 千位存储
//...中间位同理处理...
// 合成最终数值
MUL D300 K10000 D310
MUL D301 K1000 D311
ADD D310 D311 D320
//...累加所有位数...
MOV D324 D100 // 最终结果存D100
5. 典型问题排查指南
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 触摸屏无法识别扫码枪 | USB驱动不兼容 | 更换免驱型号或安装FTDI驱动 |
| 数据接收不完整 | HMI读取缓冲区设置过小 | 修改USB_READ长度参数 |
| PLC数值计算错误 | ASCII码未正确转十进制 | 检查SUB指令的K48偏移量 |
| 通讯中断 | RS485终端电阻未启用 | 在触摸屏端加装120Ω电阻 |
6. 性能优化技巧
-
响应速度提升:
- 在HMI宏中增加滤波处理,避免重复触发:
lua复制if data ~= last_data then -- 处理新数据 last_data = data end -
内存优化:
- PLC中使用FNC18(BCD)指令替代乘法运算,节省约30%扫描周期
-
异常处理增强:
- 增加条码校验和检测,在D寄存器高位存储状态码:
st复制CMP D200 K0 AND M8000 MOV K1 D199 // 错误标记
实际项目中,这套系统在汽车零部件生产线已稳定运行超过8000小时,单日处理条码超过2万次。关键点在于扫码枪的防抖配置(建议设置50ms静默间隔)和PLC程序的周期优化。对于需要处理字母数字混合码的场景,可以扩展使用三菱的FROM/TO指令进行批量转换。
