void get_bms_power(void) { u8 i = 0; static u8 chg_flag = FALSE; if(Tel_BatteryStack_New.cell_voltage_max1 >= 3550) { chg_flag = TRUE; } else if((Tel_BatteryStack_New.cell_voltage_max1 < 3300) || (Tel_BatteryStack_New.current <= CURRENT_OFFSET) ) { chg_flag = FALSE; } for(i = 0; i < GROUP_NUMBER_REAL; i++) { if(chg_flag == TRUE) { BatteryPower[i].chg_power_max_bms2 = 760; } else { BatteryPower[i].chg_power_max_bms2 = 1900; } BatteryPower[i].dischg_power_max_bms2 = 1900 ; } }
时间: 2024-02-15 14:28:52 浏览: 128
这是一段C语言代码,用于获取电池组的电量信息,并根据电池的情况动态调整充电和放电的最大功率。其中,函数名为`get_bms_power`,没有输入参数。
代码中主要用到了一个名为`Tel_BatteryStack_New`的结构体,这个结构体需要在代码的其他部分进行定义和初始化。这个结构体包括了电池组的各种信息,如最高电压、最低电压、电流等。
函数中的代码逻辑如下:
1. 定义一个变量`chg_flag`,用于记录当前是否需要充电;
2. 如果电池组的最高电压大于等于3550mV,则将`chg_flag`设为TRUE,表示需要充电;
3. 如果电池组的最高电压小于3300mV,或者电池组的电流小于一个偏移值`CURRENT_OFFSET`,则将`chg_flag`设为FALSE,表示不需要充电;
4. 对于电池组中的每个电池组,根据`chg_flag`的值动态调整充放电的最大功率。如果需要充电,则将充电最大功率设为760W,否则设为1900W;放电最大功率都设为1900W。
需要注意的是,这段代码中出现的`BatteryPower`、`GROUP_NUMBER_REAL`等变量,也需要在代码的其他部分进行定义和初始化。同时,这段代码中的一些数值、变量名、逻辑等也需要根据具体的应用场景进行调整和优化。
相关问题
void bms_temp_rise_diag(void) { INT8U flag = 0; INT16U slave_index = 0, cell_index = 0, total_temp = 0, index = 0, now_temp = 0, gx_flag = FALSE; INT16U max_temp_now, max_temp_index_now; static INT8U temp_flag = FALSE; // static INT16U old_temp[MAX_TEMP_NUM] = {0}; static INT16U old_temp = 0; static INT32U tick = 0, tick2 = 0; if(temp_flag == FALSE) { tick = OSTimeGet(); tick2 = OSTimeGet(); } if((bms_get_time_interval(tick2, OSTimeGet()) > 9000) || (temp_flag == FALSE)) { if(bms_get_time_interval(tick, OSTimeGet()) > 3000) { gx_flag = TRUE; tick = OSTimeGet(); } tick2 = OSTimeGet(); now_temp = bms_get_max_temp(); if((old_temp == 0xFF) || (old_temp == 0) || (now_temp == 0xFF) || (now_temp == 0) ) { old_temp = now_temp; } if((old_temp != 0xFF) && (old_temp != 0) && (now_temp != 0xFF) && (now_temp != 0) && (now_temp - old_temp > 1) ) { flag = TRUE; bms_save_tr_pos(index); } if(gx_flag == TRUE) { old_temp = now_temp;//bmu_get_cell_temp(slave_index, cell_index); } temp_flag = TRUE; } if(flag == TRUE) { if(AlarmLevel2 != bms_get_tr()) { save_event_log(TR_ALARM_TYPE, 0xFF); } bms_set_tr(AlarmLevel2); } else if(gx_flag == TRUE) { bms_set_tr(AlarmNone); } if(bms_get_rel_flag() == TRUE) { bms_set_tr(AlarmNone); // flag = FALSE; temp_flag = FALSE; } }
这段代码是用来检测电池温度是否过高,并触发相应的警报。它会记录电池的最高温度,并与之前记录的最高温度进行比较。如果两者之间的差值超过1度,则会触发警报,并将当前的位置信息保存。如果连续9秒内没有触发警报,则会更新记录的最高温度,并且每隔3秒会将记录的最高温度上传到服务器。如果接收到释放电池的信号,则会取消警报。
阅读全文