和串口通信的界面交互性的设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Keywords: Serial Communication; Virtools; Building Blocks; Interactivity 1 引言
用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计中的重要内容之一。交互设计的目的是让用户能够简单方便地使用产品,任何产 品功能的实现都是通过人机交互完成的。现以单片机为核心的嵌入式应用中界面交互性设计为例具 体介绍其实现方法。 2 总体设计方案
下面重点介绍一下串口通信模块的处理方式。 串口通信模块采用中断处理方式,每完整地接收到一个字符或发送完一个字符都会触发该中断, 进入到相应的中断处理函数中。中断处理函数涉及到接收和发送两个部分,因此在中断处理函数开 始的部分就判断是接收引发的中断,还是发送引发的中断。如果是接收中断,在接收中断中每接收 一个字符都要判断,确定是否为上位机发送过来的请求消息,如果不是放弃当前接收到的内容,从 头开始接收;如果是,则响应上位机的数据请求,将接收态改为发送态,然后向上位机发送通信缓 冲区中的第一个字符,每发送一个字符会产生中断,在下次中断中再发送下一字符,按此过程直到 发送完毕。 3.2 上位机的串口通信模块 上位机的串口通信模块通过串口向下位机发送请求信息,处理下位机返回的数据信息,并将其 发送给处理这些信息的行为模组。这一过程是循环执行的。该程序是与下位机协同工作的唯一接口, 是联系界面和下位机的桥梁。它的处理流程如图 2 所示。
开始
接收消息列表
是否包含 要处理的信息?
N Y
进行相应处理
结束
图 3 消息解释执行行为模组流程图 利用 Virtools 中行为模组的回调机制,循环调用该行为模组。在界面切换时检测一下消息,判 断是否与属性中设定的动作消息一致。如果一致,则向动作控制行为模组发送激活消息。 4.3 动作控制行为模组 动作控制行为模组主要使用 Virtools 自带的行为模组,像按键响应行为模组、脚本的控制行为 模组等。另外为了控制外部媒体文件的播放,还利用了 Virtools 中加载资源文件、播放资源文件的 行为模组。 动作控制行为模组接收到消息解释执行行为模组发送的激活信息,就会调用相应的行为模组完 成界面的输出。 5 结论 本文从工程应用的角度,给出了基于 Virtools 和串口通信的界面交互性的设计方法,并给出关
送和异步接收,在_base_com 类的基础上派生出异步串口通信类_sync_com 完成异步的数据传输。
ห้องสมุดไป่ตู้
基类_base_com 的声明如下。
class _base_com
//虚基类 基本串口接口
{
protected: volatile int _port;
//串口号
volatile HANDLE _com_handle;//串口句柄
开始
配置串口连接
发送请求信息
接收下位机信息 N
有效?
Y
转换成 Virtools 动作信息
发送 Virtools 信息
图 2 上位机串口通信模块处理流程图
上位机的串口通信程序是通过调用 Windows 提供的有关串口操作的 API 函数完成的。首先创建
了基础串口类_base_com,在其中实现基本信息配置、打开、关闭串口等基础功能。为了实现异步发
3.1 下位机的串口通信模块 下位机的串口通信模块通过串口完成与上位机的通信,在接到上位机数据请求后将采集的数据
信息发送给上位机。 在设计中首先设定定时器 T1 为串口波特率发生器,设定波特率为 19200bps;上位机发送数据
请求后触发下位机串口中断,为了能够快速的响应上位机的请求,减少上位机的等待,将串口中断 的优先级设置为最高;下位机会优先调用通信模块响应该中断,通信模块首先判断请求消息是否正 确,在确定是正确的请求消息后,从缓冲区中取出数据,封装成一条消息 M 消息码 R(如 M01R), 通过串口发送给上位机。通信模块具备一定过滤及容错能力。
{
init();
}
virtual ~_base_com(); /*基本参数设置*/
//设置串口参数:波特率,停止位,等
inline bool set_para();
//支持设置字符串 "9600, 8, n, 1"
bool set_dcb(char *set_str);
//设置内置结构串口参数:波特率,停止位
inline virtual void close(); //判断串口是或打开
inline bool is_open(); //获得串口句炳
HANDLE get_handle();
}; 异步串口通信类_sync_com 的声明如下。
class _sync_com : public _base_com
总体设计方案如图 1 所示。
单片机
串口
PC 机
Virtools
行为模组
输出
图 1 总体设计图 以单片机为核心的下位机主要是负责采集处理数据信息,在接到上位机的数据请求的时候发送 数据给上位机。编写上位机端的串口通信程序,用于处理串口信息并且把处理过后的消息发送给 Virtools。在 Virtools 中设计消息解释执行行为模组,将解释出的相应动作信息发送给界面控制程序, 最后由其完成屏幕的输出。同时协调 Virtools 中各行为模组的工作,使之达到良好的演示效果。 3 串口通信设计与实现 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种 通信方式。这种通信方式使用的数据线少。本文的串口通信设计包括下位机端的串口通信模块和上 位机端的串口通信模块。
Design and Implementation of Interface Interactivity based on Virtools and Serial Communication
TENG Ying-yan, Zhang Fu-yan
(Neusoft Institute of Information, Computer Science and Technology Department, Dalian Liaoning, 116023) Abstract:This article introduces one design method of man-machine interaction system based on
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
DCB _dcb;
//波特率,停止位,等
int _in_buf, _out_buf; // 缓冲区
COMMTIMEOUTS _co; // 超时时间
//虚函数,用于不同方式的串口打开
virtual bool open_port() = 0; void init(); //初始化
public:
_base_com()
{
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 所示。
键部分的设计思路和方法。该设计方法具有一定的通用性,可应用于其它需要用户界面交互设计的 应用系统中。
本文作者创新点:串口通信下,采集下位机(单片机)传递的信息,运用 Virtools 的行为模组 进行实时处理,实现了人机界面的交互。这一设计也为其他人机界面交互性的实现提供了一种新的 思路。
参考文献
{
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)
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); //关闭串口
Virtools and serial communication. The sub device sends sampling data to the upper device through serial communication. The upper device processes these data and responses according to the results through Building Blocks of Virtools In order to realize the interactivity of man-machine interface.
[1] 鲍可进. C8051F 单片机原理及应用[M]. 北京:中国电力出版社,2006:10-259 [4] 张会铭,雷志华.基于 Windows 服务的网口与串口通信软件设计.微计算机信息[J],2009,4-3:
114-115+126 [3] 张俊谟. SoC 单片机原理与应用——基于 C8051F 系列. 北京:北京航空航天出版社,2007:67-89 [4] 童长飞. C8051F 系列单片机开发与 C 语言编程[M].北京: 北京航空航天出版社,2005:1-374 [5] 梁书蒙. C8051F020MCU 在高速数据采集系统中的应用[J]. 电气应用. 2007,26(4):I0031-I0034 [6] 刘晓明,李勤,王晓哲. 基于 Virtools 的虚拟漫游系统的设计与实现[J]. 大庆石油学院学报,2006,
基于 Virtools 和串口通信的界面交互性的设计与实现
滕英岩,张福艳
(大连东软信息学院 计算机科学与技术系,大连,116023) 摘 要:本文介绍了一种采用 Virtools 和串口通信实现人机界面交互的设计方法。下位机通过 串口通信的方式将采集的数据传给上位机,上位机通过 Virtools 的行为模组对这些数据进行处理, 并根据处理结果做出响应,从而实现人机界面的交互。 关键词:串口通信;Virtools;行为模组;交互性 中图分类号: TP391 文献标识码:B
用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计中的重要内容之一。交互设计的目的是让用户能够简单方便地使用产品,任何产 品功能的实现都是通过人机交互完成的。现以单片机为核心的嵌入式应用中界面交互性设计为例具 体介绍其实现方法。 2 总体设计方案
下面重点介绍一下串口通信模块的处理方式。 串口通信模块采用中断处理方式,每完整地接收到一个字符或发送完一个字符都会触发该中断, 进入到相应的中断处理函数中。中断处理函数涉及到接收和发送两个部分,因此在中断处理函数开 始的部分就判断是接收引发的中断,还是发送引发的中断。如果是接收中断,在接收中断中每接收 一个字符都要判断,确定是否为上位机发送过来的请求消息,如果不是放弃当前接收到的内容,从 头开始接收;如果是,则响应上位机的数据请求,将接收态改为发送态,然后向上位机发送通信缓 冲区中的第一个字符,每发送一个字符会产生中断,在下次中断中再发送下一字符,按此过程直到 发送完毕。 3.2 上位机的串口通信模块 上位机的串口通信模块通过串口向下位机发送请求信息,处理下位机返回的数据信息,并将其 发送给处理这些信息的行为模组。这一过程是循环执行的。该程序是与下位机协同工作的唯一接口, 是联系界面和下位机的桥梁。它的处理流程如图 2 所示。
开始
接收消息列表
是否包含 要处理的信息?
N Y
进行相应处理
结束
图 3 消息解释执行行为模组流程图 利用 Virtools 中行为模组的回调机制,循环调用该行为模组。在界面切换时检测一下消息,判 断是否与属性中设定的动作消息一致。如果一致,则向动作控制行为模组发送激活消息。 4.3 动作控制行为模组 动作控制行为模组主要使用 Virtools 自带的行为模组,像按键响应行为模组、脚本的控制行为 模组等。另外为了控制外部媒体文件的播放,还利用了 Virtools 中加载资源文件、播放资源文件的 行为模组。 动作控制行为模组接收到消息解释执行行为模组发送的激活信息,就会调用相应的行为模组完 成界面的输出。 5 结论 本文从工程应用的角度,给出了基于 Virtools 和串口通信的界面交互性的设计方法,并给出关
送和异步接收,在_base_com 类的基础上派生出异步串口通信类_sync_com 完成异步的数据传输。
ห้องสมุดไป่ตู้
基类_base_com 的声明如下。
class _base_com
//虚基类 基本串口接口
{
protected: volatile int _port;
//串口号
volatile HANDLE _com_handle;//串口句柄
开始
配置串口连接
发送请求信息
接收下位机信息 N
有效?
Y
转换成 Virtools 动作信息
发送 Virtools 信息
图 2 上位机串口通信模块处理流程图
上位机的串口通信程序是通过调用 Windows 提供的有关串口操作的 API 函数完成的。首先创建
了基础串口类_base_com,在其中实现基本信息配置、打开、关闭串口等基础功能。为了实现异步发
3.1 下位机的串口通信模块 下位机的串口通信模块通过串口完成与上位机的通信,在接到上位机数据请求后将采集的数据
信息发送给上位机。 在设计中首先设定定时器 T1 为串口波特率发生器,设定波特率为 19200bps;上位机发送数据
请求后触发下位机串口中断,为了能够快速的响应上位机的请求,减少上位机的等待,将串口中断 的优先级设置为最高;下位机会优先调用通信模块响应该中断,通信模块首先判断请求消息是否正 确,在确定是正确的请求消息后,从缓冲区中取出数据,封装成一条消息 M 消息码 R(如 M01R), 通过串口发送给上位机。通信模块具备一定过滤及容错能力。
{
init();
}
virtual ~_base_com(); /*基本参数设置*/
//设置串口参数:波特率,停止位,等
inline bool set_para();
//支持设置字符串 "9600, 8, n, 1"
bool set_dcb(char *set_str);
//设置内置结构串口参数:波特率,停止位
inline virtual void close(); //判断串口是或打开
inline bool is_open(); //获得串口句炳
HANDLE get_handle();
}; 异步串口通信类_sync_com 的声明如下。
class _sync_com : public _base_com
总体设计方案如图 1 所示。
单片机
串口
PC 机
Virtools
行为模组
输出
图 1 总体设计图 以单片机为核心的下位机主要是负责采集处理数据信息,在接到上位机的数据请求的时候发送 数据给上位机。编写上位机端的串口通信程序,用于处理串口信息并且把处理过后的消息发送给 Virtools。在 Virtools 中设计消息解释执行行为模组,将解释出的相应动作信息发送给界面控制程序, 最后由其完成屏幕的输出。同时协调 Virtools 中各行为模组的工作,使之达到良好的演示效果。 3 串口通信设计与实现 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种 通信方式。这种通信方式使用的数据线少。本文的串口通信设计包括下位机端的串口通信模块和上 位机端的串口通信模块。
Design and Implementation of Interface Interactivity based on Virtools and Serial Communication
TENG Ying-yan, Zhang Fu-yan
(Neusoft Institute of Information, Computer Science and Technology Department, Dalian Liaoning, 116023) Abstract:This article introduces one design method of man-machine interaction system based on
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
DCB _dcb;
//波特率,停止位,等
int _in_buf, _out_buf; // 缓冲区
COMMTIMEOUTS _co; // 超时时间
//虚函数,用于不同方式的串口打开
virtual bool open_port() = 0; void init(); //初始化
public:
_base_com()
{
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 所示。
键部分的设计思路和方法。该设计方法具有一定的通用性,可应用于其它需要用户界面交互设计的 应用系统中。
本文作者创新点:串口通信下,采集下位机(单片机)传递的信息,运用 Virtools 的行为模组 进行实时处理,实现了人机界面的交互。这一设计也为其他人机界面交互性的实现提供了一种新的 思路。
参考文献
{
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)
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); //关闭串口
Virtools and serial communication. The sub device sends sampling data to the upper device through serial communication. The upper device processes these data and responses according to the results through Building Blocks of Virtools In order to realize the interactivity of man-machine interface.
[1] 鲍可进. C8051F 单片机原理及应用[M]. 北京:中国电力出版社,2006:10-259 [4] 张会铭,雷志华.基于 Windows 服务的网口与串口通信软件设计.微计算机信息[J],2009,4-3:
114-115+126 [3] 张俊谟. SoC 单片机原理与应用——基于 C8051F 系列. 北京:北京航空航天出版社,2007:67-89 [4] 童长飞. C8051F 系列单片机开发与 C 语言编程[M].北京: 北京航空航天出版社,2005:1-374 [5] 梁书蒙. C8051F020MCU 在高速数据采集系统中的应用[J]. 电气应用. 2007,26(4):I0031-I0034 [6] 刘晓明,李勤,王晓哲. 基于 Virtools 的虚拟漫游系统的设计与实现[J]. 大庆石油学院学报,2006,
基于 Virtools 和串口通信的界面交互性的设计与实现
滕英岩,张福艳
(大连东软信息学院 计算机科学与技术系,大连,116023) 摘 要:本文介绍了一种采用 Virtools 和串口通信实现人机界面交互的设计方法。下位机通过 串口通信的方式将采集的数据传给上位机,上位机通过 Virtools 的行为模组对这些数据进行处理, 并根据处理结果做出响应,从而实现人机界面的交互。 关键词:串口通信;Virtools;行为模组;交互性 中图分类号: TP391 文献标识码:B