Files
PR_PRM_GUI/LFP_Manager_PRM/DataStructure/csDataStructure.cs
2026-02-11 10:10:43 +09:00

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;
}
}
}