市面上有很多这种组态屏,界面设计在电脑端上位机完成,包括按钮控件、文本控件等只需拖放到对应位置即可,界面设计好后下载到组态屏上,看到的就是电脑中设计的样子,还能完成人机交互(如切换页面)而不需要其他控制器。这种屏的好处就是UI设计是独立的,客户无需关注UI到底要怎么实现,只需通过通信的方式去操作组态屏就可以了。
买过一个组态屏,分辨率是320*240,整个屏只有一个STM32F030控制器。很好奇,这么一个MCU,是如何实现将上位机制作好的界面给重现出来,并且还可以实现交互动作呢?
我个人猜想,上位机设计好每个页面后,应该生成了一系列页面元素的控件类型、位置、大小、颜色等信息,并把这些信息传输给组态屏的控制器。控制器通过读取这些元素描述,动态的在页面上绘制出这些控件。
但我有几个问题不明白。第一,就是平时我自己写GUI程序时,比如用emwin,在显示屏上创建控件都是直接用代码编写的,控件都是先定义好的,通过编译后,控件什么的也就定死了。但这个屏,貌似单片机程序是固化的,只需上位机软件传输一些不知道是什么数据过去,就能动态的创建各种控件,那到底是如何实现动态创建控件呢?或者换句话说,如何做到单片机程序固定,UI可变,即程序和UI是彻底分离的?
第二,就算我通过读取控件描述实现了控件绘制,那控件执行的事件(如按键触摸),到底又是如何在固化好的单片机程序中执行起来的呢??还是说,其实这个组态设计软件其实内含编译功能,会将UI跟单片机程序重新进行编译,每次下载进单片机的其实是重新刷新固件?但我问过一些相关人士,他们给出了否定的答案,单片机程序就是固化的。。。
第三,如果真是解析运行,STM32F030这种单片机内存也不大,运行速度也不低,居然运行挺流畅。。连我在裸机时代要实现变化的文本透明底色的功能,在他这里也仅仅是上位机设定一个属性就解决了。。。
网上貌似找不到相关的资料,特来问问大伙,有人知道这种组态屏,到底是怎么实现的吗?