修改串口解析方式为状态机

This commit is contained in:
起床就犯困 2025-01-04 17:50:05 +08:00
parent 8053971109
commit 688f925657
17 changed files with 2214 additions and 3838 deletions

View File

@ -35,6 +35,9 @@
"rtc.h": "c",
"soe.h": "c",
"hd_rtc.h": "c",
"flash.h": "c"
"flash.h": "c",
"configparameter.h": "c",
"usart.h": "c",
"w25qxx.h": "c"
}
}

View File

@ -15,5 +15,4 @@ void insertEventsOrderRecord(eventsOrderRecordMode mode);
#endif

View File

@ -0,0 +1,44 @@
#ifndef BL_USART_H_
#define BL_USART_H_
#include "comm_types.h"
#include "chargControlTypes.h"
#include "uart_dev.h"
/* SL协议读取寄存器最大地址 */
#define maxReadRegAddrMacro 0x0120
/* SL协议读取寄存器最小地址 */
#define minReadRegAddrMacro 0x0100
/* SL协议读取寄存器最大长度 */
#define maxReadRegAddrNumMacro 10
/* SL协议写入寄存器最大地址 */
#define maxWriteRegAddrMacro 0x0120
/* SL协议写入寄存器最小地址 */
#define minWriteRegAddrMacro 0x0100
/* SL协议写入寄存器最大长度 */
#define maxWriteRegAddrNumMacro 10
/* SL协议寄存器长度 */
#define RegAddrNumMacro 32
uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len);
void gw485DataAnalysis(device_handle device);
#endif

View File

@ -1,12 +0,0 @@
#ifndef BL_CFG_PROTOCOL_H_
#define BL_CFG_PROTOCOL_H_
#include "comm_types.h"
void inConfigBuff(uint8_t c);
void zeroConfigBuff(void);
uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len);
void read_and_process_config_data(void);
#endif

View File

@ -1,14 +0,0 @@
#ifndef BL_HY_PROTOCOL_H_
#define BL_HY_PROTOCOL_H_
#include "uart_dev.h"
BOOL getHYconfigModeState(void);
void setHYconfigModeState(BOOL state);
void HY_read_and_process_uart_data(device_handle device);
#endif

View File

@ -5,6 +5,7 @@
#include "flash.h"
#include "stm32g431xx.h"
#include "chargControlTypes.h"
#include "bl_usart.h"
#pragma pack(push, 1)

View File

@ -4,8 +4,7 @@
#include "main.h"
#include "comm_types.h"
#include "chargControlTypes.h"
#define softVer "SV01_24101501"
#include "configParameter.h"
// #pragma pack(push,1)

View File

@ -10,8 +10,8 @@ void task_Init(void);
void beginStartControlTask(void);
void beginSoftStartTask(void);
void beginHYconfigMode(void);
void uartTaskInit(void);
// void beginHYconfigMode(void);
// void uartTaskInit(void);
void startShortCircuitProtection(void);
void stopShortCircuitProtection(void);

View File

