本帖最后由 donatello1996 于 2022-4-11 10:02 编辑
项目说明:使用迪文COF结构智能屏及其串口 通信接口,结合电脑端QT上位机进行基于串口通信的上位机的图表远程监控界面,图案完全由QT上位机DIY定制,省去造轮子,可以使用QT上位机的高级GUI控件如渐变图层或OpenGL,具体显示效果由迪文COF结构智能屏的显示材质所表现。QT上位机端可开发各种基于QLabel控件所显示的图案或图表,如仪表盘,折线图,AD采集曲线图, 电子罗盘等,这里为了方便就只做了仪表盘和折线图,并且QT描绘的矢量图占用空间过大,导致刷屏速率和分辨率都很低,只能做两张200*200的矢量图, 如果迪文厂家在后续扩充flash空间,则可配置更多类型的QT上位机图案或图表。
使用到的串口通信指令:
- 显示命令
- 5A A5 07 82 7F FE 5A A5 80 00
- 5A A5 07 82 BF FE 5A A5 C0 00
- 更改坐标
- 5A A5 07 82 1011 0064 0064
- 5A A5 07 82 1011 0064 0064
- 数据帧
- 5A A5 F3 82 80 00 。。。
复制代码
在DGUS软件中添加两个显示控件,两个控件的起始坐标重叠,描述指针分别为0x1010和0x2020,内存地址分别为0x7FFE和0xBFFE,使用两个控件更改坐标交替显示图案和图表可以实现双缓冲效果。
使用到的QT上位机图案:
仪表盘:
仪表盘支持OpenGL加速,渐变图层显示。
折线图:
折线图为矢量图表,可以任意描绘坐标点。
本来我是打算做AD采集的波浪曲线图的,但是无奈矢量曲线图占用空间真的大,采集一帧600*400曲线图的JPG文件都达到了100K以上,只能用这种显示内容简单的折线图。
仪表盘和折线图内容均取自QT上位机,可以在上面做基于XML或QTWidget套件操作,因为懒得造轮子,又想显示的内容够精美,只能出此上策!
原计划是打算显示AD采集曲线的,但是这个矢量图的占用空间是真的大,没写一点点进去就已经刷满GRAM了:
QT代码中抓取单个LABEL标签为JPG文件,并将JPG文件分片通过串口上传到GRAM:
- void MainWindow::on_PB_GRAB_clicked()
- {
- int res = 0;
- unsigned char recvbuf[6] ={0};
- unsigned char commbuf[246] =
- {0x5a , 0xa5 , 0xf3 , 0x82};
- unsigned short word_offset = 0x8000;
- 。。。
- if(fileName.isEmpty())
- {
- QMessageBox mesg;
- mesg.warning(this,"警告","打开图片失败!");
- return;
- }
- else
- {
- QFile file(fileName);
- QImage img(fileName);
- file.open(QIODevice::ReadOnly);
- while(1)
- {
- memset(commbuf , 0 , 246);
- commbuf[0] = 0x5a;
- commbuf[1] = 0xa5;
- commbuf[2] = 0xf3;
- commbuf[3] = 0x82;
- commbuf[4] = ( word_offset & 0xff00 ) >> 8;
- commbuf[5] = word_offset & 0xff;
- res = file.read((char*)commbuf + 6 , 240);
- if(res < 240)
- {
- qDebug("res = %d eof" , res);
- break;
- }
- else
- {
- word_offset += 0x78;
- }
- QString qscommbuf;
- for(int n = 0 ; n < sizeof(commbuf); n++)
- {
- qscommbuf += QString().sprintf("%02x", (unsigned char)commbuf[n]);
- }
- qDebug()<<"res =" << res << qscommbuf;
- res = commt->sendMyComm(commbuf , 246);
- qDebug()<<"ressend =" << res;
- }
- file.close();
- }
- }
复制代码
- void MainWindow::on_PB_GRAB_2_clicked()
- {
- int res = 0;
- unsigned char recvbuf[6] ={0};
- unsigned char commbuf[246] =
- {0x5a , 0xa5 , 0xf3 , 0x82};
- unsigned short word_offset = 0xC000;
- 。。。
- if(fileName.isEmpty())
- {
- QMessageBox mesg;
- mesg.warning(this,"警告","打开图片失败!");
- return;
- }
- else
- {
- QFile file(fileName);
- QImage img(fileName);
- file.open(QIODevice::ReadOnly);
- while(1)
- {
- memset(commbuf , 0 , 246);
- commbuf[0] = 0x5a;
- commbuf[1] = 0xa5;
- commbuf[2] = 0xf3;
- commbuf[3] = 0x82;
- commbuf[4] = ( word_offset & 0xff00 ) >> 8;
- commbuf[5] = word_offset & 0xff;
- res = file.read((char*)commbuf + 6 , 240);
- if(res < 240)
- {
- qDebug("res = %d eof" , res);
- break;
- }
- else
- {
- word_offset += 0x78;
- }
- QString qscommbuf;
- for(int n = 0 ; n < sizeof(commbuf); n++)
- {
- qscommbuf += QString().sprintf("%02x", (unsigned char)commbuf[n]);
- }
- qDebug()<<"res =" << res << qscommbuf;
- res = commt->sendMyComm(commbuf , 246);
- qDebug()<<"ressend =" << res;
- }
- file.close();
- }
- }
复制代码
更改显示坐标,实际上就是切换隐藏或显示图案:
- void MainWindow::on_PB_MOVE_11_clicked()
- {
- unsigned char commbuf[246] =
- {0x5A , 0xA5 , 0x07 , 0x82 , 0x10 , 0x11 , 0x00 , 0x00 , 0x00 , 0x00};
- int res = commt->sendMyComm(commbuf , 10);
- qDebug()<<"ressendshow =" << res;
- }
复制代码
- void MainWindow::on_PB_MOVE_12_clicked()
- {
- unsigned char commbuf[246] =
- {0x5A , 0xA5 , 0x07 , 0x82 , 0x10 , 0x11 , 0x02 , 0xd0 , 0x02 , 0xd0};
- int res = commt->sendMyComm(commbuf , 10);
- qDebug()<<"ressendshow =" << res;
- }
复制代码
- void MainWindow::on_PB_MOVE_21_clicked()
- {
- unsigned char commbuf[246] =
- {0x5A , 0xA5 , 0x07 , 0x82 , 0x20 , 0x21 , 0x00 , 0x00 , 0x00 , 0x00};
- int res = commt->sendMyComm(commbuf , 10);
- qDebug()<<"ressendshow =" << res;
- }
复制代码
- void MainWindow::on_PB_MOVE_22_clicked()
- {
- unsigned char commbuf[246] =
- {0x5A , 0xA5 , 0x07 , 0x82 , 0x20 , 0x21 , 0x02 , 0xd0 , 0x02 , 0xd0};
- int res = commt->sendMyComm(commbuf , 10);
- qDebug()<<"ressendshow =" << res;
- }
复制代码
循环显示:
- void MainWindow::on_PB_GRAB_3_clicked()
- {
- on_PB_MOVE_22_clicked();
- on_PB_MOVE_12_clicked();
- while(1)
- {
- on_PB_GRAB_clicked();
- on_PB_MOVE_11_clicked();
- on_PB_GRAB_2_clicked();
- on_PB_MOVE_21_clicked();
- Sleep(2000);
- on_PB_MOVE_22_clicked();
- }
- }
复制代码
0
|
|
|
|