Files
HBshuiwuConcentrator/dl/dl.c
2025-12-15 16:07:49 +08:00

95 lines
1.7 KiB
C

#include "dl.h"
#include "include.h"
#include "doc.h"
//static bool is_dl_task_rp = false;
static bool is_dl_task = false;
SemaphoreHandle_t xSemaphore_dl;
extern void ClearMeterInfo();
extern void simul_plc_rx_addr(u8 *str1);
extern void rp_start();
bool get_dl_task_state()
{
return is_dl_task;
}
extern void mbus_master_tx_begin();
extern void mbus_master_tx_end();
extern bool get_pro_sucess_status();
extern void time_reset();
void dl_task_1()
{
is_dl_task = true;
u16 num = meter_get_count();
u16 i = 0;
u8 addr[7];
//清除数据
ClearMeterInfo();
mbus_master_tx_begin();
for(i=0;i<num;i++)
{
// = metertable_getadddr(i);
memset(addr,0,sizeof(addr));
meter_get_addr(i,addr);
simul_plc_rx_addr(addr);
//暂时用这个,
//以后会提高抄表速度
//切换需要的时间
// if(get_pro_sucess_status())
//{
vTaskDelay(3000);
// }
// else
// {
// vTaskDelay(40*1000);
// mbus_master_tx_begin();
// }
time_reset();
}
mbus_master_tx_end();
//如果有抄表抄不到的,需要重新抄抄不到的表。
is_dl_task = false;
}
void dl_start()
{
printf("实时抄表开始\r\n");
xSemaphoreGive(xSemaphore_dl);
}
void dl_task()
{
vSemaphoreCreateBinary(xSemaphore_dl);
xSemaphoreTake(xSemaphore_dl, 0);
for (;;)
{
xSemaphoreTake(xSemaphore_dl, portMAX_DELAY);
dl_task_1();
xSemaphoreTake(xSemaphore_dl, 0);
}
}