1700 lines
58 KiB
C
1700 lines
58 KiB
C
/**
|
||
******************************************************************************
|
||
* @file global.h
|
||
* @author Jerry Cai
|
||
* @version V2.1
|
||
* @date 19-April-2022
|
||
* @brief This file contains all the functions prototypes for the GPIO
|
||
* firmware library.
|
||
******************************************************************************
|
||
* @attention
|
||
*
|
||
|
||
*
|
||
******************************************************************************
|
||
*/
|
||
|
||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
#ifndef __GLOBAL_H
|
||
#define __GLOBAL_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/* Includes ------------------------------------------------------------------*/
|
||
#include "stm32f10x.h"
|
||
#include "AFE_SH3673520.h"
|
||
|
||
//特殊功能选择
|
||
#define Key_PressLong 0 //按钮 0:短按模式 1:长按模式
|
||
#define Key_PressRST 0 //按钮复位 0:禁用 1:启用
|
||
#define Addr_SetAuto 1 //地址 0:手动分配 1:全自动分配地址
|
||
#define DO2_Warm 0 //充电低温触发打开加热继电器 0:禁用 1:启用
|
||
//三选一小板
|
||
#define BLE_Conn 1
|
||
#define WIFI_Conn 0
|
||
#define LTE_Conn 0
|
||
|
||
|
||
//6.3.LW的100A/150A版,AFE采样电阻是9个1mΩ,对应9倍
|
||
//6.3.LW的200A版,AFE采样电阻是18个1mΩ,对应18倍
|
||
//20020SF_V1.0采样电阻是18个1mΩ,对应18倍
|
||
//同步修改的有AFE电流保护参数,还有默认增益系数
|
||
#define AFE_Multiple 18
|
||
|
||
//参数改动涉及①Flash存储参数、②AFE写入参数、③SDWA默认参数、④特殊限流值
|
||
//达到充电过压报警后,发逆变器的充电限流(*个数):100A对应20A,150A对应30A,200A对应40A
|
||
#define Inv_curlimit 400
|
||
|
||
|
||
//在Flash占用地址长度
|
||
#define AFE_MCU_LEN 52 //bmsMem参数
|
||
#define PARAMEM_LEN 32*6 //paraMem参数 485地址:0x00-0x6F
|
||
#define HOSTMEM_LEN 32*5 //4G连接参数 485地址:0x20-0x8F
|
||
|
||
|
||
//EEPROM数据_IAP标志
|
||
#define EE_IAP 0x00,0x01,1 //IAP定位标志用的值(在用户程序里不启用)
|
||
#define EE_IAP_NEW1 0x02,0xFF,1 //IAP新位置1
|
||
#define EE_IAP_NEW2 0x03,0xFF,1 //IAP新位置2
|
||
#define EE_OTA_FINE 0x00,0xFF,1 //4G远程升级完成标志
|
||
|
||
//EEPROM数据_OTA升级标志
|
||
#define EE_OTA_FINE 0x00,0xFF,1 //4G远程升级完成标志
|
||
|
||
//EEPROM数据_不可初始化
|
||
#define EE_ADDR 0x00,0x00,1 //485通信地址
|
||
#define EE_IAP 0x00,0x01,1 //IAP定位标志用的值(在用户程序里不启用)
|
||
#define EE_LANG 0x00,0x02,1 //屏幕语言 0:英文 1:中文
|
||
#define EE_NO_UV 0x00,0x03,1 //在“欠压复位”前的欠压保护值
|
||
#define EE_ASSIGN 0x00,0x04,2 //自动分配的随机队列标志
|
||
#define EE_CALI_ZERO 0x00,0x08,4 //零点校准
|
||
#define EE_CALI_GAIN 0x00,0x0C,4 //增益校准
|
||
#define EE_Screen 0x00,0x10,1 //屏幕号
|
||
#define EE_Hardware 0x00,0x12,3 //硬件版本号
|
||
#define EE_Software 0x00,0x18,4 //软件版本号
|
||
#define EE_BMS_SN 0x00,0x20,10 //BMS SN号,外加一个crc8校验码 9字节+1CRC
|
||
#define EE_PACK_SN 0x00,0x30,16 //PACK SN号,外加一个crc8校验码 15字节(开放到最大)+1CRC
|
||
#define EE_OTA_FINE 0x00,0xFF,1 //4G远程升级完成标志
|
||
//EEPROM数据_备用数据
|
||
#define EE_TIME_BACKUP 0x01,0x00,6 //每次开机,若时间异常则录入该备份时间
|
||
#define EE_TIME_OCV 0x01,0x10,4 //每次开机,读取该值判断是否该执行OCV校准
|
||
//EEPROM数据_特殊按钮初始化
|
||
#define EE_NCC 0x02,0x00,2 //额定容量
|
||
#define EE_SOC 0x02,0x02,1 //电量SOC
|
||
#define EE_PROTOCOL 0x02,0x03,1 //协议
|
||
#define EE_CUMULI 0x02,0x04,2 //累积容量
|
||
#define EE_CYCLE 0x02,0x06,2 //循环次数
|
||
#define EE_SOH 0x02,0x08,1 //健康系数
|
||
#define EE_CUMULI_2 0x02,0x14,2 //累积容量(备份)
|
||
#define EE_CYCLE_2 0x02,0x16,2 //循环次数(备份)
|
||
#define EE_IAP_NEW1 0x02,0xFF,1 //IAP新位置1
|
||
//EEPROM数据_特殊功能需要
|
||
#define EE_FCC 0x03,0x00,8 //满充容量,单位mAS
|
||
#define EE_FCC_TIME 0x03,0x08,4 //校准满充容量的起始时间
|
||
#define EE_UNSUB 0x03,0x0F,1 //取消绑定原主题标志
|
||
#define EE_IAP_NEW2 0x03,0xFF,1 //IAP新位置2
|
||
//EEPROM数据_ParaMem有效数据_升级初始化
|
||
#define EE_PARA_ALL 0x04,0x00,PARAMEM_LEN //ParaMem当前范围
|
||
//EEPROM数据_报警记录相关
|
||
#define EE_SOE_INF 0x08,0x00,8 //报警记录信息(总):当前序号、当前记录地址、当前记录总数
|
||
#define EE_SOE_NUM 0x08,0x04,4 //当前序号
|
||
//EEPROM数据_报警记录,位置根据变量adrh,adrl决定
|
||
#define EE_SOE adrh,adrl,64
|
||
//EEPROM def - SOE extend cell17~20 voltage(6 bytes per record, addr=0x2900+index*6)
|
||
#define EE_SOE_EXT adrh,adrl,6
|
||
//EEPROM数据处理_清空扇区
|
||
#define EE_CLEAR adrh,adrl,64
|
||
//EEPROM clear - SOE extend cell17~20 voltage
|
||
#define EE_CLEAR_EXT adrh,adrl,6
|
||
|
||
|
||
#define BIT0 (0x1<<0)
|
||
#define BIT1 (0x1<<1)
|
||
#define BIT2 (0x1<<2)
|
||
#define BIT3 (0x1<<3)
|
||
#define BIT4 (0x1<<4)
|
||
#define BIT5 (0x1<<5)
|
||
#define BIT6 (0x1<<6)
|
||
#define BIT7 (0x1<<7)
|
||
#define BIT8 (0x1<<8)
|
||
#define BIT9 (0x1<<9)
|
||
#define BIT10 (0x1<<10)
|
||
#define BIT11 (0x1<<11)
|
||
#define BIT12 (0x1<<12)
|
||
#define BIT13 (0x1<<13)
|
||
#define BIT14 (0x1<<14)
|
||
#define BIT15 (0x1<<15)
|
||
|
||
|
||
#define CAN_TIMEOUT_COUNT 5000
|
||
#define SLEEP_MON_CNT 6000*(paraMem.sleep_min_disable&0x7FFF) //60*100个10ms=1min
|
||
#define SLEEP2_MON_CNT 6000*(paraMem.sleep2_min_disable&0x7FFF) //60*100个10ms=1min
|
||
#define UVOff_MON_CNT 30000 //5*60*100个10ms=5分钟
|
||
#define FCCCALI_MON_CNT 6000*(paraMem.cali_min_disable&0x7FFF) //60*100个10ms=1min
|
||
|
||
#define sleep2Vol paraMem.sleep2_vol //休眠方案2对应休眠电压,单位1mV
|
||
|
||
#define AddrMax 20
|
||
#define ProtocolSum 24 //实际存储协议数量
|
||
#define ProtocolIdxSum 40 //协议对应序号范围
|
||
|
||
|
||
/*三选一小板,状态/保护/报警的标志位*/
|
||
//状态
|
||
#define ChargeStatus ((bmsMem.bStatus3 & BIT7) != 0)
|
||
#define DischargeStatus ((bmsMem.bStatus3 & BIT6) != 0)
|
||
#define PreChargeStatus ((bmsMem.bStatus3 & BIT5) != 0)
|
||
#define ChgMosStatus ((bmsMem.bStatus3 & BIT1) != 0)
|
||
#define DsgMosStatus ((bmsMem.bStatus3 & BIT0) != 0)
|
||
#define PchgMosStatus ((bmsMem.bStatus3 & BIT2) != 0)
|
||
#define ChgLimitStatus ((bmsMem.balanceStatus & BIT4) != 0)
|
||
#define BalanceStatus ((bmsMem.balanceStatus & BIT0) != 0)
|
||
//特殊状态
|
||
#define LockOCC ((bmsMem.balanceStatus & BIT10) != 0)
|
||
#define LockOCD1 ((bmsMem.balanceStatus & BIT9) != 0)
|
||
#define LockOCD2 ((bmsMem.balanceStatus & BIT8) != 0)
|
||
#define LockSP ((bmsMem.balanceStatus & BIT6) != 0)
|
||
#define LockSC ((bmsMem.balanceStatus & BIT7) != 0)
|
||
#define ChgMosFault ((bmsMem.bStatus2 & BIT7) != 0)
|
||
#define DsgMosFault ((bmsMem.bStatus2 & BIT6) != 0)
|
||
#define DOStatus ((bmsMem.temperaStatus & BIT7) != 0)
|
||
#define ForceOffUV ((bmsMem.balanceStatus & BIT5) != 0)
|
||
|
||
//电压保护
|
||
#define PackOV ((bmsMem.bStatus1 & BIT8) != 0)
|
||
#define PackUV ((bmsMem.bStatus1 & BIT9) != 0)
|
||
#define CellOV ((bmsMem.bStatus1 & BIT0) != 0)
|
||
#define CellUV ((bmsMem.bStatus1 & BIT1) != 0)
|
||
#define PF ((bmsMem.bStatus1 & BIT6) != 0)
|
||
#define L0V ((bmsMem.bStatus3 & BIT3) != 0)
|
||
//电流保护
|
||
#define OCC ((bmsMem.bStatus1 & BIT4) != 0) || ((bmsMem.temperaStatus & BIT4) != 0)
|
||
#define OCD1 ((bmsMem.bStatus1 & BIT2) != 0) || ((bmsMem.temperaStatus & BIT5) != 0)
|
||
#define OCD2 ((bmsMem.bStatus1 & BIT3) != 0) || ((bmsMem.bStatus1 & BIT10) != 0)
|
||
#define SP ((bmsMem.bStatus1 & BIT5) != 0)
|
||
#define SC ((bmsMem.bStatus2 & BIT4) != 0)
|
||
//温度保护
|
||
#define McuOTC ((bmsMem.temperaStatus & BIT0) != 0)
|
||
#define McuOTD ((bmsMem.temperaStatus & BIT1) != 0)
|
||
#define McuUTC ((bmsMem.temperaStatus & BIT2) != 0)
|
||
#define McuUTD ((bmsMem.temperaStatus & BIT3) != 0)
|
||
#define AmbientOTC ((bmsMem.temperaStatus & BIT8) != 0)
|
||
#define AmbientOTD ((bmsMem.temperaStatus & BIT9) != 0)
|
||
#define AmbientUTC ((bmsMem.temperaStatus & BIT10) != 0)
|
||
#define AmbientUTD ((bmsMem.temperaStatus & BIT11) != 0)
|
||
#define MosOTC ((bmsMem.bStatus2 & BIT1) != 0)
|
||
#define MosOTD ((bmsMem.bStatus2 & BIT3) != 0)
|
||
#define MosUTC ((bmsMem.bStatus2 & BIT0) != 0)
|
||
#define MosUTD ((bmsMem.bStatus2 & BIT2) != 0)
|
||
|
||
//电压报警
|
||
#define PackOVWarning ((bmsMem.bStatus3 & BIT10) != 0)
|
||
#define PackUVWarning ((bmsMem.bStatus3 & BIT11) != 0)
|
||
#define CellOVWarning ((bmsMem.bStatus3 & BIT8) != 0)
|
||
#define CellUVWarning ((bmsMem.bStatus3 & BIT9) != 0)
|
||
//电流报警
|
||
#define OCCWarning ((bmsMem.bStatus3 & BIT12) != 0)
|
||
#define OCDWarning ((bmsMem.bStatus3 & BIT13) != 0)
|
||
//温度报警
|
||
#define McuOTCWarning ((bmsMem.bStatus2 & BIT12) != 0)
|
||
#define McuOTDWarning ((bmsMem.bStatus2 & BIT13) != 0)
|
||
#define McuUTCWarning ((bmsMem.bStatus2 & BIT14) != 0)
|
||
#define McuUTDWarning ((bmsMem.bStatus2 & BIT15) != 0)
|
||
#define AmbientOTCWarning ((bmsMem.temperaStatus & BIT12) != 0)
|
||
#define AmbientOTDWarning ((bmsMem.temperaStatus & BIT13) != 0)
|
||
#define AmbientUTCWarning ((bmsMem.temperaStatus & BIT14) != 0)
|
||
#define AmbientUTDWarning ((bmsMem.temperaStatus & BIT15) != 0)
|
||
#define MosOTCWarning ((bmsMem.bStatus2 & BIT8) != 0)
|
||
#define MosOTDWarning ((bmsMem.bStatus2 & BIT9) != 0)
|
||
#define MosUTCWarning ((bmsMem.bStatus2 & BIT10) != 0)
|
||
#define MosUTDWarning ((bmsMem.bStatus2 & BIT11) != 0)
|
||
|
||
|
||
/*三选一小板,公共常量*/
|
||
#define SETPARA_SUM 34 //可写参数总个数
|
||
#define GETPARA_SUM 34 //可读参数总个数
|
||
|
||
|
||
/*三选一小板,公共变量*/
|
||
extern char BMS_SN[10]; //9Byte
|
||
extern char PACK_SN[16]; //1~15Byte
|
||
extern char FirmwareVersion[11];//"4.00.00.00" 7~10Byte
|
||
extern char HardwareVersion[6]; //"6.3.L" 5Byte
|
||
extern char ScreenVersion[6]; //"03513" 5Byte
|
||
|
||
extern const char* Status[2]; //0对应false, 1对应true
|
||
|
||
extern char params_str[600]; //原始数据字符串
|
||
|
||
extern const char* putSrvc_reply_namestr; //写服务的名字字符串
|
||
extern const char* putSrvc_reply_str; //写服务的字符串格式
|
||
extern uint8_t putSrvc_reply_flg; //写服务回复标志 接收到ID号,就要以ID号的格式返回
|
||
|
||
extern const char* setPara_reply_name[SETPARA_SUM]; //写属性的名字字符串
|
||
extern uint16_t setPara_reply_temp[SETPARA_SUM]; //写属性的数值
|
||
extern uint8_t setPara_reply_pm[SETPARA_SUM]; //数值的正负 0:正数 1:负数 2:true 3:false
|
||
extern uint8_t setPara_reply_flg; //写属性回复标志 1:回复成功 0xAA:设备无所有要写的属性 0xBB:值不在范围,设备拒绝执行
|
||
extern uint8_t setPara_reply_num; //写属性回复个数
|
||
|
||
extern const char* getPara_reply_name[GETPARA_SUM]; //读属性的名字字符串
|
||
extern uint16_t getPara_reply_temp[GETPARA_SUM]; //读属性的数值
|
||
extern uint8_t getPara_reply_pm[GETPARA_SUM]; //数值的正负 0:正数 1:负数 2:true 3:false
|
||
extern uint8_t getPara_reply_flg; //读属性回复标志 1:回复成功 0xAA:设备无所有要读的属性
|
||
extern uint8_t getPara_reply_num; //读属性回复个数
|
||
|
||
extern uint8_t protocol_reply_flg; //协议在回复内容里的标志
|
||
extern uint8_t protocol_reply_index; //协议在回复内容里的位置
|
||
|
||
extern uint8_t RTC_UpdateFlag; //起始点刷新标志位,用以刷新休眠和欠压强制复位的时间
|
||
|
||
extern uint8_t LTE_WarmDelay; //4G模块开机等待时间
|
||
|
||
#define ResendTime 2
|
||
extern uint8_t LTE_ResendDelay; //4G模块对当前指令无回复,重试等待倒计时
|
||
|
||
#define WaitRxTime 2
|
||
extern uint8_t LTE_WaitRxDelay; //4G模块对当前指令无回复,重新发送等待倒计时
|
||
extern uint8_t LTE_WaitRxFlg; //已执行过的标志
|
||
|
||
extern uint8_t incident_flag; //4G上报_要执行上报事件的标志
|
||
extern uint8_t incident_DataFlg; //4G上报_要上报发生事件时的数据的标志 2:保护 1:其他 0:不用记录
|
||
|
||
extern const char* incident_str;
|
||
extern uint8_t incident_len;
|
||
extern uint32_t incident_time;
|
||
|
||
|
||
/*变量*/
|
||
extern uint8_t curLimitFlag;
|
||
|
||
extern uint8_t bDSGING; //放电状态标记
|
||
extern uint8_t bCHGING; //充电状态标记
|
||
extern uint8_t bSTANDBY; //待机状态标记
|
||
extern uint8_t modbusFaaRxFlg; //CADC零点校准数据接收正确标记
|
||
extern uint8_t modbusFbbRxFlg; //CADC增益校准数据接收正确标记
|
||
extern uint8_t modbus1FaaRxFlg; //CADC零点校准数据接收正确标记
|
||
extern uint8_t modbus1FbbRxFlg; //CADC增益校准数据接收正确标记
|
||
|
||
extern uint8_t protocol; //逆变器通信协议
|
||
|
||
extern CanTxMsg TxMessage[20];
|
||
extern CanRxMsg RxMessage;
|
||
extern uint8_t TxMailBox[20];
|
||
extern uint8_t CAN_SendCount;
|
||
|
||
extern int16_t TemperatureAverage; // 平均温度
|
||
extern int16_t TemperatureMax; // 最高温度
|
||
extern int16_t TemperatureMin; // 最低温度
|
||
extern uint16_t TemperatureMaxIndex; // 最高温度序号
|
||
extern uint16_t TemperatureMinIndex; // 最低温度序号
|
||
|
||
extern uint16_t ncc_Ah; //额定容量,单位1Ah
|
||
extern uint16_t fcc_Ah; //满充容量,单位1Ah
|
||
extern uint16_t rcc_Ah; //剩余容量,单位1Ah
|
||
extern uint16_t oldrcc_Ah;//用于比较得出增长的值,单位1Ah
|
||
|
||
extern uint8_t dsg_forbidFlg; //禁放标志,SOC小于10%的时候启用
|
||
extern uint8_t chg_forbidFlg; //禁充标志,SOC大于100%的时候启用
|
||
extern uint8_t chg_forceFlg; //强充标志,SOC小于10%的时候启用
|
||
extern uint16_t RequestFlag; //充放电允许位
|
||
|
||
extern uint32_t timecount; //当前计时s
|
||
|
||
extern uint8_t sleep_flag; //休眠执行标志位
|
||
extern uint8_t sleep_enableflag;//开启休眠功能标志位
|
||
extern uint32_t sleeptimecount; //休眠计时起点s
|
||
extern uint32_t sleep2timecount; //休眠2计时起点s
|
||
|
||
extern uint32_t uvofftimecount; //关闭欠压功能后的计时起点
|
||
extern uint16_t uvofftime; //关闭欠压功能的倒计时数
|
||
|
||
extern uint32_t ocvtimecount; //开路电压法的计时起点
|
||
extern uint32_t ocvtime; //开路电压法的倒计时数
|
||
extern uint8_t OCV_Wait_flag; //允许OCV校准走倒计时的标志
|
||
extern uint8_t OCV_CaliSOC_flag;//允许执行OCV校准获取当前电压对应soc的标志
|
||
|
||
extern uint8_t Cali_Soc_Flag;
|
||
extern uint16_t CaliSocMoniCount;
|
||
|
||
extern uint8_t TSC_Flag; //判断是真短路,要关闭预充的标志,显示“真短路保护”
|
||
extern uint8_t tscTimeCount;
|
||
|
||
extern uint8_t PCHG_Flag; //开启预充功能的标志,不会随短路保护消失而恢复
|
||
extern uint8_t pchgTimeCount;
|
||
extern uint32_t loadvol;
|
||
|
||
extern uint8_t LSEErrFlag; //外部低频晶振有问题的标志,需要让屏幕的时间不再显示
|
||
|
||
extern uint32_t sleep_Moni_Count;
|
||
extern uint32_t sleep2_Moni_Count;
|
||
extern uint16_t uvoff_Moni_Count;
|
||
|
||
extern uint16_t CTRL_Order; //上位机[临时]控制MOS关闭指令
|
||
|
||
extern uint8_t modbusCurDev; //主机当前的轮询对象,这里用来给屏幕轮询有个断点
|
||
|
||
extern uint8_t ConfigData_Index; //上位机求取数据对应地址
|
||
extern uint8_t Online_Flag; //上位机求某从机数据,主机代发后收到回复的标志,=1才对上位机进行回复
|
||
|
||
extern uint8_t scr_WrZero_Flg; //屏幕写零点校准
|
||
extern uint8_t scr_WrGain_Flg; //屏幕写增益校准
|
||
|
||
//extern uint8_t language; //屏幕语言
|
||
|
||
extern uint8_t scr_RdData_Index;//屏幕显示数据的地址,默认是自身addr,只有addr=1可以变化为其他地址
|
||
extern uint8_t scr_RdRecord_Flg;//屏幕只可以查看自身记录;当记录更新/清空/收到清空指令/进记录页面/上下翻动时,才会读EEPROM更新一次屏幕记录内容
|
||
|
||
extern uint8_t sdwa_WrAddr; //屏幕通过主机写从机地址的值
|
||
extern uint8_t sdwa_WrAddr_Flg; //屏幕通过主机写从机地址的标志 0不在写 1尝试中 2成功 3失败
|
||
|
||
#if Addr_SetAuto
|
||
extern uint8_t assignAddr_State; //按钮分配地址的状态 0未开始 1进行中 2结束
|
||
extern uint8_t assignAddr_Step; //自动分配地址当前步骤
|
||
|
||
extern uint8_t assignAddr_relay; //主机开机后延时2s再开始通信,等待地址变化
|
||
extern uint8_t assignAddr_485num; //分配地址后的在线个数,若存在从机才进行下发队列标志
|
||
extern uint16_t assignAddr_random; //主机完成分配后生成的随机数(AddrMax+1~65535),用来识别队列
|
||
extern uint8_t assignAddr_WrIndex_Flg; //主机执行下发队列标志数的标志
|
||
#endif
|
||
|
||
extern uint8_t cumuliCapClear_flag; //当上位机写入循环次数时,会清空累积容量
|
||
|
||
extern uint8_t OnlineNum; //BMS正常工作数量
|
||
|
||
extern uint8_t chg_curLimitNum; //充电限流置0的个数,SOC大于100%的时候启用
|
||
extern uint8_t dsg_curLimitNum; //放电限流置0的个数,SOC小于10%的时候启用
|
||
extern uint8_t chg_cur0Num; //因报警触发充电限流40A时,出现保护限流0A的个数
|
||
|
||
extern uint16_t cell_OV; //单体过压值
|
||
extern uint16_t cell_UV; //单体欠压值
|
||
extern uint16_t cell_OVR; //单体过压释放值
|
||
extern uint16_t cell_UVR; //单体欠压释放值
|
||
|
||
extern uint8_t chg_curlimitFlg; //充电限流(固定40A)的标志,出现总体过压或单体过压的时候启用
|
||
|
||
extern uint8_t ClearEE[4]; //用于清空存在EEPROM的计时起点
|
||
extern uint8_t tmpWrFCC[8]; //用于写入满充容量值
|
||
|
||
extern uint32_t fcc; //满充容量,单位mAS
|
||
extern uint8_t fcc_CaliStartFlag; //当开始充电时,如果此时SOC=0/1%,开始计时
|
||
|
||
extern uint32_t fcc_Calitimecount; //校准满充容量的计时起点
|
||
extern uint32_t fcc_Calitime; //校准满充容量的倒计时数,超过则不可更新
|
||
|
||
extern uint32_t fcc_Cali_Moni_Count;//在晶振异常时,也能在中间不关机时进行校准
|
||
|
||
extern uint8_t PollStop_flag; //主机暂停发送轮询的标志位
|
||
extern uint8_t PollStop_count; //主机暂停发送轮询的倒计时,再次收到则清零,30s
|
||
|
||
extern uint8_t protocolSwitchFail; //选择的协议不存在的标志
|
||
extern uint8_t protocolNum;
|
||
extern char protocolStrings[ProtocolSum][16];
|
||
|
||
extern uint8_t PCHG_startFlag; //开机预充标志 0:没执行 1:已完成
|
||
|
||
extern uint8_t TSC_detectFlag; //不开启预充时,AFE短路发生后,判断是否是真短路的标志
|
||
extern uint8_t sc_OccurFlag; //浪涌短路出现过的标志
|
||
|
||
extern int16_t cellVol[20]; //20串电压
|
||
extern int16_t cellVoltageMax;
|
||
extern int16_t cellVoltageMin;
|
||
|
||
extern uint8_t MOS_Close_Flg; //需要控制MOS全关的标志
|
||
|
||
extern uint8_t sc_close_flag; //控制浪涌短路保护关闭的标志
|
||
|
||
//Wh版屏幕需要
|
||
extern uint16_t cumuliCapacity; //累积容量,单位0.1Ah
|
||
|
||
/*IAP_V3.0*/
|
||
extern uint8_t IAP_Run; //执行程序时是否正常的标志
|
||
/*IAP_V3.0*/
|
||
|
||
extern char BMS_SN[10]; //9Byte
|
||
extern char PACK_SN[16]; //1~15Byte
|
||
extern char FirmwareVersion[11];//"4.00.00.00" 7~10Byte
|
||
extern char HardwareVersion[6]; //"6.3.L" 5Byte
|
||
extern char ScreenVersion[6]; //"03513" 5Byte
|
||
|
||
#if Key_PressLong
|
||
extern uint8_t ON_confirm_flg; //程序运行后,先确认开机 1:按键按下2s确认开机 2:确认开机后按键松开,可以监测下一次按键按下以判断复位和重启
|
||
extern uint8_t RST_confirm_flg; //按钮按下后,通过时长判断执行复位
|
||
extern uint8_t OFF_confirm_flg; //按钮按下后,通过时长判断确认断开电源维持,等按钮松开就关机
|
||
|
||
extern uint8_t power_old; //如果是正常工作时重启,保持开机
|
||
extern uint8_t power_state; //电源脚输出 0:应输出低,1:应输出高
|
||
#endif
|
||
|
||
extern uint8_t curLimit_ctrlFlag; //执行限流开/关的标志 0:关限流 1:开限流
|
||
|
||
extern uint8_t ClearArray_Flag; //在定时器函数中,执行清空队列标志的标志
|
||
|
||
extern uint8_t Screen_RevFlg;
|
||
extern uint8_t Screen_RevCount;
|
||
extern uint8_t Screen_RevHandlerFlg; //在主函数执行分析处理
|
||
|
||
extern uint8_t MODBUS_RevFlg;
|
||
extern uint8_t MODBUS_RevCount;
|
||
|
||
extern uint8_t MODBUS1_RevFlg;
|
||
extern uint8_t MODBUS1_RevCount;
|
||
|
||
/*三选一模块*/
|
||
#if BLE_Conn
|
||
extern uint8_t BLE_RevFlg;
|
||
extern uint8_t BLE_RevCount;
|
||
#endif
|
||
#if WIFI_Conn
|
||
extern uint8_t WIFI_RevFlg;
|
||
extern uint8_t WIFI_RevCount;
|
||
#endif
|
||
#if LTE_Conn
|
||
#define event_pub 0xA0
|
||
#define srvc_pub 0xA1
|
||
#define setPara_pub 0xA2
|
||
#define getPara_pub 0xA3
|
||
|
||
extern uint8_t LTE_RevFlg;
|
||
extern uint8_t LTE_RevCount;
|
||
|
||
extern uint8_t LTE_PinRST_Flag;
|
||
|
||
extern uint8_t MQTT_RST_flag; //重启MQTT服务 0xAA:多次重启失败
|
||
extern uint8_t MQTT_RST_step; //执行步骤 0~2:退出MQTT服务
|
||
|
||
extern uint8_t LTE_LINK_flag; //已连接到服务器的标志
|
||
|
||
extern uint8_t LTE_UNSUB_Flag;//需要先取消绑定的标志
|
||
|
||
extern uint8_t MQTT_START_flag; //执行连接MQTT服务器的标志
|
||
extern uint8_t MQTT_READY_flag; //MQTT执行正常通信流程的标志
|
||
extern uint8_t MQTT_timed_count; //定时上报[属性]的倒计时
|
||
extern uint8_t LTE_status; //执行内容
|
||
extern uint8_t LTE_step; //执行步骤
|
||
|
||
extern uint8_t LTE_sleep_flag; //4G也进入休眠标志
|
||
extern uint8_t pre_sleep_flag; //休眠前置标志
|
||
extern uint8_t pre_sleep_waitCnt; //休眠前置操作等待完成计数,若持续1min未执行结束,也直接跳到休眠最后一步:关闭4G
|
||
|
||
extern uint32_t sleepOn_time; //启动休眠时间
|
||
extern uint32_t sleepOff_time; //退出休眠时间
|
||
|
||
//屏幕显示对应特殊
|
||
extern uint8_t LTE_rssi; //信号强度
|
||
extern uint8_t LTE_Onlineflag; //4G模块联网标志 0:未联网 1:已联网 0xAA:错误,尝试重新联网解决
|
||
|
||
extern uint8_t LTEStatus_flg; //要传状态的标志
|
||
extern char LTEStatus_str[41]; //4G状态文本
|
||
|
||
//OTA升级所需调用
|
||
#define ERR_timeEnd2 60/2 //持续ERR后重启计数,因遇到ERR会2s后再发报文,所以/2 1min
|
||
|
||
#define LTE_Send LTE_printf
|
||
|
||
#define LTE_RX_BUF_LEN 1000 //接收的最大长度
|
||
#define LTE_TX_BUF_LEN 2000 //发送的最大长度
|
||
|
||
extern char LTE_Rx_Buf[LTE_RX_BUF_LEN];
|
||
extern char LTE_Tx_Buf[LTE_TX_BUF_LEN];
|
||
|
||
extern uint16_t LTE_Rx_BufIndex;
|
||
|
||
extern uint8_t CRESET_flag; //重启 0xAA:多次重启失败
|
||
extern uint8_t CRESET_step; //执行步骤 0~2:退出MQTT服务 3:重启
|
||
|
||
#define ask_lbs 0
|
||
#define ask_lbs_step1 0
|
||
|
||
//OTA升级
|
||
extern uint8_t LTE_OTA_Flag; //4G升级标志 1:收到升级相关报文
|
||
extern uint8_t LTE_OTA_fineFlag; //4G升级完成上报标志(上线后先上报升级完成) 0xAA:升级成功 0xBB:维持原程序
|
||
|
||
extern uint8_t OTAfine_WrFlg; //更新OTA升级成功/失败标志的标志 0xAA:更新到0 0xBB:更新到0xBB
|
||
#endif
|
||
|
||
|
||
//global
|
||
typedef union
|
||
{
|
||
uint8_t b8[2];
|
||
uint16_t b16;
|
||
}BYTE2;
|
||
|
||
|
||
//because false can be 1 2 3..., so true =0
|
||
typedef enum
|
||
{
|
||
FALSE = 1,
|
||
TRUE = 0,
|
||
} BOOL_STATE;
|
||
|
||
//
|
||
typedef struct
|
||
{
|
||
uint8_t l0v :1; //低压禁止充电
|
||
uint8_t deltavol:1; //压差保护
|
||
uint8_t packuvp :1; //电池组欠压保护
|
||
uint8_t packuvw :1; //
|
||
uint8_t pakcovp :1;
|
||
uint8_t pakcovw :1;
|
||
uint8_t celluvp :1;
|
||
uint8_t celluvw :1;
|
||
uint8_t cellovp :1;
|
||
uint8_t cellovw :1;
|
||
uint8_t rsvd :6;
|
||
}VOLTAGE_STATUS;
|
||
|
||
typedef union
|
||
{
|
||
VOLTAGE_STATUS bits;
|
||
uint16_t halfword;
|
||
}UNION_VOLTAGE_STATUS;
|
||
|
||
//
|
||
typedef struct
|
||
{
|
||
uint8_t sc :1; //
|
||
uint8_t ocd2p :1; //
|
||
uint8_t ocd1p :1; //
|
||
uint8_t ocdw :1; //
|
||
uint8_t occp :1;
|
||
uint8_t occw :1;
|
||
uint8_t dhg :1;
|
||
uint8_t chg :1;
|
||
uint8_t rsvd :8;
|
||
}CURRENT_STATUS;
|
||
|
||
typedef union
|
||
{
|
||
CURRENT_STATUS bits;
|
||
uint16_t halfword;
|
||
}UNION_CURRENT_STATUS;
|
||
|
||
//
|
||
typedef struct
|
||
{
|
||
uint8_t utdp :1; //放电低温保护
|
||
uint8_t utdw :1; //放电低温报警
|
||
uint8_t otdp :1; //放电高温保护
|
||
uint8_t otdw :1; //放电高温报警
|
||
uint8_t utcp :1; //充电低温保护
|
||
uint8_t utcw :1; //充电低温报警
|
||
uint8_t otcp :1; //充电高温保护
|
||
uint8_t otcw :1; //充电高温报警
|
||
uint8_t rsvd :8;
|
||
}TEMPERA_STATUS1;
|
||
|
||
typedef union
|
||
{
|
||
TEMPERA_STATUS1 bits;
|
||
uint16_t halfword;
|
||
}UNION_TEMPERA_STATUS1;
|
||
|
||
//
|
||
typedef struct
|
||
{
|
||
uint8_t T6_utp :1; //T6低温保护
|
||
uint8_t T6_utw :1; //T6低温报警
|
||
uint8_t T6_otp :1; //T6高温保护
|
||
uint8_t T6_otw :1; //T6高温报警
|
||
|
||
uint8_t T5_utp :1; //T5低温保护
|
||
uint8_t T5_utw :1; //T5低温报警
|
||
uint8_t T5_otp :1; //T5高温保护
|
||
uint8_t T5_otw :1; //T5高温报警
|
||
|
||
uint8_t T4_utp :1; //T4低温保护
|
||
uint8_t T4_utw :1; //T4低温报警
|
||
uint8_t T4_otp :1; //T4高温保护
|
||
uint8_t T4_otw :1; //T4高温报警
|
||
|
||
uint8_t rsvd :4;
|
||
}TEMPERA_STATUS2;
|
||
|
||
typedef union
|
||
{
|
||
TEMPERA_STATUS1 bits;
|
||
uint16_t halfword;
|
||
}UNION_TEMPERA_STATUS2;
|
||
|
||
//
|
||
typedef struct
|
||
{
|
||
uint8_t dsg :1; //
|
||
uint8_t chg :1; //
|
||
uint8_t pchg :1; //
|
||
uint8_t rsvd0 :5;
|
||
uint8_t rsvd1 :8;
|
||
}MOSFET_STATUS;
|
||
|
||
typedef union
|
||
{
|
||
MOSFET_STATUS bits;
|
||
uint16_t halfword;
|
||
}UNION_MOSFET_STATUS;
|
||
|
||
//
|
||
typedef struct
|
||
{
|
||
uint8_t flashUpdate :1; //flash更新标志
|
||
uint8_t eepromUpdate :1; //eeprom更新标志
|
||
uint8_t rsvd0 :6;
|
||
}PACK_STATUS;
|
||
|
||
typedef union
|
||
{
|
||
PACK_STATUS bits;
|
||
uint8_t byte;
|
||
}UNION_PACK_STATUS;
|
||
|
||
extern UNION_VOLTAGE_STATUS staVol;
|
||
extern UNION_CURRENT_STATUS staCur;
|
||
extern UNION_TEMPERA_STATUS1 staTemp1;
|
||
extern UNION_TEMPERA_STATUS2 staTemp2;
|
||
extern UNION_MOSFET_STATUS staMos;
|
||
extern UNION_PACK_STATUS staPack;
|
||
|
||
|
||
//OCV曲线数据结构体
|
||
typedef struct
|
||
{
|
||
uint8_t soc; // SOC百分比
|
||
uint16_t ocv_dp; // DP模式静置电压(放电)
|
||
uint16_t ocv_cp; // CP模式静置电压(充电)
|
||
}OCV_Data;
|
||
|
||
extern OCV_Data ocv_data[15];
|
||
|
||
|
||
//注意结构体数据对齐,否则会莫名奇妙问题
|
||
typedef struct
|
||
{
|
||
//数据及状态采集
|
||
uint16_t vCell[16]; // 电芯单体电压 mv
|
||
uint32_t packVoltage; // 电芯总电压 mv
|
||
int32_t packCurrent; // 实时电流 mA
|
||
uint16_t cellVoltageMax; // 电芯单体最高电压 mv
|
||
uint16_t cellVoltageMin; // 电芯单体最低电压 mv
|
||
uint16_t cellVoltageMaxIndex; // 电芯单体最高电压序号
|
||
uint16_t cellVoltageMinIndex; // 电芯单体最低电压序号
|
||
uint16_t afe_T1; // AFE测量温度 .c
|
||
uint16_t afe_T2; // AFE测量温度 .c
|
||
uint16_t afe_T3; // AFE测量温度 .c
|
||
uint16_t mcu_T1; // MCU测量温度 .c
|
||
uint16_t mcu_T2; // MCU测量温度 .c
|
||
uint16_t mcu_T3; // MCU测量温度 .c
|
||
uint16_t mcu_T4; // MCU测量温度 .c
|
||
int16_t cadcAveVal; // AFE电流初始值,用于电流零点校准
|
||
uint32_t ncc; // 系统额定容量 mAS
|
||
uint32_t rcc; // 电池包当前剩余电量 mAS
|
||
uint16_t soc; // 电池包的剩余电量百分比 %
|
||
uint16_t cycleCount; // 累计放电次数
|
||
uint16_t bStatus1; //
|
||
uint16_t bStatus2; //
|
||
uint16_t bStatus3; //
|
||
int16_t cadcZero; // 零点校准系数
|
||
int16_t cadcGain; // 增益校准系数
|
||
uint16_t temperaStatus; // 温度保护状态, BIT0-充电高温; BIT1-放电高温; BIT2-充电低温; BIT3放电低温
|
||
uint16_t balanceStatus; // 主动均衡状态, BTI0-均衡开启; BIT1-均衡失败
|
||
uint8_t packStatus; //
|
||
uint8_t soh; // *8.22新加:电池健康系数(原本的位置显示循环次数了,而原本的packStatus没真正启用过)
|
||
|
||
//AFE 内部EEPROM 26bytes,数据同时备份到内部FLASH A B
|
||
uint8_t ee_sconf1; // 002EH
|
||
uint8_t ee_sconf2;
|
||
uint8_t ee_ovt_ldrt_ovh; // 002CH
|
||
uint8_t ee_ovl;
|
||
uint8_t ee_uvt_ovrh;
|
||
uint8_t ee_ovrl;
|
||
uint8_t ee_uv;
|
||
uint8_t ee_uvr;
|
||
uint8_t ee_balv;
|
||
uint8_t ee_prev;
|
||
uint8_t ee_l0v;
|
||
uint8_t ee_pfv;
|
||
uint8_t ee_ocd1v_ocd1t;
|
||
uint8_t ee_ocd2v_ocd2t;
|
||
uint8_t ee_scv_sct;
|
||
uint8_t ee_occv_occt;
|
||
uint8_t ee_most_ocrt_pft;
|
||
int8_t otc;
|
||
int8_t otcr;
|
||
int8_t utc;
|
||
int8_t utcr;
|
||
int8_t otd;
|
||
int8_t otdr;
|
||
int8_t utd;
|
||
int8_t utdr;
|
||
uint8_t ee_tr; //TR是温度内部参考电阻系数
|
||
|
||
//20230221------------------
|
||
int8_t mcu_otc;
|
||
int8_t mcu_otcr;
|
||
int8_t mcu_utc;
|
||
int8_t mcu_utcr;
|
||
|
||
int8_t mcu_otd;
|
||
int8_t mcu_otdr;
|
||
int8_t mcu_utd;
|
||
int8_t mcu_utdr;
|
||
|
||
uint8_t mcu_occ; //charging over current
|
||
uint8_t mcu_ocd; //discharging over current
|
||
uint8_t mcu_occ_t;
|
||
uint8_t mcu_ocd_t;
|
||
uint8_t mcu_ocr_t; //过流保护恢复事件,255 - 不自动恢复
|
||
uint8_t mcu_crc;
|
||
//20230221---------------
|
||
|
||
//20230614---------------
|
||
uint8_t CHGLimit_Value; //通过上位机改变限流板保护电流 A //0x42
|
||
uint8_t CHGLimit_Count; //通过上位机改变限流板保护时间 S
|
||
uint16_t CHGLimit_ReleaseCount; //通过上位机改变限流板保护恢复时间 S
|
||
//20230614---------------
|
||
|
||
//20230705---------------
|
||
uint16_t inverter_chgVolLimit; //通过上位机修改通信给逆变器的限压限流值
|
||
uint16_t inverter_dsgVolLimit; //单位0.1V
|
||
uint16_t inverter_chgCurLimit;
|
||
uint16_t inverter_dsgCurLimit; //单位0.1A
|
||
//20230705---------------
|
||
|
||
/**** 下面是写入过程数据,不需要上位机可读取 ****/
|
||
//20230411---------------
|
||
uint8_t write_Addr; //通过上位机改变板子的通信地址
|
||
uint8_t addr_crc;
|
||
//20230411---------------
|
||
|
||
//20230523---------------
|
||
uint16_t write_Capacity; //通过上位机改变电池容量显示 //10.12改成u16,范围上限65535
|
||
//20230523---------------
|
||
|
||
//20231109---------------
|
||
uint8_t write_Soc; //通过上位机改变板子的通信地址
|
||
uint8_t soc_crc;
|
||
//20231109---------------
|
||
|
||
|
||
//并机时主机通过485采集下面数据处理
|
||
//保护字节和报警字节取或
|
||
//SOC和SOH取平均
|
||
//电流取累加
|
||
//温度取MCU最大值
|
||
uint16_t can_status_byte1; //0x4B 3.4
|
||
uint16_t can_status_byte2; //5.6
|
||
uint16_t can_status_byte3; //7.8
|
||
uint16_t can_status_byte4; //9.10
|
||
uint8_t can_soc; //12
|
||
uint8_t can_soh; //11
|
||
int16_t can_cur; //13.14
|
||
int16_t can_temp; //15.16
|
||
uint16_t can_VolMax; //17.18 电芯单体最高电压 mv
|
||
uint16_t can_VolMin; //19.20 电芯单体最低电压 mv
|
||
uint16_t can_VolMaxIndex; //21.22 电芯单体最高电压序号
|
||
uint16_t can_VolMinIndex; //23.24 电芯单体最低电压序号
|
||
int16_t can_TempMax; //25.26 最高温度
|
||
int16_t can_TempMin; //27.28 最低温度
|
||
uint16_t can_TempMaxIndex; //29.30 最高温度序号
|
||
uint16_t can_TempMinIndex; //31.32 最低温度序号
|
||
|
||
uint16_t can_ArrayIndex; //33.34 主机下发队列序号,与自动分配地址相关
|
||
|
||
//Wh版屏幕,显示功率总耗
|
||
uint16_t can_cumuliCap; //35.36 累计容量
|
||
uint16_t can_cycleCnt; //37.38 循环次数
|
||
|
||
|
||
//EEPROM AT24CXX数据
|
||
uint16_t E2_485Addr; //485通讯地址 主机地址一般为1,从机地址顺序
|
||
uint16_t E2_485Baud; //485通讯波特率,保留
|
||
uint16_t E2_485Snum; //485从机数量
|
||
|
||
uint16_t E2uiChgEndVol; //充电截止电压
|
||
uint16_t E2uiDsgEndVol; //放电截止电压
|
||
uint16_t E2uiVOC[10]; //SOC标定电压值
|
||
uint8_t ucCellNum; //BMS当前电池节数
|
||
|
||
//SH36735XX系列扩展电芯17~20电压
|
||
uint16_t vCell2[4]; //电芯17~20电压 mv(仅SH36735XX使用)
|
||
}BMS_MEMORY ;
|
||
|
||
//专门存储配置参数,对应功能码f3 f4
|
||
typedef struct
|
||
{
|
||
/** 读写地址0x00-0x0F EEPROM地址0x0400-0x041F **/
|
||
//20240419 主动均衡参数(单读写)
|
||
uint8_t act_bal_startV; //0x00 开启压差
|
||
uint8_t act_bal_stopV; // 释放压差
|
||
uint16_t act_bal_stopT; //0x01 释放延时
|
||
|
||
//20240821 SOH计算参数(单)
|
||
uint8_t sohcali_transCent; //0x02 累积容量/循环次数的转换百分比 1~100
|
||
uint8_t sohcali_minSOH; // 最低健康系数
|
||
uint16_t sohcali_startTime; //0x03 100%对应的最大循环次数
|
||
uint16_t sohcali_stopTime; //0x04 最大循环次数
|
||
|
||
//20241023 浪涌短路锁定参数(暂不读写)
|
||
uint8_t scWait_T; //0x05 浪涌短路消失后,对下一次浪涌短路的等待时间 单位1s
|
||
uint8_t scWaitNum; // 浪涌短路的持续次数,次数溢出显示“浪涌短路锁定”
|
||
|
||
//20241023 预充参数(暂不读写)
|
||
uint8_t pchg_startTime; //0x06 开机预充延时
|
||
uint8_t pchg_Time; // 开放电MOS前预充延时
|
||
uint8_t pchg_scVol; //0x07 预充时的真短路判断电压
|
||
uint8_t sp_scVol; // 浪涌短路时的真短路判断电压
|
||
|
||
//20250313 禁充/禁放/强充(单)
|
||
uint16_t requestFlg_enable; //0x08 启用请求标志的标志 bit7:充电允许 bit6:放电允许 bit5:强充
|
||
uint8_t chg_forbid_Soc; //0x09 禁充开启SOC
|
||
uint8_t chg_forbid_rSoc; // 禁充释放SOC
|
||
uint8_t dsg_forbid_Soc; //0x0A 禁放开启SOC
|
||
uint8_t dsg_forbid_rSoc; // 禁放释放SOC
|
||
uint8_t chg_force_Soc; //0x0B 强充开启SOC
|
||
uint8_t chg_force_rSoc; // 强充释放SOC
|
||
|
||
//20250402 满充方式和方式4参数(单)
|
||
uint8_t soc100_methods; //0x0C 满充方式使能 bit0:单芯过压 bit1:总体过压 bit2:逆变器限压+2A小电流 bit3:满充电压+截止电流
|
||
uint8_t soc100_cur; // 截止电流默认5A,单位0.1A
|
||
uint16_t soc100_vol; //0x0D 满充电压默认56V,单位0.1V
|
||
|
||
uint8_t rsvd0[4]; //0x0E-0x0F
|
||
|
||
|
||
/** 读写地址0x10-0x1F EEPROM地址0x0420-0x043F **/
|
||
//20240513 长时间待机定时休眠(单)
|
||
uint16_t sleep_min_disable; //0x10 纯定时休眠 bit15:休眠禁用 bit0~14:休眠时间min
|
||
|
||
//20240924 地址控制(暂不读写)
|
||
uint16_t addr_FREE_Flg; //0x11 地址手动控制标志,默认0
|
||
|
||
//20241023 充放启用[长期]控制,重启不可初始化(暂不读写)
|
||
uint16_t ctrl_disable; //0x12 bit0:关放电MOS bit1:关充电MOS bit2:关预充 [驻启使用bit3]
|
||
|
||
//20250519 满充容量校准
|
||
uint16_t cali_min_disable; //0x13 bit15:满充容量校准禁用 bit0-14:等待时间
|
||
|
||
//20250402 低电压待机定时休眠(单)
|
||
uint16_t sleep2_min_disable;//0x14 bit15:休眠2禁用 bit0~14:休眠时间min
|
||
uint16_t sleep2_vol; //0x15 低电压休眠电压
|
||
|
||
//20250410 定时校准SOC-开路电压法(单)
|
||
uint16_t ocv_min_disable; //0x16 bit15:定时校准禁用 bit0~14:定时时间min
|
||
uint8_t ocv_soc_Range; //0x17 定时校准的赋值SOC范围
|
||
uint8_t ocv_T_Range; // 定时校准的赋值温度范围
|
||
|
||
uint16_t temp_disable; //0x18 bit0~4:电池温度1~4的失效开/关控制
|
||
|
||
uint8_t rsvd1[14]; //0x19-0x1F [0x18~0x1C驻启有参数]
|
||
|
||
|
||
/** 读写地址0x20-0x2F EEPROM地址0x0440-0x045F **/
|
||
//20250404 总体过压欠压保护(总读写)
|
||
uint16_t pack_ovv; //0x20 总体过压保护 单位0.1V
|
||
uint16_t pack_ovrv; //0x21 总体过压保护释放 单位0.1V
|
||
uint16_t pack_uvv; //0x22 总体欠压保护 单位0.1V
|
||
uint16_t pack_uvrv; //0x23 总体欠压保护释放 单位0.1V
|
||
uint8_t pack_ovt; //0x24 总体过压保护延时 单位1s
|
||
uint8_t pack_uvt; // 总体过压保护延时 单位1s
|
||
|
||
//20250405 放电过流2保护(总读写)
|
||
uint16_t mcu_ocd2; //0x25 放电过流2保护电流 单位A
|
||
uint16_t mcu_ocd2_t; //0x26 放电过流2保护延时 单位10ms
|
||
|
||
//20250405 环境温度保护(总读写)
|
||
int8_t am_otc; //0x27 环境充电高温
|
||
int8_t am_otcr; // 环境充电高温释放
|
||
int8_t am_utc; //0x28 环境充电低温
|
||
int8_t am_utcr; // 环境充电低温释放
|
||
int8_t am_otd; //0x29 环境放电高温
|
||
int8_t am_otdr; // 环境放电高温释放
|
||
int8_t am_utd; //0x2A 环境放电低温
|
||
int8_t am_utdr; // 环境放电低温释放
|
||
|
||
uint8_t cellovr_soc; //0x2B 单体过压释放SOC
|
||
uint8_t packovr_soc; // 总体过压释放SOC
|
||
|
||
uint8_t PACK_NUM; //0x2C 并机最大个数
|
||
|
||
uint8_t rsvd2_0[1]; //0x2C [驻启有参数]
|
||
uint8_t rsvd2_1[3]; //0x2D
|
||
|
||
//20260722
|
||
uint8_t ee_sconf4; //0x2E SH36735XX系列SCONF4寄存器串数配置
|
||
|
||
//20260716
|
||
uint16_t sc_mode; //0x2F AFE芯片+短路倍数
|
||
|
||
/** 读写地址0x30-0x3F EEPROM地址0x0460-0x047F **/
|
||
//20250408 报警参数(总读写)
|
||
uint16_t alarm_cov; //0x30 单体过压告警
|
||
uint16_t alarm_cuv; //0x31 单体欠压告警
|
||
uint16_t alarm_pov; //0x32 总体过压告警
|
||
uint16_t alarm_puv; //0x33 总体欠压告警
|
||
|
||
uint8_t alarm_occ; //0x34 充电过流告警
|
||
uint8_t alarm_ocd1; // 放电过流1告警
|
||
|
||
int8_t alarm_mcu_otc; //0x35 电芯充电高温告警
|
||
int8_t alarm_mcu_utc; // 电芯充电低温告警
|
||
int8_t alarm_mcu_otd; //0x36 电芯放电高温告警
|
||
int8_t alarm_mcu_utd; // 电芯放电低温告警
|
||
|
||
int8_t alarm_am_otc; //0x37 环境充电高温告警
|
||
int8_t alarm_am_utc; // 环境充电低温告警
|
||
int8_t alarm_am_otd; //0x38 环境放电高温告警
|
||
int8_t alarm_am_utd; // 环境放电低温告警
|
||
|
||
int8_t alarm_afe_otc; //0x39 MOS充电高温告警
|
||
int8_t alarm_afe_utc; // MOS充电低温告警
|
||
int8_t alarm_afe_otd; //0x3A MOS放电高温告警
|
||
int8_t alarm_afe_utd; // MOS放电低温告警
|
||
|
||
uint8_t rsvd3[10]; //0x3B-0x3F [驻启有参数]
|
||
|
||
|
||
/** 读写地址0x40-0x4F EEPROM地址0x0480-0x049F **/
|
||
//20250410 开路电压法-OCV放电曲线(单)
|
||
uint16_t ocv_dpBuf[15]; //0x40-0x4E 放电曲线
|
||
|
||
uint8_t rsvd4[2]; //0x4F
|
||
|
||
|
||
/** 读写地址0x50-0x5F EEPROM地址0x04A0-0x04BF **/
|
||
//20250410 开路电压法-OCV充电曲线(单)
|
||
uint16_t ocv_cpBuf[15]; //0x50-0x5E 充电曲线
|
||
|
||
uint8_t rsvd5[2]; //0x5F
|
||
|
||
|
||
/** 读写地址0x50-0x5F EEPROM地址0x04A0-0x04BF **/
|
||
//0x60-0x6F [驻启有参数]
|
||
|
||
|
||
}PARA_MEMORY ;
|
||
|
||
//逆变器通信SRNE 结构体
|
||
typedef struct
|
||
{
|
||
//数据及状态采集
|
||
int16_t packCurrent; // 实时电流 mA
|
||
uint16_t packVoltage; // 电芯总电压 mv
|
||
uint8_t soc; // 电池包的剩余电量百分比 %
|
||
uint8_t socH;
|
||
uint8_t soh; // 电池健康系数 %
|
||
uint8_t sohH;
|
||
uint16_t rcc; // 电池包当前剩余电量 mAH
|
||
uint16_t fcc; // 系统满充容量 mAH
|
||
uint16_t dcc; // 设计容量 mAH
|
||
uint16_t cyc; // 蓄电池循环计数 mAH
|
||
uint16_t rsvd1;
|
||
|
||
uint16_t alarm_byte; //报警
|
||
uint16_t protect_byte; //保护
|
||
uint16_t status_byte; //状态/故障标志
|
||
uint16_t balanceStatus; //平衡状态
|
||
uint16_t rsvd2;
|
||
uint16_t rsvd3;
|
||
|
||
uint16_t vCell[16]; // 电池电压 mv
|
||
int16_t Tcell[4]; // 电池温度 .c
|
||
int16_t afe_MOS; // MOS温度 .c 赋值两个MOS温度的平均值
|
||
int16_t afe_MCU; // 环境温度 .c 赋值芯片温度
|
||
int16_t chgVolLimit; //
|
||
int16_t chgCurLimit; //
|
||
int16_t dsgCurLimit; //
|
||
|
||
}PROTOCOL_SRNE_MEMORY ;
|
||
|
||
//逆变器通信Voltronic 结构体
|
||
typedef struct
|
||
{
|
||
uint16_t rsvd1; //协议地址从0x0001开始
|
||
uint16_t protocolType; //协议类型
|
||
uint16_t protocolVer; //协议版本
|
||
uint16_t SoftwareH; //BMS软件版本
|
||
uint16_t SoftwareL;
|
||
uint16_t HardwareH; //BMS硬件版本
|
||
uint16_t HardwareL;
|
||
uint16_t rsvd2[9];
|
||
|
||
uint16_t cellNum; // 串联电芯数量
|
||
uint16_t cellVol[20]; // 电芯电压1-16 (17~20暂无)
|
||
|
||
uint16_t tempNum; // 温度传感器数量
|
||
uint16_t T[10]; // 1-4电池温度 5芯片温度 6MOS温度平均值 (7-10暂无)
|
||
|
||
uint16_t chg_packCurrent; // 模块充电电流
|
||
uint16_t dsg_packCurrent; // 模块放电电流
|
||
uint16_t packVoltage; // 模块电压
|
||
uint16_t soc; // soc
|
||
uint16_t fccH; // 模块总容量
|
||
uint16_t fccL;
|
||
|
||
uint16_t packNum; // 并联电池包数量
|
||
uint16_t chg_alarm_byte; // 充电报警
|
||
uint16_t dsg_alarm_byte; // 放电报警
|
||
uint16_t chg_protect1_byte; // 充电保护
|
||
uint16_t chg_protect2_byte; // 充电保护2
|
||
uint16_t dsg_protect1_byte; // 放电保护
|
||
uint16_t dsg_protect2_byte; // 放电保护2
|
||
uint16_t packstatus; // BMS状态
|
||
uint16_t dccH; // 设计容量
|
||
uint16_t dccL;
|
||
|
||
uint16_t cellNum2; // 串联电芯数量
|
||
uint16_t Vol_status[10]; // 电芯电压状态1/2,3/4……
|
||
uint16_t rsvd3[5];
|
||
|
||
uint16_t tempNum2; // 温度传感器数量
|
||
uint16_t T_status[5]; // BMS温度状态1/2,3/4……
|
||
uint16_t rsvd4[10];
|
||
|
||
uint16_t other_status[10];
|
||
uint16_t rsvd5[6];
|
||
|
||
uint16_t chgVolLimit; // 充电电压限制
|
||
uint16_t dsgVolLimit; // 放电电压限制
|
||
uint16_t chgCurLimit; // 充电电流限制
|
||
uint16_t dsgCurLimit; // 放电电流限制
|
||
uint16_t status_byte; // 充放电允许
|
||
uint16_t runtime; // 剩余运行时间
|
||
uint16_t rccH; // 电池包当前剩余电量 mAH
|
||
uint16_t rccL;
|
||
|
||
}PROTOCOL_VOLTRONIC_MEMORY ;
|
||
|
||
//逆变器通信SMK 结构体
|
||
typedef struct
|
||
{
|
||
uint16_t rsvd[19]; //00~18
|
||
|
||
uint16_t status_byte; //19 状态位
|
||
uint16_t rsvd2; //20 预留
|
||
int16_t soc; //21 soc %
|
||
int16_t packVoltage; //22 模块电压 10mV
|
||
int16_t packCurrent; //23 模块电流 10mA
|
||
uint16_t rsvd3; //24 预留
|
||
int16_t chgCurLimit; //25 最大充电电流 10mA
|
||
int16_t rcc; //26 电池包当前剩余电量 10mAH
|
||
int16_t fcc; //27 系统满充容量 10mAH
|
||
uint16_t rsvd4[5]; //28~32 预留
|
||
int16_t chgVolLimit; //33 最大充电电压 10mV
|
||
uint16_t rsvd5; //34 预留
|
||
int16_t dcsCurLimit; //35 最大放电电流 10mA
|
||
|
||
}PROTOCOL_SMK_MEMORY ;
|
||
|
||
//逆变器通信Growatt 结构体
|
||
typedef struct
|
||
{
|
||
uint16_t rsvd1; //00 起始位(占位)
|
||
uint16_t MCU_softV; //01 MCU软件版本
|
||
uint16_t Gauge_V; //02 Gauge版本
|
||
uint16_t Gauge_FR_VL; //03 Gauge FR版本L
|
||
uint16_t Gauge_FR_VH; //04 Gauge FR版本H
|
||
uint16_t D_T1; //05 Date&Time1
|
||
uint16_t D_T2; //06 Date&Time2
|
||
uint16_t D_T3; //07 Date&Time3
|
||
uint16_t D_T4; //08 Date&Time4
|
||
uint16_t Bar_C1L; //09 条形码1L
|
||
uint16_t Bar_C1H; //0A 条形码1H
|
||
uint16_t Bar_C2; //0B 条形码2
|
||
uint16_t Bar_C3; //0C 条形码3
|
||
uint16_t companyL; //0D 公司信息L
|
||
uint16_t companyH; //0E 公司信息H
|
||
uint16_t Using_C; //0F 型号(大写)
|
||
uint16_t Gau_IC; //10 IC电流
|
||
uint16_t Date1_TimeL; //11 日期、时间L
|
||
uint16_t Date1_TimeH; //12 日期、时间H
|
||
|
||
uint16_t status_byte; //13 状态位
|
||
uint16_t protect_byte; //14 保护
|
||
uint16_t soc; //15 soc %
|
||
uint16_t packVoltage; //16 模块电压 10mV
|
||
uint16_t packCurrent; //17 模块电流 10mA
|
||
int16_t T_Average; //18 电芯温度 ℃
|
||
uint16_t chgCurLimit; //19 充电电流限制 10mA
|
||
uint16_t rcc; //1A 电池包当前剩余电量 10mAH
|
||
uint16_t fcc; //1B 系统满充容量 10mAH
|
||
|
||
uint16_t FW; //1C YW/FW
|
||
|
||
uint16_t Delta; //1D 压差 mV
|
||
|
||
uint16_t cyc; //1E 循环次数
|
||
uint16_t Master_Box; //1F
|
||
|
||
uint16_t soh; //20 电池健康系数 %
|
||
uint16_t CV_Vol; //21 CV电压 10mV
|
||
uint16_t alarm_byte; //22 报警
|
||
uint16_t dsgCurLimit; //23 放电电流限制 10mA
|
||
|
||
uint16_t Ext_Err; //24 扩展错误
|
||
|
||
uint16_t cellVolMax; //25 电芯单体最高电压 mV
|
||
uint16_t cellVolMin; //26 电芯单体最低电压 mV
|
||
uint16_t cellVolMaxIndex; //27 电芯单体最高电压序号,范围0-15
|
||
uint16_t cellVolMinIndex; //28 电芯单体最低电压序号,范围0-15
|
||
uint16_t cellNum; //29 串联电芯数量(单模块电池串联数量)
|
||
uint16_t UpdateFlg; //2A 升级标志
|
||
uint16_t rsvd2[6]; //2B~30
|
||
|
||
//Box并联时上报第2组电池规格和状态查询信息
|
||
uint16_t MCU2_softV; //31 软件版本
|
||
uint16_t Gau2_Ver; //32 Gauge版本
|
||
uint16_t Gau2_FR_VerL; //33 Gauge FR 版本L
|
||
uint16_t Gau2_FR_VerH; //34 Gauge FR 版本H
|
||
uint16_t Date2_Time1; //35 日期、时间1
|
||
uint16_t Date2_Time2; //36 日期、时间2
|
||
uint16_t Date2_Time3; //37 日期、时间3
|
||
uint16_t Date2_Time4; //38 日期、时间4
|
||
uint16_t Bar2_codeL; //39 条形码1L
|
||
uint16_t Bar2_codeH; //3A 条形码1H
|
||
uint16_t Bar2_code2; //3B 条形码2
|
||
uint16_t Bar2_code3; //3C 条形码3
|
||
|
||
uint16_t company2L; //3D 公司名称L
|
||
uint16_t company2H; //3E 公司名称H
|
||
|
||
uint16_t Mod2_num; //3F 产品型号
|
||
uint16_t Gau2_IC_Cur; //40 Gauge IC 电流 10mA
|
||
uint16_t Date2_Time5L; //41 日期、时间L
|
||
uint16_t Date2_Time5H; //42 日期、时间H
|
||
|
||
uint16_t status2_byte; //43 状态位
|
||
uint16_t protect2_byte; //44 保护
|
||
uint16_t soc2; //45 soc %
|
||
uint16_t packVoltage2; //46 模块电压 10mV
|
||
uint16_t packCurrent2; //47 模块电流 10mA
|
||
int16_t T_Average2; //48 温度(平均) -127~127℃
|
||
uint16_t chg2_CurLimit; //49 充电电流限制
|
||
uint16_t rcc2; //4A 电池包当前剩余电量 10mAH
|
||
uint16_t fcc2; //4B 系统满充容量 10mAH
|
||
uint16_t YW_FW2; //4C 软硬件版本号 范围1~9
|
||
uint16_t Delta2; //4D 压差 V
|
||
uint16_t cyc2; //4E 蓄电池循环计数 mAH
|
||
uint16_t Mas2_Box; //4F 主机回复
|
||
uint16_t soh2; //50 电池健康系数 %
|
||
uint16_t CV2_Vol; //51 CV电压
|
||
uint16_t alarm2_byte; //52 报警1
|
||
uint16_t rsvd3[29]; //53~6F
|
||
|
||
uint16_t Bar_ID; //70 电池组ID
|
||
uint16_t cellVol[16]; //71~80 电芯电压1-16
|
||
|
||
//Box 并联时上报第 2 组电池单体电压信息:
|
||
uint16_t cellVol2[16]; //81~90 电芯电压1-16
|
||
|
||
}PROTOCOL_Growatt_MEMORY ;
|
||
|
||
|
||
//电流校准结构体
|
||
typedef struct
|
||
{
|
||
int32_t current; //校准电流点电流
|
||
int16_t cadcZero; //零点校准值
|
||
int16_t cadcGain; //增益校准值
|
||
uint16_t cmdZero; //零点校准标记
|
||
uint16_t cmdGain; //增益校准标记
|
||
uint16_t flagWrZeroToEE;
|
||
uint16_t flagWrGainToEE;
|
||
uint16_t flagZeroCaliFail;
|
||
uint16_t flagGainCaliFail;
|
||
int16_t tempCur;
|
||
int16_t rsvd;
|
||
}CALI_STRUCT;
|
||
|
||
extern CALI_STRUCT cali;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
uint16_t status_byte1;
|
||
uint16_t status_byte2;
|
||
uint16_t status_byte3;
|
||
uint16_t status_byte4;
|
||
uint16_t soc;
|
||
uint16_t soh;
|
||
int32_t cur;
|
||
int32_t temp;
|
||
|
||
uint16_t VolMax;
|
||
uint16_t VolMin;
|
||
uint16_t VolMaxIndex;
|
||
uint16_t VolMinIndex;
|
||
uint16_t TempMax;
|
||
uint16_t TempMin;
|
||
uint16_t TempMaxIndex;
|
||
uint16_t TempMinIndex;
|
||
|
||
//Wh版屏幕,显示功率总耗
|
||
uint16_t cumuliCap;
|
||
uint32_t cycleCnt;
|
||
|
||
//负值矫正后的最高最低电压
|
||
int16_t cellVoltageMax;
|
||
int16_t cellVoltageMin;
|
||
|
||
int16_t com;
|
||
|
||
}CAN_MEMORY;
|
||
|
||
//版本号结构体
|
||
typedef struct
|
||
{
|
||
uint8_t Hardware[3];
|
||
uint8_t Screen;
|
||
uint8_t Software[4];
|
||
|
||
uint8_t BMS_SN[9]; //BMS生产批次
|
||
uint8_t BMS_crc8;
|
||
uint8_t PACK_SN[15]; //PACK产品序列号,最大15字节
|
||
uint8_t PACK_crc8;
|
||
|
||
uint8_t rsvd1[30]; //驻启SN号位置,预留以区分
|
||
|
||
//存在Flash中,升级可更改的
|
||
/** 读写地址0x20-0x5F **/
|
||
char host[40+2]; //4G平台_域名
|
||
uint16_t port; //4G平台_端口
|
||
char UserName[40+2]; //4G平台_用户名
|
||
char PassWord[40+2]; //4G平台_密码
|
||
|
||
/** 读写地址0x60-0x6F **/
|
||
char ClientID[23+2]; //4G平台_设备唯一标识符
|
||
|
||
uint8_t hostAll_crc; //4G平台信息的CRC校验码
|
||
|
||
uint8_t rsvd4[6]; //预留
|
||
|
||
}VERSION_MEMORY ;
|
||
|
||
//在线总数据结构体
|
||
typedef struct
|
||
{
|
||
uint8_t Online[AddrMax+2]; //轮询中的从机在线情况,Online[0]代表在线个数,Online[i]=0xAA说明地址i在线
|
||
|
||
uint16_t vol; //同步地址1当前电压 单位0.01V
|
||
int16_t cur; //同步canMem[0]数据 单位0.01A
|
||
int16_t temp; //单位0.1℃
|
||
uint8_t soc; //单位1%
|
||
uint8_t soh; //单位1%
|
||
|
||
uint8_t status_byte1; //
|
||
uint8_t status_byte2; //
|
||
uint8_t status_byte3; //
|
||
uint8_t status_byte4; //
|
||
|
||
uint16_t VolMax; // 电芯单体最高电压 单位1mv
|
||
uint16_t VolMin; // 电芯单体最低电压 单位1mv
|
||
uint16_t VolMaxIndex; // 电芯单体最高电压序号
|
||
uint16_t VolMinIndex; // 电芯单体最低电压序号
|
||
uint16_t TempMax; // 最高温度 单位0.1℃
|
||
uint16_t TempMin; // 最低温度 单位0.1℃
|
||
uint16_t TempMaxIndex; // 最高温度序号
|
||
uint16_t TempMinIndex; // 最低温度序号
|
||
|
||
}ONLINE_MEMORY ;
|
||
|
||
|
||
//Global
|
||
extern BMS_MEMORY bmsMem;
|
||
extern BMS_MEMORY bmsMem_slave;
|
||
extern PARA_MEMORY paraMem;
|
||
|
||
extern CAN_MEMORY canMem[AddrMax+2];
|
||
|
||
extern VERSION_MEMORY VersionMem;
|
||
extern ONLINE_MEMORY onlineMem;
|
||
|
||
extern PROTOCOL_SRNE_MEMORY SRNEMem;
|
||
extern PROTOCOL_VOLTRONIC_MEMORY VoltronicMem;
|
||
extern PROTOCOL_SMK_MEMORY SMKMem;
|
||
extern PROTOCOL_Growatt_MEMORY GrowattMem;
|
||
|
||
extern void canMem_refresh(void);
|
||
extern void onlineMem_refresh(void);
|
||
extern void ParaChange(void);
|
||
extern void Addr_Set(void);
|
||
extern void SLEEP_Refresh(void);
|
||
extern void SLEEP2_Refresh(void);
|
||
extern void SLEEP_TIM_Moni(void);
|
||
extern void SLEEP2_TIM_Moni(void);
|
||
extern void UVOff_TIM_Moni(void);
|
||
extern void FCCCali_TIM_Moni(void);
|
||
extern void uf_GLOBAL_Init(void);
|
||
|
||
extern uint8_t CRC8_Cal(uint8_t *p, uint8_t Length);
|
||
extern BYTE2 CRC16_Cal(uint8_t *pdata, uint16_t len);
|
||
extern uint16_t CRC16_FirmtoEE(uint8_t *data, uint16_t len);
|
||
|
||
extern uint8_t toASCII(uint8_t data);
|
||
extern uint16_t get_random(void);
|
||
extern uint8_t GetStr(const char* dataKey, char End1, char End2, char* InStr, char* OutStr);
|
||
extern uint8_t GetID(char* InStr, char* OutStr);
|
||
extern uint8_t GetStrFromJson(const char* dataKey, char* InStr, char* OutStr);
|
||
extern uint8_t uint_str_len(uint32_t value);
|
||
extern uint8_t int_str_len(int32_t value);
|
||
|
||
extern void Refresh_FirmwareVersion(void);
|
||
extern void Refresh_HardwareVersion(void);
|
||
extern void Refresh_ScreenVersion(void);
|
||
extern void Refresh_BMS_SN(void);
|
||
extern void Refresh_PACK_SN(void);
|
||
|
||
//Systick
|
||
extern void delay_ms(uint16_t ms);
|
||
extern void delay_us(uint16_t us);
|
||
|
||
//Gpio
|
||
extern void uf_GPIO_Init(void);
|
||
extern void uf_EXTI_Init(void);
|
||
extern void LED_RUN_On(void);
|
||
extern void LED_RUN_Off(void);
|
||
extern void LED1_On(void);
|
||
extern void LED1_Off(void);
|
||
extern void LED2_On(void);
|
||
extern void LED2_Off(void);
|
||
extern void LED3_On(void);
|
||
extern void LED3_Off(void);
|
||
extern void LED4_On(void);
|
||
extern void LED4_Off(void);
|
||
extern void LED_ALARM_On(void);
|
||
extern void LED_ALARM_Off(void);
|
||
extern void LED_ALARM_Toggle(void);
|
||
extern void LED_RUN_Toggle(void);
|
||
extern void LED_RST_Toggle(void);
|
||
extern void LED_ALL_ON(void);
|
||
extern void LED_ALL_OFF(void);
|
||
extern void VPRO_On(void);
|
||
extern void VPRO_Off(void);
|
||
extern void CTRL_On(void);
|
||
extern void CTRL_Off(void);
|
||
extern void PCHG_On(void);
|
||
extern void PCHG_Off(void);
|
||
extern void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
||
|
||
//电源控制
|
||
extern void POWER_Check(void);
|
||
extern void POWER_Ctrl(void);
|
||
extern void KEY_TIM_Moni(void);
|
||
|
||
//均衡控制
|
||
extern void BAL_On(void);
|
||
extern void BAL_Off(void);
|
||
extern void MCU_BalanceProcess(void);
|
||
|
||
//加热控制
|
||
extern void WARM_Ctrl(void);
|
||
|
||
//限流控制
|
||
extern void TIM4_PWM_Init(uint16_t arr, uint16_t psc);
|
||
extern void PWM_Set_Duty_Percent(float duty_per);
|
||
extern void CHG_LIMIT_PWM_Adjust(void);
|
||
extern void CHG_LIMIT_Init(void);
|
||
extern void CHG_LIMIT_On(void);
|
||
extern void CHG_LIMIT_Off(void);
|
||
extern void CHG_LIMIT_Ctrl(void);
|
||
|
||
//放电过流2
|
||
extern void OCC2_TIM_Moni(void);
|
||
extern void OCC2_Ctrl(void);
|
||
|
||
//DO
|
||
extern void DO_On(void);
|
||
extern void DO_Off(void);
|
||
|
||
#if Addr_SetAuto
|
||
//分配地址
|
||
extern uint8_t IO3_IN(void); //检测输入电平
|
||
extern void IO2_OUTSet(void); //分配中先置高让下一个变99,再置低变AddrMax+1
|
||
extern void IO2_OUTReset(void);//正常置低
|
||
extern uint8_t IO1_IN(void); //检测输入电平
|
||
extern void ADDR_Assign_Moni(void);//根据不同的原地址和输入电平,选择要修改的特定地址
|
||
extern void ADDR_Rank_Moni(void); //根据IO3的不同电平,确定自身是主机/从机
|
||
#endif
|
||
|
||
//PCHG
|
||
extern void PCHG_StartCtrl(void);
|
||
extern void PCHG_Ctrl(void);
|
||
//浪涌短路时的TSC判断
|
||
extern void TSC_Detect(void);
|
||
//AFE
|
||
extern void AFE_Ctrl(void);
|
||
|
||
//Timer
|
||
extern uint32_t tmrSys;
|
||
extern uint32_t tmrTemp[20];
|
||
extern void uf_TIM3_Init(void);
|
||
extern uint32_t TIMER_Update(void);
|
||
extern uint32_t TIMER_IsOut(uint32_t cnt, uint32_t tmr);
|
||
extern uint32_t TIMER_IsOther(uint32_t cnt, uint32_t tmr);
|
||
|
||
//i2c
|
||
extern void uf_I2C1_Init(void);
|
||
extern uint8_t EEPROM_WrMulByte(uint8_t addrH, uint8_t addrL, uint8_t lenth, uint8_t *data);
|
||
extern uint8_t EEPROM_RdMulByte(uint8_t addrH, uint8_t addrL, uint8_t lenth, uint8_t *data);
|
||
extern uint8_t EEPROM_CALI_WrZero(int16_t data);
|
||
extern int16_t EEPROM_CALI_RdZero(void);
|
||
extern uint8_t EEPROM_CALI_WrGain(int16_t data);
|
||
extern int16_t EEPROM_CALI_RdGain(void);
|
||
|
||
//spi
|
||
extern void uf_SPI2_Init(void);
|
||
extern void SPI2_Error(void);
|
||
extern uint8_t AFE_WriteOneByte(uint8_t addr, uint8_t *data);
|
||
extern uint8_t AFE_ReadMulByte(uint8_t addr, uint8_t lenth, uint8_t *data);
|
||
extern uint8_t AFE_Reset(void);
|
||
|
||
//flash
|
||
#define FLASH_DATA_A_BASE 0X0800A000
|
||
#define FLASH_DATA_B_BASE 0X0800C000
|
||
extern uint8_t MEMORY_UpdateFlash(uint32_t addr);
|
||
extern uint8_t FLASH_UpdateMemory(void);
|
||
extern void uf_FLASH_Init(void);
|
||
extern void FLASH_RdWord(uint32_t addr, uint32_t *data, uint16_t len);
|
||
extern void FLASH_WrData(uint32_t addr, uint16_t *data, uint16_t num);
|
||
|
||
//wdg
|
||
extern void uf_IWDG_Init(u8 prer,u16 rlr);
|
||
extern void IWDG_Feed(void);
|
||
|
||
//Modbus - 主从机/旧上位机
|
||
extern void uf_UART1_Init( u32 bound );
|
||
extern void USART1_SendOneByte(uint8_t data);
|
||
extern void USART1_SendMulByte(uint8_t *bufPT, uint8_t size);
|
||
extern void MODBUS_Init(void); //串口初始化
|
||
extern void MODBUS_IT_Receive(void);
|
||
extern void MODBUS_IQ_Transmit(void);
|
||
extern void MODBUS_IT_TIMUpdate(void);
|
||
extern void MODBUS_TIM_Moni(void);
|
||
//旧上位机相关
|
||
extern void UART1_ReadRecord(void);
|
||
extern void UART1_ClearRecord(void);
|
||
extern void MODBUS_F03_Rx(uint8_t *mem);
|
||
extern void MODBUS_F10_Rx(uint8_t *mem);
|
||
extern void MODBUS_Faa_Rx(uint8_t *mem);
|
||
extern void MODBUS_Fbb_Rx(uint8_t *mem);
|
||
//主机相关
|
||
extern void MODBUS_Poll_Init(void); //轮询汇总初始化,只有主机数据
|
||
extern void MODBUS_MASTER_F03_Rx(void); //处理从机对读指令的回复
|
||
extern void MODBUS_MASTER_F10_Rx(void); //处理从机对写指令的回复
|
||
extern void MODBUS_MASTER_Polling_Tx(void);//主机轮询获总数据
|
||
#if Addr_SetAuto
|
||
//分配地址
|
||
extern void MODBUS_AddrAssign_Tx(void); //主机自动分配地址
|
||
extern void MODBUS_WrIndex_Tx(void); //主机广播下发队列标志
|
||
extern void MODBUS_WrIndex_Rx(void); //从机接收该次分配地址的队列标志
|
||
#endif
|
||
//屏幕看从机
|
||
extern void MODBUS_Screen_RdSlave_Tx(void); //主机因屏幕读从机数据
|
||
extern void MODBUS_Screen_WrSlaveAddr_Tx(void);//主机因屏幕写从机地址
|
||
//上位机看从机
|
||
extern void MODBUS_Config_RdSlave_Tx(void); //主机因上位机读从机数据
|
||
|
||
//Modbus1 - 485逆变器/新上位机
|
||
extern void uf_UART3_Init( u32 bound );
|
||
extern void USART3_SendMulByte(uint8_t *bufPT, uint8_t size);
|
||
extern void MODBUS1_Init(void);
|
||
extern void MODBUS1_IT_Receive(void);
|
||
extern void MODBUS1_IQ_Transmit(void);
|
||
extern void MODBUS1_IT_TIMUpdate(void);
|
||
extern void MODBUS1_TIM_Moni(void);
|
||
//新上位机相关
|
||
extern void UART3_EraseIAP(void);
|
||
extern void UART3_ReadRecord(void);
|
||
extern void UART3_ClearRecord(void);
|
||
extern void UART3_ProtocolSwitch(void);
|
||
extern void MODBUS1_F03_Rx(uint8_t *mem);
|
||
extern void MODBUS1_F10_Rx(uint8_t *mem);
|
||
extern void MODBUS1_Faa_Rx(uint8_t *mem);
|
||
extern void MODBUS1_Fbb_Rx(uint8_t *mem);
|
||
//广播
|
||
extern void MODBUS1_CtrlMOS_Rx(uint8_t *mem); //ff f2
|
||
//485逆变器
|
||
extern void MODBUS1_UpdateData(void);
|
||
extern void YDN(void);
|
||
|
||
//三选一分板串口
|
||
extern void uf_UART4_Init( u32 bound );
|
||
|
||
//蓝牙模块 - 透传模式,通信小程序
|
||
extern void BLE_IO_Init(void);
|
||
extern void BLE_Open(void);
|
||
extern void BLE_Close(void);
|
||
extern void BLE_Reset(void);
|
||
extern void BLE_Init(void);
|
||
extern void BLE_TIM_Moni(void);
|
||
extern void BLE_IT_Receive(void); //接收
|
||
extern void BLE_IT_Update(void); //接收分析
|
||
extern void BLE_IQ_Update(void); //发送分析
|
||
extern void BLE_IQ_Transmit(void); //发送
|
||
//功能
|
||
extern void BLE_WriteName(void);
|
||
extern void BLE_CheckName(void);
|
||
|
||
//WIFI模块 - 模块询问才回复
|
||
extern void WIFI_IO_Init(void);
|
||
extern void WIFI_Open(void);
|
||
extern void WIFI_Close(void);
|
||
extern void WIFI_Reset(void);
|
||
extern void WIFI_Init(void);
|
||
extern void WIFI_TIM_Moni(void);
|
||
extern void WIFI_IT_Receive(void); //接收
|
||
extern void WIFI_IT_Update(void); //接收分析
|
||
extern void WIFI_IQ_Update(void); //发送分析
|
||
extern void WIFI_IQ_Transmit(void); //发送
|
||
|
||
//4G模块 - AT指令通信
|
||
extern int LTE_printf(const char *fmt, ...);
|
||
extern void LTE_4G_IO_Init(void);
|
||
extern void LTE_4G_Open(void);
|
||
extern void LTE_4G_Close(void);
|
||
extern void LTE_4G_Reset(void);
|
||
extern void LTE_4G_Init(void);
|
||
extern void LTE_TIM_Moni(void);
|
||
extern void LTE_4G_IT_Receive(void); //接收
|
||
extern void LTE_4G_IT_Update(void); //接收分析
|
||
extern void LTE_4G_IQ_Update(void); //发送分析
|
||
extern void LTE_4G_IQ_Transmit(void); //发送
|
||
//填充4G上报属性
|
||
extern void LTE_Record_pubData(void);
|
||
//OTA升级相关
|
||
extern void LTE_OTA_Info(void);
|
||
extern void LTE_OTA_IT_Update(void);
|
||
extern void LTE_OTA_IQ_Update(void);
|
||
extern void LTE_OTA_IQ_Transmit(void);
|
||
//功能
|
||
extern void LTE_4G_Domain_ChangeSN(void);
|
||
extern void gcj02_to_wgs84(double gcj_lon, double gcj_lat, double *wgs_lon, double *wgs_lat);
|
||
|
||
//ADC
|
||
extern void uf_ADC_Init(void);
|
||
extern void LOAD_VOL(void);
|
||
extern void MCU_TemperaProcess(void);
|
||
|
||
//CAN
|
||
extern void uf_CAN1_Init(void);
|
||
extern void CAN_TIM_Moni(void);
|
||
extern void CAN_UpdateData(void);
|
||
extern void CAN1_SendData(uint32_t Id, uint8_t *data);
|
||
|
||
//逆变器通信协议
|
||
//第1页
|
||
extern void CAN_Protocol_SolArk(void);
|
||
extern void CAN_Protocol_GoodWe(void);
|
||
extern void CAN_Protocol_Megarevo(void);
|
||
extern void CAN_Protocol_Pylon(void);
|
||
extern void CAN_Protocol_Deye(void);
|
||
extern void CAN_Protocol_MUST(void);
|
||
extern void CAN_Protocol_solis(void);
|
||
extern void CAN_Protocol_Growatt(void);
|
||
extern void CAN_Protocol_Aiswei(void);
|
||
extern void CAN_Protocol_Afore(void);
|
||
extern void CAN_Protocol_Victron(void);
|
||
extern void CAN_Protocol_Sorotec(void);
|
||
extern void MOD_Protocol_Growatt(void); //同时准备通信
|
||
extern void MOD_Protocol_Sorotec(void); //同时准备通信
|
||
extern void YDN_Protocol_Pylon(void);
|
||
//第2页
|
||
extern void CAN_Protocol_SMA(void);
|
||
extern void CAN_Protocol_Sunways(void);
|
||
extern void CAN_Protocol_Luxpower(void);
|
||
extern void CAN_Protocol_Schneider(void);
|
||
extern void CAN_Protocol_AlpSolarr(void);
|
||
extern void MOD_Protocol_SRNE(void);
|
||
extern void MOD_Protocol_Voltronic(void);
|
||
extern void MOD_Protocol_COSUPER(void);
|
||
extern void MOD_Protocol_SMK(void);
|
||
extern void MOD_Protocol_SAKO(void);
|
||
extern void MOD_Protocol_SNADI(void);
|
||
extern void MOD_Protocol_invt(void);
|
||
|
||
//NTC
|
||
extern uint16_t const NTC_103AT_CMFA[166];
|
||
extern uint16_t TEMP_Cal(uint16_t ntcR);
|
||
extern uint16_t TEMP_Cal_CMFA(uint16_t ntcR);
|
||
|
||
//AFE
|
||
extern uint8_t bAlarmFlag;
|
||
extern uint8_t bAlarmFlagOld;
|
||
extern uint8_t balancing;
|
||
extern int16_t AFE_CADC_GetVal(void);
|
||
extern void AFE_ReadAlarmFlag(void);
|
||
extern uint8_t AFE_Read(uint8_t addr, uint8_t lenth, uint8_t *data);
|
||
extern uint8_t AFE_WriteRAM(uint8_t addr, uint8_t lenth, uint8_t *data);
|
||
extern uint8_t TwiRead(uint8_t SlaveID,uint16_t RdAddr, uint8_t Length, uint8_t *RdBuf);
|
||
extern void CALI_CurrentProcess(void);
|
||
|
||
//电量
|
||
extern void GaugeManage(void);
|
||
extern void Cali_SOC_Moni(void);
|
||
extern void Cali_FCC_Moni(void);
|
||
|
||
//Screen
|
||
extern void uf_UART2_Init( u32 bound );
|
||
extern void Screen_Init(void);
|
||
extern void Screen_TIM_Moni(void);
|
||
extern void Screen_IT_Receive(void); //接收
|
||
extern void Screen_IT_Update(void); //接收分析
|
||
extern void Screen_IQ_Transmit(void); //发送
|
||
extern void SCR_KeepLight0(void);
|
||
extern void SCR_DispProcotol(void);
|
||
|
||
//SDWA
|
||
extern void SDWA_JumpToHome(void);
|
||
extern void SDWA_ChangeLight(uint8_t light);
|
||
extern void SDWA_KeepLight0(void);
|
||
extern void SDWA_UpdateData(void);
|
||
extern void SDWA_RecvData(void);
|
||
extern void SDWA_TIM_Moni(void);
|
||
extern void SDWA_IT_Receive(void);
|
||
|
||
//OCV开路电压矫正SOC
|
||
extern uint8_t OCV_CaliSoc_dp(void);
|
||
extern void OCV_CaliSOC(void);
|
||
extern void OCV_CaliSOC_DataWr(void);
|
||
|
||
//Status
|
||
extern void Trigger_OVAlarm(void);
|
||
extern void Trigger_UVAlarm(void);
|
||
extern void Release_OVAlarm(void);
|
||
extern void Release_UVAlarm(void);
|
||
extern void Trigger_OVProtect(void);
|
||
extern void Trigger_UVProtect(void);
|
||
extern void Release_OVProtect(void);
|
||
extern void Release_UVProtect(void);
|
||
|
||
extern void Trigger_CurAlarm(void);
|
||
extern void Release_CurAlarm(void);
|
||
extern void Trigger_CurProtect(void);
|
||
extern void Release_CurProtect(void);
|
||
extern void Trigger_CurProtectLock(void);
|
||
|
||
extern void Trigger_mcuTAlarm(void);
|
||
extern void Release_mcuTAlarm(void);
|
||
extern void Trigger_mcuTProtect(void);
|
||
extern void Release_mcuTProtect(void);
|
||
|
||
extern void Trigger_amTAlarm(void);
|
||
extern void Release_amTAlarm(void);
|
||
extern void Trigger_amTProtect(void);
|
||
extern void Release_amTProtect(void);
|
||
|
||
extern void Trigger_afeTAlarm(void);
|
||
extern void Release_afeTAlarm(void);
|
||
extern void Trigger_afeTProtect(void);
|
||
extern void Release_afeTProtect(void);
|
||
|
||
extern void Check_eventChange(void);
|
||
extern void Transmit_incident(void);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|
||
|