servoMotor/APP/Service/service_statusmonitor.c

1966 lines
56 KiB
C
Raw Normal View History

2025-10-10 07:46:35 +00:00
#include "ptz_header_file.h"
#include "service_statusmonitor.h"
#include "agent_hyt.h"
#include "service_selfcheck.h"
#include "device_adc_collect.h"
2025-10-11 03:40:39 +00:00
#include "rotate_servo.h"
2025-10-10 07:46:35 +00:00
extern void ptz_uart_dev_send(device_handle device, void *data, int len);
static char max_temperature_fault;
// <20>¶ȡ<C2B6><C8A1><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
2025-10-10 07:46:35 +00:00
static char ptz_temp_volt_current_fault_detect_task()
{ // ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
2025-10-11 03:40:39 +00:00
#ifdef PTZ_BLDC_MOTOR
static unsigned short int time_ms;
time_ms++;
if (time_ms < 50)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>5.4A<EFBFBD><EFBFBD>
if (H_ADC_Collect.Phase_curr_V >= PHASE_CURRENT || H_ADC_Collect.Phase_curr_U >= PHASE_CURRENT || H_ADC_Collect.Phase_curr_W >= PHASE_CURRENT)
{ // <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><E2A3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><E2A3AC><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.Phase_curr_H = FAULT; // ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬱<EFBFBD><F3A3ACB1><EFBFBD>
ptz_hori_stop(PTZ_HORI_STOP_TIME);
}
if (V_ADC_Collect.Phase_curr_V >= PHASE_CURRENT || V_ADC_Collect.Phase_curr_U >= PHASE_CURRENT || V_ADC_Collect.Phase_curr_W >= PHASE_CURRENT)
{ // <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><E2A3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><E2A3AC><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.Phase_curr_V = FAULT; // <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬱<EFBFBD><F3A3ACB1><EFBFBD>
ptz_vert_stop(PTZ_VERT_STOP_TIME);
}
return 1;
}
else
{
time_ms = 0;
}
2025-10-11 03:40:39 +00:00
#endif
static unsigned char num_volt_fault;
static unsigned char num_current_fault;
static unsigned char num_temp_fault;
// <20><>ѹ<EFBFBD><D1B9>Ƿѹ<C7B7><D1B9><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
if (g_ptz.Voltage <= PTZ_VOLT_DETECT_MIN || g_ptz.Voltage >= PTZ_VOLT_DETECT_MAX)
{
num_volt_fault++;
}
else
{
num_volt_fault = 0;
g_ptz.fault_detect.voltage_fault = NO_FAULT;
}
if (num_volt_fault >= 50)// <20><>ֹnum_volt_fault<6C><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_ptz.fault_detect.voltage_fault = FAULT;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
if (g_ptz.electric_current >= PTZ_CURRENT_DETECT)
{
num_current_fault++;
}
else
{
num_current_fault = 0;
g_ptz.fault_detect.electric_current_fault = NO_FAULT;
}
if (num_current_fault >= 50) // <20><>ֹnum_current_fault<6C><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_ptz.fault_detect.electric_current_fault = FAULT;
// <20><><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);
}
#ifdef Full_bridge // NTC<54>¶ȼ<C2B6><C8BC><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ֵ100<30><30><EFBFBD>϶ȣ<CFB6><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
if (g_ptz.H_boad_temp >= 100.0)
{
g_ptz.fault_detect.h_ntc_temp_fault = FAULT;
}
else
{
g_ptz.fault_detect.h_ntc_temp_fault = NO_FAULT;
}
if (g_ptz.V_boad_temp >= 100.0)
{
g_ptz.fault_detect.v_ntc_temp_fault = FAULT;
}
else
{
g_ptz.fault_detect.v_ntc_temp_fault = NO_FAULT;
}
2025-10-10 07:46:35 +00:00
#endif
// һ<><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;
}
// <20><><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;
// }
/* <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>Ť<EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>Ť<EFBFBD><C5A4>̫<EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD>ֶ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸı<CAB8><C4B1><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ˴<CBB4><EFB5BD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7> */
// //<2F><>ֱֹͣ<CDA3><D6B9>ˮƽת<C6BD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
// if((g_ptz.vert_start_stop_set == PTZ_VERT_STOP) && (g_ptz.hori_start_stop_set == PTZ_HORI_START))
// {
// if(g_ptz.electric_current >= 3.5)
// {
// 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);
// }else{
// g_ptz.fault_detect.electric_current_fault = NO_FAULT;
// }
// }
// //ˮƽֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ֱת<D6B1><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
// if((g_ptz.hori_start_stop_set == PTZ_HORI_STOP) && (g_ptz.vert_start_stop_set == PTZ_VERT_START))
// {
// if(g_ptz.electric_current >= 3.5)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3.5A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// 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_vert_stop(PTZ_VERT_STOP_TIME);
// }else{
// g_ptz.fault_detect.electric_current_fault = NO_FAULT;
// }
// }
// //˫<><CBAB>ת<EFBFBD><D7AA>
// if((g_ptz.hori_start_stop_set == PTZ_HORI_START) && (g_ptz.vert_start_stop_set == PTZ_VERT_START))
// {
// if (g_ptz.electric_current >= PTZ_CURRENT_DETECT)
// {
// g_ptz.fault_detect.electric_current_fault = FAULT;
// // <20><><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;
2025-10-10 07:46:35 +00:00
}
#ifdef PTZ_PHOTOELECTRIC_SWITCH
static char ptz_vert_sw12_fault_detect_task() // ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9>ϼ<EFBFBD><CFBC><EFBFBD>
{ // <20><><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) // <20><><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) // <20><>ֹ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;
2025-10-10 07:46:35 +00:00
}
#endif
#ifdef PTZ_BLDC_MOTOR
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
2025-10-10 07:46:35 +00:00
static void ptz_motor_hall_fault_detect_task()
{
static unsigned char time_count;
static unsigned short int time_ms;
time_ms++;
if (time_ms < 50)
{
return;
}
else
{
time_ms = 0;
}
2025-10-10 07:46:35 +00:00
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.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;
time_count = 0;
}
// <20><>ֹ<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;
}
}
2025-10-10 07:46:35 +00:00
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>******<2A><>Ҫ<EFBFBD><D2AA><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-10-10 07:46:35 +00:00
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++;
// <20><>ֱ
if (g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
vert_rotate_fault_step = 0; // <20>ر<EFBFBD><D8B1>ж<EFBFBD>
vert_rotate_fault_num = 0;
}
// ˮƽ
if (g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
hori_rotate_fault_step = 0; // <20>ر<EFBFBD><D8B1>ж<EFBFBD>
hori_rotate_fault_num = 0;
}
if (time_ms < 50)
{
return 1;
}
else
{
time_ms = 0;
}
2025-10-10 07:46:35 +00:00
// <20><>ֱ
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; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1: // <20><>ʼ<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;
// <20><><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;
// <20><><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) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
vert_rotate_fault_num = 0;
// <20>ر<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;
// <20><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>PTZ_HORI_STOP_TIME
// ptz_hori_stop(0);
// ptz_vert_stop(0);
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
// <20><><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; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1: // <20><>ʼ<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)
{ // <20><><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;
// <20><><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;
// <20><><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
{ // <20><><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;
// <20><><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;
// <20><><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) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
hori_rotate_fault_num = 0;
// <20>ر<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;
// <20><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
// ptz_hori_stop(0);
// ptz_vert_stop(0);
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
// <20><><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;
}
2025-10-10 07:46:35 +00:00
#endif
#ifdef PTZ_STEP_MOTOR
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
2025-10-10 07:46:35 +00:00
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; // <20>ر<EFBFBD><D8B1>ж<EFBFBD>
vert_rotate_fault_num = 0;
}
// <20><>ֱ
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; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1: // <20><>ʼ<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;
// <20><><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;
// <20><><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) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
vert_rotate_fault_num = 0;
// <20>ر<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;
// <20><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
// <20><><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; // <20>ر<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; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1: // <20><>ʼ<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)
{ // <20><><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;
// <20><><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;
// <20><><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
{ // <20><><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;
// <20><><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;
// <20><><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) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
hori_rotate_fault_num = 0;
// <20>ر<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;
// <20><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = FAULT;
}
hori_angle_a = hori_angle_b;
break;
}
2025-10-10 07:46:35 +00:00
// 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;
}
2025-10-10 07:46:35 +00:00
#endif
2025-10-11 03:40:39 +00:00
#ifdef PTZ_SERVO_MOTOR
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>******<2A><>Ҫ<EFBFBD><D2AA><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-10-11 03:40:39 +00:00
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++;
// <20><>ֱ
if (g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
vert_rotate_fault_step = 0; // <20>ر<EFBFBD><D8B1>ж<EFBFBD>
vert_rotate_fault_num = 0;
}
// ˮƽ
if (g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
hori_rotate_fault_step = 0; // <20>ر<EFBFBD><D8B1>ж<EFBFBD>
hori_rotate_fault_num = 0;
}
if (time_ms < 50)
{
return 1;
}
else
{
time_ms = 0;
}
// <20><>ֱ
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; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1: // <20><>ʼ<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;
// <20><><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;
// <20><><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) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
vert_rotate_fault_num = 0;
// <20>ر<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;
// <20><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>PTZ_HORI_STOP_TIME
// ptz_hori_stop(0);
// ptz_vert_stop(0);
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
// <20><><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; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
break;
case 1: // <20><>ʼ<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)
{ // <20><><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;
// <20><><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;
// <20><><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
{ // <20><><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;
// <20><><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;
// <20><><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) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>
{
hori_rotate_fault_num = 0;
// <20>ر<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;
// <20><>ֱ̨<CCA8><D6B1>ɲ<EFBFBD><C9B2>
// ptz_hori_stop(0);
// ptz_vert_stop(0);
ptz_hori_stop(PTZ_HORI_STOP_TIME);
ptz_vert_stop(PTZ_VERT_STOP_TIME);
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.fault_detect.hori_rotate_fault = FAULT;
}
hori_angle_a = hori_angle_b;
break;
}
return 1;
2025-10-11 03:40:39 +00:00
}
#endif
2025-10-10 07:46:35 +00:00
// <20><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ش<EFBFBD>
2025-10-10 07:46:35 +00:00
static char ptz_fault_return_task()
{
static unsigned short int time_ms;
time_ms++;
if (time_ms < 500)
{
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);
}
// <20><>ֱת<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);
}
// <20>¶ȹ<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);
}
// <20><>ѹ<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);
}
// <20><><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);
}
2025-10-10 07:46:35 +00:00
#ifdef PTZ_BLDC_MOTOR
// ˮƽ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);
}
// <20><>ֱ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);
}
2025-10-10 07:46:35 +00:00
// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻش<CFBB><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
if (g_ptz.fault_detect.Phase_curr_H == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP, Phase_Curr_H);
}
// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻش<CFBB>
if (g_ptz.fault_detect.Phase_curr_V == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP, Phase_Curr_V);
}
// NTCˮƽ<CBAE>¶ȹ<C2B6><C8B9>ϻش<CFBB><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (g_ptz.fault_detect.h_ntc_temp_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP, NTC_HORI);
}
// NTC<54><43>ֱ<EFBFBD>¶ȹ<C2B6><C8B9>ϻش<CFBB>
if (g_ptz.fault_detect.v_ntc_temp_fault == FAULT &&
g_ptz.cmd_save.cmd_data_udp_flag == 1)
{
ptz_send_fault_state(PTZ_UDP, NTC_VERT);
}
#endif
2025-10-10 07:46:35 +00:00
return 1;
}
2025-10-10 07:46:35 +00:00
static char ptz_fault_detect_task()
{
while (1)
{
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptz_motor_rotate_fault_detect_task();
// <20>¶ȵ<C2B6>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptz_temp_volt_current_fault_detect_task();
// <20><><EFBFBD><EFBFBD>hall<6C><6C><EFBFBD><EFBFBD>
#ifdef PTZ_BLDC_MOTOR
ptz_motor_hall_fault_detect_task();
#endif
// <20><><EFBFBD>ϻش<CFBB>
ptz_fault_return_task();
// <20><><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><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫͨ<D2AA><CDA8>״̬<D7B4><CCAC>ѯ<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) // <20>¶ȳ<C2B6><C8B3><EFBFBD><EFBFBD><EFBFBD>ֵ10<31><EFBFBD><E6B4A5><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD>
{ // <20>ܹ<EFBFBD><DCB9><EFBFBD>
g_ptz.fault_detect.fault = FAULT;
}
else
{
g_ptz.fault_detect.fault = NO_FAULT;
}
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
}
2025-10-10 07:46:35 +00:00
}
// #define TASK_FAULT_DETECT_PRIO 19u
// #define TASK_FAULT_DETECT_STK_SIZE 100u
2025-10-10 07:46:35 +00:00
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");
2025-10-10 07:46:35 +00:00
}
}
void init_status_monitor_module()
{
creat_task_fault_detect();
2025-10-10 07:46:35 +00:00
}
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) // <20><>̨<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; // <20><><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;
}
}
// ˮƽ<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;
}
}
// <20><>ֱת<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; // <20><><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;
}
}
// <20><>ֱ<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;
}
}
// <20><>ǰ<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;
}
}
2025-10-10 07:46:35 +00:00
#ifdef PTZ_BLDC_MOTOR
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>¶ȡ<C2B6><C8A1><EFBFBD>NTC_HORI
if (FaultState == NTC_HORI || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buf = (unsigned short int)(g_ptz.H_boad_temp * 100 + 0.5);
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = NTC_HORI;
buff[3] = g_ptz.fault_detect.h_ntc_temp_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;
}
}
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>¶ȡ<C2B6><C8A1><EFBFBD>NTC_VERT
if (FaultState == NTC_VERT || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buf = (unsigned short int)(g_ptz.V_boad_temp * 100 + 0.5);
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = NTC_VERT;
buff[3] = g_ptz.fault_detect.v_ntc_temp_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;
}
}
// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (FaultState == Phase_Curr_H || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = Phase_Curr_H;
buff[3] = g_ptz.fault_detect.Phase_curr_H; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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;
}
}
// <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (FaultState == Phase_Curr_V || FaultState == ALL_FAULT_STATE)
{
memset(buff, 0, sizeof(buff));
buff[0] = 0xff;
buff[1] = g_ptz.address;
buff[2] = Phase_Curr_V;
buff[3] = g_ptz.fault_detect.Phase_curr_V; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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;
}
}
2025-10-10 07:46:35 +00:00
#endif
// <20><>ǰ<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;
}
}
// <20><>ǰ<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;
}
}
// <20><>ǰ<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; // <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[4] = g_ptz.power.aux_switch_4; // <20><><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;
}
}
// <20><>ֱ<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; // <20><><EFBFBD><EFBFBD><E7BFAA>1
buff[5] = g_ptz.fault_detect.vert_sw2_fault; // <20><><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;
}
}
}
2025-10-10 07:46:35 +00:00
}
/// ָ<><D6B8><EFBFBD>Ƿ<EFBFBD><C7B7>ܹ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>
2025-10-10 07:46:35 +00:00
PtzCmdType ptz_cmd_execute_judge()
{
PtzCmdType cmd;
// <20><>̨<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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
// <20><>̨<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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
// <20><>̨<EFBFBD><CCA8><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
if (g_ptz.fault_detect.fault == FAULT)
{
cmd.manual_control = CMD_NOT_ALLOW; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
// <20><>̨<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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
// <20><>̨<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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
if (g_area_scan.state >= AREA_SCAN_START && // <20><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>״̬
g_area_scan.state < AREA_SCAN_PAUSE_A)
{
cmd.manual_control = CMD_NOT_ALLOW; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
return cmd;
}
if (g_area_scan.state >= AREA_SCAN_PAUSE_A && // <20><>̨<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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><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; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_NOT_ALLOW;
}
return cmd;
}
if (g_area_scan.state >= AREA_SCAN_RECOVERY && // <20><>̨<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; // <20>ֶ<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; // <20>ֶ<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>
2025-10-10 07:46:35 +00:00
cmd.area_set = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
2025-10-10 07:46:35 +00:00
cmd.set_zero = CMD_NOT_ALLOW;
2025-10-10 07:46:35 +00:00
return cmd;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
cmd.manual_control = CMD_ALLOW; // <20>ֶ<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; // <20>ֶ<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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_start = CMD_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.area_scan_pause = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>ͣ
cmd.area_scan_recovery = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ָ<EFBFBD>
cmd.area_scan_close = CMD_NOT_ALLOW; // <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ر<EFBFBD>
cmd.set_zero = CMD_ALLOW;
return cmd;
}
// <20><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>ģʽ<C4A3>ж<EFBFBD>
2025-10-10 07:46:35 +00:00
PtzWorkMode ptz_work_mode_judge()
{
PtzWorkMode mode;
// <20><>̨<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;
}
// <20><>̨<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 && // <20><><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;
}
// <20><>̨<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;
}
// <20><>̨<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;
}
2025-10-10 07:46:35 +00:00
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;
}
2025-10-10 07:46:35 +00:00
if (g_area_scan.state >= AREA_SCAN_START && // <20><>̨<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;
}
2025-10-10 07:46:35 +00:00
if (g_area_scan.state >= AREA_SCAN_PAUSE_A && // <20><>̨<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;
}
2025-10-10 07:46:35 +00:00
if (g_area_scan.state >= AREA_SCAN_RECOVERY && // <20><>̨<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;
}
// <20><><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;
}
2025-10-10 07:46:35 +00:00
// <20><><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));
}