计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

智能家居系统的设计与实现网络毕业论文(5)

2013-09-04 01:05
导读:(3)串口超时设置 设置好串口驱动操作的配置后,一个必要的步骤是,设置端口的超时值。所谓超时,是指Windows CE.net在读串口和写串口的自动返回前等

  (3)串口超时设置

 设置好串口驱动操作的配置后,一个必要的步骤是,设置端口的超时值。所谓超时,是指Windows CE.net在读串口和写串口的自动返回前等待读或写操作的时间长度。在程序中,用以下两个函数控制串行超时。

BOOL GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);

BOOL SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);

  这两个函数都包含了对应的串行设备的句柄和COMMTIMEOUTS结构的指针,COMMTIMEOUTS结构定义为:

typedef struct _COMMTIMEOUTS{

DWORD ReadIntervalTimeout;

DWORD ReadTotalTimeoutMultiplier;

DWORD ReadTotalTimeoutConstant;

DWROD WriteTotalTimeoutMultiplier;

DWORD WriteTotalTimeoutConstant;

}COMMTIMEOUTS;

  (4)其他的函数

  设置串口的输入输出缓冲区。原型如下

BOOL SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);

  设置串口检测的事件集。

SetCommMask(HANDLE hFile,DWORD dwEvtMask);

通过这个函数,可以使线程等待如表4-5中的常见的串口驱动程序事件。

表4-5  串口驱动程序事件

  4.2.2.2关闭串口

  调用CloseHandle可以关闭一个串行端口,用关闭在打开串口时创建的那个句柄即可关闭串口了。方法如下

CloseHandle(m_hComm);

  关闭线程函数:

BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);

  其中,hThread为要关闭的线程的句柄。dwExitCode一般为0。若成功关闭,则返回一个非零值。关闭串口函数的工作流程如图4-9所示。

 SHAPE  \* MERGEFORMAT

图4-9  ClosePort函数流程图

  4.2.2.3 串口读线程

读串口ReadFile函数原形:

BOOL ReadFile(

 HANDLE hFile,                //文件的句柄

 LPVOID lpBuffer,             //用于保存读入数据的一个缓冲区

 DWORD nNumberOfBytesToRead,  //要读入的字符数

 LPDWORD lpNumberOfBytesRead, //从文件中实际读入的字符数

 LPOVERLAPPED lpOverlapped    //异步读取描述,在Windows CE中为NULL

);

  在该线程中,若串口读完一条信息,则发送一个系统消息到系统窗体,该消息的名称为WM_RXCHAR_ALL,是一个用户自定义消息。发送给系统窗体的附带消息包含收到的消息的内容和消息的长度。

发送系统消息的API函数SendMessage的原型如下:

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

图4-10 串口读线程流程图

  4.2.2.4 写串口

  在CCESeries类中,一共编写了三个写串口的函数,为的是方便不同情况下的调用。如要向写已知长度的字符串,可以采用WritePort(char *buf,int nSize)函数。写未知长度字符串时,采用WritePort(char *buf)函数,字符串的长度将在函数内部进行计算。前者提高了写串口的时间效率。这三个函数中,采用了一个共同的API函数WriteFile(),它的函数原型如下:

BOOL  WriteFile(

HANDLE hFile,                   // 文件句柄

LPCVOID lpBuffer,               // 数据缓存区指针

DWORD nNumberOfBytesToWrite,    // 要写的字节数

LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针

LPOVERLAPPED lpOverlapped       // OVERLAPPED结构体指针,CE里设为NULL

);

4.2.2.5 串口类的调用

  在主程序中,必须调用此CCESeries类,以达到操作串口的目的。

  在定义智能家居的窗口行为的CSmartHomeDlg类的头文件CSmartHomeDlg.h文件中,添加CCESeries.h头文件。并且新建一个public型变量m_BTSerial(蓝牙串口)和m_IRSeries进行对CCESeries类的实例化。

CCESeries m_BTSerial;

CCESeries m_IRSerial;

  在用于CSmartHomeDlg类成员函数的定义的文件CSmartHomeDlg.cpp文件中,采用形如m_BTSerial.OpenPort(this->m_hWnd,1,9600)的方式进行串口类成员函数的调用。

  4.2.2.6 串口的监听

  在读串口线程中,读完串口的一条信息后发送名为WM_RXCHAR_ALL的系统消息给系统窗体。在窗体程序中,必须对其进行响应。

在CSmartHomeDlg.cpp文件中,添加一条消息响应的声明:

ON_MESSAGE(WM_RXCHAR_ALL,OnComRecvMsg)

其中OnComRecvMsg为对其消息响应的函数,函数的声明如下:

afx_msg long OnComRecvMsg(WPARAM wParam, LPARAM lParam);

其中“afx_msg”说明该函数是一消息响应函数。

  4.4 GSM模块

    智能家居以GSM网络作为数据的无线传输网络,利用基于GSM网络上的短信息服务,完成智能家居的远程安全监控和无线报警的功能。

4.4.1 设计基本原理

4.4.1.1 PDU编码规则

  自短信息技

上一篇:SNS网络中的若干问题网络毕业论文 下一篇:没有了