@ -3,7 +3,7 @@
#include "stdio.h"
#include "parameter.h"
#include "FM_RTC.h"
#include "flash.h"
#define eventsOrderRecordStartAddr 4096
@ -46,7 +46,7 @@ void eventsOrderRecordStartInit(void)
soeInfo.outData = NULL;
soeInfo.insertData = &soeInfo.data[soeInfo.insertPos];
read_Flash((uint8_t *)(&soeParameters), sizeof(soeParameters));
// read_Flash((uint8_t *)(&soeParameters), sizeof(soeParameters));
}
/**
@ -72,35 +72,35 @@ void insertEventsOrderRecord(eventsOrderRecordMode mode)
}
soeInfo.count--;
soeInfo.insertData->data.mode = mode;
soeInfo.insertData->mode = mode;
getRTC_Time(&soeInfo.insertData->time);
if (mode == firstStageProtection) {
soeInfo.insertData->data.temp = getDischargCurrent();
soeInfo.insertData->temp = getDischargCurrent();
}
else if (mode == secondStageProtection) {
soeInfo.insertData->data.temp = getDischargCurrent();
soeInfo.insertData->temp = getDischargCurrent();
}
else if (mode == thirdStageProtection) {
soeInfo.insertData->data.temp = getDischargCurrent();
soeInfo.insertData->temp = getDischargCurrent();
}
else if (mode == lowInputLoad) {
soeInfo.insertData->data.temp = getOutputVoltage();
soeInfo.insertData->temp = getOutputVoltage();
}
else if (mode == overTemperature) {
soeInfo.insertData->data.temp = getHighSideMosTemperature();
soeInfo.insertData->temp = getHighSideMosTemperature();
}
else if (mode == stopTemperature) {
soeInfo.insertData->data.temp = getHighSideMosTemperature();
soeInfo.insertData->temp = getHighSideMosTemperature();
}
else if (mode == overchargCurr) {
soeInfo.insertData->data.temp = getChargCurrent();
soeInfo.insertData->temp = getChargCurrent();
}
@ -109,7 +109,7 @@ void insertEventsOrderRecord(eventsOrderRecordMode mode)
soeInfo.insertPos = 0;
}
if (count <= 0) {
if (soeInfo.count <= 0) {
soeInfo.insertData = NULL;
} else {
soeInfo.insertData = &soeInfo.data[soeInfo.insertPos];

View File

@ -0,0 +1,679 @@
#include "bl_usart.h"
#include "parameter.h"
#include "chargControlTypes.h"
#include "configParameter.h"
#include "string.h"
#include "pDebug.h"
typedef enum {
wait = 0, /* 串口状态机初始状态 */
startFlagSL, /* 接收到SL帧头 */
addressSL, /* 接收到设备地址 */
functionCodeSL, /* 接收到SL功能码 */
readRegStartAddressSL, /* 接收到SL读取寄存器起始地址 */
readRegStartNumberSL, /* 接收到SL读取寄存器个数 */
crcCheckBitSL, /* 接收到SL校验位 */
endFlagSL, /* 接收到SL帧尾 */
writeRegStartAddressSL, /* 接收到SL写入寄存器起始地址 */
writeRegStartNumberSL, /* 接收到SL写入寄存器个数 */
regLengthSL, /* 接收到SL寄存器长度 */
regStatusSL, /* 接收到SL寄存器状态 */
} uartStateMachine;
/* 功能码 */
typedef enum
{
SL_Function_Code_Read_Register = 0x30, /* 读寄存器数据 */
SL_Function_Code_Write_Register = 0x10, /* 写寄存器数据 */
SL_Function_Code_Broadcast_Scan = 0xA0, /* 广播扫描 */
SL_Function_Code_Registration_request = 0xA1, /* 注册请求 */
SL_Function_Code_Distribution_Profile = 0xD0, /* 配置文件下发 */
SL_Function_Code_Read_Profile = 0xD1, /* 配置文件读取 */
}SL_MsgFunctionCode;
#define gw485RxBufferSize 256
/* 计时参数,一秒后没解析出数据,丢掉当前数据 */
static uint32_t gw485RxTime = 0;
/* 储存gw485数据 */
static uint8_t gw485RxBuffer[gw485RxBufferSize];
static uint16_t gw485RxBufferIndex = 0;
/* 状态机状态机变量 */
static uartStateMachine state = wait;
static uint16_t frameLength = 0;
static void stateMachine(device_handle device);
/* 状态机函数 */
static BOOL analysisWait(void);
static BOOL analysisStartFlagSL(void);
static BOOL analysisAddressSL(void);
static BOOL analysisFunctionCodeSL(void);
static BOOL analysisReadRegStartAddressSL(void);
static BOOL analysisReadRegStartNumberSL(void);
static BOOL analysisCrcCheckBitSL(void);
static void analysisEndFlagSL(device_handle device);
static BOOL analysisWriteRegStartAddressSL(void);
static BOOL analysisWriteRegStartNumberSL(void);
static BOOL analysisRegLengthSL(void);
static BOOL analysisRegStatusSL(void);
/* 解析出来指令对应函数 */
static void SL_MsgProcFunc_Read_Register(device_handle device, void *pMsg, uint32_t MsgLen);
static void SL_MsgProcFunc_Write_Register(device_handle device, void *pMsg, uint32_t MsgLen);
static void SL_MsgProcFunc_Broadcast_Scan(device_handle device, void *pMsg, uint32_t MsgLen);
static void SL_MsgProcFunc_Registration_request(device_handle device, void *pMsg, uint32_t MsgLen);
static void SL_MsgProcFunc_Distribution_Profile(device_handle device, void *pMsg, uint32_t MsgLen);
static void SL_MsgProcFunc_Read_Profile(device_handle device, void *pMsg, uint32_t MsgLen);
/**
* @brief modbus的crc校验
* @param *arr_buff
* len
* @retval crc
*/
uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len)
{
uint16_t crc = 0xFFFF;
uint16_t i, j;
for (j = 0; j < len; ++j) {
crc = crc ^ (*arr_buff++);
for (i = 0; i < 8; ++i) {
if ((crc&0x0001) > 0) {
crc = crc >> 1;
crc = crc ^ 0xa001;
}
else {
crc = crc >> 1;
}
}
}
return crc;
}
/**
* @brief
* @param
* @retval
*/
void stateMachine(device_handle device)
{
if (state == wait) {
if (analysisWait() == TRUE) {
gw485RxTime = 0;
}
}
else if (state == startFlagSL) {
analysisStartFlagSL();
}
else if (state == addressSL) {
analysisAddressSL();
}
else if (state == functionCodeSL) {
analysisFunctionCodeSL();
}
else if (state == readRegStartAddressSL) {
analysisReadRegStartAddressSL();
}
else if (state == readRegStartNumberSL) {
analysisReadRegStartNumberSL();
}
else if (state == crcCheckBitSL) {
analysisCrcCheckBitSL();
}
else if (state == endFlagSL) {
analysisEndFlagSL(device);
}
else if (state == writeRegStartAddressSL) {
analysisWriteRegStartAddressSL();
}
else if (state == writeRegStartNumberSL) {
analysisWriteRegStartNumberSL();
}
else if (state == regLengthSL) {
analysisRegLengthSL();
}
else if (state == regStatusSL) {
analysisRegStatusSL();
}
}
void gw485DataAnalysis(device_handle device)
{
/* 1S未解析出来一帧数据将数据清零 */
gw485RxTime++;
if (gw485RxTime == 10) {
gw485RxTime = 0;
gw485RxBufferIndex = 0;
state = wait;
}
while (uart_dev_char_present(device) == 1) {
gw485RxBuffer[gw485RxBufferIndex++] = uart_dev_in_char(device);
stateMachine(device);
}
stateMachine(device);
}
/**
* @brief wait
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisWait(void)
{
static uint16_t maxLen = 2;
/* 解析SL协议的包头 */
if (gw485RxBufferIndex >= 2) {
if (gw485RxBuffer[0] == 'S' && gw485RxBuffer[1] == 'L') {
state = startFlagSL;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief StartFlagSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisStartFlagSL(void)
{
static uint16_t maxLen = 9;
/* 解析SL协议设备地址 */
if (gw485RxBufferIndex >= 9) {
if (gw485RxBuffer[2] == g_cfgParameter.address[0]
&& gw485RxBuffer[3] == g_cfgParameter.address[1]
&& gw485RxBuffer[4] == g_cfgParameter.address[2]
&& gw485RxBuffer[5] == g_cfgParameter.address[3]
&& gw485RxBuffer[6] == g_cfgParameter.address[4]
&& gw485RxBuffer[7] == g_cfgParameter.address[5]
&& gw485RxBuffer[8] == g_cfgParameter.address[6]) {
state = addressSL;
return TRUE;
}
if (gw485RxBuffer[2] == 0xFF
&& gw485RxBuffer[3] == 0xFF
&& gw485RxBuffer[4] == 0xFF
&& gw485RxBuffer[5] == 0xFF
&& gw485RxBuffer[6] == 0xFF
&& gw485RxBuffer[7] == 0xFF
&& gw485RxBuffer[8] == 0xFF) {
state = addressSL;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief addressSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisAddressSL(void)
{
static uint16_t maxLen = 10;
/* 解析SL功能码 */
if (gw485RxBufferIndex >= 10) {
/* 判断地址是否为广播ID */
uint8_t temp = 0;
if (gw485RxBuffer[2] == 0xFF
&& gw485RxBuffer[3] == 0xFF
&& gw485RxBuffer[4] == 0xFF
&& gw485RxBuffer[5] == 0xFF
&& gw485RxBuffer[6] == 0xFF
&& gw485RxBuffer[7] == 0xFF
&& gw485RxBuffer[8] == 0xFF) {
temp = 1;
} else {
temp = 0;
}
/* 判断功能码类型 */
if (temp == 0) {
if (gw485RxBuffer[9] == SL_Function_Code_Read_Register
|| gw485RxBuffer[9] == SL_Function_Code_Write_Register
|| gw485RxBuffer[9] == SL_Function_Code_Registration_request
|| gw485RxBuffer[9] == SL_Function_Code_Distribution_Profile
|| gw485RxBuffer[9] == SL_Function_Code_Read_Profile ) {
state = functionCodeSL;
return TRUE;
}
}
else {
if (gw485RxBuffer[9] == SL_Function_Code_Broadcast_Scan) {
state = functionCodeSL;
frameLength = 13;
return TRUE;
}
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief functionCodeSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisFunctionCodeSL(void)
{
static uint16_t maxLen = 12;
/* 解析读取寄存器起始位置 */
if ((gw485RxBufferIndex >= 12) && (gw485RxBuffer[9] == SL_Function_Code_Read_Register)) {
uint32_t tempAddrStart = 0;
tempAddrStart = (gw485RxBuffer[10] << 8) | gw485RxBuffer[11];
if (tempAddrStart >= minReadRegAddrMacro && tempAddrStart <= maxReadRegAddrMacro) {
state = readRegStartAddressSL;
return TRUE;
}
}
/* 解析写入寄存器起始位置 */
if ((gw485RxBufferIndex >= 12) && (gw485RxBuffer[9] == SL_Function_Code_Write_Register)) {
uint32_t tempAddrStart = 0;
tempAddrStart = (gw485RxBuffer[10] << 8) | gw485RxBuffer[11];
if (tempAddrStart >= minWriteRegAddrMacro && tempAddrStart <= maxWriteRegAddrMacro) {
state = writeRegStartAddressSL;
return TRUE;
}
}
/* 解析扫描广播帧crc校验 */
if ((gw485RxBufferIndex >= 12) && (gw485RxBuffer[9] == SL_Function_Code_Broadcast_Scan)) {
uint32_t tempCrc = 0;
tempCrc = (gw485RxBuffer[frameLength - 3] << 8) | gw485RxBuffer[frameLength - 2];
if (tempCrc == checkModebusCrc(gw485RxBuffer, frameLength - 3)) {
state = crcCheckBitSL;
return TRUE;
}
log_info("tempCrc:%d", tempCrc);
log_info("checkModebusCrc:%d", checkModebusCrc(gw485RxBuffer, frameLength - 3));
}
/* 解析注册回复帧寄存器长度 */
if ((gw485RxBufferIndex >= 12) && (gw485RxBuffer[9] == SL_Function_Code_Registration_request)) {
uint32_t tempRegLen = 0;
tempRegLen = (gw485RxBuffer[10] << 8) | gw485RxBuffer[11];
if (tempRegLen < RegAddrNumMacro && tempRegLen > 0) {
state = regLengthSL;
frameLength = 17;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief readRegStartAddressSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisReadRegStartAddressSL(void)
{
static uint16_t maxLen = 12;
/* 解析读取寄存器长度 */
if (gw485RxBufferIndex >= 14) {
uint32_t tempAddrNumber = 0;
tempAddrNumber = (gw485RxBuffer[12] << 8) | gw485RxBuffer[13];
if (tempAddrNumber >= 1 && tempAddrNumber <= maxReadRegAddrNumMacro) {
state = readRegStartNumberSL;
frameLength = 17;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief readRegStartNumberSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisReadRegStartNumberSL(void)
{
static uint16_t maxLen = 16;
/* crc校验 */
if (gw485RxBufferIndex >= 16) {
uint32_t tempCrc = 0;
tempCrc = (gw485RxBuffer[14] << 8) | gw485RxBuffer[15];
if (tempCrc == checkModebusCrc(gw485RxBuffer, 14)) {
state = crcCheckBitSL;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief crcCheckBitSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisCrcCheckBitSL(void)
{
/* 结束标志校验校验 */
if (gw485RxBufferIndex == frameLength) {
if (gw485RxBuffer[frameLength - 1] == 0x16) {
state = endFlagSL;
return TRUE;
}
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief endFlagSL
* @param device
* @retval TRUE: FALSE:
*/
void analysisEndFlagSL(device_handle device)
{
/* 数据为读取寄存器 */
if (gw485RxBuffer[9] == SL_Function_Code_Read_Register) {
SL_MsgProcFunc_Read_Register(device, gw485RxBuffer, frameLength);
}
/* 数据为写入寄存器 */
else if (gw485RxBuffer[9] == SL_Function_Code_Write_Register) {
SL_MsgProcFunc_Write_Register(device, gw485RxBuffer, frameLength);
}
/* 数据为扫描广播帧 */
else if (gw485RxBuffer[9] == SL_Function_Code_Broadcast_Scan) {
SL_MsgProcFunc_Broadcast_Scan(device, gw485RxBuffer, frameLength);
}
/* 数据为注册回复帧 */
else if (gw485RxBuffer[9] == SL_Function_Code_Registration_request) {
SL_MsgProcFunc_Registration_request(device, gw485RxBuffer, frameLength);
}
/* 数据为下发配置文件 */
else if (gw485RxBuffer[9] == SL_Function_Code_Distribution_Profile) {
SL_MsgProcFunc_Distribution_Profile(device, gw485RxBuffer, frameLength);
}
/* 数据为读取配置文件 */
else if (gw485RxBuffer[9] == SL_Function_Code_Read_Profile) {
SL_MsgProcFunc_Read_Profile(device, gw485RxBuffer, frameLength);
}
state = wait;
gw485RxBufferIndex = 0;
// memcpy(gw485RxBuffer, gw485RxBuffer + gw485RxBufferIndex, );
}
/**
* @brief writeRegStartAddressSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisWriteRegStartAddressSL(void)
{
static uint16_t maxLen = 14;
/* 解析写入寄存器长度 */
if (gw485RxBufferIndex >= 14) {
uint32_t tempAddrNumber = 0;
tempAddrNumber = (gw485RxBuffer[12] << 8) | gw485RxBuffer[13];
if (tempAddrNumber >= 1 && tempAddrNumber <= maxWriteRegAddrNumMacro) {
state = writeRegStartNumberSL;
frameLength = 17 + tempAddrNumber * 2;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief writeRegStartNumberSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisWriteRegStartNumberSL(void)
{
static uint16_t maxLen = 16;
/* crc校验 */
if (gw485RxBufferIndex >= 16) {
uint32_t tempCrc = 0;
tempCrc = (gw485RxBuffer[frameLength - 3] << 8) | gw485RxBuffer[frameLength - 2];
if (tempCrc == checkModebusCrc(gw485RxBuffer, frameLength - 3)) {
state = crcCheckBitSL;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief regLengthSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisRegLengthSL(void)
{
static uint16_t maxLen = 12;
/* crc校验 */
if (gw485RxBufferIndex >= 12) {
uint32_t tempRegStatus = 0;
tempRegStatus = (gw485RxBuffer[12] << 8) | gw485RxBuffer[13];
if (tempRegStatus == UNREGISTER
|| tempRegStatus == REGISTER_FAIL
|| tempRegStatus == REGISTER_SUCCESS) {
state = regStatusSL;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief regStatusSL
* @param
* @retval TRUE: FALSE:
*/
BOOL analysisRegStatusSL(void)
{
static uint16_t maxLen = 16;
/* crc校验 */
if (gw485RxBufferIndex >= 16) {
uint32_t tempCrc = 0;
tempCrc = (gw485RxBuffer[frameLength - 3] << 8) | gw485RxBuffer[frameLength - 2];
if (tempCrc == checkModebusCrc(gw485RxBuffer, frameLength - 3)) {
state = crcCheckBitSL;
return TRUE;
}
}
if (gw485RxBufferIndex < maxLen) {
return FALSE;
}
state = wait;
gw485RxBufferIndex--;
memcpy(gw485RxBuffer, gw485RxBuffer + 1, gw485RxBufferIndex);
return FALSE;
}
/**
* @brief
* @param device
* pMsg
* MsgLen
* @retval
*/
void SL_MsgProcFunc_Read_Register(device_handle device, void *pMsg, uint32_t MsgLen)
{
debug_printf("SL_MsgProcFunc_Read_Register\n");
}
/**
* @brief
* @param device
* pMsg
* MsgLen
* @retval
*/
void SL_MsgProcFunc_Write_Register(device_handle device, void *pMsg, uint32_t MsgLen)
{
debug_printf("SL_MsgProcFunc_Write_Register\n");
}
/**
* @brief 广
* @param device
* pMsg
* MsgLen
* @retval
*/
void SL_MsgProcFunc_Broadcast_Scan(device_handle device, void *pMsg, uint32_t MsgLen)
{
debug_printf("SL_MsgProcFunc_Broadcast_Scan\n");
}
/**
* @brief
* @param device
* pMsg
* MsgLen
* @retval
*/
void SL_MsgProcFunc_Registration_request(device_handle device, void *pMsg, uint32_t MsgLen)
{
debug_printf("SL_MsgProcFunc_Registration_request\n");
}
/**
* @brief
* @param device
* pMsg
* MsgLen
* @retval
*/
void SL_MsgProcFunc_Distribution_Profile(device_handle device, void *pMsg, uint32_t MsgLen)
{
debug_printf("SL_MsgProcFunc_Distribution_Profile\n");
}
/**
* @brief
* @param device
* pMsg
* MsgLen
* @retval
*/
void SL_MsgProcFunc_Read_Profile(device_handle device, void *pMsg, uint32_t MsgLen)
{
debug_printf("SL_MsgProcFunc_Read_Profile\n");
}

View File

@ -1,422 +0,0 @@
#include "cfg_protocol.h"
#include "uart_dev.h"
#include "inFlash.h"
#include "parameter.h"
#include "string.h"
#include "chargControlTypes.h"
#include "pDebug.h"
#define cfgBuffLen 200
static uint8_t configBuff[cfgBuffLen];
static uint8_t cfigLen = 0;
/* 配置文件中的部分数据放大倍数 */
#define enlargeScale 100
/**
* @brief buff中存入一个数据
* @param c
* @retval
*
*/
void inConfigBuff(uint8_t c)
{
if (cfigLen < cfgBuffLen) {
configBuff[cfigLen] = c;
cfigLen++;
}
}
/**
* @brief buff中丢掉一个数据
* @param
* @retval
*
*/
void outConfigBuff(void)
{
if (cfigLen > 0) {
cfigLen--;
memcpy(configBuff, configBuff + 1, cfigLen);
// memcpy(configBuff, configBuff + 1, sizeof(configBuff) - 1);
}
}
/**
* @brief modbus的crc校验
* @param *arr_buff
* len
* @retval crc
*/
uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len)
{
uint16_t crc = 0xFFFF;
uint16_t i, j;
for (j = 0; j < len; ++j) {
crc = crc ^ (*arr_buff++);
for (i = 0; i < 8; ++i) {
if ((crc&0x0001) > 0) {
crc = crc >> 1;
crc = crc ^ 0xa001;
}
else {
crc = crc >> 1;
}
}
}
return crc;
}
/**
* @brief buff
* @param
* @retval
*
*/
void zeroConfigBuff(void)
{
cfigLen = 0;
}
/**
* @brief flash中
* @param None
* @retval None
*
*/
void read_and_process_config_data(void)
{
static config_info save_configInfo = {0};
recv_config_info *pack = (recv_config_info *)configBuff;
while (cfigLen >= RECV_CONFIG_INFO) {
/* 判断起始标志是否正确 */
// debug_printf(" start_Flag : 0x%x, 0x%x \n", pack->start_Flag[0], pack->start_Flag[1]);
if (pack->start_Flag[0] != g_cfgParameter.startFlagSL[0]
|| pack->start_Flag[1] != g_cfgParameter.startFlagSL[1]) {
debug(" start_Flag : 0x%x, 0x%x \n", pack->start_Flag[0], pack->start_Flag[1]);
goto err;
}
// /* 判断接入节点类型是否正确 */
// save_configInfo.Access_Node_Type = (uint16_t)pack->Access_Node_Type[0] << 8
// | (uint16_t)pack->Access_Node_Type[1];
// if (save_configInfo.Access_Node_Type != POWERBOX) {
// // debug(" Access_Node_Type : 0x%x \n", save_configInfo.Access_Node_Type);
// goto err;
// }
// /* 判断通信方式是否正确 */
// save_configInfo.Communication_Methods = (uint16_t)pack->Communication_Methods[0] << 8
// | (uint16_t)pack->Communication_Methods[1];
// // if (temp_u16 != RS485 || temp_u16 != RJ45) {
// if (save_configInfo.Communication_Methods != RS485) {
// debug(" Communication_Methods : 0x%x \n", save_configInfo.Communication_Methods);
// goto err;
// }
/* 判断波特率是否正确 */
save_configInfo.gw485_Baud = (uint32_t)pack->gw485_Baud[0] << 24
| (uint32_t)pack->gw485_Baud[1] << 16
| (uint32_t)pack->gw485_Baud[2] << 8
| (uint32_t)pack->gw485_Baud[3];
// debug(" gw485_Baud : 0x%x, %d \n", save_configInfo.gw485_Baud, save_configInfo.gw485_Baud);
if (save_configInfo.gw485_Baud != 9600
&& save_configInfo.gw485_Baud != 115200) {
debug(" gw485_Baud : %d\n", save_configInfo.gw485_Baud);
goto err;
}
save_configInfo.bat485_Baud = (uint32_t)pack->bat485_Baud[0] << 24
| (uint32_t)pack->bat485_Baud[1] << 16
| (uint32_t)pack->bat485_Baud[2] << 8
| (uint32_t)pack->bat485_Baud[3];
if (save_configInfo.bat485_Baud != 9600
&& save_configInfo.bat485_Baud!= 115200
&& save_configInfo.bat485_Baud!= 0) {
debug(" bat485_Baud : 0x%x, %d \n", save_configInfo.bat485_Baud, save_configInfo.bat485_Baud);
goto err;
}
/* 判断汇源协议类型是否正确 */
if (pack->protocolType != 0x01 && pack->protocolType != 0x02) {
debug(" protocolType : 0x%x \n", pack->protocolType);
goto err;
}
/* 判断通信协议类型是否正确 */
if (pack->CommunicationProtocolType != 0x00
&& pack->CommunicationProtocolType != 0x01) {
debug(" CommunicationProtocolType : 0x%x \n", pack->CommunicationProtocolType);
goto err;
}
/* 判断电源盒类型是否正确 */
if (pack->onlyPower != 0x00 && pack->onlyPower != 0x01) {
debug(" onlyPower : 0x%x \n", pack->onlyPower);
goto err;
}
/* 判断恒压充电阈值是否正确 */
save_configInfo.constantVoltageV =
(float)(pack->ConstantVoltageV[0] << 8 | pack->ConstantVoltageV[1]) / enlargeScale;
if (!((save_configInfo.constantVoltageV < 14.4f && save_configInfo.constantVoltageV > 13.5f)
|| save_configInfo.constantVoltageV == 0)) {
debug(" constantVoltageV : %f \n", save_configInfo.constantVoltageV);
goto err;
}
/* 判断浮充充电阈值是否正确 */
save_configInfo.floatI = (float)(pack->FloatI[0] << 8 | pack->FloatI[1]) / enlargeScale;
if (save_configInfo.floatI > 0.2f || save_configInfo.floatI < 0) {
debug(" floatI : %f \n", save_configInfo.floatI);
goto err;
}
/* 判断太阳能板开路启动电压是否正确 */
save_configInfo.startSolarOpenCircuitV =
(float)(pack->startSolarOpenCircuitV[0] << 8 | pack->startSolarOpenCircuitV[1]) / enlargeScale;
if (!((save_configInfo.startSolarOpenCircuitV < 24 && save_configInfo.startSolarOpenCircuitV > 14)
|| save_configInfo.startSolarOpenCircuitV == 0)) {
debug(" startSolarOpenCircuitV : %f \n", save_configInfo.startSolarOpenCircuitV);
goto err;
}
/* 判断太阳能板关闭电压是否正确 */
save_configInfo.stopSolarOpenCircuitV =
(float)(pack->stopSolarOpenCircuitV[0] << 8 | pack->stopSolarOpenCircuitV[1]) / enlargeScale;
if (!((save_configInfo.stopSolarOpenCircuitV < 17 && save_configInfo.stopSolarOpenCircuitV > 13)
|| save_configInfo.stopSolarOpenCircuitV == 0)) {
debug(" stopSolarOpenCircuitV : %f \n", save_configInfo.stopSolarOpenCircuitV);
goto err;
}
/* 判断恒压充电时的输出电压是否正确 */
save_configInfo.constantVoltageChargeV =
(float)(pack->constantVoltageChargeV[0] << 8 | pack->constantVoltageChargeV[1]) / enlargeScale;
if (!((save_configInfo.constantVoltageChargeV < 14.6f && save_configInfo.constantVoltageChargeV > 14)
|| save_configInfo.constantVoltageChargeV == 0)) {
debug(" constantVoltageChargeV : %f \n", save_configInfo.constantVoltageChargeV);
goto err;
}
/* 判断浮充充电时的输出电压是否正确 */
save_configInfo.FloatChargeV =
(float)(pack->FloatChargeV[0] << 8 | pack->FloatChargeV[1]) / enlargeScale;
if (!((save_configInfo.FloatChargeV < 14.4f && save_configInfo.FloatChargeV > 13.8f)
|| save_configInfo.FloatChargeV == 0)) {
debug(" FloatChargeV : %f \n", save_configInfo.FloatChargeV);
goto err;
}
/* 判断mos管停止工作温度是否正确 */
save_configInfo.HighSideMosTemperature_stop =
(float)(pack->HighSideMosTemperature_stop[0] << 8 | pack->HighSideMosTemperature_stop[1]) / enlargeScale;
if (save_configInfo.HighSideMosTemperature_stop < 50 && save_configInfo.HighSideMosTemperature_stop != 0) {
debug(" HighSideMosTemperature_stop : %f \n", save_configInfo.HighSideMosTemperature_stop);
goto err;
}
/* 判断mos管降低工作功率工作温度是否正确 */
save_configInfo.HighSideMosTemperature_end =
(float)(pack->HighSideMosTemperature_end[0] << 8 | pack->HighSideMosTemperature_end[1]) / enlargeScale;
if (save_configInfo.HighSideMosTemperature_end < 40 && save_configInfo.HighSideMosTemperature_end != 0) {
debug(" HighSideMosTemperature_end : %f \n", save_configInfo.HighSideMosTemperature_end);
goto err;
}
/* 判断mos管完全恢复工作温度是否正确 */
save_configInfo.HighSideMosTemperature_start =
(float)(pack->HighSideMosTemperature_start[0] << 8 | pack->HighSideMosTemperature_start[1]) / enlargeScale;
if (save_configInfo.HighSideMosTemperature_start > 70 && save_configInfo.HighSideMosTemperature_start != 0) {
debug(" HighSideMosTemperature_start : %d \n", save_configInfo.HighSideMosTemperature_start);
goto err;
}
// /* 判断启动任务中太阳能板开路电压检测间隔时间是否正确 */
// save_configInfo.checkSolarOpenCircuitVTime =
// pack->checkSolarOpenCircuitVTime[0] << 8 | pack->checkSolarOpenCircuitVTime[1];
// if (save_configInfo.checkSolarOpenCircuitVTime > 1800 || save_configInfo.checkSolarOpenCircuitVTime < 5) {
// debug(" checkSolarOpenCircuitVTime : %d \n", save_configInfo.checkSolarOpenCircuitVTime);
// goto err;
// }
// /* 判断传感器运行再次注册的间隔是否正确 */
// save_configInfo.sensorEnableBroadcastTime =
// pack->sensorEnableBroadcastTime[0] << 8 | pack->sensorEnableBroadcastTime[1];
// if (save_configInfo.sensorEnableBroadcastTime > 60 || save_configInfo.sensorEnableBroadcastTime < 10) {
// debug(" sensorEnableBroadcastTime : %d \n", save_configInfo.sensorEnableBroadcastTime);
// goto err;
// }
/* 判断出现短路保护后延长该段时间再次检测是否短路,仍然短路则关闭输出的间隔是否正确 */
save_configInfo.outputAgainFlagTime =
pack->outputAgainFlagTime[0] << 8 | pack->outputAgainFlagTime[1];
if (!((save_configInfo.outputAgainFlagTime < 30 && save_configInfo.outputAgainFlagTime > 5)
|| save_configInfo.outputAgainFlagTime == 0)) {
debug(" outputAgainFlagTime : %d \n", save_configInfo.outputAgainFlagTime);
goto err;
}
/* 判断出现过载后在该间隔时间中多次2次出现过载则关闭输出的间隔是否正确 */
save_configInfo.excessiveLoadFlagTime =
pack->excessiveLoadFlagTime[0] << 8 | pack->excessiveLoadFlagTime[1];
if (!((save_configInfo.excessiveLoadFlagTime < 90 && save_configInfo.excessiveLoadFlagTime > 20)
|| save_configInfo.excessiveLoadFlagTime == 0)) {
debug(" excessiveLoadFlagTime : %d \n", save_configInfo.excessiveLoadFlagTime);
goto err;
}
/* 判断出现过载过载保护后,在该间隔段时间后,再次尝试输出的间隔是否正确 */
save_configInfo.eLAgainTime = pack->eLAgainTime[0] << 8 | pack->eLAgainTime[1];
if (save_configInfo.eLAgainTime > 3000 || save_configInfo.eLAgainTime < 1000) {
debug(" eLAgainTime : %d \n", save_configInfo.eLAgainTime);
goto err;
}
/* crc校验 */
save_configInfo.crc = pack->crc[0] << 8 | pack->crc[1];
if (save_configInfo.crc != checkModebusCrc(configBuff, RECV_CONFIG_INFO - 3)) {
debug(" crc : %x%x \n", pack->crc[0], pack->crc[1]);
debug(" checkModebusCrc : %x \n", checkModebusCrc(configBuff, RECV_CONFIG_INFO));
goto err;
}
/* 结束标志 */
if (pack->end_Flag != 0x16) {
debug(" end_Flag : %x \n", pack->end_Flag);
goto err;
}
// debug("address : 0x %x %x %x %x %x %x %x\n", pack->address[0]
// , pack->address[1], pack->address[2], pack->address[3]
// , pack->address[4], pack->address[5], pack->address[6]);
config_info temp_configInfo;
read_config_info(&temp_configInfo);
if (pack->address[0] != 0xFF
|| pack->address[1] != 0xFF
|| pack->address[2] != 0xFF
|| pack->address[3] != 0xFF
|| pack->address[4] != 0xFF
|| pack->address[5] != 0xFF
|| pack->address[6] != 0xFF) {
save_configInfo.address[0] = pack->address[0];
save_configInfo.address[1] = pack->address[1];
save_configInfo.address[2] = pack->address[2];
save_configInfo.address[3] = pack->address[3];
save_configInfo.address[4] = pack->address[4];
save_configInfo.address[5] = pack->address[5];
save_configInfo.address[6] = pack->address[6];
// debug("address : 0x %x %x %x %x %x %x %x\n", save_configInfo.address[0]
// , save_configInfo.address[1], save_configInfo.address[2], save_configInfo.address[3]
// , save_configInfo.address[4], save_configInfo.address[5], save_configInfo.address[6]);
} else {
save_configInfo.address[0] = temp_configInfo.address[0];
save_configInfo.address[1] = temp_configInfo.address[1];
save_configInfo.address[2] = temp_configInfo.address[2];
save_configInfo.address[3] = temp_configInfo.address[3];
save_configInfo.address[4] = temp_configInfo.address[4];
save_configInfo.address[5] = temp_configInfo.address[5];
save_configInfo.address[6] = temp_configInfo.address[6];
}
if (pack->hardwareID[0] != 0xFF
|| pack->hardwareID[1] != 0xFF
|| pack->hardwareID[2] != 0xFF
|| pack->hardwareID[3] != 0xFF
|| pack->hardwareID[4] != 0xFF
|| pack->hardwareID[5] != 0xFF) {
save_configInfo.hardwareID[0] = pack->hardwareID[0];
save_configInfo.hardwareID[1] = pack->hardwareID[1];
save_configInfo.hardwareID[2] = pack->hardwareID[2];
save_configInfo.hardwareID[3] = pack->hardwareID[3];
save_configInfo.hardwareID[4] = pack->hardwareID[4];
save_configInfo.hardwareID[5] = pack->hardwareID[5];
} else {
save_configInfo.hardwareID[0] = temp_configInfo.hardwareID[0];
save_configInfo.hardwareID[1] = temp_configInfo.hardwareID[1];
save_configInfo.hardwareID[2] = temp_configInfo.hardwareID[2];
save_configInfo.hardwareID[3] = temp_configInfo.hardwareID[3];
save_configInfo.hardwareID[4] = temp_configInfo.hardwareID[4];
save_configInfo.hardwareID[5] = temp_configInfo.hardwareID[5];
}
if (pack->communicationID[0] != 0xFF
|| pack->communicationID[1] != 0xFF
|| pack->communicationID[2] != 0xFF
|| pack->communicationID[3] != 0xFF) {
save_configInfo.communicationID[0] = pack->communicationID[0];
save_configInfo.communicationID[1] = pack->communicationID[1];
save_configInfo.communicationID[2] = pack->communicationID[2];
save_configInfo.communicationID[3] = pack->communicationID[3];
} else {
save_configInfo.communicationID[0] = temp_configInfo.communicationID[0];
save_configInfo.communicationID[1] = temp_configInfo.communicationID[1];
save_configInfo.communicationID[2] = temp_configInfo.communicationID[2];
save_configInfo.communicationID[3] = temp_configInfo.communicationID[3];
}
save_configInfo.protocolType = pack->protocolType;
save_configInfo.CommunicationProtocolType = pack->CommunicationProtocolType;
save_configInfo.onlyPower = pack->onlyPower;
save_configInfo.crc = checkModebusCrc((uint8_t *)&save_configInfo, CONFIG_INFO_SIZE - 2);
// save_backups_config_info(&save_configInfo);
// save_config_info(&save_configInfo);
saveConfigInfo(&save_configInfo);
// memset(config_buff, 0, sizeof(config_buff));
zeroConfigBuff();
// /* 返回更改配置文件成功 */
// SL_Mppt_SOther_pack SUpdateProfile_pack = {0};
// SUpdateProfile_pack.start_Flag[0] = g_otherParameter.startFlagSL[0];
// SUpdateProfile_pack.start_Flag[1] = g_otherParameter.startFlagSL[1];
// SUpdateProfile_pack.address[0] = save_configInfo.address[0];
// SUpdateProfile_pack.address[1] = save_configInfo.address[1];
// SUpdateProfile_pack.address[2] = save_configInfo.address[2];
// SUpdateProfile_pack.address[3] = save_configInfo.address[3];
// SUpdateProfile_pack.address[4] = save_configInfo.address[4];
// SUpdateProfile_pack.address[5] = save_configInfo.address[5];
// SUpdateProfile_pack.address[6] = save_configInfo.address[6];
// SUpdateProfile_pack.function_Code = SL_Function_Code_Update_Profile;
// SUpdateProfile_pack.state = 0x01;
// uint16_t crc = CheckFuncSL((uint8_t *)&SUpdateProfile_pack, SL_MPPT_SOTHER_PACK_SIZE - 3);
// SUpdateProfile_pack.check_Bit_H = crc >> 8;
// SUpdateProfile_pack.check_Bit_L = crc;
// SUpdateProfile_pack.end_Flag = g_otherParameter.endFlagSL;
// while (1) {
// if (!Check_485_bus_busy(g_gw485_uart4_handle)) {
// uart_dev_write(g_gw485_uart4_handle, (uint8_t *)&SUpdateProfile_pack, SL_MPPT_SOTHER_PACK_SIZE);
// USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
// break;
// }
// Delay_Ms(randomDelay());
// }
uart_dev_write(g_gw485_uart2_handle, "hello world\n", sizeof("hello world\n"));
HAL_Delay(1000);
/* 复位 */
NVIC_SystemReset();
err:
// config_buff_pos--;
// memcpy(config_buff, config_buff + 1, sizeof(config_buff) - 1);
outConfigBuff();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
#include "inFlash.h"
#include "parameter.h"
#include "pDebug.h"
#include "cfg_protocol.h"
//#include "cfg_protocol.h"
#include "configParameter.h"
static void save_config_info(config_info *save_config_info);

View File

@ -5,16 +5,20 @@
#include "FM_GPIO.h"
#include "chargControlTypes.h"
#include "bl_chargControl.h"
#include "hy_protocol.h"
#include "cfg_protocol.h"
//#include "hy_protocol.h"
//#include "cfg_protocol.h"
#include "uart_dev.h"
#include "abnormalManage.h"
#include "interruptSend.h"
#include "configParameter.h"
#include "capture.h"
#include "bl_usart.h"
#include <stdio.h>
/* 控制运行指示灯和喂狗 */
#define runled_reloadVal 2000 /* 任务执行间隔 */
// static uint16_t runled_reloadVal = 1000; /* 任务执行间隔 */
@ -58,31 +62,31 @@ static void Task_impedanceCalculation(void);
STR_TimeSliceOffset m_collectOpenCircuitVoltage;
void Task_collectOpenCircuitVoltage(void);
/* 限时开启HY协议配置模式 */
#define beginHYconfigMode_reloadVal 1000 /* 任务执行间隔 */
#define beginHYconfigMode_offset 0 /* 任务执行偏移量 */
static STR_TimeSliceOffset m_beginHYconfigMode;
static void Task_beginHYconfigMode(void);
// /* 限时开启HY协议配置模式 */
// #define beginHYconfigMode_reloadVal 1000 /* 任务执行间隔 */
// #define beginHYconfigMode_offset 0 /* 任务执行偏移量 */
// static STR_TimeSliceOffset m_beginHYconfigMode;
// static void Task_beginHYconfigMode(void);
/* 串口数据接收判断 */
#define usartJudge_reloadVal 100 /* 任务执行间隔 */
#define usartJudge_offset 0 /* 任务执行偏移量 */
static STR_TimeSliceOffset m_usartJudge;
static void Task_usartJudge(void);
// /* 串口数据接收判断 */
// #define usartJudge_reloadVal 100 /* 任务执行间隔 */
// #define usartJudge_offset 0 /* 任务执行偏移量 */
// static STR_TimeSliceOffset m_usartJudge;
// static void Task_usartJudge(void);
/* 串口数据解析和处理 */
#define usartHandle_reloadVal 20 /* 任务执行间隔 */
#define usartHandle_offset 0 /* 任务执行偏移量 */
static STR_TimeSliceOffset m_usartHandle;
static void Task_usartHandle(void);
typedef void (*uartJudgeHandle)(device_handle device);
static uartJudgeHandle uart_judge_handle;
// /* 串口数据解析和处理 */
// #define usartHandle_reloadVal 20 /* 任务执行间隔 */
// #define usartHandle_offset 0 /* 任务执行偏移量 */
// static STR_TimeSliceOffset m_usartHandle;
// static void Task_usartHandle(void);
// typedef void (*uartJudgeHandle)(device_handle device);
// static uartJudgeHandle uart_judge_handle;
/* 配置文件数据解析和处理 */
#define usartCfg_reloadVal 200 /* 任务执行间隔 */
#define usartCfg_offset 0 /* 任务执行偏移量 */
static STR_TimeSliceOffset m_usartCfg;
static void Task_usartCfg(void);
// /* 配置文件数据解析和处理 */
// #define usartCfg_reloadVal 200 /* 任务执行间隔 */
// #define usartCfg_offset 0 /* 任务执行偏移量 */
// static STR_TimeSliceOffset m_usartCfg;
// static void Task_usartCfg(void);
/* 短路保护 */
#define shortCircuitProtection_reloadVal 1000 /* 任务执行间隔 */
@ -120,6 +124,13 @@ void Task_busFree(void);
STR_TimeSliceOffset m_softShortCircuit;
void Task_softShortCircuit(void);
/* 串口任务 */
#define uart_reloadVal 100 /* 任务执行间隔 */
#define uart_offset 0 /* 任务执行偏移量 */
STR_TimeSliceOffset m_uart;
void Task_uart(void);
/**
* @brief
* @param None
@ -136,9 +147,7 @@ void task_Init(void)
TimeSliceOffset_Register(&m_collectOpenCircuitVoltage, Task_collectOpenCircuitVoltage
, collectOpenCircuitVoltage_reloadVal, collectOpenCircuitVoltage_offset);
uartTaskInit();
TimeSliceOffset_Register(&m_usartJudge, Task_usartJudge, usartJudge_reloadVal, usartJudge_offset);
TimeSliceOffset_Register(&m_usartCfg, Task_usartCfg, usartCfg_reloadVal, usartCfg_offset);
TimeSliceOffset_Register(&m_uart, Task_uart, uart_reloadVal, uart_offset);
TimeSliceOffset_Register(&m_busFree, Task_busFree, busFree_reloadVal, busFree_offset);
}
@ -179,17 +188,17 @@ void Task_wdi(void)
{
feedDog();
debug_printf("chargCurrent:%f \n", getChargCurrent());
debug_printf("outputVoltage:%f \n", getOutputVoltage());
debug_printf("BatteryVoltage:%f \n", getBatteryVoltage());
debug_printf("dischargCurrent:%f \n", getDischargCurrent());
debug_printf("solarInCircuitVoltage:%f \n", getSolarInCircuitVoltage());
debug_printf("HighSideMosTemperature:%f \n", getHighSideMosTemperature());
debug_printf("InputVoltage:%f \n", getInputVoltage());
debug_printf("DischargMosState:%d \n", getDischargMosState());
debug_printf("MPPT_Mode:%d \n", getMPPT_Mode());
debug_printf("loopImpedance:%f \n", g_cfgParameter.loopImpedance);
debug_printf("DutyRatio:%f \n", getDutyRatio());
// debug_printf("chargCurrent:%f \n", getChargCurrent());
// debug_printf("outputVoltage:%f \n", getOutputVoltage());
// debug_printf("BatteryVoltage:%f \n", getBatteryVoltage());
// debug_printf("dischargCurrent:%f \n", getDischargCurrent());
// debug_printf("solarInCircuitVoltage:%f \n", getSolarInCircuitVoltage());
// debug_printf("HighSideMosTemperature:%f \n", getHighSideMosTemperature());
// debug_printf("InputVoltage:%f \n", getInputVoltage());
// debug_printf("DischargMosState:%d \n", getDischargMosState());
// debug_printf("MPPT_Mode:%d \n", getMPPT_Mode());
// debug_printf("loopImpedance:%f \n", g_cfgParameter.loopImpedance);
// debug_printf("DutyRatio:%f \n", getDutyRatio());
// char buf[100];
// sprintf(buf, "chargCurrent:%f \n", getChargCurrent());
@ -502,86 +511,86 @@ void Task_collectOpenCircuitVoltage(void)
}
}
/**
* @brief HY配置模式后120S后自动退出
* @param
* @retval
*/
void Task_beginHYconfigMode(void)
{
static uint8_t num = 0;
num++;
if (num >= 120) {
TimeSliceOffset_Unregister(&m_beginHYconfigMode);
m_beginHYconfigMode.runFlag = 0;
num = 0;
setHYconfigModeState(FALSE);
}
}
// /**
// * @brief 开启HY配置模式后配置完成后120S后自动退出
// * @param
// * @retval
// */
// void Task_beginHYconfigMode(void)
// {
// static uint8_t num = 0;
// num++;
// if (num >= 120) {
// TimeSliceOffset_Unregister(&m_beginHYconfigMode);
// m_beginHYconfigMode.runFlag = 0;
// num = 0;
// setHYconfigModeState(FALSE);
// }
// }
/**
* @brief HY配置模式后启动退出任务
* @param
* @retval
*/
void beginHYconfigMode(void)
{
setHYconfigModeState(TRUE);
TimeSliceOffset_Register(&m_beginHYconfigMode, Task_beginHYconfigMode
, beginHYconfigMode_reloadVal, beginHYconfigMode_offset);
}
// /**
// * @brief 开启HY配置模式后启动退出任务
// * @param
// * @retval
// */
// void beginHYconfigMode(void)
// {
// setHYconfigModeState(TRUE);
// TimeSliceOffset_Register(&m_beginHYconfigMode, Task_beginHYconfigMode
// , beginHYconfigMode_reloadVal, beginHYconfigMode_offset);
// }
/**
* @brief 使
* @param
* @retval
*/
void uartTaskInit(void)
{
// if (g_cfgParameter.CommunicationProtocolType == 0x00) {
// uart_judge_handle = read_and_process_uart_data;
// } else if (g_cfgParameter.CommunicationProtocolType == 0x01) {
// uart_judge_handle = HY_read_and_process_uart_data;
// }
// /**
// * @brief 初始化串口任务,确定使用的协议
// * @param
// * @retval
// */
// void uartTaskInit(void)
// {
// // if (g_cfgParameter.CommunicationProtocolType == 0x00) {
// // uart_judge_handle = read_and_process_uart_data;
// // } else if (g_cfgParameter.CommunicationProtocolType == 0x01) {
// // uart_judge_handle = HY_read_and_process_uart_data;
// // }
uart_judge_handle = HY_read_and_process_uart_data;
}
// uart_judge_handle = HY_read_and_process_uart_data;
// }
/**
* @brief
* @param
* @retval
*/
void Task_usartJudge(void)
{
/* 检测到对上通信串口有数据启动读取并解析任务 */
if (uart_dev_char_present(g_gw485_uart2_handle)) {
TimeSliceOffset_Register(&m_usartHandle, Task_usartHandle
, usartHandle_reloadVal, usartHandle_offset);
}
}
// /**
// * @brief 检测有无通信数据传来
// * @param
// * @retval
// */
// void Task_usartJudge(void)
// {
// /* 检测到对上通信串口有数据启动读取并解析任务 */
// if (uart_dev_char_present(g_gw485_uart2_handle)) {
// TimeSliceOffset_Register(&m_usartHandle, Task_usartHandle
// , usartHandle_reloadVal, usartHandle_offset);
// }
// }
/**
* @brief
* @param
* @retval
*/
void Task_usartHandle(void)
{
TimeSliceOffset_Unregister(&m_usartHandle);
m_usartHandle.runFlag = 0;
uart_judge_handle(g_gw485_uart2_handle);
}
// /**
// * @brief 读取并解析对上通讯的数据
// * @param
// * @retval
// */
// void Task_usartHandle(void)
// {
// TimeSliceOffset_Unregister(&m_usartHandle);
// m_usartHandle.runFlag = 0;
// uart_judge_handle(g_gw485_uart2_handle);
// }
/**
* @brief
* @param
* @retval
*/
void Task_usartCfg(void)
{
read_and_process_config_data();
}
// /**
// * @brief 读取并解析配置文件的数据
// * @param
// * @retval
// */
// void Task_usartCfg(void)
// {
// read_and_process_config_data();
// }
/**
* @brief
@ -774,4 +783,15 @@ void startSoftShortCircuitProtection(void)
{
TimeSliceOffset_Register(&m_softShortCircuit, Task_softShortCircuit
, softShortCircuit_reloadVal, softShortCircuit_offset);
}
}
/**
* @brief
* @param
* @retval
*/
void Task_uart(void)
{
gw485DataAnalysis(g_gw485_uart2_handle);
}

File diff suppressed because it is too large Load Diff

View File

@ -1449,10 +1449,7 @@
<name>$PROJ_DIR$\..\APP\businessLogic\Src\bl_comm.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\cfg_protocol.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\hy_protocol.c</name>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\bl_usart.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\inFlash.c</name>
@ -1466,6 +1463,9 @@
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\parameter.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\SOE.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\task.c</name>
</file>

View File

@ -4,6 +4,7 @@
#include "comm_types.h"
#define softVer "SV01_24101501"
// /* 第一段保护的延时时间单位100uS */
// const uint32_t firstStageProtectionDelay = 2; // 200uS
@ -64,4 +65,8 @@
/* 最大充电电压V */
#define maxOpenSolarOpenCircuitVMacro 25.0f
#endif