扫码器:壹码通(EMT 6621)二维码带多个回车换行处理

摘要:二维码运用越来越广泛了,目前在医院中一个二维码可以串联多个系统,二维码的内容也可以设置一些特殊字符去达成系统便捷性。本次遇到为二维码中开头内置了回车和空格,在程序判断为回车(KEY_ENTER)时就会触发业务逻辑,这个时候由于第一个KEY_CODE就是回车(有点诡异偶发莫名出现一个随机字符),内容不正确将会导致业务失败。

一、问题现状

测试环境如下:
系统:windwos11 家庭版
扫码器:壹码通6621
注:以上为测试环境,非生产环境。对于此问题可以由扫码器厂家解决,也可以为软件厂家解决,都不复杂只需要将不符合数据剔除即可。

二维码内容开头自带回车换行,不清楚是否因为此而导致会随意出现一个字符,导致程序页面跳转,业务处理失败。


二、解决办法

解决有两种,可以由软件开发剔除脏数据,或者由扫码器厂家剔除回车换行、空格等不需要的字符。

注:这里个人建议具备开发能力推荐自己修改,这样可控性高,且软件更新后 不需要为每一台扫码器设备刷新固件且存在不同型号的扫码器固件不通用。还有另一点,目前采用的 USB HID一KBW(USB虚拟键盘) 模式,如果二维码做有中文将会乱码,因为扫码器自身为 ASCII 编码,如果有中文需要自己采用十六进读取数据转化为汉字。

通过 USB 虚拟串口技术获取二维码十六进内容,文章所有相关工具包见下方链接,注意工具仅适用于壹码通 6621 扫码器,主要工具如下:

名称 含义
sscom5.13.1.exe 串口工具
CRW_VCP 32_64.inf USB虚拟化串口驱动,注意在 windwos10 和 windows11 中系统已自带,不需要安装驱动,如果 windows10 不能正常可以尝试安装 drivers_v1.0.2(2020.10.10).exe 驱动
壹码通二维码识别模组固件更新操作.docx 内含壹码通扫码器固件升级操作和 windows7 系统 USB 转虚拟串口驱动安装操作
EMTxx2x-20230117_211023_del_200d0a-project.bin.pkg 扫码器删除回车换行、空格的固件,仅支持 壹码通 6621 扫码器
EMTxx2x-20220809_104944_240-project.bin.pkg 码器初始固件,未做任何特需设置,仅支持 壹码通 6621 扫码器
upgrade_tool.exe 固件升级工具
1、通过扫码器扫 USB虚拟串口 二维码,设置扫码器为串口输入模式。设置次模式后见不能再 TXT 文件中直接扫出内容,通过扫码器重新扫 USB HID一KBW(USB虚拟键盘) 二维码回到 USB 模式,内容可直接输入 TXT 文件或输入框。
2、在 Windows系统 的设备管理器 / 端口(COM和LPT)中找到虚拟串口号,在串口工具中 选中串口号 / 打开串口 / 勾选HEX显示 / 扫码二维码 ,将会在④处显示十六进制内容。这里发现第一次扫码,出现了二次内容,这是因为我在设置扫码器为虚拟串口模式后,未在串口工具中打开串口进行一次扫码,内容存储在缓存区中,第二次扫码就多出现了一次内容。

2.1 软件逻辑处理

新增字符长度判断,如果在换行回车键之前获取到的内容为空或者长度小于5,将作为脏数据不做业务处理。在获取符合数据后进行页面跳转业务处理。因为扫码器可以在任何页面触发(此处采用 Fragment),所以判断在指定扫码页面才可以处理数据,如果不在指定页面则不处理。

2.2 扫码器固件刷机

具体刷机内容参见下方工具包:壹码通 EM-6621 模组固件更新工具,这里记录一下因为使用了串口工具,在未关闭串口情况下进行刷固件的失败的提示。


三、ASCII码一览表,ASCII码对照表

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。

ASCII 编码于 1967 年第一次发布,最后一次更新是在 1986 年,迄今为止共收录了 128 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 1234567890)、标点符号(,.!等)、特殊符号(@#$%^&等)以及一些具有控制功能的字符(往往不会显示出来)。

ASCII 编码是美国人给自己设计的,他们并没有考虑欧洲那些扩展的拉丁字母,也没有考虑韩语和日语,我大中华几万个汉字更是不可能被重视。计算机也是美国人发明的,起初使用的就是 ASCII 码,只能显示英文字符。各个国家为了让本国公民也能正常使用计算机,开始效仿 ASCII 开发自己的字符编码,例如 ISO/IEC 8859(欧洲字符集)、shift_Jis(日语字符集)、GBK(中文字符集)等。

<
ASCII 编码一览表
二进制 十进制 十六进制 字符/缩写 解释
00000000 0 00 NUL (NULL) 空字符
00000001 1 01 SOH (Start Of Headling) 标题开始
00000010 2 02 STX (Start Of Text) 正文开始
00000011 3 03 ETX (End Of Text) 正文结束
00000100 4 04 EOT (End Of Transmission) 传输结束
00000101 5 05 ENQ (Enquiry) 请求
00000110 6 06 ACK (Acknowledge) 回应/响应/收到通知
00000111 7 07 BEL (Bell) 响铃
00001000 8 08 BS (Backspace) 退格
00001001 9 09 HT (Horizontal Tab) 水平制表符
00001010 10 0A LF/NL(Line Feed/New Line) 换行键
00001011 11 0B VT (Vertical Tab) 垂直制表符
00001100 12 0C FF/NP (Form Feed/New Page) 换页键
00001101 13 0D CR (Carriage Return) 回车键
00001110 14 0E SO (Shift Out) 不用切换
00001111 15 0F SI (Shift In) 启用切换
00010000 16 10 DLE (Data Link Escape) 数据链路转义
00010001 17 11 DC1/XON
(Device Control 1/Transmission On)
设备控制1/传输开始
00010010 18 12 DC2 (Device Control 2) 设备控制2
00010011 19 13 DC3/XOFF
(Device Control 3/Transmission Off)
设备控制3/传输中断
00010100 20 14 DC4 (Device Control 4) 设备控制4
00010101 21 15 NAK (Negative Acknowledge) 无响应/非正常响应/拒绝接收
00010110 22 16 SYN (Synchronous Idle) 同步空闲
00010111 23 17 ETB (End of Transmission Block) 传输块结束/块传输终止
00011000 24 18 CAN (Cancel) 取消
00011001 25 19 EM (End of Medium) 已到介质末端/介质存储已满/介质中断
00011010 26 1A SUB (Substitute) 替补/替换
00011011 27 1B ESC (Escape) 逃离/取消
00011100 28 1C FS (File Separator) 文件分割符
00011101 29 1D GS (Group Separator) 组分隔符/分组符
00011110 30 1E RS (Record Separator) 记录分离符
00011111 31 1F US (Unit Separator) 单元分隔符
00100000 32 20 (Space) 空格
00100001 33
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值