733 lines
19 KiB
C#
733 lines
19 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace LFP_Manager.DataStructure
|
|
{
|
|
public class CommConfig
|
|
{
|
|
public string AppPath;
|
|
public string mSN;
|
|
|
|
public int CommType;
|
|
|
|
public int TargetModelIndex;
|
|
|
|
public string SnmpIP;
|
|
public int SnmpModelIndex;
|
|
public int SnmpMdQty;
|
|
|
|
public string UartPort;
|
|
public int UartBaudrate;
|
|
public int UartModelIndex;
|
|
|
|
public int CanDevice;
|
|
public int CanIndex;
|
|
public int CanNo;
|
|
public int CanBaudrate;
|
|
|
|
public int DbLogPeriod;
|
|
|
|
public int CbTestGap;
|
|
public int CbTestTime;
|
|
|
|
public CommConfig()
|
|
{
|
|
CommType = 0;
|
|
TargetModelIndex = 0;
|
|
SnmpIP = "";
|
|
SnmpModelIndex = 0;
|
|
SnmpMdQty = 0;
|
|
UartPort = "";
|
|
UartBaudrate = 0;
|
|
UartModelIndex = 0;
|
|
CanDevice = 0;
|
|
CanIndex = 0;
|
|
CanNo = 0;
|
|
CanBaudrate = 0;
|
|
|
|
DbLogPeriod = 5;
|
|
|
|
CbTestGap = 1500;
|
|
CbTestTime = 3000;
|
|
}
|
|
}
|
|
|
|
public class TMinMax
|
|
{
|
|
public short value;
|
|
public short num;
|
|
|
|
public TMinMax()
|
|
{
|
|
value = 0;
|
|
num = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceSystemTotalData
|
|
{
|
|
public bool CommFail;
|
|
|
|
public DeviceValueTotalData ValueData;
|
|
public DeviceStatusTotalData StatusData;
|
|
public DeviceAvgData AvgData;
|
|
|
|
public DeviceSystemTotalData()
|
|
{
|
|
CommFail = false;
|
|
ValueData = new DeviceValueTotalData();
|
|
StatusData = new DeviceStatusTotalData();
|
|
AvgData = new DeviceAvgData();
|
|
}
|
|
}
|
|
|
|
public class DeviceSystemData
|
|
{
|
|
public int mNo;
|
|
public int cellQty;
|
|
public int tempQty;
|
|
public UInt32 heatbeat;
|
|
public int OneBuffTime;
|
|
public int AllBuffTime;
|
|
public bool CommFail;
|
|
public bool ShelfCommFail;
|
|
public DateTime LastRxTime;
|
|
|
|
public DeviceValueData ValueData;
|
|
public DeviceAvgData AvgData;
|
|
public DeviceStatusData StatusData;
|
|
public DeviceParamData ParamData;
|
|
public DeviceCalibration CalibriationData;
|
|
|
|
public DeviceInforation Information;
|
|
public DeviceSystemData()
|
|
{
|
|
mNo = 0;
|
|
heatbeat = 0;
|
|
OneBuffTime = 0;
|
|
AllBuffTime = 0;
|
|
CommFail = false;
|
|
ShelfCommFail = false;
|
|
LastRxTime = new DateTime();
|
|
|
|
ValueData = new DeviceValueData();
|
|
AvgData = new DeviceAvgData();
|
|
StatusData = new DeviceStatusData();
|
|
ParamData = new DeviceParamData();
|
|
CalibriationData = new DeviceCalibration();
|
|
|
|
Information = new DeviceInforation();
|
|
}
|
|
}
|
|
|
|
public class DeviceValueTotalData
|
|
{
|
|
public short TotalVoltage;
|
|
public short TotalCurrent;
|
|
public short TotalSOC;
|
|
public short TotalTemp;
|
|
|
|
public DeviceValueTotalData()
|
|
{
|
|
TotalVoltage = 0;
|
|
TotalCurrent = 0;
|
|
TotalSOC = 0;
|
|
TotalTemp = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceValueData
|
|
{
|
|
public byte[] fw_ver;
|
|
|
|
public short voltageOfPack;
|
|
public short current;
|
|
public short averageCurrent;
|
|
public short rSOC;
|
|
|
|
public ushort[] CellVoltage;
|
|
public short[] CellTemperature;
|
|
|
|
public short CpuTemperature;
|
|
public short FetTemperature;
|
|
|
|
public short remainingCapacity;
|
|
public short stateOfHealth;
|
|
public short cycleCount;
|
|
public short fullChargeCapacity;
|
|
public short designedCapacity;
|
|
public DeviceValueData()
|
|
{
|
|
fw_ver = new byte[4];
|
|
|
|
voltageOfPack = 0;
|
|
current = 0;
|
|
averageCurrent = 0;
|
|
rSOC = 0;
|
|
|
|
CellVoltage = new ushort[csConstData.SystemInfo.MAX_MODULE_CELL_SIZE];
|
|
CellTemperature = new short[csConstData.SystemInfo.MAX_MODULE_TEMP_SIZE];
|
|
|
|
CpuTemperature = 0;
|
|
FetTemperature = 0;
|
|
|
|
remainingCapacity = 0;
|
|
stateOfHealth = 0;
|
|
cycleCount = 0;
|
|
fullChargeCapacity = 0;
|
|
designedCapacity = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceAvgData
|
|
{
|
|
public ushort maxCellVoltage;
|
|
public ushort minCellVoltage;
|
|
public ushort avgCellVoltage;
|
|
public ushort diffCellVoltage;
|
|
public short maxCellNum;
|
|
public short minCellNum;
|
|
public short maxTemp;
|
|
public short minTemp;
|
|
public short avgTemp;
|
|
public short diffTemp;
|
|
public short maxTempNum;
|
|
public short minTempNum;
|
|
public DeviceAvgData()
|
|
{
|
|
maxCellVoltage = 0;
|
|
minCellVoltage = 0;
|
|
avgCellVoltage = 0;
|
|
diffCellVoltage = 0;
|
|
maxCellNum = 0;
|
|
minCellNum = 0;
|
|
maxTemp = 0;
|
|
minTemp = 0;
|
|
avgTemp = 0;
|
|
diffTemp = 0;
|
|
maxTempNum = 0;
|
|
minTempNum = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceStatusTotalData
|
|
{
|
|
public short batteryStatus;
|
|
public short warning;
|
|
public short protect;
|
|
public short status;
|
|
|
|
public DeviceStatusTotalData()
|
|
{
|
|
batteryStatus = 0;
|
|
warning = 0;
|
|
protect = 0;
|
|
status = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceStatusData
|
|
{
|
|
public short batteryStatusA;
|
|
public short batteryStatusB;
|
|
public short warning;
|
|
public short protect;
|
|
public short protect1;
|
|
public short status;
|
|
public short alarm;
|
|
public short relayStatus;
|
|
public uint cellBallanceStatusLv;
|
|
public uint cellBallanceStatusHv;
|
|
public ushort cellBalanceValue;
|
|
|
|
public uint BalanceEnable;
|
|
public uint BalanceMode;
|
|
|
|
public short cellBalanceInterval;
|
|
public short cellBalanceEndGap;
|
|
public short cellBalanceFlag;
|
|
public DeviceStatusData()
|
|
{
|
|
batteryStatusA = 0;
|
|
batteryStatusB = 0;
|
|
warning = 0;
|
|
protect = 0;
|
|
protect1 = 0;
|
|
status = 0;
|
|
alarm = 0;
|
|
relayStatus = 0;
|
|
cellBallanceStatusLv = 0;
|
|
cellBallanceStatusHv = 0;
|
|
cellBalanceValue = 0;
|
|
cellBalanceInterval = 0;
|
|
cellBalanceEndGap = 0;
|
|
cellBalanceFlag = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceCommStatus
|
|
{
|
|
public DateTime LastRxTime;
|
|
public bool CommFail;
|
|
public DeviceCommStatus()
|
|
{
|
|
LastRxTime = new DateTime();
|
|
CommFail = false;
|
|
}
|
|
}
|
|
|
|
public class DeviceParamData
|
|
{
|
|
public short CellOverVoltageTrip;
|
|
public short CellOverVoltageWarning;
|
|
public short CellOverVoltageRelease;
|
|
public short CellUnderVoltageTrip;
|
|
public short CellUnderVoltageWarning;
|
|
public short CellUnderVoltageRelease;
|
|
|
|
public short SysOverVoltageTrip;
|
|
public short SysOverVoltageWarning;
|
|
public short SysOverVoltageRelease;
|
|
public short SysUnderVoltageTrip;
|
|
public short SysUnderVoltageWarning;
|
|
public short SysUnderVoltageRelease;
|
|
|
|
public short ChaHighTempTrip;
|
|
public short ChaHighTempWarning;
|
|
public short ChaHighTempRelease;
|
|
public short ChaLowTempTrip;
|
|
public short ChaLowTempWarning;
|
|
public short ChaLowTempRelease;
|
|
public short DchHighTempTrip;
|
|
public short DchHighTempWarning;
|
|
public short DchHighTempRelease;
|
|
public short DchLowTempTrip;
|
|
public short DchLowTempWarning;
|
|
public short DchLowTempRelease;
|
|
|
|
public short ChaOverCurrentTrip;
|
|
public short ChaOverCurrentWarning;
|
|
public short ChaOverCurrentRelease;
|
|
public short DchOverCurrentTrip;
|
|
public short DchOverCurrentWarning;
|
|
public short DchOverCurrentRelease;
|
|
|
|
public short LowSocTrip;
|
|
public short LowSocWarning;
|
|
public short LowSocRelease;
|
|
|
|
public short CellVoltageDifferenceTrip;
|
|
public short CellVoltageDifferenceWarning;
|
|
public short CellVoltageDifferenceRelease;
|
|
public short CellVoltageDifferenceTime;
|
|
|
|
public short DefalutParamOption;
|
|
public short DefalutParamAll;
|
|
public DeviceParamData()
|
|
{
|
|
CellOverVoltageTrip = 0;
|
|
CellOverVoltageWarning = 0;
|
|
CellOverVoltageRelease = 0;
|
|
CellUnderVoltageTrip = 0;
|
|
CellUnderVoltageWarning = 0;
|
|
CellUnderVoltageRelease = 0;
|
|
|
|
SysOverVoltageTrip = 0;
|
|
SysOverVoltageWarning = 0;
|
|
SysOverVoltageRelease = 0;
|
|
SysUnderVoltageTrip = 0;
|
|
SysUnderVoltageWarning = 0;
|
|
SysUnderVoltageRelease = 0;
|
|
|
|
ChaHighTempTrip = 0;
|
|
ChaHighTempWarning = 0;
|
|
ChaHighTempRelease = 0;
|
|
ChaLowTempTrip = 0;
|
|
ChaLowTempWarning = 0;
|
|
ChaLowTempRelease = 0;
|
|
DchHighTempTrip = 0;
|
|
DchHighTempWarning = 0;
|
|
DchHighTempRelease = 0;
|
|
DchLowTempTrip = 0;
|
|
DchLowTempWarning = 0;
|
|
DchLowTempRelease = 0;
|
|
|
|
ChaOverCurrentTrip = 0;
|
|
ChaOverCurrentWarning = 0;
|
|
ChaOverCurrentRelease = 0;
|
|
DchOverCurrentTrip = 0;
|
|
DchOverCurrentWarning = 0;
|
|
DchOverCurrentRelease = 0;
|
|
|
|
LowSocTrip = 0;
|
|
LowSocWarning = 0;
|
|
LowSocRelease = 0;
|
|
|
|
CellVoltageDifferenceTrip = 0;
|
|
CellVoltageDifferenceWarning = 0;
|
|
CellVoltageDifferenceRelease = 0;
|
|
CellVoltageDifferenceTime = 0;
|
|
|
|
DefalutParamOption = 0;
|
|
DefalutParamAll = 0;
|
|
}
|
|
}
|
|
|
|
public class DeviceCalibration
|
|
{
|
|
public CellVoltageCalib CellVoltge;
|
|
public SystemVoltageCalib SystemVoltage;
|
|
public ForcedBalControl ForcedBalancing;
|
|
public ForcedBalControl2 ForcedBalancing2; // For PR-57150
|
|
public BatteryParameter Battery;
|
|
public CurrentCalib Current;
|
|
public SystemInfor SystemInfo;
|
|
public SocCalibration SocCalib;
|
|
public TCbParam CbParam;
|
|
|
|
public DeviceInforation InvData;
|
|
|
|
public short CellBalancingVoltage;
|
|
public short CellBalancingVoltageInterval;
|
|
public short CellBalancingVoltageEndGap;
|
|
|
|
public DeviceCalibration()
|
|
{
|
|
CellVoltge = new CellVoltageCalib();
|
|
SystemVoltage = new SystemVoltageCalib();
|
|
ForcedBalancing = new ForcedBalControl();
|
|
ForcedBalancing2 = new ForcedBalControl2(); // For PR-57150
|
|
Battery = new BatteryParameter();
|
|
Current = new CurrentCalib();
|
|
SystemInfo = new SystemInfor();
|
|
SocCalib = new SocCalibration();
|
|
CbParam = new TCbParam();
|
|
|
|
InvData = new DeviceInforation();
|
|
|
|
CellBalancingVoltage = 0;
|
|
CellBalancingVoltageInterval = 0;
|
|
CellBalancingVoltageEndGap = 0;
|
|
}
|
|
public DeviceCalibration DeepCopy()
|
|
{
|
|
DeviceCalibration newCopy = new DeviceCalibration
|
|
{
|
|
CellVoltge = CellVoltge,
|
|
SystemVoltage = SystemVoltage,
|
|
ForcedBalancing = ForcedBalancing.DeepCopy(),
|
|
Battery = Battery,
|
|
Current = Current,
|
|
SystemInfo = SystemInfo,
|
|
SocCalib = SocCalib,
|
|
CbParam = CbParam.DeepCopy(),
|
|
|
|
InvData = InvData,
|
|
|
|
CellBalancingVoltage = CellBalancingVoltage,
|
|
CellBalancingVoltageInterval = CellBalancingVoltageInterval,
|
|
CellBalancingVoltageEndGap = CellBalancingVoltageEndGap,
|
|
};
|
|
return newCopy;
|
|
}
|
|
|
|
}
|
|
|
|
public class DeviceInforation
|
|
{
|
|
public UInt32 ManufactureDate;
|
|
public byte[] pcb_sn;
|
|
public byte[] module_sn;
|
|
public DeviceInforation()
|
|
{
|
|
ManufactureDate = 0;
|
|
pcb_sn = new byte[16];
|
|
module_sn = new byte[32];
|
|
}
|
|
}
|
|
|
|
public class CellVoltageCalib
|
|
{
|
|
public short CvOffsetLow;
|
|
public short CvOffsetHigh;
|
|
public CellVoltageCalib()
|
|
{
|
|
CvOffsetLow = 0;
|
|
CvOffsetHigh = 0;
|
|
}
|
|
}
|
|
|
|
public class SystemVoltageCalib
|
|
{
|
|
public short Calibration_K;
|
|
public short Calibration_B;
|
|
public SystemVoltageCalib()
|
|
{
|
|
Calibration_K = 0;
|
|
Calibration_B = 0;
|
|
}
|
|
}
|
|
|
|
public class ForcedBalControl
|
|
{
|
|
public short Control;
|
|
public short CellNo;
|
|
public bool AutoB;
|
|
public bool DCP;
|
|
public ForcedBalControl()
|
|
{
|
|
Control = 0;
|
|
CellNo = 0;
|
|
AutoB = false;
|
|
DCP = false;
|
|
}
|
|
public ForcedBalControl DeepCopy()
|
|
{
|
|
ForcedBalControl newCopy = new ForcedBalControl()
|
|
{
|
|
Control = Control,
|
|
CellNo = CellNo,
|
|
AutoB = AutoB,
|
|
DCP = DCP
|
|
};
|
|
return newCopy;
|
|
}
|
|
}
|
|
|
|
public class ForcedBalControl2
|
|
{
|
|
public int Control;
|
|
public int CellNo;
|
|
public int Mode;
|
|
public int Enable;
|
|
public ForcedBalControl2()
|
|
{
|
|
Control = 0;
|
|
CellNo = 0;
|
|
Mode = 0;
|
|
Enable = 0;
|
|
}
|
|
public ForcedBalControl2 DeepCopy()
|
|
{
|
|
ForcedBalControl2 newCopy = new ForcedBalControl2()
|
|
{
|
|
Control = Control,
|
|
CellNo = CellNo,
|
|
Mode = Mode,
|
|
Enable = Enable
|
|
};
|
|
return newCopy;
|
|
}
|
|
}
|
|
|
|
public class BatteryParameter
|
|
{
|
|
public short CellQty;
|
|
public short TempQty;
|
|
public UInt32 Capacity;
|
|
public BatteryParameter()
|
|
{
|
|
CellQty = 0;
|
|
TempQty = 0;
|
|
Capacity = 0;
|
|
}
|
|
}
|
|
|
|
public class CurrentCalib
|
|
{
|
|
public short SelectSubItem;
|
|
public short ShuntRange;
|
|
public short CurrentZero;
|
|
public short VoltageZero;
|
|
public Int32 Calibration_K;
|
|
public short ChaAndDchSelect;
|
|
public short ChargeOption;
|
|
public CurrentCalib()
|
|
{
|
|
SelectSubItem = 0;
|
|
ShuntRange = 0;
|
|
CurrentZero = 0;
|
|
VoltageZero = 0;
|
|
Calibration_K = 0;
|
|
ChaAndDchSelect = 0;
|
|
ChargeOption = 0;
|
|
}
|
|
}
|
|
|
|
public class SystemInfor
|
|
{
|
|
//public short Id;
|
|
public DateTime devTime;
|
|
public UInt16 devAddr;
|
|
public SystemInfor()
|
|
{
|
|
devTime = new DateTime();
|
|
devAddr = 0;
|
|
}
|
|
}
|
|
|
|
public class SocCalibration
|
|
{
|
|
public short CellNo;
|
|
public short SocValue;
|
|
public SocCalibration()
|
|
{
|
|
CellNo = 0;
|
|
SocValue = 0;
|
|
}
|
|
}
|
|
|
|
public class TCbParam
|
|
{
|
|
public short Threadhold;
|
|
public short Window;
|
|
public short Min;
|
|
public short Interval;
|
|
public TCbParam()
|
|
{
|
|
Threadhold = 0;
|
|
Window = 0;
|
|
Min = 0;
|
|
Interval = 0;
|
|
}
|
|
public TCbParam DeepCopy()
|
|
{
|
|
TCbParam newCopy = new TCbParam
|
|
{
|
|
Threadhold = Threadhold,
|
|
Window = Window,
|
|
Min = Min,
|
|
Interval = Interval
|
|
};
|
|
return newCopy;
|
|
}
|
|
}
|
|
|
|
public class DataFunction
|
|
{
|
|
public static void DataInit(ref DeviceSystemData sData, ref CommConfig sConfig)
|
|
{
|
|
sData.ShelfCommFail = true;
|
|
|
|
switch (sConfig.TargetModelIndex)
|
|
{
|
|
case 0: // PR-57150
|
|
sData.cellQty = 18;
|
|
sData.tempQty = 6;
|
|
break;
|
|
case 1: // PR-64150
|
|
sData.cellQty = 20;
|
|
sData.tempQty = 8;
|
|
break;
|
|
case 2: // LFPM-57080
|
|
sData.cellQty = 18;
|
|
sData.tempQty = 6;
|
|
break;
|
|
case 3: // PR-102150
|
|
sData.cellQty = 32;
|
|
sData.tempQty = 8;
|
|
break;
|
|
case 4: // PR-115300
|
|
sData.cellQty = 36;
|
|
sData.tempQty = 16;
|
|
break;
|
|
case 5: // PR-67150
|
|
sData.cellQty = 21;
|
|
sData.tempQty = 8;
|
|
break;
|
|
default:
|
|
sData.cellQty = 18;
|
|
sData.tempQty = 6;
|
|
break;
|
|
}
|
|
|
|
for (int j = 0; j < csConstData.SystemInfo.MAX_MODULE_CELL_SIZE; j++)
|
|
{
|
|
sData.ValueData.CellVoltage[j] = 0;
|
|
}
|
|
for (int j = 0; j < csConstData.SystemInfo.MAX_MODULE_TEMP_SIZE; j++)
|
|
{
|
|
sData.ValueData.CellTemperature[j] = 0;
|
|
}
|
|
sData.ValueData.voltageOfPack = 0;
|
|
sData.ValueData.current = 0;
|
|
sData.ValueData.rSOC = 0;
|
|
sData.AvgData.maxCellVoltage = 0;
|
|
sData.AvgData.minCellVoltage = 0;
|
|
sData.AvgData.avgCellVoltage = 0;
|
|
sData.AvgData.maxTemp = 0;
|
|
sData.AvgData.minTemp = 0;
|
|
sData.AvgData.avgTemp = 0;
|
|
sData.heatbeat = 0;
|
|
sData.StatusData.warning = 0;
|
|
sData.StatusData.protect = 0;
|
|
}
|
|
}
|
|
public class TCanTxBuff
|
|
{
|
|
private const int BuffMax = 4096;
|
|
public int InPos;
|
|
public int OutPos;
|
|
public TCanTRxData[] Buf;
|
|
public TCanTxBuff()
|
|
{
|
|
InPos = 0;
|
|
OutPos = 0;
|
|
Buf = new TCanTRxData[BuffMax];
|
|
for (int i = 0; i < BuffMax; i++)
|
|
{
|
|
Buf[i] = new TCanTRxData();
|
|
}
|
|
}
|
|
|
|
public void PutBuff(TCanTRxData CanTxData)
|
|
{
|
|
if (CanTxData != null)
|
|
{
|
|
Buf[InPos++] = CanTxData.DeepCopy();
|
|
InPos %= BuffMax;
|
|
}
|
|
}
|
|
public TCanTRxData GetBuff()
|
|
{
|
|
TCanTRxData result = null;
|
|
|
|
if (InPos != OutPos)
|
|
{
|
|
result = Buf[OutPos++].DeepCopy();
|
|
OutPos %= BuffMax;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
public class TCanTRxData
|
|
{
|
|
public int type;
|
|
public UInt32 exid;
|
|
public byte[] data;
|
|
|
|
public TCanTRxData()
|
|
{
|
|
type = 0;
|
|
exid = 0;
|
|
data = new byte[8];
|
|
}
|
|
public TCanTRxData DeepCopy()
|
|
{
|
|
TCanTRxData newCopy = new TCanTRxData
|
|
{
|
|
exid = exid
|
|
};
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
newCopy.data[i] = data[i];
|
|
}
|
|
return newCopy;
|
|
}
|
|
}
|
|
|
|
}
|