/*
 * parameter.h
 *
 *  Created on: 2024年10月12日
 *      Author: psx
 */

#ifndef APP_INC_PARAMETER_H_
#define APP_INC_PARAMETER_H_

#include "debug.h"
#include "math.h"
#include "uart_dev.h"


typedef struct _Mppt_controlparameter{
    float_t constantVoltageV;               /* 电压高于ConstantVoltageV且电流大于（FloatI + 0.1）进行恒压充电
                                                                                                                                                             电压低于该(ConstantVoltageV - 0.2) 进行恒流充电  (V) */
    float_t floatI;                         /* 电压高于该ConstantVoltageV且电流低于FloatI进行浮充充电  (A) */
    float_t startSolarOpenCircuitV;         /* 太阳能板开路电压高于该电压开始充电  (V) */
    float_t stopSolarOpenCircuitV;          /* 太阳能板开路电压高于该电压停止充电  (V) */
    float_t constantVoltageChargeV;         /* 恒压充电时的输出电压  (V) */
    float_t FloatV;                         /* 浮充充电时的输出电压  (V) */
    float_t loopImpedance;                  /* 回路阻抗大小  (mΩ) */
    float_t HighSideMosTemperature_stop;    /* 当上桥温度达到该值时，停止输出  (°C) */
    float_t HighSideMosTemperature_end;     /* 当上桥温度上升到该值时，降低功率运行  (°C) */
    float_t HighSideMosTemperature_start;   /* 当上桥温度降低到该值时，按照正常情况输出  (°C) */
    float_t dutyRatio;                      /* 占空比 */

    uint16_t sensorEnableBroadcastTime;     /* 传感器运行再次注册的间隔  (S) */
    uint16_t checkSolarOpenCircuitVTime;    /* 启动任务中太阳能板开路电压检测间隔时间  (S) */
    uint16_t outputAgainFlagTime;           /* 出现短路保护后延长该段时间再次检测是否短路，仍然短路则关闭输出  (S) */
    uint16_t excessiveLoadFlagTime;         /* 出现过载后，在该间隔时间中多次（2次）出现过载，则关闭输出  (S) */
    uint16_t eLAgainTime;                   /* 出现过载过载保护后，在该间隔段时间后，再次尝试输出  (S) */
    uint32_t collectOpenCircuitVoltageTime; /* 开路电压采集时间间隔 */
} Mppt_controlparameter;
extern Mppt_controlparameter g_controlParameter;

typedef struct _Mppt_otherParameter{
    /* SL */
    uint8_t address[7];                     /* 地址 */
    uint16_t Access_Node_Type;              /* 接入节点类型  */
    uint16_t Communication_Methods;         /* 通信方式  */
    uint16_t Registration_Status;           /* 注册状态  */
    uint8_t startFlagSL[2];                 /* 起始标志  */
    uint8_t endFlagSL;                      /* 结束标志  */

    /* HY */
    uint8_t hardwareID[6];                  /* 硬件ID */
    uint8_t communicationID[4];             /* 通信ID */
    uint8_t protocolType;                   /* 协议类型;  0x01表示：汇源协议(波特率9600) 0x02表示：南瑞协议(波特率115200)*/
    uint8_t startFlagHY;                    /* 起始码  */
    uint8_t endFlagHY;                      /* 结束码  */

    uint8_t CommunicationProtocolType;      /* 0x00:SL
                                               0x01:HY*/
    uint8_t onlyPower;                      /* 是否只充当电源板：0x00:不是
                                                          0x01：是*/

    uint32_t gw485_Baud;                    /* 串口波特率 */
    uint32_t bat485_Baud;                   /* 串口波特率,为0代表bms不支持通信 */
    float_t Battery_Voltage;                /* 电池电压  (V) */
    float_t Output_Voltage;                 /* 输出电压 */
    float_t Charg_Current;                  /* 充电电流（流向电池+负载）  (A) */
    float_t Discharg_Current;               /* 放电电流（流向负载）  (A) */
    float_t Input_Voltage;                  /* 系统输入电压  (V) */
    float_t Solar_Open_Circuit_Voltage;     /* 太阳能板开路电压  (V) */
    float_t HighSideMos_Temperature;        /* 高端mos的温度  (°C) */
    float_t Solar_In_Circuit_Voltage;       /* 太阳能板输入电压  (V) */

    float_t Charg_BatteryCurrent;           /* 电池充电电流（流向电池）  (A) */
    float_t totalElectricityConsumption;    /* 总电量消耗(W*H) */
    float_t totalChargCapacity;             /* 总充电电量(W*H) */
    float_t SOC;                            /* 剩余电量 */

    uint16_t chargMos_State;                /* 充电开关状态 */
    uint16_t DischargMos_State;             /* 放电mos的状态 */
    uint16_t MPPT_Mode;                     /* 工作模式 */

    uint8_t versionInformation[13];         /* 软件版本信息 */

    uint8_t batteryState;                   /* 有无电池（估计） */
    uint8_t impedanceStart;                 /* 能否开始测量回路阻抗 */
    uint8_t outputAgainFlag;                /* 一段时间中输出短路次数 */
    uint8_t excessiveLoadFlag;              /* 一段时间中输出过载次数 */
    uint8_t overTemperature;                /* 温度检测保护标志位 */
    uint8_t RegistrationRequestFlag;        /* 回复广播标志位 */
    uint8_t runBroadcast;                   /* 是否接收广播帧标志位 */
    uint16_t RegisterNumberMax;             /* 寄存器个数 */
    uint16_t RegisterStartAddressMax;       /* 读写的寄存器的最大起始位置，由设备决定 */
    uint32_t collectOpenCircuitVoltageNUM;  /* 距离上次开路电压采集，运行次数 */

    uint8_t HYconfigModeState;              /* HY通信协议是否进入了配置模式，0x00未进入，0xFF进入 */
    uint8_t HYconfigModeT;                  /* HY通信协议进入配置模式后的延时时间 */

    uint8_t randomNumber;                   /* 随机数 */
}Mppt_otherParameter;
extern Mppt_otherParameter g_otherParameter;


#endif /* APP_INC_PARAMETER_H_ */
