当前位置:首页 > 通信技术 > 通信网络
[导读] 1 、引言 用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计中的重要内容之一。交互设计的目的是让用户能够简单方便地使用产品,任何产 品

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 的行为模组 进行实时处理,实现了人机界面的交互。这一设计也为其他人机界面交互性的实现提供了一种新的 思路。

       

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

hmi是Human Machine Interface 的缩写,"人机接口",也叫人机界面。人机界面(又称用户界面或使用者界面)是系统和用户之间进行交互和信息交换的媒介, 它实现信息的内部形式与人类可以接受形式之间的转换...

关键字: HMI 人机界面 系统

在许多领域和应用中,精确的定位变得日益重要。实时动态 (RTK)技术的定位精度明显高于传统的多GNSS系统,并且成本效益不断提高。儒卓力系统解决方案 (Rutronik System Solutions) 的专家与儒卓力...

关键字: 适配器板 嵌入式应用

芯原可扩展且灵活的DC8200 IP可提供显示设备自适应能力和高质量显示效果,赋能沉浸式视觉体验

关键字: 处理器 人机界面 RISC-V

新的STM32H7R/S微控制器将嵌入式应用性能提高到一个新水平,适合新一代智能工厂、建筑、基础设施和健康监测设备

关键字: 智能家居 微控制器 嵌入式应用

【2024年3月8日,德国慕尼黑讯】英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)推出全新车规级PSoC™ 4100S Max系列。这一微控制器器件系列具有更佳的闪存密度、通用输入输出接口(GP...

关键字: 微控制器 人机界面 闪存

新型可配置逻辑模块(CLB)提供量身定制的硬件解决方案,有助于消除对外部逻辑元件的需求

关键字: MCU 可定制逻辑 嵌入式应用

上位机串口通信是指在上位机(通常是计算机或微控制器)与外部设备之间通过串行通信协议进行数据传输和通信的过程。在串口通信中,数据以位为单位按顺序传送,通常使用一个或两个物理线路(通常是两条线)来实现数据的发送和接收。

关键字: 上位机 串口通信

SanerNow Risk Prioritization依托CISA的SSVC框架,以SecPod著名的漏洞情报为基础而创建,可有效地对漏洞、错误配置和其他安全风险进行优先级排序,并改善网络安全态势。 加利福尼亚州雷德...

关键字: 安全漏洞 SE RIO BSP

(全球TMT2023年9月12日讯)Microland Limited与Serco AsPac宣布建立战略合作伙伴关系,以推动数字化转型,利用云提高业务敏捷性和韧性。Serco AsPac是全球最大的公共服务提供商之一...

关键字: LAN MICRO SE RC
关闭
关闭