一、立项背景和目标:
为顺应国家国产化发展,公司智能柜系统需做国产化升级改造,使系统可以运行在基于龙芯,飞腾,海光的麒麟、统信、方德操作系统上
二、智能柜核心功能模块介绍:
硬件由自助操作平台和智能柜组成
功能包括:
1、自助操作平台认证
2、到件查询,选择取件并打印凭证
3、文件登记与投件
三、业务流程、功能路径描述
投件流程:
1、用户在自助操作平台,登记文件信息,选择投递部门或人员,并生成印有二维码的rfid
标签,贴在文件上。
2、在智能柜扫描以上生成的条码,系统根据登记的部门或人员,打开智能柜分控的投递口,用户投入文件,系统通过投递口的红外检测装置检测文件是否正确投入,并再用rfid进行盘存,已保证文件被正确投入箱格,并记录投入信息
3、系统连接短信发送系统给客户发送提示信息。
取件流程:
1、客户在自助操作平台凭借取件卡或人脸识别或者指静脉方式进行认证识别用户,系统根据用户查询其所属箱格中投入的文件并用列表展示。
2、用户可选择取件,智能箱弹开箱门,用户取件后关闭箱门后,系统根据文件标签上的rfid信息判断文件是否被取走,然后在系统中标记文件被取走
一、整体架构和设计思路,不同模块使用的技术栈
1、硬件通讯:自助操作平台通过网络与各智能柜的主控板(龙芯2k1000)连接,又龙芯主控板通过rs485于各个分控通讯。
2、自助操作平台使用的是基于龙芯3a4000的处理器的麒麟系统,界面使用qt开发,人脸识别使用opencv,读卡器使用串口,指静脉使用usb的hidpos接口,认证信息通过http传递给后台rest服务获取json信息,包括人员信息和可取文件信息。当用户点击取件,自助控制平台通过tcp/ip与智能箱的主控单元(龙芯2k1000)通讯,智能柜再通过2k1000的rs485接口使用modbus协议与智能柜的11个分控进行通讯,智能柜主控单元的主要作用,扫描条码,控制分控开门取件、投件挡板,状态灯和分控的lcd显示,接收并解析来自自助操作平台的命令。
二、我负责的模块和结果
1、我负责编写自助操作平台qt的交互界面,设置和测试模块,认证模块(包括opencv人脸识别、刷卡器和指静脉的认证),后台rest交互,与智能柜的tcp/ip的数据交互,还有打包
2、还有智能柜qt界面,设置和测试模块,认证模块,串口通讯模块,tcp/ip模块,还有打包
3、客户端的自助平台是一个web界面,因此调用打印机和扫描枪使用插件形式,我负责插件的开发和打包
三、我遇到的难点、坑、和解决方案
我编译太多的库没有记录详细的解决方法,只是概括了一些常见的问题及解决思路可以解决80%的问题:
1、由于系统要运行在基于龙芯、飞腾、海光处理器的麒麟和统信系统上,因此需要在几个平台分别编译,遇见最多的就是缺少依赖库需要使用apt 下载好依赖的deb包,然后考到打包目录。
2、打包的文件在在某些系统上会报libc版本错误,这是由于我编译使用的系统libc版本太高了导致的,如果功能允许尽量选择内核版本低的系统(自带libc版本也不会高)编译的动态库可移植性比较好。因此我最常使用的编译系统是ubuntu18.04
3、还有一部分编译报错是系统环境变量没有配置好,比如opencv如果编译需要依赖,java 和ant,但是这是opencv的java版本需要的,我们不需要就可以把这部分去掉,或者自己配置好这些环境
4、串口通讯的数据不是每次获取的都是一个完整的包,可能出现分开的包或者粘包的现象,这就需要根据消息头和长度分析数据的完整性再处理,不然很容易就丢包。
5、在构造函数和析构函数中打印日志是一个很好的习惯,可以解决很多内存释放问题,还有尽量使用智能指针。