📄 door.c
字号:
{ door_step=3; //开始退电机
oplock_on_time=20; //退电机时间2s
motor_power=0; //电机供电, 退电机
}
break;
//--------------------------------------------------------------------------------
//退电机, 如果门正常开启并关闭或根本就没开门推出监控状态
case 3:
if(--oplock_on_time==0) //退电机结束
{ motor_power=1; //电机断电
next_card_flag=1; //可以读下一张卡标志
sys_state2&=0x0e; //设置继电器断电状态
sys_state1&=0xfd; //设置继电器断电状态
oplock_on_time=200; //等待关门时间=20s
relay=1; //继电器断电
if(shut_okflag)
{ exit_mon_door(); //已执行开关门动作,退出监视开关门状态
mark023_status=0; //置门原来状态 --- 开着的, =0关着的
}
else door_step=4; //等待关门
}
break;
//--------------------------------------------------------------------------------
case 4: if(shut_okflag)
{ exit_mon_door(); //已执行开关门动作,退出监视开关门状态
mark023_status=0; //置门原来状态 --- 开着的, =0关着的
}
else if(--oplock_on_time==0) //等待关门时间到
{ mark023_status=0x10; //在开门等待进入延时后,门仍然开的
save_open_record(); //开门过程记录缓冲区
exit_mon_door();
mark023_status=0x50; //置门原来状态 --- =0x40开着的, =0关着的
}
break;
default:break;
}
}
//-----------------------------------------------------------------------
//uchar sys_state1; //远程监控用系统状态信息
// D7 = 0, 实时时钟芯片工作正常
// D6 = 0, 数据存储器工作正常
// D5 = 0, 系统共电电源工作正常
// D4 保留
// D3 = 0, 不监视门磁, =1 监视门磁
// D2 = 0, 不监视红外, =1 监视红外
// D1 = 0, 门控电磁继电器关闭, =1 门控电磁继电器处于加电状态
// D0 = 0, 正常工作, =1 处于报警状态
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//uchar sys_state2; //远程监控用系统状态信息
// D7 紧急驱动输入
// D6 联动输入2
// D5 联动输入1
// D4 = 0, 联动输出继电器关闭 =1 加电驱动
// D3 = 0, 门关闭, =1 门开启
// D2 = 0, 红外输入正常 =1 报警
// D1 = 0, 手动按键松开 =1 按下
// D0 = 0, 门控电磁继电器关闭 =1 加电驱动
//
//==============================================================================
//filename : exit_mon_door()
//功 能 : 退出监视开关门状态
//==============================================================================
//
void exit_mon_door()//退出监视开关门状态
{
relay=1;
open_order=0xff;
door_step=0;
sys_state1|=0x02; //继电器断电
mon_open_flag =0;
motor_power=1; //电机断电
shut_okflag=0;
open_okflag=0;
}
//==============================================================================
//filename : aralm_record(uchar as)
//功 能 : 初始化告警记录缓冲区
//寄 存 器 : as --- 告警记录事件来源
// as = 0, 红外报警开始(本程序未用)
// as = 1, 红外报警停止(本程序未用)
// as = 2, 非正常开门
// as = 3, 门已关闭(由非正常开门引起的)
// as = 7, 红外监测被关闭(本程序未用)
// as = 8, 红外监测被开启(本程序未用)
// as = 9, 门监测被关闭
// as = 10, 门监测被开启
//
// byte0 ------ byte4 事件来源
// byte5 ------ byte11 年月日时分秒
// byte12 ----- 状态
// byte13 ----- 事件代码
//==============================================================================
//
void aralm_record(uchar as)//初始化告警记录缓冲区
{
uchar i;
for(i=0;i<4;i++)eeprom_buf[i]=0;
eeprom_buf[4]=as; //报警源
init_date_record(); //初始化报警时间
eeprom_buf[12]=sys_state2; //报警时监控线状态
eeprom_buf[13]=5; //报警代码
write_his_data();
}
//
//==============================================================================
//filename : hand_record()
//功 能 : 手动开门记录, "事件来源" = 5字节全0
//寄 存 器 :
// 1: REMARK=0 刷卡开门记录
//"事件来源" = 5字节卡号
//STATUS :
//D7=0
//D6=0 原来门处于关状态, =1 开状态;
//D5=0 在规定时间内开门进入, =1 未开门进入;
//D4=0 在开门等待进入延时后,门已正常关闭, =1 仍然开的;
//D3=0
//D2=0
//D1=0
//D0=0
//==============================================================================
//
void hand_record()//初始化告警记录缓冲区
{
uchar i;
for(i=0;i<5;i++)eeprom_buf[i]=0;
init_date_record(); //初始化报警时间
eeprom_buf[12]=mark023_status;
eeprom_buf[13]=3; //备注=手动开门
write_his_data();
}
//
//==============================================================================
//filename : init_date_record()
//功 能 : 初始化告警记录时间缓冲区
//寄 存 器 :
//==============================================================================
//
void init_date_record()//初始化告警记录时间缓冲区
{
eeprom_buf[5]=0x20; //世纪号
eeprom_buf[6]=sys_year; //当前时间 -- 年
eeprom_buf[7]=sys_mon; //当前时间 -- 月
eeprom_buf[8]=sys_date; //当前时间 -- 日
eeprom_buf[9]=sys_hour; //当前时间 -- 时
eeprom_buf[10]=sys_min; //当前时间 -- 分
eeprom_buf[11]=sys_second;//当前时间 -- 秒
}
//==============================================================================
//filename : save_open_record()
//功 能 : 保存事件
//参 数 :
// open_order=0 --- 刷卡开门成功
// open_order=2 --- 远程开门
// open_order=3 --- 手动开门
// open_order=8 --- 无效的刷卡开门
// open_order=9 --- 用户卡的有效期已过
// open_order=10 -- 当前时间该用户无权进入
//==============================================================================
//
void save_open_record()//初始化开门记录缓冲区
{
uchar i;
for(i=0;i<16;i++)eeprom_buf[i]=set_user_buf[i];
init_date_record(); //初始化告警记录时间
eeprom_buf[12]=mark023_status;
eeprom_buf[13]=open_order;
if((open_order==2)||(open_order==3)||(open_order==4))//远程开门,手动开门
{ for(i=0;i<5;i++)eeprom_buf[i]=0;
new_record_flag=0; //当前记录为非刷卡记录
}
else
{ new_record_flag=1;
for(i=0;i<14;i++)new_card[i]=eeprom_buf[i];
}
write_his_data();
}
//==============================================================================
//filename : setup_record(uchar ud) 上位机改变时调用
//功 能 : 初始化设置状态改变时事件记录缓冲区
//寄 存 器 :
//==============================================================================
//
void setup_record(uchar ud)//初始化设置状态改变时事件记录缓冲区
{
uchar i;
for(i=0;i<4;i++)eeprom_buf[i]=0;
eeprom_buf[4]=ud;
init_date_record();
eeprom_buf[12]=0; //当前个输入线状态
eeprom_buf[13]=7; //记录代码
write_his_data();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -