zhyinch
2022-02-18 4a13529748c983ff0d5627a28365ad7737141016
Ô´Âë/ºËÐİå/Src/application/dw_app.c
@@ -1,5 +1,6 @@
#include "dw_app.h"
#include "ADC.h"
#include "modbus.h"
#define TDFILTER
enum enumtagstate
{
@@ -738,7 +739,7 @@
int8_t correction_time,new_tagid=0;
extern uint8_t sync_seq;
u16 taglist_num=0,taglist_pos;
u16 tagid_list[TAG_NUM_IN_SYS];
u16 tagid_list[TAG_NUM_IN_SYS],tagstate_list[TAG_NUM_IN_SYS];;
u8 tagofflinetime[TAG_NUM_IN_SYS];
int32_t tagdist_list[TAG_NUM_IN_SYS];
void TagListUpdate(void)
@@ -842,6 +843,26 @@
            dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);
         }
}
 double firstpath_power, rx_power,rec_firstpath_power;
  double f1, f2, r1, r2;
uint16_t F1,F2,F3,N,C;
double B = 131072;
double A = 121.74;
double min_power;
 dwt_rxdiag_t d1;
double LOS(dwt_rxdiag_t *dia) {
     F1 = dia->firstPathAmp1;
     F2 = dia->firstPathAmp2;
     F3 = dia->firstPathAmp3;
     N = dia->rxPreamCount;
     C = dia->maxGrowthCIR;
    firstpath_power=10* log10((F1*F1+F2*F2+F3*F3)/(N*N))-A;
    rx_power=10*log10(C*B/(N*N))-A;
 //   min_power =  - 10 * log10((F1 *F1 + F2 * F2 + F3 * F3) / (C *B));
    return min_power;
  }
u16 smallcar_idlist[10]={0x4052,0x4032,0x4055,0x4034,0x4016,0x4010,0x4036,0x4027,0x4024,0x4047};
extern u16 dist_threshold;
u8 misdist_num[TAG_NUM_IN_SYS],seize_anchor,getrange_success=0;
@@ -940,7 +961,9 @@
               tof = tof_dtu * DWT_TIME_UNITS;
               distance = tof * SPEED_OF_LIGHT;//距离=光速*飞行时间
               dist_no_bias = distance - dwt_getrangebias(config.chan, (float)distance, config.prf); //距离减去矫正系数
               dist_cm = dist_no_bias * 1000; //dis ä¸ºå•位为cm的距离
               dist_cm = dist_no_bias * 1000; //dis ä¸ºå•位为cm的距离
               dwt_readdiagnostics(&d1);
               LOS(&d1);
               /*--------------------------以下为非测距逻辑------------------------*/
               //dist_cm=33000;
               getrange_success = 1;
@@ -959,7 +982,7 @@
               if(hex_dist>-100000&&hex_dist<2000000)
               {
               if(abs(hex_dist-his_dist[taglist_pos])<dist_threshold||misdist_num[taglist_pos]>3)
               {
               {u8 i=0;
                  
                        g_Resttimer=0;
                        IWDG_Feed();
@@ -991,14 +1014,42 @@
               memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
               usart_send[13] = battary;
               usart_send[14] = button;
               usart_send[15] = firstpath_power;
               usart_send[16] = rx_power;
               checksum = Checksum_u16(&usart_send[2],17);
               memcpy(&usart_send[19],&checksum,2);
               if(g_com_map[MODBUS_MODE]!=1)
               UART_PushFrame(usart_send,21);
            #else      
               memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2);
               memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
               anc_report_num++;
            #endif
               for(i=0;i<taglist_num-1;i++)
               {
                  if( tagdist_list[i]>tagdist_list[i+1]&&tagdist_list[i+1]!=0)
                  {
                     int32_t tempdist;
                     u16 tempid,tempstate;
                     tempdist = tagdist_list[i];
                     tempid = tagid_list[i];
                     tempstate = tagstate_list[i];
                     tagdist_list[i] = tagdist_list[i+1];
                     tagid_list[i] = tagid_list[i+1];
                     tagstate_list[i] = tagstate_list[i+1];
                     tagdist_list[i+1] = tempdist;
                     tagid_list[i+1] = tempid;
                     tagstate_list[i+1] = tempstate;
                  }
               }
               for(i=0;i<taglist_num;i++)
               {
                  Modbus_HoldReg[i*4] = tagid_list[i];
                  Modbus_HoldReg[i*4+1] = tagstate_list[i];
                  memcpy(&Modbus_HoldReg[i*4+2],&tagdist_list[i],4);
               }
               }else{
               //   printf("%d",hex_dist);
                  misdist_num[taglist_pos]++;