java硬件对接经验总结
作者:互联网
一、问题描述
项目现场需要对接硬件,机缘巧合下派我出差对接。暂定要对接读卡器和通道门两个硬件。
难点描述:
1、业务流程不清楚、数据流转来源和去向未确定,不知从何下手;
2、时间和学习成本高;
3、基本知识不懂,和硬件厂家沟通比较慢;
4、部署调试、数据交互方案设计;
总结一下就是之前没有过硬件对接经验和现场业务流程不熟悉。
二、解决思路
1、厂家有提供他们的说明文档,先把文档大致看下,然后再和厂家沟通;
2、业务和数据流转和现场的负责人沟通;
总结一下就是:不耻下问,明白自己要做什么之后再动手去做。
3、业务流程:读卡器通过usb口连接Windows电脑,读卡器刷卡,硬件后端(下面简称hardware)代码读取卡片的芯片数据,然后推送给A系统,A系统把芯片数据推送给前端展示。即:读卡器刷卡,前端页面展示芯片数据。
4、为方便大家理解业务,可以认为是运动员和工牌的证件写入和证件核验两部分。证件写入:运动员和工牌绑定;证件核验,在证件写入之后,检验芯片关联出的用户数据是否正确。
三、解决方案
1、读卡器
(1)通过串口调试工具获取到芯片数据
先用工具调试通过,学习一下指令怎么处理。
①读卡器数据交互格式:
②读卡器需要先设置读卡模式,就以这个指令来调试吧
解释:
0x代表是16进制,不用管,之后取后两位即可。如0x03,则取03.
校验字可以通过网页计算:在线疑惑计算
③使用工具发送指令:
使用的工具是,友善串口调试工具。红框设置连接参数;蓝框发送指令;黄框是响应数据
(2)代码开发及交互方案
具体代码就不再多描述了,百度一下java串口编程即可。
读卡器是一问一答模式,即发送读卡指令给读卡器,读卡器才会响应给你,即被动模式。
①hardware获取芯片:
暂定用定时任务,发送读卡指令给读卡器,读取到芯片数据则推送到mq,让A系统接收芯片数据推送给前端;
②重复推送问题:
假设定时任务1S一次,一张卡放在读卡器上10S,则hardware会读取十次芯片数据推送mq,A系统接收到mq的数据就推送给前端。从效果来说,前端没有明显的闪动,但是从交互来说,需要优化一下。即,卡放在读卡器上面10S,在此期间hardware只发送一次数据到mq里。个人的方案是,读取一个芯片数据,将该芯片数据作为key存入redis,并给一个过期时间(略大于定时任务间隔,尽量减少延迟),下次读取数据校验redis是否有该key,有的话则不推送至mq。
③hardware兼容读卡器模式:
后续和读卡器厂家沟通,读卡器升级后支持主动模式(有芯片数据,读卡器主动推送),考虑到老系统的兼容问题,即hardware要支持读卡器的主动和被动两种模式。
④数据展示和读卡器要一一对应:
前面说到,读卡器通过usb连接Windows,hardware是读取读卡器的芯片数据。则Windows、读卡器、hardware是一一对应关系,即hardware部署在有读卡器的Windows上,读卡器-A的数据只发送给hardware-A,然后在Windows-A页面展示;但是问题在于,A系统,也就是接收mq芯片数据的服务,是部署在Linux上的,也就是说A系统无法区分芯片数据是哪个读卡器读的,要推送至哪个前端页面。解决方案:hardware推送至mq的芯片数据,携带一个本机ip字段;Windows操作页面和A系统建立socket通道时,前端传参本机ip,A系统通过map保存socket通道,key为ip,value为socket。这样就能区分该芯片数据,是哪个读卡器推送,要推送至哪个前端页面,不会让数据交叉。
⑤Windows部署jar脚本(简单):
启动脚本start.bat:
@echo off
REM 指明控制台编码UTF-8
chcp 65001
REM 命令行窗口的名字
title "hardware"
REM jar包存放在Windows的绝对位置
java -Dfile.encoding=utf-8 -jar D:\IdeaWorkSpace\hardware\target\hardware.jar
pause
停止脚本stop.bat:
@echo off
REM hardware的运行port
set port=8080
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
echo kill the process %%m who use the port
taskkill /pid %%m -t -f
goto q
)
:q
2、通道门
通道门对接就大致概括下吧,通道门的作用本来我以为是最终入场的时候,运动员通过通道门,电脑屏幕显示该人员的信息。但是实际不是这么回事,通道门暂时是用来做“证件校验”的另一个方法。也就是说,人员的证件写入,芯片数据来源只有读卡器;但是证件核验,有读卡器和通道门两种。
(1)通道门对接方式是厂家的dll动态库
相关资料请百度JNA和JIA
四、总结
1、不怕任务多和难,只要有相关文档和厂家人员沟通,什么都不是事;
2、对于从未接触的领域,一定要不耻下问,不耻下问,不耻下问;
3、这次对接硬件,也是想着多接触一些技术,见见世面;
萌新发言,不喜勿喷,欢迎大佬指出不当之处!
标签:hardware,推送,java,芯片,硬件,Windows,读卡器,数据,经验总结 来源: https://blog.csdn.net/GuessBUG/article/details/115212530