95 lines
1.7 KiB
C
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);
|
|
}
|
|
}
|
|
|
|
|