491 lines
10 KiB
C
491 lines
10 KiB
C
|
|
#include "FreeRTOS.h"
|
|
#include "cmsis_os.h"
|
|
#include "drv_uart.h"
|
|
#include "middle/ParsePack.h"
|
|
|
|
|
|
#include "monitor_task.h"
|
|
#include "device_task.h"
|
|
|
|
#include "drv_power.h"
|
|
#include "drv_relay.h"
|
|
#include "drv_fan.h"
|
|
|
|
#include "control.h"
|
|
|
|
|
|
Parser_t parser;
|
|
Packer_t packer;
|
|
|
|
|
|
uint32_T mode;
|
|
int32_T bat_type;
|
|
int32_T bat_num;
|
|
int32_T run_state;
|
|
real32_T cmd_current;
|
|
real32_T bat_capacity;
|
|
|
|
|
|
uint32_t getParam = 0;
|
|
|
|
uint32_t NormalTestMode = 0;//0 normal 1 test
|
|
|
|
|
|
uint32_t send_tick = 0;
|
|
|
|
void StartMonitorTask(void * argument)
|
|
{
|
|
uint8_t buff[256];
|
|
uint16_t len;
|
|
|
|
|
|
Parser_init(&parser);
|
|
Packer_init(&packer);
|
|
|
|
|
|
init_uart_fifos();
|
|
|
|
|
|
|
|
|
|
for(;;)
|
|
{
|
|
osDelay(5);
|
|
|
|
send_tick++;
|
|
|
|
|
|
|
|
//监控任务
|
|
|
|
//执行UI工作,执行状态监控工作
|
|
len = UART_RX_FIFO_read(&hub_rx, buff, sizeof(buff));
|
|
|
|
if(len)
|
|
{
|
|
int rst = -1;
|
|
for(int i = 0;i<len;i++)
|
|
{
|
|
rst = Parser_char(&parser, buff[i]);
|
|
|
|
switch(rst)
|
|
{
|
|
case 0://设置系统
|
|
{
|
|
uint32_t cmd;
|
|
uint32_t value;
|
|
|
|
union { uint32_t W; uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
cmd = src.W;
|
|
|
|
src.B[0] = parser.buff[4];
|
|
src.B[1] = parser.buff[5];
|
|
src.B[2] = parser.buff[6];
|
|
src.B[3] = parser.buff[7];
|
|
|
|
value = src.W;
|
|
|
|
if(cmd != 0)
|
|
{
|
|
NormalTestMode = 1;
|
|
}
|
|
|
|
switch(cmd)
|
|
{
|
|
case 0:
|
|
{
|
|
NormalTestMode = 0x00;//normal
|
|
}break;
|
|
case 1:
|
|
{
|
|
power_set(value);
|
|
}break;
|
|
case 2:
|
|
{
|
|
relay_set(0,value);
|
|
}break;
|
|
case 3:
|
|
{
|
|
relay_set(1,value);
|
|
}break;
|
|
case 4:
|
|
{
|
|
fan_set(value);
|
|
}break;
|
|
}
|
|
|
|
|
|
|
|
}break;
|
|
case 1://设置参数
|
|
{
|
|
union { uint32_t W; uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
|
|
getParam = src.W;
|
|
|
|
}break;
|
|
case 0x02://电压P
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
voltage_p = src.F;
|
|
}break;
|
|
case 0x03://电压I
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
voltage_i = src.F;
|
|
}break;
|
|
case 0x04://电压d
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
voltage_d = src.F;
|
|
}break;
|
|
case 0x05://电流p
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
current_p = src.F;
|
|
}break;
|
|
case 0x06://电流I
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
current_i = src.F;
|
|
}break;
|
|
case 0x07://电流d
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
current_d = src.F;
|
|
}break;
|
|
case 0x10://设置运行模式
|
|
{
|
|
union { uint32_t W; uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
mode = src.W;
|
|
}break;
|
|
case 0x11://设置运行状态
|
|
{
|
|
union { int32_t w; uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
run_state = src.w;
|
|
}break;
|
|
case 0x12://设置电池数量
|
|
{
|
|
union { int32_t w; uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
bat_num = src.w;
|
|
}break;
|
|
case 0x13://电池类型
|
|
{
|
|
union { int32_t w; uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
bat_type = src.w;
|
|
}break;
|
|
case 0x14://电池充电电流
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
cmd_current = src.F;
|
|
}break;
|
|
case 0x15://电池容量
|
|
{
|
|
union { float F;uint8_t B[4];}src;
|
|
|
|
src.B[0] = parser.buff[0];
|
|
src.B[1] = parser.buff[1];
|
|
src.B[2] = parser.buff[2];
|
|
src.B[3] = parser.buff[3];
|
|
|
|
bat_capacity = src.F * 0.001;//Ah
|
|
}break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//=======================周期消息================================
|
|
//send meg
|
|
if(!(send_tick % 20))//10Hz
|
|
{
|
|
|
|
uint8_t send_buff[200];
|
|
size_t send_size = 0;
|
|
size_t send_len = 0;
|
|
|
|
union {float F; uint32_t W;int32_t w; uint16_t H[2];int16_t h[2]; uint8_t B[4];}src;
|
|
|
|
src.F = voltage_pwr;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_buck_in;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_buck_out;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_bat;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_current;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_temp;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = control_Y.cmd_all_voltage;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = control_Y.cmd_all_current;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
|
|
send_size = Packer_pack(&packer,0x10,send_buff,send_len);
|
|
|
|
UART_TX_FIFO_write(&hub_tx,packer.buff,send_size);
|
|
}
|
|
|
|
if(!(send_tick % 40))//5Hz
|
|
{
|
|
|
|
uint8_t send_buff[200];
|
|
size_t send_size = 0;
|
|
size_t send_len = 0;
|
|
|
|
union {float F; uint32_t W;int32_t w; uint16_t H[2];int16_t h[2]; uint8_t B[4];}src;
|
|
|
|
|
|
for(int i = 0;i<24;i++)
|
|
{
|
|
src.F = voltage_bat_sv[i];
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
}
|
|
|
|
|
|
|
|
send_size = Packer_pack(&packer,0x11,send_buff,send_len);
|
|
|
|
UART_TX_FIFO_write(&hub_tx,packer.buff,send_size);
|
|
}
|
|
|
|
if(!(send_tick % 200))//1Hz
|
|
{
|
|
|
|
uint8_t send_buff[200];
|
|
size_t send_size = 0;
|
|
size_t send_len = 0;
|
|
|
|
union {float F; uint32_t W;int32_t w; uint16_t H[2];int16_t h[2]; uint8_t B[4];}src;
|
|
|
|
src.W = power_state();
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.W = relay_state(0);
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.W = relay_state(1);
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.W = fan_state();
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
send_size = Packer_pack(&packer,0x12,send_buff,send_len);
|
|
|
|
UART_TX_FIFO_write(&hub_tx,packer.buff,send_size);
|
|
}
|
|
|
|
//==========================事件消息=====================================
|
|
|
|
if((getParam & 0x01) == 0x01)//读取PID
|
|
{
|
|
getParam &= 0xFFFFFFFE;//清除标志位
|
|
|
|
uint8_t send_buff[200];
|
|
size_t send_size = 0;
|
|
size_t send_len = 0;
|
|
|
|
union {float F; uint32_t W;int32_t w; uint16_t H[2];int16_t h[2]; uint8_t B[4];}src;
|
|
|
|
|
|
src.F = voltage_p;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_i;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = voltage_d;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = current_p;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = current_i;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
src.F = current_d;
|
|
send_buff[send_len++] = src.B[0];
|
|
send_buff[send_len++] = src.B[1];
|
|
send_buff[send_len++] = src.B[2];
|
|
send_buff[send_len++] = src.B[3];
|
|
|
|
|
|
|
|
send_size = Packer_pack(&packer,0x01,send_buff,send_len);
|
|
|
|
UART_TX_FIFO_write(&hub_tx,packer.buff,send_size);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|