基于单片机的智能小区监控系统的设计
为了保证PC机与多台单片机之间能够准确、可靠的通信,确定一个明确而合理的通讯协议是关键。包括对数据格式、通讯方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定。
为区分不同的分机,必须为每一个分机分配一个唯一的地址,此地址唯一区别各单片机。数据格式采用数据包的形式,一次传输一组数据,数据包格式如下所示:
起始标志位:1个字节 数据长度:1个字节
分机地址:1个字节 数据内容:n个字节
和检验:2个字节 命令/数据:1个字节
结束标志位:1个字节
主机向单个单片机传数据时,首先,上位机顺次发送起始标志位,目的地址位,数据,生成检验位,结束标志位,上位机发送后每个下位机都产生中断把上位机数据包都接收下来,当接收到结束标志字符时,表示接受到一帧完整的数据包,然后对数据解包,把接收到的目的地和本机地址进行比较,如果不是则马上跳出中断服务程序,相同的话则表示要和本下位机进行通讯。主机发完信息后便等待该分机的接收应答。当接收数据包完成后,接受方也生成相应的检验和,如果接受方生成的检验和与接收到的检验和一致,则表明这次通讯成功,下位机根据接收到的内容给上位机发送相应的反馈信息。如果不一致,则表明此次通讯失败,下位机给上位机发送失败信息,要求上位机重新发送。
由于系统采用上位机巡查下位机的工作方式,单片机在通信过程中处于被动地位,只能其被轮询到的时候才能给上位机发送数据,否则即使信息要上报主机时,也必须处于等待。上位机从第一分机依次查询下位机,给巡查到的下位机发送查询命令,询问该单片机是否有信息要上报给上位机。被轮询的单片机如果没有信息要上报给上位机的话就给上位机发送无上报要求的指令,上位机接受到此指令后便轮询下一地址的分机;若分机有数据需上报便回发一个有上报要求给主机,主机收到后便等待分机上报数据,有上报数据的分机组织好数据后上报给主机,然后等待主机的接收应答。主机收到分机上报的数据后进行检查,若正确接收发正确接收应答,否则发错误接收应答。当接收错误后,主机等待分机再次上报数据,分机收到接收错误应答后再次发送数据。
信号传输中接受与发送都采用中断方式,多机通信从机中断服务程序如图3所示。
5.PC机通信程序设计
上位机的软件是基于VC++6.0实现的,其中的重点和难点是进行实时的串行通讯。应用VC++编写串行通信程序,通常可归纳为如下四种方法:一是利用Windows API通信函数;二是使用Microsoft提供的Microsoft Communications Control控件(简称MSComm);三是利用第三方编写的通信类(如MuMega Technologies公司提供的Cserial类);四是在VC++中用端口操作指令直接对串行端口编程,实现串行通信。本系统中采用的是MSComm控件,它是通过串行端口发送和接收数据,为应用程序提供串行通信功能,使用非常方便。
评论