智能家居系统中的上位机设计
确设置其属性是程序进行正常通信的保证,下面介绍几个必须熟悉的属性。
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控件虽然可以方便快捷编制出的上位机程序,但其通信效率偏低,误帧和失帧率较高,只适用于单模块测试。对于多模块实时通信系统,宜采用其他控件或自编制更有效的收发程序。
- 基于TinyOS的智能家居系统设计与实现(10-22)
- 基于ZigBee的智能家居系统(10-22)
- 智能家居系统数字显示终端设计方案(08-06)
- 基于MSP430的智能家居系统(08-11)
- 基于USB协议的DSP高速上位机接口设计 (10-02)
- 单片机和CAN控制器在嵌入式系统中的应用(05-05)