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&¤t_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