几年前基于stm32平台做过一套简单的组态程序,基本上能满足公司项目的需求,但是对于一些复杂的功能需求,这套软硬件就显得爱莫能助了,并且stm32是在全裸机的条件下开发,整套工程导出需要借助上位机开发的界面编辑软件通过USB读写,很是麻烦。一个看似简单的控件绘图,可能需要编写大量的程序。一直想着尝试在QT环境下来做一套功能升级的替代。直到看到这款[color=inherit !important]OK3399-[color=inherit !important]C,不管是硬件资源还是性能,都很合适。大致罗列一下我想到的一些基础控件:


1、 按键(分普通按键和带状态锁的)

2、 动态数据显示控件

3、 静态文本显示控件

4、 仪表

5、 柱状图

6、 曲线图

7、 状态显示

8、 表格

9、 脚本执行器

10、…


本次时间有限,先实现了三个控件的显示:1、两态按键(能绑定图片和报警信号,区分点击状态,释放状态和报警状态)2、仪表(能设置仪表盘的角度区间和量程区间,表盘颜色,指针颜色等)3、曲线图,能设置图标颜色,曲线颜色,X轴测量周期和Y轴测量值范围等。
按键和仪表均通过QPainter实现,曲线图表初次尝试使用QT的可视化视图实现(貌似做动态曲线不太方便,X轴刻度想做成自定义格式比较麻烦,先凑合用吧,后面再改),使用QT的可视化试图需要安装QtCharts包,OK3399-C提供的QT是不包含此包的。安装QtCharts的方式如下

1、从github克隆源码包
git clone https://github.com/qtproject/qtcharts.git

2、检出版本分支
git checkout 5.7(一定要做这一步)

3、执行qmake

4、执行make

5、执行安装
make install

打开QtCreator
新建工程,ui界面类型选widget和mainwindow均可,名字随意
QT工程中用Qtcharts需要对pro文件进行设置
添加 QT +=  chart

f_695f554725d08376f4534a4bcbd77ea2&t=png&o=&s=&v=1601264530.jpg

我的ui是mainwindow,尺寸选择1024x600,在mainwindow窗体添加QLable作为所有控件的父控件。

f_d7a6c34dcc2e9acc339d14df1d93f1e3&t=png&o=&s=&v=1601264530.jpg
按键,仪表,曲线图控件分别以三个类的方式实现,代码结构如下:

f_9171eb03d4454da6b9f3853c8c01a6fb&t=png&o=&s=&v=1601264530.jpg

控件在窗体中的拖动通过捕获鼠标事件实现,控件最终运行效果如下:
f_a41fb72654b5c1c069df3d75a37d7f1a&t=png&o=&s=&v=1601264530.jpg

本次项目最终实现的三个控件功能只是组态功能中最基本的显示,曲线图的拖动效果还存在问题,后期功能开发还包括在页面编辑中通过添加不同控件并编辑相关功能,保存[color=inherit !important]数据库或配置文件,这里暂定用json来存储页面的控件配置信息。至于数据交互,暂定使用RabbitMq和共享内存的方式,通过RabbitMq可以将网络中的数据汇集到本机,本机将原始数据帧解析写入共享内存,方便应用程序的本地快速读写。