微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 智能家居系统中的上位机设计

智能家居系统中的上位机设计

时间:09-02 来源:互联网 点击:

确设置其属性是程序进行正常通信的保证,下面介绍几个必须熟悉的属性。

  CommPort:设置并返回通讯端口号。

  Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

  PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。

  Input:从接收缓冲区返回和删除字符。

  InputMode:接收模式,取O值时,接收文本数据;取1时,接收二进制数据。

  Output:向传输缓冲区写一个字符串。

  Rthrehold:响应模式,取整数。当接收字符后,若Rthrehold属性设置为O,则不产生OnComm事件;若设置为1,则接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。

  Sthreshold:发送模式,设置O(缺省值),数据传输事件不会产生OnComm事件;设置为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。如果在传输缓冲区中的字符数小于value,CommEvent属性设置为comEvSend,并产生OnComm事件。

  Handshake:通信握手模式,取值为O时,无握手;取值为1时,表示XOn/Xoff握手;取值为2时,表示Request-to\-send/clear-to-send握手;取值为3时,表示eqLlest-to-sendclear-to-send握手皆可。

  3.2.2 MSComm控件两种处理通讯的方式

  MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。

  (1)事件驱动方式

  事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者CarrierDetect(CD)或Request To Send(RTS)线上一个字符到达或一个变化发生时。在这些情况下,可以利用MSComm控件的OnComm事件捕获并处理这些通讯事件。OnComm事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅CommEvent属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。

  (2)查询方式

  查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为惟一等待接收的字符是调制解调器的“确定”响应。

  3.3 计算机信息发送和接收的实现

  下面以智能照明系统中PC机与主控器的通信,说明计算机与单片机通信的实现方法。以下是实现的主要子程序。

  页面装载程序:

  

  通信建立后,计算机就可以与下端单片机通过设定的协议进行通信,可以测试下端模块的响应。

  4 MSComm控件的问题和解决办法

  在实际应用中,MSComm控件对于一问一答式的通信,效果还是可以的,所以用于单模块的通信测试问题不大。但是,如果计算机作为单片系统的一个角色,要实时捕获总线上的信息并响应,存在失帧和误帧的问题,如果系统要求不高,还可以对付,而象智能照明这样要求信息持续、实时、准确的系统,利用MSComm控件处理串口通信就难以胜任了。

  在智能照明系统中,采用了自编制的动态库Transdata,dll程序,作为处理串口通信的接口,误帧率和失帧率较低,能满足产品化的要求。

  Transdata.dll使用说明:

  (1)初始化串口并处于通讯状态函数>

  Init_OpenCom(byval m_str as string,byval nbaud as Integer)as Boolean

  参数说明:m_str为串口名称,如“coml”“com2”等;nbaud为波特率,可为1200,2400,4800,9600等;返回值为Boolean,若为true则成功,否则失败false。

  (2)关闭串口结束通讯过程>

  CloseCom()

  (3)发送通讯数据过程>

  SendData(n_str as byte,byval ncount as Integer)

  参数说明:n_str为要发送byte的数组的第一个字节;如要发dim ndata(11)as byte这个数组,只需用ndata(0)作为n_str参数即可;nc-ount为要发送的字节数。

  (4)接收返回的数据函数>

  GetData(byval m_str as string)as string

  参数说明:m_str必须为已有能容纳所要接收字串的长度空间返回接收到的字串,各个字节以“\t”隔开。

  5 结语

  利用MSComm控件虽然可以方便快捷编制出的上位机程序,但其通信效率偏低,误帧和失帧率较高,只适用于单模块测试。对于多模块实时通信系统,宜采用其他控件或自编制更有效的收发程序。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top