yincheng.zhong
2024-01-29 526f2fbdaa4532c5bc0b6dffd7b9b84f784d7fef
Ô´Âë/ºËÐİå/Src/application/dw_app.c
@@ -1,5 +1,6 @@
#include "dw_app.h"
#include "ADC.h"
#include "modbus.h"
#define TDFILTER
enum enumtagstate
{
@@ -464,22 +465,19 @@
                           dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
                           dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
                           memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
                        if(temp_dist!=0x1ffff&&g_com_map[ALARM_DISTANCE1] == 1)
                                IWDG_Feed();
                        if(temp_dist!=0x1ffff)
                           {
                              g_Resttimer=0;
                                        IWDG_Feed();
                              #ifdef USART_SINGLE_OUTPUT
                              usart_send[2] = 1;//正常模式
                              usart_send[3] = 17;//数据段长度
                              usart_send[4] = frame_seq_nb;//数据段长度
                              if(g_com_map[DEV_ROLE])
                              {
                              memcpy(&usart_send[5],&dev_id,2);
                              memcpy(&usart_send[7],&rec_nearbaseid,2);      
                              }else{
                              memcpy(&usart_send[5],&rec_nearbaseid,2);
                              memcpy(&usart_send[7],&dev_id,2);
                              }
                              memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
                              usart_send[13] = battary;
                              usart_send[14] = button;
@@ -516,20 +514,16 @@
                           LED0_BLINK;
//                           memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
//                           tagslotpos=GetRandomSlotPos(rec_tagpos_binary);
                           if(temp_dist!=0x1ffff&&g_com_map[ALARM_DISTANCE1] == 1)
                           if(temp_dist!=0x1ffff)
                           {
                              #ifdef USART_SINGLE_OUTPUT
                              usart_send[2] = 1;//正常模式
                              usart_send[3] = 17;//数据段长度
                              usart_send[4] = frame_seq_nb;//数据段长度
                              if(g_com_map[DEV_ROLE])
                              {
                              memcpy(&usart_send[5],&dev_id,2);
                              memcpy(&usart_send[7],&rec_nearbaseid,2);      
                              }else{
                              memcpy(&usart_send[5],&rec_nearbaseid,2);
                              memcpy(&usart_send[7],&dev_id,2);
                              }
                              memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
                              usart_send[13] = battary;
                              usart_send[14] = button;
@@ -738,7 +732,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)
@@ -882,30 +876,41 @@
         dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
         dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
         
         if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1])
         {
            motorstate =0;
         }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE2])
         {
            motorstate =2;
         }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE3])
         {
            motorstate =1;
         }else{
            motorstate =0;
         }
         
         if(new_tagid)
         {
            tagdist_list[taglist_pos]=0x1ffff;
            memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
         }else{
            memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
         }
            if(tag_id_recv>>12!=9)
            {
                if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1])
                {
                    motorstate =0;
                }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE2])
                {
                    motorstate =2;
                }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE3])
                {
                    motorstate =1;
                }else{
                    motorstate =0;
                }
        }else{
                if(tagdist_list[taglist_pos]<g_com_map[RELAY2_DISTANCE1])
                {
                    motorstate =0;
                }else if(tagdist_list[taglist_pos]<g_com_map[RELAY2_DISTANCE2])
                {
                    motorstate =2;
                }else if(tagdist_list[taglist_pos]<g_com_map[RELAY2_DISTANCE3])
                {
                    motorstate =1;
                }else{
                    motorstate =0;
                }
        }
            tx_nearresp_msg[GROUP_ID_IDX] = group_id;
         tx_nearresp_msg[MAINBASE_INDEX]=flag_syncbase;
         tx_nearresp_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE;
         tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|motorstate;
            remotesend_state = 0;
         tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|(motorstate&0xf);
         if(remotesend_state)
         {
             memcpy(&tx_nearresp_msg[REMOTEPARA_INDEX],remotetag_para,REMOTEPARA_LEN);
@@ -981,7 +986,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();
@@ -1000,7 +1005,7 @@
                  {
                            g_Tagdist[taglist_pos]=hex_dist/10;   
                        }else{
                            g_Tagdist[taglist_pos]= 1;
                        //    g_Tagdist[taglist_pos]= 1;
                        }
            #ifdef USART_SINGLE_OUTPUT
               usart_send[2] = 1;//正常模式 
@@ -1008,8 +1013,8 @@
               usart_send[4] = frame_seq_nb2;//数据段长度
               memcpy(&usart_send[5],&tag_id_recv,2);
               memcpy(&usart_send[7],&dev_id,2);         
                            if(tagdist_list[taglist_pos]<=0)
                                tagdist_list[taglist_pos]=10;
                    if(tagdist_list[taglist_pos]<=0)
                        tagdist_list[taglist_pos]=0x2ffff;
               memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
               usart_send[13] = battary;
               usart_send[14] = button;
@@ -1017,12 +1022,39 @@
               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
                    tagstate_list[taglist_pos] = (button<<8)|battary;
               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]++;
@@ -1078,29 +1110,29 @@
//            Anchor_RecPoll();
//            break;
         case SYNC:               
            memcpy(&rec_syncid,&rx_buffer[ANCHOR_ID_IDX],4);
            if(rec_syncid<current_syncid)
            {
               current_syncid=rec_syncid;
               flag_syncbase=0;
               sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
               TIM3->CNT = sync_seq*325%1000+15;
               sync_timer = sync_seq*325/1000;
               synclost_timer=0;
               //SyncPoll(sync_seq,rec_syncid);
               }else if(rec_syncid==current_syncid)
            {
               if(rx_buffer[SYNC_SEQ_IDX]<sync_seq)
                  {
                     flag_syncbase=0;
                     sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
                     TIM3->CNT = sync_seq*325%1000+5;
                     sync_timer = sync_seq*325/1000+995;
                     synclost_timer=0;
                     //SyncPoll(sync_seq,rec_syncid);
                  }
            }
//            memcpy(&rec_syncid,&rx_buffer[ANCHOR_ID_IDX],4);
//            if(rec_syncid<current_syncid)
//            {
//               current_syncid=rec_syncid;
//               flag_syncbase=0;
//               sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
//               TIM3->CNT = sync_seq*325%1000+15;
//               sync_timer = sync_seq*325/1000;
//               synclost_timer=0;
//               //SyncPoll(sync_seq,rec_syncid);
//               }else if(rec_syncid==current_syncid)
//            {
//               if(rx_buffer[SYNC_SEQ_IDX]<sync_seq)
//                  {
//                     flag_syncbase=0;
//                     sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
//                     TIM3->CNT = sync_seq*325%1000+5;
//                     sync_timer = sync_seq*325/1000+995;
//                     synclost_timer=0;
//                     //SyncPoll(sync_seq,rec_syncid);
//                  }
//
//            }
            break;
         case NEAR_MSG:
            if(anc_id_recv==flag_syncbase)
@@ -1126,7 +1158,7 @@
            memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);
                memcpy(&rec_ancidlist,&rx_buffer[NEARBASEID_INDEX],2*rec_nearbase_num);
                memcpy(&rec_ancdistlist,&rx_buffer[NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num);
                memcpy(&rec_antdelay,&rx_buffer[NEARBASEID_INDEX+nearbase_num*4],2);
                memcpy(&rec_antdelay,&rx_buffer[NEARBASEID_INDEX+rec_nearbase_num*4],2);
            #ifdef USART_ALL_OUTPUT
                    usart_send[2] = 0x0c;//正常模式 
               usart_send[3] = 8+rec_nearbase_num*4;//数据段长度