路灯监控器软件设计
本系统软件采用keil C作为开发工具。除CPU程序外,还要开发一个对时钟芯片进行时间预置的程序,以便于批量生产。
路灯监控器的工作流程如下:首先进入上电初始化程序,对路灯监控器的状态进行初始化,包括全夜灯、半夜灯状态、手动三遥状态、报警状态等变量进行初始化。然后初始化MAX3100和时钟芯片,读取设备的编号,初始化串口,读取当前的电压电流,然后进入主循环程序。
系统采用中断方式接收GPRS串口数据,根据通信协议规定的数据格式判断接收的数据是否正确,并能在规定的时间内接收不到数据后自动返回主程序,串口中断子程序为:
while ((RI==0)&&(xj<5000))
{ Wdi=~Wdi; xj++; }
if((xj>=5000)||(SBUF!=Device_Codeh))
{ RI=0;return; } //B1!=Device_Codel
else
{ xj=0; RI=0; }
一帧数据接收完毕后,给串口中断标志置位,然后在主程序中判断传口中断标志,如果该标志被置位,则开始判断控制位,并进入相应的子程序,如设置开关灯时间,查询工作参数,查询工作状态,实时开灯,实时关灯等,在执行完相应的子程序后将中断标志复位。
控制位判断程序为:
if (sflag)
{
IE=0x00;
switch (Gprs_Data[0])
{
case 0x01: /*实时开灯*/
{ res1(); }break;
case 0x02:
{ res2();}break;
。。。
case 0x0c:
{ resc(); }break;
default: {erro_report();} break;
}
sflag=0;
}
在主循环中同时执行自动开关灯的处理和门开报警的判断。
为了实现路灯监控器与通讯服务器的可靠通讯,制定合理的通讯协议,具有非常重要的意义。在制定协议时,充分考虑协议的格式,使之规范化,使之具有良好的扩展性,规定好协议的起始标志、设备的编号、设备类型、控制码、控制类型、数据长度、数据域、结束标志及如何进行校验等,达到预期的功能,又最精简。
现举例如下:
实时开灯帧(C = 01H)
功能:通信服务器请求路灯监控器立即开灯。
帧格式:
F (回应标志):默认值;
C (控制码): 01H;
CT (控制类型): 01H表示全夜灯负载, 02H表示半夜灯负载,03H表示景观灯负载, 04H表示全夜灯和半夜灯负载,05H全夜灯和景观灯负载, 06H半夜灯和景观灯负载,
FFH表示所有路灯负载;
I (后续帧标志):默认值;
L (数据长度): L=00H;
D (数据域): 无数据域;
结语
本系统采用51单片机作为主CPU,成本低,实时性高,已经完成样机试制,通过相关测试,并投入小批量生产。本产品已经应用于城市路灯监控系统,运行稳定,取得了良好的社会效益和经济效益。