当前位置:首页 > 工业控制 > 电子设计自动化
[导读]摘 要:本文介绍了一种采用Virtools 和串口通信实现人机界面交互的设计方法。下位机通过 串口通信的方式将采集的数据传给上位机,上位机通过Virtools 的行为模组对这些数据进行处理, 并根据处理结果做出响应,从而实

摘 要:本文介绍了一种采用Virtools 和串口通信实现人机界面交互的设计方法。下位机通过 串口通信的方式将采集的数据传给上位机,上位机通过Virtools 的行为模组对这些数据进行处理, 并根据处理结果做出响应,从而实现人机界面的交互。

1 引言

用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计中的重要内容之一。交互设计的目的是让用户能够简单方便地使用产品,任何产 品功能的实现都是通过人机交互完成的。现以单片机为核心的嵌入式应用中界面交互性设计为例具 体介绍其实现方法。

2 总体设计方案

总体设计方案如图 1 所示。


图 1 总体设计图

以单片机为核心的下位机主要是负责采集处理数据信息,在接到上位机的数据请求的时候发送 数据给上位机。编写上位机端的串口通信程序,用于处理串口信息并且把处理过后的消息发送给 Virtools。在Virtools 中设计消息解释执行行为模组,将解释出的相应动作信息发送给界面控制程序, 最后由其完成屏幕的输出。同时协调Virtools 中各行为模组的工作,使之达到良好的演示效果。

3 串口通信设计与实现

串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种 通信方式。这种通信方式使用的数据线少。本文的串口通信设计包括下位机端的串口通信模块和上 位机端的串口通信模块。

3.1 下位机的串口通信模块

下位机的串口通信模块通过串口完成与上位机的通信,在接到上位机数据请求后将采集的数据 信息发送给上位机。 在设计中首先设定定时器 T1 为串口波特率发生器,设定波特率为19200bps;上位机发送数据 请求后触发下位机串口中断,为了能够快速的响应上位机的请求,减少上位机的等待,将串口中断 的优先级设置为最高;下位机会优先调用通信模块响应该中断,通信模块首先判断请求消息是否正 确,在确定是正确的请求消息后,从缓冲区中取出数据,封装成一条消息M 消息码R(如M01R), 通过串口发送给上位机。通信模块具备一定过滤及容错能力。

下面重点介绍一下串口通信模块的处理方式。

串口通信模块采用中断处理方式,每完整地接收到一个字符或发送完一个字符都会触发该中断, 进入到相应的中断处理函数中。中断处理函数涉及到接收和发送两个部分,因此在中断处理函数开 始的部分就判断是接收引发的中断,还是发送引发的中断。如果是接收中断,在接收中断中每接收 一个字符都要判断,确定是否为上位机发送过来的请求消息,如果不是放弃当前接收到的内容,从 头开始接收;如果是,则响应上位机的数据请求,将接收态改为发送态,然后向上位机发送通信缓 冲区中的第一个字符,每发送一个字符会产生中断,在下次中断中再发送下一字符,按此过程直到 发送完毕。

3.2 上位机的串口通信模块

上位机的串口通信模块通过串口向下位机发送请求信息,处理下位机返回的数据信息,并将其 发送给处理这些信息的行为模组。这一过程是循环执行的。该程序是与下位机协同工作的唯一接口, 是联系界面和下位机的桥梁。它的处理流程如图2 所示。


图 2 上位机串口通信模块处理流程图

上位机的串口通信程序是通过调用 Windows 提供的有关串口操作的API 函数完成的。首先创建 了基础串口类_base_com,在其中实现基本信息配置、打开、关闭串口等基础功能。为了实现异步发 送和异步接收,在_base_com 类的基础上派生出异步串口通信类_sync_com 完成异步的数据传输。

基类_base_com 的声明如下。

class _base_com //虚基类基本串口接口

