198 lines
6.6 KiB
C
198 lines
6.6 KiB
C
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @file user\task\HeartBeatTask.c
|
|||
|
|
* @author luhuaishuai
|
|||
|
|
* @version v0.1
|
|||
|
|
* @date 2026-1-12
|
|||
|
|
* @brief Briefly describe the function of your function
|
|||
|
|
******************************************************************************
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/* Includes ------------------------------------------------------------------*/
|
|||
|
|
|
|||
|
|
#include "task_ykc.h"
|
|||
|
|
#include "lwip/opt.h"
|
|||
|
|
#include "lwip/api.h"
|
|||
|
|
#include "lwip/sys.h"
|
|||
|
|
#include "usbd_cdc_if.h"
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @funNm : ykc_task_function
|
|||
|
|
* @brief : 云快充平台交互主任务
|
|||
|
|
* @param : argument
|
|||
|
|
* @retval: void
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
void ykc_task_function(void const *argument)
|
|||
|
|
{
|
|||
|
|
uint32_t now;
|
|||
|
|
|
|||
|
|
init_chargers();
|
|||
|
|
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
|||
|
|
osDelay(5000);
|
|||
|
|
while (1)
|
|||
|
|
{
|
|||
|
|
TaskRunTimeStat.YkcTask.threads_runtime = GetTask_RunTime(YkcTaskID);
|
|||
|
|
TaskRunTimeStat.YkcTask.threads_counter = GetTask_Beatcnt(YkcTaskID);
|
|||
|
|
TaskRunTimeStat.YkcTask.threads_freestack = Get_Free_Stack(YkcTaskID);
|
|||
|
|
|
|||
|
|
now = HAL_GetTick();
|
|||
|
|
|
|||
|
|
for (int i = 0; i < g_charger_manager.charger_count; i++)
|
|||
|
|
{
|
|||
|
|
ChargerPile *pile = &g_charger_manager.charger_piles[i];
|
|||
|
|
|
|||
|
|
/* ========== 桩层初始化(桩0~2通用,只做一次) ========== */
|
|||
|
|
if (pile->step < 3)
|
|||
|
|
{
|
|||
|
|
if (now < pile->step_tick)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
switch (pile->step)
|
|||
|
|
{
|
|||
|
|
case 0: // 等待桩上电 + 连接本桩4G通道
|
|||
|
|
{
|
|||
|
|
// if (pile->is_udp_online)
|
|||
|
|
if(1)
|
|||
|
|
{
|
|||
|
|
if (!g_air724_info.socket_connected[i])
|
|||
|
|
{
|
|||
|
|
drv_air724_connect_channel(i + 1);
|
|||
|
|
pile->step_tick = now + 3000;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pile->step = 1;
|
|||
|
|
pile->step_tick = now;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
USB_Printf("网关:等待桩%d上电指令\r\n", i + 1);
|
|||
|
|
drv_air724_query_iccid();
|
|||
|
|
pile->step_tick = now + 1000;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 1: // 云快充登录认证
|
|||
|
|
{
|
|||
|
|
if (!pile->is_online)
|
|||
|
|
{
|
|||
|
|
charger_to_server_0X01(i + 1);
|
|||
|
|
pile->step_tick = now + 5000;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pile->step = 2;
|
|||
|
|
charger_to_server_0X05(1, i + 1);
|
|||
|
|
pile->step_tick = now;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 2: // 云快充计费模型请求
|
|||
|
|
{
|
|||
|
|
if (!pile->get_model)
|
|||
|
|
{
|
|||
|
|
charger_to_server_0X09(i + 1);
|
|||
|
|
pile->step_tick = now + 5000;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pile->step = 3;
|
|||
|
|
pile->step_tick = now;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* ========== 枪层独立运行(每把枪独立状态机) ========== */
|
|||
|
|
for (int g = 0; g < MAX_GUN_PER_CHARGER; g++)
|
|||
|
|
{
|
|||
|
|
ChargerGun *gun = &pile->guns[g];
|
|||
|
|
|
|||
|
|
if (now < gun->gun_step_tick)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
switch (gun->gun_step)
|
|||
|
|
{
|
|||
|
|
case 0: // 运行时:周期上传实时数据 + 账单处理
|
|||
|
|
{
|
|||
|
|
charger_to_server_0X13(i + 1, g + 1);
|
|||
|
|
host_computer_report_data(i + 1, g + 1);
|
|||
|
|
|
|||
|
|
if (gun->is_get_bill)
|
|||
|
|
{
|
|||
|
|
charger_to_server_0X3B(i + 1, g + 1);
|
|||
|
|
charger_to_server_0X3B(i + 1, g + 1);
|
|||
|
|
gun->is_get_bill = 0;
|
|||
|
|
memset(gun->real_time_data.trade_serial, 0,
|
|||
|
|
sizeof(gun->real_time_data.trade_serial));
|
|||
|
|
}
|
|||
|
|
gun->gun_step_tick = now + 5000;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
osDelay(10);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 云快充平台状态检查回调
|
|||
|
|
* @note 每 500ms 触发一次,遍历 1-6 号桩检查状态
|
|||
|
|
* @param xTimer 定时器句柄
|
|||
|
|
* @retval none
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
void ykc_timer_callback_function(TimerHandle_t xTimer)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < MAX_CHARGER_COUNT; i++)
|
|||
|
|
{
|
|||
|
|
for (int g = 0; g < MAX_GUN_PER_CHARGER; g++)
|
|||
|
|
{
|
|||
|
|
ChargerGun *gun = &g_charger_manager.charger_piles[i].guns[g];
|
|||
|
|
if (gun->charger_state == REDAY_CHARGER_START_STATE)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[info] 桩%d 枪%d 查询中,等待启动回复.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == SUCCESS_CHARGER_STATE)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[success] 桩%d 枪%d 启动成功.... \r\n", i + 1, g + 1);
|
|||
|
|
gun->charger_state = CHARGER_STATE_CHARGING;
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == FAIL_CHARGER_STATE)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[error] 桩%d 枪%d 启动失败.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == CHARGER_STATE_CHARGING)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[info] 桩%d 枪%d 充电中.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == REDAY_CHARGER_STOP_STATE)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[info] 桩%d 枪%d 查询中,等待停止回复.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == SUCCESS_CHARGER_STOP_STATE)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[success] 桩%d 枪%d 停止成功.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == FAIL_CHARGER_STOP_STATE)
|
|||
|
|
{
|
|||
|
|
USB_Printf("状态机:[error] 桩%d 枪%d 停止失败.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
else if (gun->charger_state == CHARGER_STATE_CHARGE_DONE)
|
|||
|
|
{
|
|||
|
|
printf("状态机:[success] 桩%d 枪%d 计费数据已发送,充电完成.... \r\n", i + 1, g + 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|