From f08d7f7203a757602e720126d2fc0d90560bc434 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期一, 24 二月 2025 10:20:25 +0800
Subject: [PATCH] V2.34

---
 Src/application/dw_mbx_tag.c |   70 ++++++++++++++++++++--------------
 1 files changed, 41 insertions(+), 29 deletions(-)

diff --git a/Src/application/dw_mbx_tag.c b/Src/application/dw_mbx_tag.c
index ec0d13f..187dfa5 100644
--- a/Src/application/dw_mbx_tag.c
+++ b/Src/application/dw_mbx_tag.c
@@ -37,11 +37,11 @@
 #define FZ_NEARBASEID_INDEX		 11
 #define TAG_NUM_IN_SYS				25
 
-#define TAG_KEEPTIMES           30
+#define TAG_KEEPTIMES           15
 #define REPORT_TAG_KEEPTIMES     1
 static uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS],rec_ancdistlist[TAG_NUM_IN_SYS];
 static u8 frame_seq_nb2,battary,button,uwb_losttimer,taglist_pos;
-
+uint16_t recnum[5];
 static u8 tagofflinetime[ANC_MAX_NUM];
 u8 taglist_num;
 uint16_t tagid_list[ANC_MAX_NUM],tagdist_list[ANC_MAX_NUM];
@@ -67,7 +67,7 @@
     memcpy(&send_buffer[RESP_MSG_ANC_DISTOFFSET],&g_com_map[DIST_OFFSET],2);
 
 
-    send_buffer[GROUP_ID_IDX] = group_id;
+    send_buffer[GROUP_ID_IDX] = rx_buffer[GROUP_ID_IDX];
 //			send_buffer[MAINBASE_INDEX]=flag_syncbase;
     send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE;
     send_buffer[MOTORSTATE_INDEX]=motorstate;//(remotesend_state<<4)|motorstate;
@@ -93,6 +93,7 @@
         if(current_time>=end_time&&current_time<end_time+15000)
             break;
     };
+    recnum[3]++;
     tagofflinetime[taglist_pos] = 0;
 //            printf("测距成功,序号%d,距离%d\r\n",frame_seq_nb2,tagdist_list[taglist_pos]);
 //            delay_ms(10);
@@ -131,7 +132,9 @@
 #define GROUP_NUM   3
 uint16_t group_min_dist[GROUP_NUM+1];
 uint32_t temp231;
-uint16_t recnum[3];
+
+
+extern int8_t RssiValue;
 void MbxTagUwbRec(void)
 {
 
@@ -174,13 +177,13 @@
         memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2);
         //将收到的tag_id分别写入各次通讯的包中,为多标签通讯服务,防止一次通讯中接收到不同ID标签的数据
         memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);