{

protected:

volatile int _port; //串口号

volatile HANDLE _com_handle;//串口句柄

DCB _dcb; //波特率,停止位,等

int _in_buf, _out_buf; // 缓冲区

COMMTIMEOUTS _co; // 超时时间

//虚函数,用于不同方式的串口打开

virtual bool open_port() = 0;

void init(); //初始化

public:

_base_com()

{

init();

}

virtual ~_base_com();

/*基本参数设置*/

//设置串口参数:波特率,停止位,等

inline bool set_para();

//支持设置字符串 "9600, 8, n, 1"

bool set_dcb(char *set_str);

//设置内置结构串口参数:波特率,停止位

bool set_dcb(int BaudRate, int ByteSize = 8, int Parity = NOPARITY, int StopBits =

ONESTOPBIT);

//设置缓冲区大小

inline bool set_buf(int in_buf, int out_buf);

//打开串口缺省 9600, 8, n, 1

inline bool open(int port);

//打开串口缺省 baud_rate, 8, n, 1

inline bool open(int port, int baud_rate);

//打开串口

inline bool open(int port, char *set_str);

//关闭串口

inline virtual void close();

//判断串口是或打开

inline bool is_open();

//获得串口句炳

HANDLE get_handle();

};

异步串口通信类_sync_com 的声明如下。

class _sync_com : public _base_com

{

protected:

//打开串口

virtual bool open_port();

public:

_sync_com();

//同步读

int read(char *buf, int buf_len);

//同步写

int write(char *buf, int buf_len)

//同步写

inline int write(char *buf)

{

assert(buf);

return write(buf, strlen(buf));

}

};

4 Virtools 中行为模组的设计与实现

下位机通过串口传输的数据,经过上位机串口通信程序转换成 Virtools 可以识别的消息,然后 交由Virtools 中的行为模组进行处理,从而达到利用外部采集数据控制界面显示的目的。

4.1Virtools 消息发送行为模组

Virtools 消息发送行为模组对串口通信模块处理得到的数据信息进行重新封装,然后发送给消息 解释执行行为模组。消息发送行为模组是使用Virtools 提供的开发工具包中相关类的方法实现对信 息的重新封装。具体实现如下:

CKBeObject *beo = beh->GetTarget(); //获取消息发送目标

if(!beo)

return CKBR_OWNERERROR;

int *tab = (int *)beh->GetLocalParameterReadDataPtr(0); //获得本地变量操作句柄

CKMessageManager *mm = BehContext.MessageManager; //消息管理对象

int temp = GetMessage(BehContext) - '0'; //调用串口通信模块读取串口消息

mm->SendMessageSingle(tab[temp],beo); //调用消息发送函数发送已经封装好的动作消息

activeOutput_0 = TRUE;

4.2 消息解释执行行为模组

消息解释执行行为模组首先从当前的消息列表中获取消息类型,根据消息类型属性中指定的特 定消息类型来判断当前到达的消息是否为该特定消息,并根据判断结果调用不同的处理模块。具体 的处理流程如图3 所示。


图 3 消息解释执行行为模组流程图

利用 Virtools 中行为模组的回调机制,循环调用该行为模组。在界面切换时检测一下消息,判 断是否与属性中设定的动作消息一致。如果一致,则向动作控制行为模组发送激活消息。

4.3 动作控制行为模组

动作控制行为模组主要使用 Virtools 自带的行为模组,像按键响应行为模组、脚本的控制行为 模组等。另外为了控制外部媒体文件的播放,还利用了Virtools 中加载资源文件、播放资源文件的 行为模组。

动作控制行为模组接收到消息解释执行行为模组发送的激活信息,就会调用相应的行为模组完 成界面的输出。

5 结论

本文从工程应用的角度,给出了基于 Virtools 和串口通信的界面交互性的设计方法,并给出关键部分的设计思路和方法。该设计方法具有一定的通用性,可应用于其它需要用户界面交互设计的 应用系统中。

本文作者创新点:串口通信下,采集下位机(单片机)传递的信息,运用 Virtools 的行为模组 进行实时处理,实现了人机界面的交互。这一设计也为其他人机界面交互性的实现提供了一种新的 思路。



来源:zhengxiaoxiao1次

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