MW22-02A/APP/Service/service_statusmonitor.c

1525 lines
48 KiB
C
Raw Normal View History

2025-05-21 01:55:40 +00:00
#include "ptz_header_file.h"
#include "service_statusmonitor.h"
#include "agent_hyt.h"
#include "service_selfcheck.h"
extern void ptz_uart_dev_send(device_handle device, void *data, int len);
static char max_temperature_fault;
//<2F>¶ȡ<C2B6><C8A1><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
static char ptz_temp_volt_current_fault_detect_task()
{//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
static unsigned short int time_ms;
time_ms ++;
if(time_ms < 1000)
{
return 1;
}
else
{
time_ms = 0;
}
//һ<><D2BB><EFBFBD>¶ȹ<C2B6><C8B9>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9>ϻش<CFBB>
if(g_ptz.temperature > PTZ_TEMP_DETECT_MAX || g_ptz.temperature < PTZ_TEMP_DETECT_MIN )
{
g_ptz.fault_detect.temperature_fault = FAULT;
}
else
{
g_ptz.fault_detect.temperature_fault = NO_FAULT;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȹ<C2B6><C8B9>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD>ܿ<EFBFBD><DCBF>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD>ֵ10<31><30><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.temperature > (PTZ_TEMP_DETECT_MAX + 10.0) || g_ptz.temperature < (PTZ_TEMP_DETECT_MIN - 10.0) )
{
max_temperature_fault = FAULT;
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
}
else
{
max_temperature_fault = NO_FAULT;
}
if(g_ptz.Voltage >= PTZ_VOLT_DETECT_MAX )//|| g_ptz.Voltage <= PTZ_VOLT_DETECT_MIN //<2F><>ֹ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ϻش<CFBB>
{
g_ptz.fault_detect.voltage_fault = FAULT;
}
else
{
g_ptz.fault_detect.voltage_fault = NO_FAULT;
}
if(g_ptz.electric_current >= PTZ_CURRENT_DETECT)
{
g_ptz.fault_detect.electric_current_fault = FAULT;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
}
else
{
g_ptz.fault_detect.electric_current_fault = NO_FAULT;
}
return 1;
}
#ifdef PTZ_PHOTOELECTRIC_SWITCH
static char ptz_vert_sw12_fault_detect_task()//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9>ϼ<EFBFBD><CFBC><EFBFBD>
{//<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
static unsigned char num;
if(g_ptz.vert_ps_sw1_state == PS_COVER && g_ptz.vert_ps_sw2_state == PS_COVER)//<2F><><EFBFBD><EFBFBD>SW1<57><31>SW2ͬʱ<CDAC><CAB1><EFBFBD>ڵ<EFBFBD>
{
num ++;
}
else
{
num = 0;
g_ptz.fault_detect.vert_sw1_fault = NO_FAULT;
g_ptz.fault_detect.vert_sw2_fault = NO_FAULT;
}
if(num >= 200)//<2F><>ֹnum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
num = 100;
}
if(num >= 50)
{
g_ptz.fault_detect.vert_sw1_fault = FAULT;
g_ptz.fault_detect.vert_sw2_fault = FAULT;
}
if(g_ptz.fault_detect.vert_sw1_fault == FAULT || g_ptz.fault_detect.vert_sw2_fault == FAULT)
{
if(g_ptz.vert_start_stop_set == PTZ_VERT_START)
{
ptz_vert_stop(0);
}
}
return 0;
}
#endif
#ifdef PTZ_BLDC_MOTOR
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
static void ptz_motor_hall_fault_detect_task()
{
static unsigned char time_count;
static unsigned short int time_ms;
time_ms ++;
if(time_ms < 1000)
{
return;
}
else
{
time_ms = 0;
}
time_count ++;
if(time_count >= 5)
{
if(abs(g_ptz.hori_l6235d.l6235d_hall_h1_count - g_ptz.hori_l6235d.l6235d_hall_h2_count) >= PTZ_HALL_DETECT
||abs(g_ptz.hori_l6235d.l6235d_hall_h1_count - g_ptz.hori_l6235d.l6235d_hall_h3_count) >= PTZ_HALL_DETECT
||abs(g_ptz.hori_l6235d.l6235d_hall_h2_count - g_ptz.hori_l6235d.l6235d_hall_h3_count) >= PTZ_HALL_DETECT)
{
g_ptz.fault_detect.hori_hall_fault = FAULT;
ptz_hori_stop(0);
}
else
{
g_ptz.fault_detect.hori_hall_fault = NO_FAULT;
}
if(abs(g_ptz.vert_l6235d.l6235d_hall_h1_count - g_ptz.vert_l6235d.l6235d_hall_h2_count) >= PTZ_HALL_DETECT
||abs(g_ptz.vert_l6235d.l6235d_hall_h1_count - g_ptz.vert_l6235d.l6235d_hall_h3_count) >= PTZ_HALL_DETECT
||abs(g_ptz.vert_l6235d.l6235d_hall_h2_count - g_ptz.vert_l6235d.l6235d_hall_h3_count) >= PTZ_HALL_DETECT)
{
g_ptz.fault_detect.vert_hall_fault = FAULT;
ptz_vert_stop(0);
}
else
{
g_ptz.fault_detect.vert_hall_fault = NO_FAULT;
}
// g_ptz.hori_l6235d.l6235d_hall_h1_count = 0;
// g_ptz.hori_l6235d.l6235d_hall_h2_count = 0;
// g_ptz.hori_l6235d.l6235d_hall_h3_count = 0;
// //g_ptz.hori_l6235d.l6235d_hall_h123_count = 0;
//
// g_ptz.vert_l6235d.l6235d_hall_h1_count = 0;
// g_ptz.vert_l6235d.l6235d_hall_h2_count = 0;
// g_ptz.vert_l6235d.l6235d_hall_h3_count = 0;
// //g_ptz.vert_l6235d.l6235d_hall_h123_count = 0;
time_count = 0;
}
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.hori_l6235d.l6235d_hall_h1_count >= UNSIGNED_INT_MAX_VALUE)
{
g_ptz.hori_l6235d.l6235d_hall_h1_count = 0;
}
if(g_ptz.hori_l6235d.l6235d_hall_h2_count >= UNSIGNED_INT_MAX_VALUE)
{
g_ptz.hori_l6235d.l6235d_hall_h2_count = 0;
}
if(g_ptz.hori_l6235d.l6235d_hall_h3_count >= UNSIGNED_INT_MAX_VALUE)
{
g_ptz.hori_l6235d.l6235d_hall_h3_count = 0;
}
if(g_ptz.vert_l6235d.l6235d_hall_h1_count >= UNSIGNED_INT_MAX_VALUE)
{
g_ptz.vert_l6235d.l6235d_hall_h1_count = 0;
}
if(g_ptz.vert_l6235d.l6235d_hall_h2_count >= UNSIGNED_INT_MAX_VALUE)
{
g_ptz.vert_l6235d.l6235d_hall_h2_count = 0;
}
if(g_ptz.vert_l6235d.l6235d_hall_h3_count >= UNSIGNED_INT_MAX_VALUE)
{
g_ptz.vert_l6235d.l6235d_hall_h3_count = 0;
}
}
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
static char ptz_motor_rotate_fault_detect_task()
{
static char hori_rotate_fault_num;
static char vert_rotate_fault_num;
static char hori_rotate_fault_step;
static float hori_angle_a;
static float hori_angle_b;
static char vert_rotate_fault_step;
static float vert_angle_a;
static float vert_angle_b;
static unsigned short int time_ms;
time_ms ++;
//<2F><>ֱ
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
vert_rotate_fault_step = 0;//<2F>ر<EFBFBD><D8B1>ж<EFBFBD>
vert_rotate_fault_num = 0;
}
//ˮƽ
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
hori_rotate_fault_step = 0;//<2F>ر<EFBFBD><D8B1>ж<EFBFBD>
hori_rotate_fault_num = 0;
}
if(time_ms < 1000)
{
return 1;
}
else
{
time_ms = 0;
}
//<2F><>ֱ
switch(vert_rotate_fault_step)
{
case 0:
if(g_ptz.vert_start_stop_set == PTZ_VERT_START)
{
vert_rotate_fault_num = 0;
vert_angle_a = g_ptz.vert_as5047d.as5047d_ptz_angle_actual;
vert_rotate_fault_step = vert_rotate_fault_step + 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1://<2F><>ʼ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨ת<CCA8><D7AA><EFBFBD>Ƿ<EFBFBD><C7B7>
vert_angle_b = g_ptz.vert_as5047d.as5047d_ptz_angle_actual;
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(vert_angle_b > vert_angle_a &&
vert_angle_b - vert_angle_a >= PTZ_VERT_MIN_SPEED * PTZ_VERT_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vert_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.vert_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
if(g_ptz.vert_pid.PidUT_float >= PTZ_VERT_VOLTAGE_LEVEL)
{
vert_rotate_fault_num ++;
}
}
}
else//g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(vert_angle_a > vert_angle_b &&
vert_angle_a - vert_angle_b >= PTZ_VERT_MIN_SPEED * PTZ_VERT_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vert_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.vert_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
if(g_ptz.vert_pid.PidUT_float >= PTZ_VERT_VOLTAGE_LEVEL)
{
vert_rotate_fault_num ++;
}
}
}
if(vert_rotate_fault_num >= ROTATE_FAULT_MAX_NUM)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
vert_rotate_fault_num = 0;
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>Զ<EFBFBD>ɨ<EFBFBD><C9A8>ģʽ
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
g_area_scan.state = AREA_SCAN_CLOSE_A;
//<2F><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
ptz_hori_stop(0);
ptz_vert_stop(0);
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.vert_rotate_fault = FAULT;
}
vert_angle_a = vert_angle_b;
break;
}
/*************************************************************/
switch(hori_rotate_fault_step)
{
case 0:
if(g_ptz.hori_start_stop_set == PTZ_HORI_START)
{
hori_rotate_fault_num = 0;
hori_angle_a = g_ptz.hori_as5047d.as5047d_ptz_angle_actual;
hori_rotate_fault_step = hori_rotate_fault_step + 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1://<2F><>ʼ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨ת<CCA8><D7AA><EFBFBD>Ƿ<EFBFBD><C7B7>
hori_angle_b = g_ptz.hori_as5047d.as5047d_ptz_angle_actual;
if(g_ptz.hori_self_check == PTZ_HORI_SELF_CHECK_END)
{//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((hori_angle_b > hori_angle_a && //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ٶ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.5<EFBFBD><EFBFBD>С<D2AA><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
hori_angle_b - hori_angle_a > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_b - hori_angle_a < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12)
||
(hori_angle_a > hori_angle_b &&
hori_angle_b + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_a > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_b + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_a < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12) )
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
if(g_ptz.hori_pid.PidUT_float >= PTZ_HORI_VOLTAGE_LEVEL)
{
hori_rotate_fault_num ++;
}
}
}
else//g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((hori_angle_b < hori_angle_a && //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ٶ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.5<EFBFBD><EFBFBD>С<D2AA><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
hori_angle_a - hori_angle_b > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_a - hori_angle_b < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12)
||
(hori_angle_a < hori_angle_b &&
hori_angle_a + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_b > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_a + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_b < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12) )
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
if(g_ptz.hori_pid.PidUT_float >= PTZ_HORI_VOLTAGE_LEVEL)
{
hori_rotate_fault_num ++;
}
}
}
}
else
{//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE>Լ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(hori_angle_b > hori_angle_a &&
hori_angle_b - hori_angle_a >= PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
if(g_ptz.hori_pid.PidUT_float >= PTZ_HORI_VOLTAGE_LEVEL)
{
hori_rotate_fault_num ++;
}
}
}
else//g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(hori_angle_a > hori_angle_b &&
hori_angle_a - hori_angle_b >= PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
if(g_ptz.hori_pid.PidUT_float >= PTZ_HORI_VOLTAGE_LEVEL)
{
hori_rotate_fault_num ++;
}
}
}
}
if(hori_rotate_fault_num >= ROTATE_FAULT_MAX_NUM)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
hori_rotate_fault_num = 0;
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>Զ<EFBFBD>ɨ<EFBFBD><C9A8>ģʽ
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
g_area_scan.state = AREA_SCAN_CLOSE_A;
//<2F><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
ptz_hori_stop(0);
ptz_vert_stop(0);
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = FAULT;
}
hori_angle_a = hori_angle_b;
break;
}
// if(g_ptz.fault_detect.hori_rotate_fault == FAULT ||
// g_ptz.fault_detect.vert_rotate_fault == FAULT)
// {
// g_ptz.fault_detect.fault = FAULT;
// }
// else
// {
// g_ptz.fault_detect.fault = NO_FAULT;
// }
return 1;
}
#endif
#ifdef PTZ_STEP_MOTOR
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
static char ptz_motor_rotate_fault_detect_task()
{
static char hori_rotate_fault_num;
static char vert_rotate_fault_num;
static char hori_rotate_fault_step;
static float hori_angle_a;
static float hori_angle_b;
static char vert_rotate_fault_step;
static float vert_angle_a;
static float vert_angle_b;
static unsigned short int time_ms;
time_ms ++;
if(time_ms < 1000)
{
return 1;
}
else
{
time_ms = 0;
}
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
vert_rotate_fault_step = 0;//<2F>ر<EFBFBD><D8B1>ж<EFBFBD>
vert_rotate_fault_num = 0;
}
//<2F><>ֱ
switch(vert_rotate_fault_step)
{
case 0:
if(g_ptz.vert_start_stop_set == PTZ_VERT_START)
{
vert_rotate_fault_num = 0;
vert_angle_a = g_ptz.vert_as5047d.as5047d_ptz_angle_actual;
vert_rotate_fault_step = vert_rotate_fault_step + 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1://<2F><>ʼ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨ת<CCA8><D7AA><EFBFBD>Ƿ<EFBFBD><C7B7>
vert_angle_b = g_ptz.vert_as5047d.as5047d_ptz_angle_actual;
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(vert_angle_b > vert_angle_a &&
vert_angle_b - vert_angle_a >= PTZ_VERT_MIN_SPEED * PTZ_VERT_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vert_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.vert_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
vert_rotate_fault_num ++;
}
}
else//g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(vert_angle_a > vert_angle_b &&
vert_angle_a - vert_angle_b >= PTZ_VERT_MIN_SPEED * PTZ_VERT_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vert_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.vert_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
vert_rotate_fault_num ++;
}
}
if(vert_rotate_fault_num >= ROTATE_FAULT_MAX_NUM)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
vert_rotate_fault_num = 0;
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>Զ<EFBFBD>ɨ<EFBFBD><C9A8>ģʽ
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
g_area_scan.state = AREA_SCAN_CLOSE_A;
//<2F><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.vert_rotate_fault = FAULT;
}
vert_angle_a = vert_angle_b;
break;
}
/*************************************************************/
//ˮƽ
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
hori_rotate_fault_step = 0;//<2F>ر<EFBFBD><D8B1>ж<EFBFBD>
hori_rotate_fault_num = 0;
}
switch(hori_rotate_fault_step)
{
case 0:
if(g_ptz.hori_start_stop_set == PTZ_HORI_START)
{
hori_rotate_fault_num = 0;
hori_angle_a = g_ptz.hori_as5047d.as5047d_ptz_angle_actual;
hori_rotate_fault_step = hori_rotate_fault_step + 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1://<2F><>ʼ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>̨ת<CCA8><D7AA><EFBFBD>Ƿ<EFBFBD><C7B7>
hori_angle_b = g_ptz.hori_as5047d.as5047d_ptz_angle_actual;
if(g_ptz.hori_self_check == PTZ_HORI_SELF_CHECK_END)
{//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((hori_angle_b > hori_angle_a && //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ٶ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.5<EFBFBD><EFBFBD>С<D2AA><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
hori_angle_b - hori_angle_a > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_b - hori_angle_a < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12)
||
(hori_angle_a > hori_angle_b &&
hori_angle_b + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_a > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_b + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_a < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12) )
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
hori_rotate_fault_num ++;
}
}
else//g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((hori_angle_b < hori_angle_a && //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ٶ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.5<EFBFBD><EFBFBD>С<D2AA><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
hori_angle_a - hori_angle_b > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_a - hori_angle_b < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12)
||
(hori_angle_a < hori_angle_b &&
hori_angle_a + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_b > PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2 &&
hori_angle_a + g_ptz.hori_as5047d.as5047d_ptz_angle_max - hori_angle_b < PTZ_HORI_MAX_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 12) )
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
hori_rotate_fault_num ++;
}
}
}
else
{//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE>Լ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(hori_angle_b > hori_angle_a &&
hori_angle_b - hori_angle_a >= PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
hori_rotate_fault_num ++;
}
}
else//g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT
{
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(hori_angle_a > hori_angle_b &&
hori_angle_a - hori_angle_b >= PTZ_HORI_MIN_SPEED * PTZ_HORI_BIG_GEAR_RATIO * 2)
{//ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hori_rotate_fault_num = 0;
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>û<EFBFBD>й<EFBFBD><D0B9><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;
}
else//ת<><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
{
hori_rotate_fault_num ++;
}
}
}
if(hori_rotate_fault_num >= ROTATE_FAULT_MAX_NUM)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
hori_rotate_fault_num = 0;
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>Զ<EFBFBD>ɨ<EFBFBD><C9A8>ģʽ
g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A;
g_area_scan.state = AREA_SCAN_CLOSE_A;
//<2F><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = FAULT;
}
hori_angle_a = hori_angle_b;
break;
}
// if(g_ptz.fault_detect.hori_rotate_fault == FAULT ||
// g_ptz.fault_detect.vert_rotate_fault == FAULT)
// {
// g_ptz.fault_detect.fault = FAULT;
// }
// else
// {
// g_ptz.fault_detect.fault = NO_FAULT;
// }
return 1;
}
#endif
//<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ش<EFBFBD>
static char ptz_fault_return_task()
{
static unsigned short int time_ms;
time_ms ++;
if(time_ms < 1000)
{
return 1;
}
else
{
time_ms = 0;
}
//ˮƽת<C6BD><D7AA><EFBFBD><EFBFBD><EFBFBD>ϻش<CFBB>
if(g_ptz.fault_detect.hori_rotate_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,HORI_ROT);
}
//<2F><>ֱת<D6B1><D7AA><EFBFBD><EFBFBD><EFBFBD>ϻش<CFBB>
if(g_ptz.fault_detect.vert_rotate_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,VERT_ROT);
}
//<2F>¶ȹ<C2B6><C8B9>ϻش<CFBB>
if(g_ptz.fault_detect.temperature_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,WORK_TEMP);
}
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ϻش<CFBB>
if(g_ptz.fault_detect.voltage_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,WORK_VOLT);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻش<CFBB>
if(g_ptz.fault_detect.electric_current_fault == FAULT
&& g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,WORK_ELECTRIC_CURRENT);
}
//ˮƽhall<6C><6C><EFBFBD>ϻش<CFBB>
if(g_ptz.fault_detect.hori_hall_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,HORI_HALL);
}
//<2F><>ֱhall<6C><6C><EFBFBD>ϻش<CFBB>
if(g_ptz.fault_detect.vert_hall_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP,VERT_HALL);
}
return 1;
}
static char ptz_fault_detect_task()
{
while(1)
{
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptz_motor_rotate_fault_detect_task();
//<2F>¶ȵ<C2B6>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptz_temp_volt_current_fault_detect_task();
//<2F><><EFBFBD><EFBFBD>hall<6C><6C><EFBFBD><EFBFBD>
#ifdef PTZ_BLDC_MOTOR
ptz_motor_hall_fault_detect_task();
#endif
//<2F><><EFBFBD>ϻش<CFBB>
ptz_fault_return_task();
//<2F><><EFBFBD><EFBFBD>ع<EFBFBD><D8B9>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2>ܹ<EFBFBD><DCB9>ϻش<CFBB><D8B4><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>
ptz_vert_sw12_fault_detect_task();
if(g_ptz.fault_detect.hori_rotate_fault == FAULT ||
g_ptz.fault_detect.vert_rotate_fault == FAULT ||
max_temperature_fault == FAULT)//<2F>¶ȳ<C2B6><C8B3><EFBFBD><EFBFBD><EFBFBD>ֵ10<31><EFBFBD><E6B4A5><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD>
{//<2F>ܹ<EFBFBD><DCB9><EFBFBD>
g_ptz.fault_detect.fault = FAULT;
}
else
{
g_ptz.fault_detect.fault = NO_FAULT;
}
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
}
}
//#define TASK_FAULT_DETECT_PRIO 19u
//#define TASK_FAULT_DETECT_STK_SIZE 100u
static OS_STK task_fault_detect_stk[TASK_FAULT_DETECT_STK_SIZE];
static void creat_task_fault_detect(void)
{
CPU_INT08U task_err;
CPU_INT08U name_err;
task_err = OSTaskCreateExt((void (*)(void *)) ptz_fault_detect_task,
(void *) 0,
(OS_STK *)&task_fault_detect_stk[TASK_FAULT_DETECT_STK_SIZE - 1],
(INT8U ) TASK_FAULT_DETECT_PRIO,
(INT16U ) TASK_FAULT_DETECT_PRIO,
(OS_STK *)&task_fault_detect_stk[0],
(INT32U ) TASK_FAULT_DETECT_STK_SIZE,
(void *) 0,
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
#if (OS_TASK_NAME_EN > 0)
OSTaskNameSet(TASK_FAULT_DETECT_PRIO, "ptz_fault_detect_task", &name_err);
#endif
if ((task_err == OS_ERR_NONE) && (name_err == OS_ERR_NONE)) {
pdebug(DEBUG_LEVEL_INFO,"create ptz_fault_detect_task success...\n\r");
} else {
pdebug(DEBUG_LEVEL_FATAL,"create ptz_fault_detect_task failed...\n\r");
}
}
void init_status_monitor_module()
{
creat_task_fault_detect();
}
void ptz_send_fault_state(char dev, unsigned char FaultState)
{
unsigned char buff[7];
unsigned short int buf;
if(g_ptz.cmd_save.cmd_data_flag == 1)//<2F><>̨<EFBFBD><CCA8><EFBFBD>չ<EFBFBD>ָ<EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
{
//ˮƽת<C6BD><D7AA>״̬
if(FaultState == HORI_ROT || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = HORI_ROT;
buff[3] = g_ptz.fault_detect.hori_rotate_fault;
if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
{//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[4] = PTZ_RIGHT;
}
else
{
buff[4] = PTZ_LEFT;
}
buff[5] = g_ptz.hori_start_stop_set;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ת<EFBFBD><D7AA>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2>״̬
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
#ifdef PTZ_BLDC_MOTOR
//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>״̬
if(FaultState == HORI_HALL || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = HORI_HALL;
buff[3] = g_ptz.fault_detect.hori_hall_fault;
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
#endif
//<2F><>ֱת<D6B1><D7AA>״̬
if(FaultState == VERT_ROT || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = VERT_ROT;
buff[3] = g_ptz.fault_detect.vert_rotate_fault;
if(g_ptz.vert_direction_set == PTZ_VERT_DIR_UP)
{//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[4] = PTZ_UP;
}
else
{
buff[4] = PTZ_DOWN;
}
buff[5] = g_ptz.vert_start_stop_set;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ת<EFBFBD><D7AA>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2>״̬
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
#ifdef PTZ_BLDC_MOTOR
//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>״̬
if(FaultState == VERT_HALL || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = VERT_HALL;
buff[3] = g_ptz.fault_detect.vert_hall_fault;
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
#endif
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WorkTemp
if(FaultState == WORK_TEMP || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buf = (unsigned short int)(g_ptz.temperature * 100 + 0.5);
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = WORK_TEMP;
buff[3] = g_ptz.fault_detect.temperature_fault;
buff[4] = (unsigned char)(buf >> 8);
buff[5] = (unsigned char)(buf & 0x00ff);
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
if(FaultState == WORK_VOLT || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buf = (unsigned short int)(g_ptz.Voltage * 100 + 0.5);
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = WORK_VOLT;
buff[3] = g_ptz.fault_detect.voltage_fault;
buff[4] = (unsigned char)(buf >> 8);
buff[5] = (unsigned char)(buf & 0x00ff);
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FaultState == WORK_ELECTRIC_CURRENT || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buf = (unsigned short int)(g_ptz.electric_current * 100 + 0.5);
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = WORK_ELECTRIC_CURRENT;
buff[3] = g_ptz.fault_detect.electric_current_fault;
buff[4] = (unsigned char)(buf >> 8);
buff[5] = (unsigned char)(buf & 0x00ff);
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
if(FaultState == CAMERA_POWER || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = CAMERA_POWER;
buff[3] = g_ptz.power.aux_switch_3;//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[4] = g_ptz.power.aux_switch_4;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>״̬
if(FaultState == VERT_PHOTOELECT_SWITCH || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = VERT_PHOTOELECT_SWITCH;
buff[4] = g_ptz.fault_detect.vert_sw1_fault;//<2F><><EFBFBD><EFBFBD><E7BFAA>1
buff[5] = g_ptz.fault_detect.vert_sw2_fault;//<2F><><EFBFBD><EFBFBD><E7BFAA>2
buff[6] = MotorCalPelcoDSUM(buff, sizeof(buff));
switch(dev)
{
case PTZ_UDP:
send_udp_data_aim(buff, sizeof(buff),
(struct sockaddr*)&g_ptz.cmd_save.cmd_from, g_ptz.cmd_save.cmd_fromlen);
break;
case PTZ_UART_422:
ptz_uart_dev_send(uart_422_handle, buff, sizeof(buff));
break;
case PTZ_UART_485:
ptz_uart_dev_send(uart_485_handle, buff, sizeof(buff));
break;
}
}
}
}
///ָ<><D6B8><EFBFBD>Ƿ<EFBFBD><C7B7>ܹ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>
PtzCmdType ptz_cmd_execute_judge()
{
PtzCmdType cmd;
//<2F><>̨<EFBFBD><CCA8><EFBFBD>ڼ̵<DABC><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
if(g_ptz.ptz_motor_relay_state == PTZ_RELAY_ON)
{
cmd.manual_control = CMD_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>״̬
if(g_ptz.hori_self_check != PTZ_HORI_SELF_CHECK_END ||
g_ptz.vert_self_check != PTZ_VERT_SELF_CHECK_END)
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
if(g_ptz.fault_detect.fault == FAULT)
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8>״̬
if(g_preset_bit_scan.state >= PRESET_BIT_SCAN_START &&
g_preset_bit_scan.state <= PRESET_BIT_SCAN_START + 4)
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ״̬
if(g_preset_bit_scan.state == PRESET_BIT_SCAN_PAUSE_A ||
g_preset_bit_scan.state == PRESET_BIT_SCAN_PAUSE_B)
{
// if(g_preset_bit_scan.state == PRESET_BIT_SCAN_PAUSE_A)
// {
// cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
//
// cmd.preset_bit_set = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
// cmd.preset_bit_del = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
// cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
//
// cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
// cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
// cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
//
// cmd.area_set = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
// cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
// cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
//
// cmd.set_zero = CMD_NOT_ALLOW;
// }
//if(g_preset_bit_scan.state == PRESET_BIT_SCAN_PAUSE_B)
cmd.manual_control = CMD_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
if(g_preset_bit_scan.state == PRESET_BIT_SCAN_RECOVERY)//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>״̬<D7B4><CCAC>
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
if(g_area_scan.state >= AREA_SCAN_START && //<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>״̬
g_area_scan.state < AREA_SCAN_PAUSE_A)
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
if(g_area_scan.state >= AREA_SCAN_PAUSE_A && //<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ״̬
g_area_scan.state <= AREA_SCAN_PAUSE_B)
{
if(g_area_scan.state == AREA_SCAN_PAUSE_A)
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
}
if(g_area_scan.state == AREA_SCAN_PAUSE_B)
{
cmd.manual_control = CMD_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
}
return cmd;
}
if(g_area_scan.state >= AREA_SCAN_RECOVERY &&//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD><D6B8>׶<EFBFBD>
g_area_scan.state <= AREA_SCAN_RECOVERY + 1)
{
cmd.manual_control = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_NOT_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_NOT_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
cmd.manual_control = CMD_ALLOW;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȷ<D2B5><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.manual_stop = CMD_ALLOW;//<2F>ֶ<EFBFBD>ָֹͣ<D6B9><D6B8>
cmd.preset_bit_set = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_del = CMD_ALLOW;//Ԥ<><D4A4>λɾ<CEBB><C9BE>
cmd.preset_bit_call = CMD_ALLOW;//Ԥ<><D4A4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
cmd.preset_bit_scan_start = CMD_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.preset_bit_scan_pause = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ
cmd.preset_bit_scan_recovery = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>
cmd.preset_bit_scan_close = CMD_NOT_ALLOW;//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ر<EFBFBD>
cmd.area_set = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW;//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_ALLOW;
return cmd;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>ģʽ<C4A3>ж<EFBFBD>
PtzWorkMode ptz_work_mode_judge()
{
PtzWorkMode mode;
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>״̬
if(g_ptz.hori_self_check != PTZ_HORI_SELF_CHECK_END ||
g_ptz.vert_self_check != PTZ_VERT_SELF_CHECK_END)
{
mode.mode = SELF_CHECKING;
mode.data_a = g_ptz.hori_self_check;
mode.data_b = g_ptz.vert_self_check;
return mode;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
if(g_ptz.fault_detect.fault == FAULT)
{
if(g_ptz.fault_detect.hori_rotate_fault == FAULT)
{//ֻ<><D6BB>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ת<EFBFBD><D7AA>
mode.mode = MOTOR_HORI_CANNOT_ROT;
}
if(g_ptz.fault_detect.vert_rotate_fault == FAULT)
{//ֻ<><D6BB>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ת<EFBFBD><D7AA>
mode.mode = MOTOR_VERT_CANNOT_ROT;
}
if(g_ptz.fault_detect.vert_rotate_fault == FAULT && //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ת<EFBFBD><D7AA>
g_ptz.fault_detect.hori_rotate_fault == FAULT)
{
mode.mode = MOTOR_HOVE_CANNOT_ROT;
}
mode.data_a = g_ptz.hori_start_stop_set;
mode.data_b = g_ptz.vert_start_stop_set;
return mode;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8>״̬
if(g_preset_bit_scan.state >= PRESET_BIT_SCAN_START &&
g_preset_bit_scan.state <= PRESET_BIT_SCAN_START + 4)
{
mode.mode = PP_SCANING;
mode.data_a = g_preset_bit_scan.state;
mode.data_b = g_preset_bit_scan.actual_num;
return mode;
}
//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8><EFBFBD><EFBFBD>ͣ״̬
if(g_preset_bit_scan.state == PRESET_BIT_SCAN_PAUSE_A ||
g_preset_bit_scan.state == PRESET_BIT_SCAN_PAUSE_B)
{
mode.mode = PP_PAUSING;
mode.data_a = g_preset_bit_scan.state;
mode.data_b = g_preset_bit_scan.actual_num;
return mode;
}
if(g_preset_bit_scan.state == PRESET_BIT_SCAN_RECOVERY)//Ԥ<><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD>״̬<D7B4><CCAC>
{
mode.mode = PP_RECOING;
mode.data_a = g_preset_bit_scan.state;
mode.data_b = g_preset_bit_scan.actual_num;
return mode;
}
if(g_area_scan.state >= AREA_SCAN_START && //<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>״̬
g_area_scan.state < AREA_SCAN_PAUSE_A)
{
mode.mode = AREA_SCANING;
mode.data_a = g_area_scan.state;
mode.data_b = g_area_scan.actual_num;
return mode;
}
if(g_area_scan.state >= AREA_SCAN_PAUSE_A && //<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ״̬
g_area_scan.state <= AREA_SCAN_PAUSE_B)
{
mode.mode = AREA_PAUSING;
mode.data_a = g_area_scan.state;
mode.data_b = g_area_scan.actual_num;
return mode;
}
if(g_area_scan.state >= AREA_SCAN_RECOVERY &&//<2F><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>λɨ<CEBB><C9A8><EFBFBD>ָ<EFBFBD><D6B8>׶<EFBFBD>
g_area_scan.state <= AREA_SCAN_RECOVERY + 1)
{
mode.mode = AREA_RECOING;
mode.data_a = g_area_scan.state;
mode.data_b = g_area_scan.actual_num;
return mode;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
mode.mode = OTHER_MODE;
mode.data_a = g_ptz.hori_start_stop_set;
mode.data_b = g_ptz.vert_start_stop_set;
return mode;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ǰ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ
void ptz_send_work_mode(char dev)
{
unsigned char work_mode[7] = {0xff,0x00,0x00,0x00,0x00,0x00,0x00};
PtzWorkMode ptz_mode;
ptz_mode = ptz_work_mode_judge();
work_mode[1] = g_ptz.address;
work_mode[2] = 0xe0;
work_mode[3] = ptz_mode.mode;
work_mode[4] = ptz_mode.data_a;
work_mode[5] = ptz_mode.data_b;
work_mode[6] = MotorCalPelcoDSUM(work_mode,sizeof(work_mode));
ptz_send_data(dev,work_mode, sizeof(work_mode));
}