1.3 开关器件控制器
开关器件控制器装有对应主板无线发射的接收模块,该接收模块有相应的地址。当发出的信号对应接收端的地址后,该接收端的电平输出端则会根据发送端输出的信号驱动继电器来控制开关器件的开闭。如果控制端出现错误,则可以启动开关器件控制器上面的故障处理开关,启动以后,开关器件的开闭完全靠手动,不受任何信号的影响。
1.4 节能以及故障处理模块
系统的节能模块会检测门的打开和关闭状态。当门处于打开状态时,需要检测人的进出,传感器和主板处于完全工作状态。当每次有数据改变时,单片机就将数据存储在E2PROM中,方便掉电存储。当门开关传感器感应到门处于关闭状态时,此时不需要检测人的进出,传感器和主板可以完全断电,等到检测到门开启的时候,主板和传感器同时供电,主板中XS128芯片从上次存储的E2PROM中读取数据后继续上次工作状态运行。当传感器计数出现错误的时候,有两种故障处理方式,一种是软处理,另外一种是硬处理。软处理不需要影响到程序的运行状态,当按钮按下时,故障程序启动,故障程序会根据按下的时间改变人数,直到改变成正常的人数。当出现程序上面不可避免的错误时,需要用复位按钮从程序上复位,程序所有数据清零从头开始重新计数;当系统的硬件出现不可恢复的故障时,按下硬故障按钮,系统就可以绕过控制器件手动控制。
2 软件设计
2.1 软件总框架
系统的软件部分由两个部分组成,人数检测部分和可恢复故障处理部分。
2.2 人数检测部分
人数检测部分的程序主要功能是根据传感器反馈给单片机的数据来计算人数的多少。
如图2所示,两边传感器对应安装后,接通电源。当接收管和发射管之间没有阻挡的时候,接收管A,B,C,D都接收到了发射管发送出的信号,根据上述性质,输出端为低电平。
光电传感器判断人是否经过的方法如图5所示。只有在两组传感器都完成图5所示的过程后才会在人数计数的数组中改变人数。当有人经过时,首先传感器A和C被阻挡住;过一段时间后传感器A,B,C,D都被阻挡住,当人继续向前的时候,传感器A和C会接收到信号,而传感器B和D仍然被阻挡住;随着人离开了门框,传感器A,B,C,D都会同时接收到发出的信号。完成整个过程后,主控板会识别出刚才的信号。如果两组传感器方向一致,会在人数计数数组上加1;如果上述过程的方向反向运行,则会在人数计数数组上减1。
具体代码如下:
if(0==PTT_PTT0 && 1==PTT_PTT1 && 0==state_out[0])
{state_in[0]=1; }
if(1==state_in[0])
{if(1==PTT_PTT0 && 0==PTT_PTT1)
{state_in[1]=1; } }
if(1==PTT_PTT0 && 0==PTT_PTT1 && 0==state_in[0])
{state_out[0]=1; }
if(1==state_out[0])
{if(0==PTT_PTT0 && 1==PTT_PTT1)
{state_out[1]=1; }
}
in=state_in[0]+state_in[1];
out=state_out[0]+state_out[1];
if(0==PTT_PTT0 && 0==PTT_PTT1)
{delay++;
if(in==2)
{ num[0]++;
state_in[0]=0;
state_in[1]=0;
in=0;
state_out[0]=0;
state_out[1]=0;
out=0; }
if(out==2)
{ num[0]--;
state_out[0]=0;
state_out[1]=0;
out=0;
state_in[0]=0;
state_in[1]=0;
in=0; }
if(delay>500)
|