hy协议添加软件是否启动

This commit is contained in:
起床就犯困 2025-02-18 16:47:04 +08:00
parent fbd83bed35
commit 176c26834a
7 changed files with 140 additions and 116 deletions

View File

@ -46,7 +46,6 @@
#endif #endif
void uartCommonInit(void); void uartCommonInit(void);
uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len); uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len);
@ -54,5 +53,4 @@ uint16_t checkModebusCrc(uint8_t *arr_buff, uint8_t len);
void gw485DataAnalysis(device_handle device); void gw485DataAnalysis(device_handle device);
#endif #endif

View File

@ -14,6 +14,8 @@ typedef struct _config_parameter{
uint32_t gw485_Baud; /* 串口波特率 */ uint32_t gw485_Baud; /* 串口波特率 */
uint32_t bat485_Baud; /* 串口波特率,为0代表bms不支持通信 */ uint32_t bat485_Baud; /* 串口波特率,为0代表bms不支持通信 */
uint32_t supportProtocolTypes; /* 支持协议类型 */
uint8_t powerBoxType; /* 是否只充当电源板0x00:不是0xFF是*/ uint8_t powerBoxType; /* 是否只充当电源板0x00:不是0xFF是*/
float constantVoltageV; /* 恒压充电阈值电压(V) */ float constantVoltageV; /* 恒压充电阈值电压(V) */
float floatI; /* 浮充充电阈值电流(A) */ float floatI; /* 浮充充电阈值电流(A) */
@ -42,6 +44,9 @@ typedef struct _config_parameter{
float FloatChargeV; /* 浮充充电时的输出电压(V) */ float FloatChargeV; /* 浮充充电时的输出电压(V) */
uint16_t collectOpenCircuitVoltageTime; /* 充电时采集开路电压的间隔时间 */ uint16_t collectOpenCircuitVoltageTime; /* 充电时采集开路电压的间隔时间 */
float reverseChargProtectionCurr; /* 反向充电保护电流 */ float reverseChargProtectionCurr; /* 反向充电保护电流 */
float softStartVolt; /* 软启动阈值电压 */
float MPPTConstantVoltage; /* MPPT恒定输出电压 */
float MPPTReduceConstantVoltage; /* MPPT降功率运行时控制输入电压稳定值 */
/* SL */ /* SL */
uint16_t Access_Node_Type; /* 接入节点类型 */ uint16_t Access_Node_Type; /* 接入节点类型 */

View File

@ -490,7 +490,6 @@ void DSG_PROT_Interrupt(void)
* @retval * @retval
* *
*/ */
void EXCHG_PROT_Interrupt(void) void EXCHG_PROT_Interrupt(void)
{ {
setShortCircuit(); setShortCircuit();
@ -503,6 +502,7 @@ void EXCHG_PROT_Interrupt(void)
/* 一定时间内第二次进入输出短路保护,关闭输出 */ /* 一定时间内第二次进入输出短路保护,关闭输出 */
else if (getShortCircuit() >= 2) { else if (getShortCircuit() >= 2) {
stopShortCircuitProtection(); stopShortCircuitProtection();
zeroShortCircuit();
insertEventsOrderRecord(hardwareInputProtection); insertEventsOrderRecord(hardwareInputProtection);
} }
} }

View File

@ -390,9 +390,10 @@ void mppt_readJust(void)
} }
if (getMosTemperState() == mosTemperReduce) { if (getMosTemperState() == mosTemperReduce) {
SolarInCircuitV = 20; SolarInCircuitV = g_cfgParameter.MPPTReduceConstantVoltage;
mppt_constantVoltage(SolarInCircuitV);
return;
} }
flag = 0; flag = 0;
// Power = totalPower / 30.0f; // Power = totalPower / 30.0f;
@ -417,9 +418,9 @@ void mppt_readJust(void)
// hysteresisValue1 = getChargCurrent() * 1.7f; // hysteresisValue1 = getChargCurrent() * 1.7f;
// hysteresisValue2 = getChargCurrent() * 12; // hysteresisValue2 = getChargCurrent() * 12;
currMinFlag++; currMinFlag++;
if (currMinFlag == 8) { if (currMinFlag == 5) {
currMinFlag = 0; currMinFlag = 0;
SolarInCircuitV = 18.0f; SolarInCircuitV = g_cfgParameter.MPPTConstantVoltage;
currMinFlag1 = 1; currMinFlag1 = 1;
} }
@ -428,7 +429,7 @@ void mppt_readJust(void)
// else if (getChargCurrent() < 3 && currMinFlag1) { // else if (getChargCurrent() < 3 && currMinFlag1) {
else if (totalChargeCurr < 150 && currMinFlag1) { else if (totalChargeCurr < 150 && currMinFlag1) {
currMinFlag1 = 0; // currMinFlag1 = 0;
currMinFlag = 0; currMinFlag = 0;
return; return;
} }
@ -533,7 +534,7 @@ void mppt_readJust(void)
/* 一段时间内都未调节 */ /* 一段时间内都未调节 */
if (numFlag == 10) { if (numFlag == 10) {
if (Power < 300) { if (Power < 300) {
SolarInCircuitV = 17.0f; SolarInCircuitV = g_cfgParameter.MPPTConstantVoltage;
} }
else if (flag1) { else if (flag1) {
SolarInCircuitV -= stepV2; SolarInCircuitV -= stepV2;
@ -557,6 +558,8 @@ void mppt_readJust(void)
// lLLPower = lLPower; // lLLPower = lLPower;
lLPower = lPower; lLPower = lPower;
lPower = Power; lPower = Power;
mppt_constantVoltage(SolarInCircuitV);
} }
/** /**
@ -631,13 +634,13 @@ BOOL stopChargConditions(void)
/* 异常情况关闭充电 */ /* 异常情况关闭充电 */
static uint16_t flag = 0; static uint16_t flag = 0;
if ((getSolarInCircuitVoltage() < (g_cfgParameter.stopSolarOutputCircuitV + 1) if ((getSolarInCircuitVoltage() < (g_cfgParameter.stopSolarOutputCircuitV + 1)
// || getSolarInCircuitVoltage() > (g_cfgParameter.startSolarOpenCircuitV))
|| getSolarInCircuitVoltage() > 18.5f) || getSolarInCircuitVoltage() > 18.5f)
&& getChargCurrent() < 0.1f && getChargCurrent() < 0.1f
&& getMPPT_Mode() == MPPT) { && getMPPT_Mode() == MPPT) {
// return TRUE; // return TRUE;
flag++; flag++;
} }
// if ((getSolarInCircuitVoltage() < 17.8f // if ((getSolarInCircuitVoltage() < 17.8f
// || getSolarInCircuitVoltage() > 20) // || getSolarInCircuitVoltage() > 20)
// && getChargCurrent() < 0.1f // && getChargCurrent() < 0.1f
@ -645,11 +648,11 @@ BOOL stopChargConditions(void)
// // return TRUE; // // return TRUE;
// flag++; // flag++;
// } // }
// else { else {
// flag = 0; flag = 0;
// } }
if (flag > 20000) { if (flag > 10000) {
flag = 0; flag = 0;
insertEventsOrderRecord(abnormalControl); insertEventsOrderRecord(abnormalControl);
return TRUE; return TRUE;

View File

@ -21,7 +21,7 @@
#define HY_communicationIDStartAddr (HY_hardWordIDStartAddr + HY_hardWordIDSize) #define HY_communicationIDStartAddr (HY_hardWordIDStartAddr + HY_hardWordIDSize)
#define HY_communicationIDSize 4 #define HY_communicationIDSize 4
static uint8_t HY_hardWordID[HY_hardWordIDSize] = {0x48, 0x59, 0x30, 0x30, 0x30, 0x31}; static uint8_t HY_hardWordID[HY_hardWordIDSize] = {0x48, 0x59, 0x30, 0x30, 0x30, 0x31};
static uint8_t HY_communicationID[HY_communicationIDSize] = {0x00, 0x00, 0x00, 0x01}; static uint8_t HY_communicationID[HY_communicationIDSize] = {0x00, 0x00, 0x00, 0x02};
static uint8_t HY_startFlag = 0x68; static uint8_t HY_startFlag = 0x68;
static uint8_t HY_endFlag = 0x16; static uint8_t HY_endFlag = 0x16;
@ -479,8 +479,9 @@ uint8_t HY_CheckFunc(uint8_t *arr_buff, uint8_t len)
{ {
uint8_t temp = 0x00; uint8_t temp = 0x00;
uint32_t sum = 0x00; uint32_t sum = 0x00;
arr_buff++;
for(uint8_t i = 0; i < len; i++) { for(uint8_t i = 1; i < len; i++) {
sum += *arr_buff++; sum += *arr_buff++;
} }
@ -568,92 +569,95 @@ void stateMachine(device_handle device)
} }
#ifdef HY_ChargeControlBox_PROTOCOL_ENABLE #ifdef HY_ChargeControlBox_PROTOCOL_ENABLE
else if (state == startFlagHY) { else if (g_cfgParameter.supportProtocolTypes & 0x01)
analysisStartFlagHY(); {
} if (state == startFlagHY) {
analysisStartFlagHY();
else if (state == hardWordIDHY) { }
analysisHardWordIDHY();
} else if (state == hardWordIDHY) {
analysisHardWordIDHY();
else if (state == communicationIDHY) { }
analysisCommunicationIDHY();
} else if (state == communicationIDHY) {
analysisCommunicationIDHY();
else if (state == controlWordHY) { }
analysisControlWordHY();
} else if (state == controlWordHY) {
analysisControlWordHY();
else if (state == dataLengthHY) { }
analysisDataLengthHY();
} else if (state == dataLengthHY) {
analysisDataLengthHY();
else if (state == batteryStatusHY) { }
analysisBatteryStatusHY();
} else if (state == batteryStatusHY) {
analysisBatteryStatusHY();
else if (state == electricityStatisticsHY) { }
analysisElectricityStatisticsHY();
} else if (state == electricityStatisticsHY) {
analysisElectricityStatisticsHY();
else if (state == sensorNumberConfigurationHY) { }
analysisSensorNumberConfigurationHY();
} else if (state == sensorNumberConfigurationHY) {
analysisSensorNumberConfigurationHY();
else if (state == sensorNumberInquiryHY) { }
analysisSensorNumberInquiryHY();
} else if (state == sensorNumberInquiryHY) {
analysisSensorNumberInquiryHY();
else if (state == resetInstructionHY) { }
analysisResetInstructionHY();
} else if (state == resetInstructionHY) {
analysisResetInstructionHY();
}
else if (state == chargeControlConfigurationHY) { else if (state == chargeControlConfigurationHY) {
analysisChargeControlConfigurationHY(); analysisChargeControlConfigurationHY();
} }
else if (state == chargeControlQueryHY) { else if (state == chargeControlQueryHY) {
analysisChargeControlQueryHY(); analysisChargeControlQueryHY();
} }
else if (state == configureTimeHY) { else if (state == configureTimeHY) {
analysisConfigureTimeHY(); analysisConfigureTimeHY();
} }
else if (state == queryTimeHY) { else if (state == queryTimeHY) {
analysisQueryTimeHY(); analysisQueryTimeHY();
} }
else if (state == configureProtocolTypeHY) { else if (state == configureProtocolTypeHY) {
analysisConfigureProtocolTypeHY(); analysisConfigureProtocolTypeHY();
} }
else if (state == queryControlBoxConfigurationHY) { else if (state == queryControlBoxConfigurationHY) {
analysisQueryControlBoxConfigurationHY(); analysisQueryControlBoxConfigurationHY();
} }
else if (state == querySoftwareVersionHY) { else if (state == querySoftwareVersionHY) {
analysisQuerySoftwareVersionHY(); analysisQuerySoftwareVersionHY();
} }
else if (state == enterConfigurationModeHY) { else if (state == enterConfigurationModeHY) {
analysisEnterConfigurationModeHY(); analysisEnterConfigurationModeHY();
} }
else if (state == configureHardwareIDHY) { else if (state == configureHardwareIDHY) {
analysisConfigureHardwareIDHY(); analysisConfigureHardwareIDHY();
} }
else if (state == hardwareID_communicationIDQueryHY) { else if (state == hardwareID_communicationIDQueryHY) {
analysisHardwareID_communicationIDQueryHY(); analysisHardwareID_communicationIDQueryHY();
} }
else if (state == modifyCommunicationIDHY) { else if (state == modifyCommunicationIDHY) {
analysisModifyCommunicationIDHY(); analysisModifyCommunicationIDHY();
} }
else if (state == checkMotherboardTemperatureHY) { else if (state == checkMotherboardTemperatureHY) {
analysisCheckMotherboardTemperatureHY(); analysisCheckMotherboardTemperatureHY();
}
} }
#endif #endif
} }
@ -4672,7 +4676,7 @@ BOOL analysisModifyCommunicationIDHY(void)
{ {
/* 解析帧 */ /* 解析帧 */
if (gw485RxBufferIndex >= frameLength) { if (gw485RxBufferIndex >= frameLength) {
log_info("analysisSensorNumberConfigurationHY \n"); // log_info("analysisSensorNumberConfigurationHY \n");
/* 比较校验位和结束标志 */ /* 比较校验位和结束标志 */
if (gw485RxBuffer[frameLength - 2] != HY_CheckFunc(gw485RxBuffer, frameLength - 2) if (gw485RxBuffer[frameLength - 2] != HY_CheckFunc(gw485RxBuffer, frameLength - 2)
@ -4787,7 +4791,7 @@ BOOL analysisCheckMotherboardTemperatureHY(void)
{ {
/* 解析帧 */ /* 解析帧 */
if (gw485RxBufferIndex >= frameLength) { if (gw485RxBufferIndex >= frameLength) {
log_info("analysisCheckMotherboardTemperatureHY \n"); // log_info("analysisCheckMotherboardTemperatureHY \n");
/* 比较校验位和结束标志 */ /* 比较校验位和结束标志 */
if (gw485RxBuffer[frameLength - 2] != HY_CheckFunc(gw485RxBuffer, frameLength - 2) if (gw485RxBuffer[frameLength - 2] != HY_CheckFunc(gw485RxBuffer, frameLength - 2)
@ -4925,13 +4929,20 @@ void HY_readHardWordID_Flash(void)
HY_hardWordID[i] = temp[i]; HY_hardWordID[i] = temp[i];
} }
} }
// HY_hardWordID[0] = g_cfgParameter.uniqueDeviceID[0];
// HY_hardWordID[1] = g_cfgParameter.uniqueDeviceID[1];
// HY_hardWordID[2] = g_cfgParameter.uniqueDeviceID[2];
// HY_hardWordID[3] = g_cfgParameter.uniqueDeviceID[3];
// HY_hardWordID[4] = g_cfgParameter.uniqueDeviceID[4];
// HY_hardWordID[5] = g_cfgParameter.uniqueDeviceID[5];
log_info("HY_hardWordID[0]:%x\n", HY_hardWordID[0]); // log_info("HY_hardWordID[0]:%x\n", HY_hardWordID[0]);
log_info("HY_hardWordID[1]:%x\n", HY_hardWordID[1]); // log_info("HY_hardWordID[1]:%x\n", HY_hardWordID[1]);
log_info("HY_hardWordID[2]:%x\n", HY_hardWordID[2]); // log_info("HY_hardWordID[2]:%x\n", HY_hardWordID[2]);
log_info("HY_hardWordID[3]:%x\n", HY_hardWordID[3]); // log_info("HY_hardWordID[3]:%x\n", HY_hardWordID[3]);
log_info("HY_hardWordID[4]:%x\n", HY_hardWordID[4]); // log_info("HY_hardWordID[4]:%x\n", HY_hardWordID[4]);
log_info("HY_hardWordID[5]:%x\n", HY_hardWordID[5]); // log_info("HY_hardWordID[5]:%x\n", HY_hardWordID[5]);
} }
/** /**
@ -4957,7 +4968,7 @@ void HY_readCommunicationID_Flash(void)
for (; i < HY_communicationIDSize; i++) { for (; i < HY_communicationIDSize; i++) {
if (temp[0] != 0xFF) { if (temp[0] != 0xFF) {
break; break;
} }
} }
if (i != HY_communicationIDSize) { if (i != HY_communicationIDSize) {
@ -4967,10 +4978,10 @@ void HY_readCommunicationID_Flash(void)
} }
} }
log_info("HY_communicationID[0]:%x\n", HY_communicationID[0]); // log_info("HY_communicationID[0]:%x\n", HY_communicationID[0]);
log_info("HY_communicationID[1]:%x\n", HY_communicationID[1]); // log_info("HY_communicationID[1]:%x\n", HY_communicationID[1]);
log_info("HY_communicationID[2]:%x\n", HY_communicationID[2]); // log_info("HY_communicationID[2]:%x\n", HY_communicationID[2]);
log_info("HY_communicationID[3]:%x\n", HY_communicationID[3]); // log_info("HY_communicationID[3]:%x\n", HY_communicationID[3]);
} }
#endif #endif

View File

@ -228,7 +228,9 @@ void config_info_start(void)
g_cfgParameter.Communication_Methods = RS485; g_cfgParameter.Communication_Methods = RS485;
g_cfgParameter.gw485_Baud = temp_configInfo.gw485_Baud; g_cfgParameter.gw485_Baud = temp_configInfo.gw485_Baud;
// g_cfgParameter.gw485_Baud = 9600;
g_cfgParameter.bat485_Baud = temp_configInfo.bat485_Baud; g_cfgParameter.bat485_Baud = temp_configInfo.bat485_Baud;
g_cfgParameter.supportProtocolTypes = 0x01;
// g_cfgParameter.bat485_Baud = 115200; // g_cfgParameter.bat485_Baud = 115200;
// static volatile uint32_t tempBatBaud; // static volatile uint32_t tempBatBaud;
// tempBatBaud = temp_configInfo.bat485_Baud; // tempBatBaud = temp_configInfo.bat485_Baud;
@ -276,6 +278,10 @@ void config_info_start(void)
g_cfgParameter.collectOpenCircuitVoltageTime= temp_configInfo.collectOpenCircuitVoltageTime; g_cfgParameter.collectOpenCircuitVoltageTime= temp_configInfo.collectOpenCircuitVoltageTime;
g_cfgParameter.reverseChargProtectionCurr = temp_configInfo.reverseChargProtectionCurr; g_cfgParameter.reverseChargProtectionCurr = temp_configInfo.reverseChargProtectionCurr;
g_cfgParameter.softStartVolt = 18.5f;
g_cfgParameter.MPPTConstantVoltage = 17.0f;
g_cfgParameter.MPPTReduceConstantVoltage = 20.0f;
/* 读取的回路阻抗无效则回路阻抗设置为0 */ /* 读取的回路阻抗无效则回路阻抗设置为0 */
float fTemp; float fTemp;
// fTemp = 0.01f; // fTemp = 0.01f;

View File

@ -304,8 +304,9 @@ void Task_refreshJudgeData(void)
// debug_printf("get_OUT_VOLT_IN:%f \n", tempOutV); // debug_printf("get_OUT_VOLT_IN:%f \n", tempOutV);
/* 判断有无电池 */ /* 判断有无电池 */
if (getBatteryState() == FALSE && (getChargBatteryCurrent() > 1 || getChargBatteryCurrent() < -1) if (getBatteryState() == FALSE && (getChargBatteryCurrent() > 0.5f || getChargBatteryCurrent() < -0.5f)
&& getOutputVoltage() < 14.2f) { && getBatteryVoltage() < 14.2f) {
// && getOutputVoltage() < 14.2f) {
setBatteryState(TRUE); setBatteryState(TRUE);
} }
@ -476,7 +477,7 @@ void Task_softStart(void)
// debug_printf("getSolarInCircuitVoltage : %f", getSolarInCircuitVoltage()); // debug_printf("getSolarInCircuitVoltage : %f", getSolarInCircuitVoltage());
//电压过低时不启动 //电压过低时不启动
if (getSolarInCircuitVoltage() < 18.5f) { if (getSolarInCircuitVoltage() < g_cfgParameter.softStartVolt) {
TimeSliceOffset_Register(&m_startControl, Task_startControl, startControl_reloadVal, startControl_offset); TimeSliceOffset_Register(&m_startControl, Task_startControl, startControl_reloadVal, startControl_offset);
setDutyRatioToZero(); setDutyRatioToZero();
return; return;