工作任务 #2151
由 刘俊锋 在 10 个月 之前添加.
更新于 4 天 之前.
描述
1.开发硬件环境为:RK3568板卡
2.开发语言:C++
3.开发工具:QT
4.功能说明
(1)支持Modbus通讯
(2)支持读写数据库
(3)通过Modbus读取设备信息,写入到数据库中
(4)读取数据库中语音控制单元的数据,处理并执行相应指令
(5)读写RFID功能;人脸识别功能
(6)控制GPIO
历史记录
1.虚拟机与主机通讯设置,已将设置方法写到文档中
2.编写KIDPServer开发设计文档
3.QT封装通讯类,目前已封装TCP/IP通讯类
1. KIDPServer 封装Modbus通讯类
(1)增加ModbusTcp调试界面
(2)封装ModbusTcp读数据方法:读线圈,读保持寄存器,读输入寄存器,读离散输入值
(3)测试读数据:读保持寄存器正常,读其它类型寄存器还有问题
更新ModbusTcp类
(1)完成读int、short、float、double、string,bool读取还有问题
(2)完成写int、short、float、double、string,bool写还有问题
1.完成ModbusRTU类的封装
2.更新ModbusTcp类
3.新增测试窗体类ModbusDebugForm
1. 搭建主程序界面,解决在添加界面文件后编译正常,但是一直无法启动调试的问题
2. 新增设备信息界面,仅布局未实现功能
3. 新增系统控制界面,仅布局未实现功能
4. 新增语音单元界面,仅布局未实现功能
5. 新增传感器界面,仅布局未实现功能
1.更新设备信息页面,实现读取数据库并刷新显示界面设备信息部分
2.更新系统控制页面,实现读写设备信息部分数据库
3.更新KSqlite类
(1)增加获取指定表格全部数据的方法
(2)增加获取指定表格所有列名(字段)的方法
(3)修改更新数据函数,实现更新数据的功能
1.实现系统日志页面读取数据库表格内容并刷新显示到界面上的功能。
2.实现传感器页面读取数据库表格内容并刷新显示到界面上的功能。但是界面上的按钮还未实现功能
3.新增分页控件
4.新增可分页的表格控件
1. 修改modbus界面,增加部分方法
2. 完善自定义表格控件,增加部分方法
3. KSQLite类增加筛选的方法
1. 新增主窗口界面按钮图标
2. 更新KModbusWorker类,增加部分方法
3. 更新KDataBase类,增加单独查询Modbus地址的方法;增加获取指定数据表格列头的方法;
4. Modbus模块界面实现切换显示Tcp部分数据和RTU部分数据;
5. Modbus模块界面实现双击选中显示指定连接数据
1. 新增Modbus连接参数设置界面:KPLCTcpParamBox和KPLCSearialParamBox
1. 实现添加modbus连接
2. 实现添加地址等参数,增加设置界面
3. 更新数据库操作类,实现添加数据,删除数据
1. modbus模块实现修改更新地址、数据类型、数据长度、数据值、启用状态等参数
2. modbus模块实现读取数据库中所有地址对应寄存器值的功能
3. modbus模块实现读取数据库中所有地址参数并写值到PLC的功能
4. 解决表格中显示的列头排序不对的问题
5. 解决表格内容没有翻译的问题
6. 实现表格参数可以使用下拉列表类型的功能
1. 开发板环境搭建,安装编译代码过程中遇到的缺少的qt模块
2. 编译QMqtt,已成功编译并能成功运行例程。成功与另外一台电脑进行MQTT通讯
3. 成功在开发板上编译KIDPServer源码,并成功运行程序
1.新增自定义队列类KBlokingQueue,用于处理多指令任务,防止任务丢失
2.新增自定义线程池类KPoolTask,用于处理并发任务
3.新增通讯命令任务类KCommandTask,用于处理通讯命令
4.设计数据库,新增表dev_command;原设备信息表dev_information新增字段“设备状态”
5.调整主程序工作线程实现方式,改为开启两个线程,一个用于读取数据库数据、通讯指令、设备硬件信息等,另外一个线程用于处理通讯指令任务
1.新增Modbus线程类KModbusThread,解决在多线程中Modbus通讯失败的问题
2.实现循环读取Modbus地址功能
3.通过信号和槽的方式实现界面交互,实现控制写寄存器功能
4.通过线程池的方式实现区分通讯命令,Modbus部分实现更新连接参数并进行连接判断,若没有连接则自动连接一次
1.取消Modbus线程类KModbusThread,功能合并到KModbusWorker类中
2.新增信号类KSignalCollect,用于后面命令执行
3.实现Modbus连接通讯、断开连接、更新需读地址参数、写数据等命令触发功能
1.调整设备信息界面
2.在板卡中调试
(1)修复数据库打开失败时会导致软件崩溃退出的问题
(2)测试并增加获取CPU信息、内核信息、内存信息、网络信息等方法
(3)测试获取GPIO信息,目前已测试手动通过命令行的方式可以实现添加GPIO单个引脚的映射,但是在代码中无效果,还未找到方法
在板卡中测试获取网口地址信息,修复获取信息异常的问题
1.新增信号灯控件KSignalLight,目前在GPIO状态显示处有使用
2.查找资料,编写并测试映射GPIO的脚本,已完成脚本内容编写,并测试可用
3.在QT中实现执行映射GPIO的脚本,并实现传入参数
4.编写并测试设置GPIO输出的脚本
一更新智能传感界面
1.新增筛选条件用于筛选显示
2.增加读取标cfg_global,新增字段用于设置扫描频率
二、更新语音单元界面
1.实现添加数据到数据库
2.实现删除数据
3.实现筛选显示
4.更新KSqline类,修复添加新行数据失败的问题
1.设置sensor关联表
2.更新KDataBase类,增加读取sensor历史记录表和关联表。删除部分冗余的函数。
3.通讯指令表增加指令GPIOWrite
4.更新工作线程和指令执行线程,增加执行GPIOWrite指令
5.增加在初始化时判断并进行GPIO映射
1.更新KDataBase类,删除部分冗余的函数,数据库操作对象和表名称的成员变量改为使用QMap
2.新增窗体SensorLinkForm,用于设置智能传感各个字段的关联信息。目前仅能同时使用一种通讯方式来关联数据
2024/09/28
一、更新KIDPServer
1. 在工作线程类中增加跟进传感器关联表获取对应的数据,并写入到传感器数据表和传感器历史表中
2. linux下增加设置数据库文件为固定路径
二、硬件连接人脸模块,测试使用。但是按照完环境后运行失败,联系了王伟,明天让他看一下怎么弄
2024/09/29
更新KIDPServer
1. 测试板卡人脸识别模块,例程以及跑通。但是功能和我们的需求不符,已联系赵工,后续需要修改驱动
2. 测试板卡RFID模块,目前还有没能跑通例程。
3. 尝试调用人脸识别的C代码,在运行过程中无法正确返回结果,目前还没找到原因。
2024/10/08
(1)新增循环读取线程类KLoopReadThread,用于循环读取数据。目前已添加读取传感器数据和GPIO状态
(2)在KCommandTask中增加语音播报命令
(3)新增MQTT工作类,增加连接、断开、订阅、发送等函数,但是在编译的时候报错,还在找原因。
2024/10/09
1.取消引用KMQTT库,改为将KMQTT的头文件和源文件添加到主程序中进行使用
2.更新MQTT页面
2.1.实现初始化获取MQTT连接参数数据库表内容和获取主题表内容
2.2.实现连接和断开
2.3.实现订阅和退订,实现刷新显示所有相关的主题
2.4.实现发送数据
2024/10/10
1.更新传感器页面,修复设置扫描频率时没有写入时间到数据库表,到时网页打开失败的问题。
2.更新MQTT页面
2.1.增加删除订阅按钮
2.2.增加在连接成功后订阅所有主题
3.更新人脸识别类,实现注册和识别两个功能。目前通过点击按钮来触发功能执行
4.新增RFID功能类,主界面菜单中新增RFID读取函数
5.通讯命令类中增加在初始化的时候更新一遍数据表,目的是防止数据库表没更新导致通讯命令不存在的问题
2024/10/11
1.更新人脸识别类
1.1.增加获取当前检测结果,目前返回的信息是人脸对应注册时的username
1.2.注册人脸函数容易失败,可能会出现循环卡死的问题。还未找到原因
1.3.匹配人脸函数已测试,目前在已注册好人脸的情况下,基本都能识别成功并返回username
2.更新通讯任务线程类,增加读写用户表,将人脸注册信息和匹配信息写入到用户表中
2024/10/11
一、更新KIDPServer
1.更新人脸识别类
1.1.已测试通讯命令类中注册和匹配的函数,通过线程池来控制,测试过程中没出现由于read导致卡住的问题
1.2.修复获取已注册总数一直返回0的问题
2.在KGlobalValue类中增加日志队列
2.1.目前日志队列在KWorkerThread工作线程中进行出队执行,当前仅刷新显示主界面的状态栏
3.主界面增加定时器,用于在右下角显示当前内存占用情况
二、在板卡中测试使用第三方软件打开摄像头采集图像,已可以实现采集图像。
2024/10/14
1. 测试板卡调用摄像头的网页例子,修改脚本,目前已可以成功打开网页并显示视频
2. 与赵工沟通处理板卡RFID例程运行无反应的问题,目前仍未能解决
2024/10/15
1. KIDPServer更新通讯命令执行函数,增加反馈RFID和人脸识别的结果
2024/10/16
1.修复循环读取线程KLoopReadThread没有启动的问题,修复没有新增传感器历史积累的问题;
2.新增日志线程类KLogThread
3.通讯命令类中实现MQTT部分内容
2024/10/17
1. 测试在软件中调用网页打开摄像头,后面发现mjpg-streamer是一个服务,只需要在开机或者第一次打开软件的时候启动服务就行。但是这样好像摄像头就会一直开着。
2. 查找资料是实现在软件中通过接口截取一帧图片出来
3. 新增窗体DialogFaceCamera,用于调试使用人脸摄像头。成功获取到图像数据,但是在显示的时候遇到问题,还未解决。
2024/10/18
实现人脸摄像头获取到图像数据并显示在界面上
1.修改语音单元界面,取消原本各个字段的输入框,改为增加一个参数边界窗体来设置参数
2.区分添加和编辑,点击添加按钮时编辑窗口不能关联地址;点击编辑按钮时编辑窗口才能关联地址
1.初始化时增加打印日志,增加打印部分运行日志
2.实现语音单元串口通讯在重启软件后自动连接
3.新增读取数据表-dev_status,用于存放设备状态、报错信息和关联信息
4.新增设备状态界面,已实现添加、删除、修改、刷新,实现关联地址等
4.1.循环从关联地址获取数据然后写入到dev_status表中的功能还未实现
5.更新数据库设计文档
1.实现循环从关联地址获取数据然后写入到dev_status表中的功能
2.修复智能传感循环读取数据时没有将关联地址对应的数据更新到智能传感表格中的问题
3.新增数据库访问对象(KSqlite),新增枚举值SqlSystemCommand,用于工作线程中通讯指令访问数据库
3.1.避免多个不同线程同时调用同一个数据库访问对象导致冲突报错
4.取消读取Modbus地址值时打印的日志
5.修复串口通讯连接时参数类型转换异常导致接收数据异常的问题
1.KIDP和KIDPServer联调测试
1.1.测试人脸识别模块调用会崩溃的问题,修改了函数,跑了几次没有出现崩溃。待长时间测试。
1.2.在人脸匹配时有时会返回乱码,还在查原因。
2.今天测试发现RFID模块硬件连接的i2c地址会变,已反馈问题给赵工
1.新增全局日志类,将添加日志的方法从g_value中分离开来
2.更新KFaceRecognition类
2.1.解决重复点击注册或者匹配后会异常导致不触发摄像头动作的问题
2.2.修改执行册或者匹配时可能会出现程序崩溃的问题。目前多次测试暂时没有再发现有崩溃的情况出现
2.3.修改获取匹配结果信息的起始位置,当前不获取匹配结果用户ID
KIDPServer生成Release版本,并打包部署文件
1. 修复在release模式下构建正常,但是运行报错的问题。
2. 修改运行过程中内存会一直增长的问题,待长时间运行测试
3. 在arm板上release模式构建正常,目前打包环境文件失败,安装打包依赖库的程序失败。目前可以通过手动设置环境变量、依赖库查询路径的方式来实现直接运行KIDPServer,只是有点麻烦。
1.测试排查KIDPServer内存泄漏问题
(1)修改线程循环读取Modbus数据的函数,将所有QList,QMap等类型的局部变量都手动进行清空
2.远程给筑梦那边测试电脑上部署KIDPServer
(1)打包部分库依赖库
(2)配置测试板卡的环境
(3)运行程序时报错:板卡系统中部分库的版本太低。用命令升级失败,考虑在我这边的板卡中打包所有的依赖库,明天在远程测试一下
1.修改人脸识别模块得实现方式
1.1.取消原C代码中循环读取串口内容,目前尽在C代码类KFaceRecognition中实现发送注册、匹配等指令
1.2.在GlobalValue类中新增人脸识别串口类,实现获取人脸模块返回的数据
1.3.在mainwindow中实现处理人脸模块返回的数据,并更新到数据库中
1.将所有线程类、工作类、database、mainwindow中函数内的QMap、QMulitMap等局部变量都改为指针,然后在使用完之后马上delete
1.1.排查出在读写数据库时使用了很多QMap、QMulitMap、QVector,都没有释放内存。增加手动释放了内存泄漏问题有明显改善
1. 备份SD卡资料
2. 用赵工给的系统镜像制作SD卡启用盘
3. 备份板卡的Ubantu系统数据
1.解决读modbus定时器事件会导致内存泄漏的问题。
1.1.定位到问题是QList等不能用局部变量、不能在循环中频繁的new和delete,这样都会导致内存泄漏
1.2.对应这里需要复用的变量,需要创建一个全局变量来使用
在SD卡启动盘中测试解决KIDPServer在新系统环境中发布部署问题
1.安装QT,然后直接运行KIDPServer可执行程序,运行失败,仍然报错
2.传入KIDPServer源码,编译失败。排查问题发现需要额外安装serialport、serialbus、private-dev等环境
3.安装完qt环境后变成源码,仍然编译失败。排查问题发现是使用的QtMqtt需要将头文件放到qt的安装路径下
4.配置完QT所有环境后测试直接运行KIDPServer可执行程序,可以运行
5.备份SD卡系统
6.联系筑梦王伟,让其下周一准备好SD卡等硬件,然后尝试将备份系统烧录到筑梦那边的板卡上
1.测试在不安装QT得情况下是否运行KIDPServer,已测试可以不安装QT,只需要按照额外的几个环境就可以
2.编写KIDPServer部署文档;编写设置库文件查询路径的脚本
3.整合KIDPServer发布文件和KIDPWeb发布文件
4.远程给筑梦那边的板卡部署KIDPServer
1.RFID增加读取global表,获取设备连接的口
2.修复发送命令行无效的问题
1. 解决KIDPWeb给RFID和人脸注册信号但是KIDPServer没反应的问题
2. 增加获取系统总内存使用率,增加判断当大于等于百分之八十时释放一次系统内存
3. KIDPServer增加加密功能
1. 更新KIDP发布资料:更新KIDPServer、更新部署文档。重新打包好资料发给王伟
2. 测试烧录镜像,按鲁班猫官网上提供的方法进行测试,结果是:
(1)官方提供的系统镜像都可以成功烧录到板卡中
(2)用板卡生成的系统镜像,使用官网上提供的几种方法进行烧录,结果都是无法开机。感觉应该是生成的镜像文件的问题,但是生成板卡系统镜像的方法步骤也是按官网文档来的,目前不知道问题出现在哪里。
KIDPServer
1. 编写与测试部署脚本
(1)新增离线部署脚本kidp_publish.sh,查找并打包所有依赖库的离线安装包
(2)新增在线部署脚本kidp_publish_online.sh
(3)上述两种方式都可以成功部署KIDPServer,但是KIDPWeb部署失败,还在找原因
2. 修改KIDPServer加密函数,修复获取MAC地址时会有重复获取的问题
1.更新KIDPServer,修复使用RFID功能偶尔会导致软件闪退的问题
2.查找在板卡中桌面应用程序开机自动启动的设置方法,找到了几种方法都尝试过,都有问题。都是必须要先登录进入桌面
3.查找并测试开机自动登录进入桌面的方法,测试了使用脚本和命令的方式,都不能实现功能。最后找到一种方法是进入板卡程序里面使用系统程序进行设置,设置完之后后面开机都能自动进入桌面
4.测试语音模块
(1)根据教程配置并生成发布新固件
(2)测试烧录新固件。已成功烧录,测试了可以识别新的语音命令
2025/02/12
1. 更新KIDPServer数据库设计文档
2. 更新KIDPServer设计文档
2025/05/06
1.Socket通讯增加在写数据时判断连接是否断开,如果断开就重连一次并在重连成功后自动发送数据
2.Modbus通讯增加在写数据时判断连接是否断开,如果断开就重连一次并在重连成功后自动发送数据
3.MQTT通讯增加在写数据时判断连接是否断开,如果断开就重连一次并在重连成功后自动发送数据
导出 Atom
PDF