-        recnum[1]++;
+        
         switch(rx_buffer[MESSAGE_TYPE_IDX])
         {   uint8_t target_tagi;
         case MBX_REG:
             break;
         case MBX_POLL:
-            if(group_id==rx_buffer[GROUP_ID_IDX])
+         //   if(group_id==rx_buffer[GROUP_ID_IDX])
             {
 //                dwt_readdiagnostics(&d1);
 //                LOS(&d1);
@@ -188,7 +191,7 @@
 //                {
 //                    break;
 //                }
-                recnum[2]++;
+                recnum[1]++;
                 frame_seq_nb2 = rx_buffer[SEQUENCE_IDX];
                 battary = rx_buffer[BATTARY_IDX];
                 button = rx_buffer[BUTTON_IDX];
@@ -200,20 +203,18 @@
                 uwb_losttimer = 0;
 
                 taglist_pos=CmpTagInList(tag_id_recv);
-                if(taglist_num>=ANC_MAX_NUM)
+                if(taglist_pos>=ANC_MAX_NUM)
                     break;
-
+                recnum[2]++;
+              
                 for(i=0; i<rec_nearbase_num; i++)
                 {
                     memcpy(&tempid,&rx_buffer[FZ_NEARBASEID_INDEX+i*2],2);
                     if(tempid==dev_id)
                     {
+                      //  recnum[2]++;
                         Anchor_RecNearPoll(i);
                         tagdist_list[taglist_pos]=rec_ancdistlist[i];
-                        if(group_min_dist[group_id]>rec_ancdistlist[i])
-                        {
-                            group_min_dist[group_id] = rec_ancdistlist[i];
-                        }
                         if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中
                         {   //tempid==dev_id 说明基站下发测距报文有这个标签的信息
                             taglist_num++;          //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况
@@ -329,6 +330,7 @@
                 u8 bat;
                 id = report_ancid[j];
                 dist = report_ancdist[j];
+               
                 report_ancid[j] = report_ancid[j+1];
                 report_ancdist[j] = report_ancdist[j+1];
                 report_ancid[j+1] = id;
@@ -350,6 +352,8 @@
     memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2);
     lora_sendbuffer[SEQNUM_IDX] = seq_num++;
     lora_sendbuffer[BAT_IDX] = bat_percent;
+    lora_sendbuffer[BAT_IDX] = recnum[0];
+   // lora_sendbuffer[SEQNUM_IDX] = recnum[1];
     lora_sendbuffer[STATE_IDX] = !GET_USERKEY|stationary_flag<<1;
 #ifdef USE_GPS
     memcpy(&lora_sendbuffer[GPS_JINGDU_IDX],&gps_jingdu,8);
@@ -361,7 +365,15 @@
     lora_sendbuffer[GPS_CHAFENLINGQI] = gps_chafenlingqi;
 #endif
     //  memcpy(&lora_sendbuffer[BAR_HEIGHT_IDX],&bar_height,2);
+//    report_ancdist[4] = report_ancnum;
+//    report_ancnum = 6;
+//    report_ancdist[0] = recnum[0];
+//    report_ancdist[1] = recnum[1];
+//    report_ancdist[2] = recnum[2];
+//    report_ancdist[3] = recnum[3];
+//    report_ancdist[5] = taglist_num;
     lora_sendbuffer[ANCNUM_IDX] = report_ancnum;
+   
     memcpy(&lora_sendbuffer[ANCID_IDX],report_ancid,report_ancnum*2);
     memcpy(&lora_sendbuffer[ANCID_IDX+report_ancnum*2],report_ancdist,report_ancnum*2);
     checksum = Checksum_u16(lora_sendbuffer,4*report_ancnum+ANCID_IDX);
@@ -370,7 +382,7 @@
     LED_TB_ON;
     bat_percent=Get_Battary();
     
-    for(uint8_t i=0;i<3;i++)
+    for(uint8_t i=0;i<5;i++)
     recnum[i] = 0;
 
 }
@@ -426,20 +438,20 @@
             if(rec_secdelay>0)
             {
                 rec_secdelay--;
-//                if(lora_jianting_flag)
-//                {
-//                    if(++group_id>GROUP_NUM)
-//                    {
-//                        group_id = 1;
-//                    }
-//                    t22[ti++] = group_id;
-//                    if(ti>=20)
-//                        ti=0;
-//                    group_min_dist[group_id] = 0xffff;
-//                    Radio.Standby();
-//                    SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
-//                    Radio.Rx(0);
-//                }
+                if(lora_jianting_flag)
+                {
+                    if(++group_id>GROUP_NUM)
+                    {
+                        group_id = 1;
+                    }
+                    t22[ti++] = group_id;
+                    if(ti>=20)
+                        ti=0;
+                    group_min_dist[group_id] = 0xffff;
+                    Radio.Standby();
+                    SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
+                    Radio.Rx(0);
+                }
                 return;
             }
 //            //找3个小组中最近距离最大的小组,上传报文后切换到这个小组,因为上传报文会时间占用。
@@ -452,7 +464,7 @@
 //                group_maxdist_index = group_min_dist[2]>group_min_dist[3]?2:3; //取 2和3 最大值
 //                group_mindist_index = group_min_dist[1]<group_min_dist[3]?1:3;//取 1和3 最小值
 //            }
-////            group_id = 1;
+          group_id = 1;
 //            group_id = group_maxdist_index;
 #endif
             t22[ti++] = group_id;

--
Gitblit v1.9.3