基于Virtools 和串口通信的界面交互性的设计与实现

[09-12 18:32:18]   来源:http://www.88dzw.com  EDA/PLD   阅读:8613

文章摘要:基类_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(

基于Virtools 和串口通信的界面交互性的设计与实现,标签:eda技术,eda技术实用教程,http://www.88dzw.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 中行为模组的回调机制,循环调用该行为模组。在界面切换时检测一下消息,判 断是否与属性中设定的动作消息一致。如果一致,则向动作控制行为模组发送激活消息。

上一页  [1] [2] [3]  下一页


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《基于Virtools 和串口通信的界面交互性的设计与实现》相关文章

分类导航
最新更新
热门排行