发 帖  
原厂入驻New
[经验]

【大联大世平 NXP i.MX RT1064开发板试用体验】作品:EXC HMI人机交互界面

2020-11-15 18:19:49  59
分享
0
(一)项目概述
在各类工业设备上,目前应用较多的HMI设备是威纶通、Proface、施耐德等组态屏幕,它们拥有完整的工业应用组件,和各种兼容性强的通讯协议支持以及广泛的生态,组态模式支持下可以令对编程接触不深的机电从业者快速上手。
但其弊端也明显,组态屏幕虽然功能强大,兼容丰富,但同时也意味着不必要的价格付出,对于相对简单的应用环境,如果使用昂贵的组态屏幕未免大材小用。
其次,组态本身对于嵌入式开发者来说并不算灵活;功能实现也不直观;无法对底层进行深度优化、启动速度慢,无法做到实时操作系统甚至裸机设备瞬间启动的效果;无法按需求配置各类分辨率、大小、电容触摸等因素。
以上都提出了一个低成本、灵活的HMI方案的需求。

(二)软件设计方案
(1)-LittleVGL
Littlevgl是目前最主流的开源嵌入式GUI之一,在更新迭代上基本上半个月一个版本,具有强劲的后发力,其协议宽松,可以商用闭源,移植方式简洁明了,被我选作本次项目的GUI框架。
相关的屏幕驱动与 LittleVGL 移植可以看我之前的帖子。
RGB屏幕驱动+SDRAM加速
LittleVGL 显示移植
LittleVGL 触摸移植
SDRAM与图像优化显示

(2)-modbus rtu
走串口的modbus,通过232 DP9接口,连接主机与从机,底层通讯协议为UART。
为了保证modbus传输的实时性,避免界面应用占用资源时导致modbus传输卡顿,采用DMA传输UART接收信息+UART空闲中断处理数据。
UART+DMA:【不知道为什么,我写这部分帖子的时候一直发不出来,写多少吞多少,感觉冥冥中有什么神秘力量在干扰,所以这部分就暂时空缺,后面再补上。】

流程:
1-定时器100ms为周期中断,服务函数内加载发送数据队列。

2-主循环处理发送数据队列->查询队列内是否有需要发送的数据->完成延时计数->通过阻塞UART发送,发送完成后启动UART接收、启动UART空闲中断、启动DMA传输->UART空闲中断服务置位周期传输完成标志位

3-主循环中判断周期传输完成标志位->置位则获取缓冲数据->刷新界面

4-空闲中断接受判断流程:
接收数据格式是否错误?
错误则关闭UART空闲中断、DMA传输、UART接收;没有错误->是否接收完成?
完成则将数据送入缓冲;没有完成->是否溢出?
溢出则关闭UART空闲中断、DMA传输、UART接收;没有溢出->结束,等待下一次空闲中断

代码托管在GITEE上:
https://gitee.com/tinnu/exc_screen_littlevgl_rt1064/tree/master2
有一个用于开发时上位机仿真 LittleVGL 的Qt工程:
https://gitee.com/tinnu/EXC_Sreen_LittelVGL_Simualtion


(三)硬件设计方案
设计一个arduino接口方案的扩展板,支持232、485、ttl各种串口接口。
232、485主控芯片使用国产IC思瑞浦的TP3232、TP8485,40V-9V降压到5V采用国产IC芯龙的XL1508,可以支持工控常见的24V、12V电源为整个系统提供高达2A的电流。
硬件方案.jpg SCH.png PCB.png

(四)实验方案
上位机使用Qt编写一个modbus从机端,可以任意修改数据,并且对部分写命令有反应,能够模拟起励过程
源码:https://gitee.com/tinnu/qt-modbus-slaver
通过485通讯的演示后面补上,目前程序是支持基于(三)方案设计的硬件扩展版的485通讯。

(五)演示效果:
1[00_00_00--00_00_20].gif

2[00_00_00--00_00_20].gif

3[00_00_00--00_00_20].gif

4[00_00_02--00_00_22].gif
(抱歉,搞了很久都没办法把gIF倒过来)

https://v.youku.com/v_show/id_XNDk2NDM3NjM5Mg==.html

https://v.youku.com/v_show/id_XNDk2NDM3NzIwMA==.html

只有小组成员才能发言,加入小组>>

95个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表