键盘完成的功能主要有:呼叫、开锁、设定参数、信息翻屏、撤布防等。报警输入模块接收来自传感器的信号。CPU接收到报警信号后通过CAN总线上传,最终到达上位机。用户机的其它功能模块比较简单,限于篇幅,这里就不再做过多叙述了。
2.3 智能小区管理软件的实现
2.3.1 打开串口
使用函数CreateFile()打开串口。其声明如下:
HANDLE CreateFile(
LPCTSTR lpFileName, //指向文件或串口的指针
DWORD dwDesiredAccess, //读写模式
DWORD dwShareMode, //共享方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes,//安全属性
DWORD dwCreationDistribution,//创建方式
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile); // 用于拷贝文件属性的句柄
2.3.2 关闭串口
关闭串口比打开串口要简单得多,只需要调用CloseHandle()函数关闭由CreateHandle()函数返回的句柄即可。CloseHandle函数的声明如下:
BOOL CloseHandle(
HANDLE hObject;) //指向串口的句柄
2.3.3 异步操作
异步(重叠)I/O操作是指应用程序可以在后台读或者写数据,而在前台做其他事件。首先介绍一个结构OVERLAPPED,这个结构对于执行串口的异步操作来说是必需的。其定义如下:
typedef struct _OVERLAPPED{
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED;
在这个结构中,前两个参数为操作系统所保留。接下来的两个参数在对串口操作时是无效的。对于串行口而言仅hEvent成员有效,其余成员必须为0。在设置了异步I/O操作后,I/O操作和函数返回有以下两种情况:当函数返回时I/O操作已经完成,此时结果好像是同步执行的,但实际上这是异步执行的结果。当函数返回时I/O操作还没有完成,此时一方面,函数返回值为零,并且GetLastError()函数返回ERROR_IO_PENDING;另一方面,系统将OVERLAPPED中的信号事件设为无信号状态。I/O操作完成时,系统要把它设置为有信号状态。异步I/O操作的结果可以由GetOverLappedResult()函数来获取,也可以使用Windows的信号函数来处理。
3 结束语
通过对系统进行详细分析和功能设计,采用 CAN总线和C++ 技术,缩短了系统的开发周期,提高了开发者的效率,实现了功能强大而又比较灵活的小区信息发布系统。本系统经过测试,包括软件仿真和系统联机调试,结果证明这种信息发布的方案是可行的。相信随着数字化社区的不断发展,其应用前景也将越来越广泛。
4 创新点总结
本文的创新点在于提出了一种新的小区信息发布的方案。CAN总线通信速率高、通信距离远、可靠性高,可以满足信息发布系统的通信要求。将CAN总线技术应用于信息发布,改变了以往电子公告牌静态的发布模式,具有高度的灵活性和广泛的实适用性。