초기 커밋.

This commit is contained in:
2025-12-17 12:40:51 +09:00
parent e8d195c03e
commit 368acb1aa8
184 changed files with 95393 additions and 0 deletions

View File

@@ -0,0 +1,281 @@
using LFP_Manager.DataStructure;
using LFP_Manager.Utils;
using System;
namespace LFP_Manager.Function
{
class csMakeDataFunction124050
{
private static DeviceSystemData MakeAlarmTripData(int id, short ndata, DeviceSystemData rSystemData)
{
bool[] aData = csUtils.Int16ToBitArray(ndata);
short bFault = rSystemData.StatusData.protection;
short bWarning = rSystemData.StatusData.warning;
int i = 0;
switch (id)
{
case 0: // Warning
if (aData[i++]) bWarning |= (1 << 2); // Bit 0 : Over voltage warning
else bWarning &= ~(1 << 2);
if (aData[i++]) bWarning |= (1 << 4); // Bit 1 : Cell Over voltage warning
else bWarning &= ~(1 << 4);
if (aData[i++]) bWarning |= (1 << 3); // Bit 2 : Low voltage warning
else bWarning &= ~(1 << 3);
if (aData[i++]) bWarning |= (1 << 5); // Bit 3 : Low cell voltage warning
else bWarning &= ~(1 << 5);
if (aData[i++]) bWarning |= (1 << 6); // Bit 4 : Charge over current warning
else bWarning &= ~(1 << 6);
if (aData[i++]) bWarning |= (1 << 7); // Bit 5 : Discharge over current warning
else bWarning &= ~(1 << 7);
i++; // 06 Abnormal balancing current
i++; // 07 Reserved
if ((aData[8]) || (aData[9])) bWarning |= (1 << 0); // Bit 8 : Charge over temperature warning, Bit 9 : Discharge over temperature warning
else bWarning &= ~(1 << 0);
i++; // 08
i++; // 09
if ((aData[10]) || (aData[11])) bWarning |= (1 << 1); // Bit 10 : Charge low temperature warning, Bit 11 : Discharge low temperature warning
else bWarning &= ~(1 << 1);
i++; // 10
i++; // 11
if (aData[i++]) bWarning |= (1 << 11); // 12 : Low capacity warning
else bWarning &= ~(1 << 11);
i++; // 13
if (aData[i++]) bWarning |= (1 << 9); // 14 Cell Voltage Difference Warning
else bWarning &= ~(1 << 9);
break;
case 1: // Status Code 2
if (aData[i++]) bFault |= (1 << 2); // Bit 0 : Over voltage warning
else bFault &= ~(1 << 2);
if (aData[i++]) bFault |= (1 << 4); // Bit 1 : Cell Over voltage warning
else bFault &= ~(1 << 4);
if (aData[i++]) bFault |= (1 << 3); // Bit 2 : Low voltage warning
else bFault &= ~(1 << 3);
if (aData[i++]) bFault |= (1 << 5); // Bit 3 : Low cell voltage warning
else bFault &= ~(1 << 5);
if (aData[i++]) bFault |= (1 << 6); // Bit 4 : Charge over current warning
else bFault &= ~(1 << 6);
if (aData[i++]) bFault |= (1 << 7); // Bit 5 : Discharge over current warning
else bFault &= ~(1 << 7);
i++; // 06 Abnormal balancing current
i++; // 07 Reserved
if ((aData[8]) || (aData[9])) bFault |= (1 << 0); // Bit 8 : Charge over temperature warning, Bit 9 : Discharge over temperature warning
else bFault &= ~(1 << 0);
i++; // 08
i++; // 09
if ((aData[10]) || (aData[11])) bFault |= (1 << 1); // Bit 10 : Charge low temperature warning, Bit 11 : Discharge low temperature warning
else bFault &= ~(1 << 1);
i++; // 10
i++; // 11
i++; // 12
i++; // 13
if (aData[i++]) bFault |= (1 << 9); // 14 Cell Voltage Difference Warning
else bFault &= ~(1 << 9);
break;
}
rSystemData.StatusData.protection = bFault;
rSystemData.StatusData.warning = bWarning;
return rSystemData;
}
public static void SetSnmpData(int index, object sdata, ref DeviceSystemData aSystemData)
{
switch (index)
{
case 1: aSystemData.ValueData.voltageOfPack = (short)(Convert.ToDouble(sdata) / 10); break; // voltageOfPack - 0.01V
case 2: aSystemData.ValueData.current = (short)(Convert.ToDouble(sdata) - 10000); break; // current - 0.1A, Offset: 10000
case 3: // Cell Voltage #1
case 4: // Cell Voltage #2
case 5: // Cell Voltage #3
case 6: // Cell Voltage #4
case 7: // Cell Voltage #5
case 8: // Cell Voltage #6
case 9: // Cell Voltage #7
case 10: // Cell Voltage #8
case 11: // Cell Voltage #9
case 12: // Cell Voltage #10
case 13: // Cell Voltage #11
case 14: // Cell Voltage #12
case 15: // Cell Voltage #13
case 16: // Cell Voltage #14
case 17: // Cell Voltage #15
case 18: // Cell Voltage #16
case 19: // Cell Voltage #17
case 20: // Cell Voltage #18
case 21: // Cell Voltage #19
case 22: // Cell Voltage #20
case 23: // Cell Voltage #21
case 24: // Cell Voltage #22
case 25: // Cell Voltage #23
case 26: // Cell Voltage #24
case 27: // Cell Voltage #25
case 28: // Cell Voltage #26
case 29: // Cell Voltage #27
case 30: // Cell Voltage #28
case 31: // Cell Voltage #29
case 32: // Cell Voltage #30
case 33: // Cell Voltage #31
case 34: // Cell Voltage #32
case 35: // Cell Voltage #33
case 36: // Cell Voltage #34
case 37: // Cell Voltage #35
case 38: // Cell Voltage #36
case 39: // Cell Voltage #37
case 40: // Cell Voltage #38
case 41: // Cell Voltage #39
aSystemData.ValueData.CellVoltage[index - 3] = (ushort)(Convert.ToDouble(sdata) / 1);
csUtils.MakeMaxAvgMinCellVoltage(ref aSystemData, 39);
break; // Cell Voltage #16
case 43: aSystemData.ValueData.Ext1Temperature = (short)(Convert.ToDouble(sdata) * 10); break; // Temp of PCB - C
case 44: aSystemData.ValueData.Ext2Temperature = (short)(Convert.ToDouble(sdata) * 10); break; // Temp of Ambient - C
case 45: aSystemData.AvgData.maxTemp = (short)(Convert.ToDouble(sdata) * 10); break; // Max. Temp
case 46: aSystemData.ValueData.remainingCapacity = (short)(Convert.ToDouble(sdata) * 1); break; // Remaining Capacity
case 47: aSystemData.ValueData.stateOfHealth = (short)(Convert.ToDouble(sdata) / 10); break; // stateOfHealth
case 48: aSystemData.ValueData.rSOC = (short)(Convert.ToDouble(sdata) / 10); break; // Relatvie State Of Charge
case 49: aSystemData.StatusData.status = (short)(Convert.ToDouble(sdata) / 1); break; // Status
case 50: aSystemData.StatusData.warning = MakeSnmpWarningData((short)Convert.ToDouble(sdata)); break; // warning
case 51: aSystemData.StatusData.protection = MakeSnmpTripData((short)Convert.ToDouble(sdata)); break; // Protection
case 52: // FaultAndStatus
aSystemData.StatusData.faultAndStatus = (short)(Convert.ToDouble(sdata) / 1);
//aSystemData.StatusData.status = (short)(((short)Convert.ToDouble(sdata) >> 8) & 0x0003);
MakeAlarm(ref aSystemData);
break;
case 53: aSystemData.ValueData.cycleCount = (short)(Convert.ToDouble(sdata) / 1); break; // cycleCount
case 54: // Temperature #1
case 55: // Temperature #2
case 56: // Temperature #3
case 57: // Temperature #4
case 58: // Temperature #5
case 59: // Temperature #6
case 60: // Temperature #7
case 61: // Temperature #8
aSystemData.ValueData.CellTemperature[index - 54] = (short)(Convert.ToDouble(sdata) * 10);
csUtils.MakeMaxAvgMinTemperature(ref aSystemData, 8);
break; // Temperature #12
case 68: aSystemData.cellQty = (short)(Convert.ToDouble(sdata) * 1); break; // Cell Number
case 69: aSystemData.ValueData.designedCapacity = (short)(Convert.ToDouble(sdata) * 1); break; // Cell Number
case 70: break; // Average Temperature
case 71: aSystemData.ValueData.MaxBattChargeCurr = (short)(Convert.ToDouble(sdata) * 1); break; // Max. Charge Current - A
case 72: aSystemData.ntcQty = (short)(Convert.ToDouble(sdata) * 1); break; // NTC Number
case 74: aSystemData.BmsDateTime.year = (short)(Convert.ToDouble(sdata) * 1); break; // BMS DateTime - Year
case 75: aSystemData.BmsDateTime.month = (short)(Convert.ToDouble(sdata) * 1); break; // BMS DateTime - Month
case 76: aSystemData.BmsDateTime.day = (short)(Convert.ToDouble(sdata) * 1); break; // BMS DateTime - Day
case 77: aSystemData.BmsDateTime.hour = (short)(Convert.ToDouble(sdata) * 1); break; // BMS DateTime - Hour
case 78: aSystemData.BmsDateTime.minute = (short)(Convert.ToDouble(sdata) * 1); break; // BMS DateTime - Minute
case 79:
aSystemData.BmsDateTime.second = (short)(Convert.ToDouble(sdata) * 1); // BMS DateTime - Second
aSystemData.BmsDateTime.DateTimeStr = string.Format("{0:0000}-{1:00}-{2:00} {3:00}:{4:00}:{5:00}"
, aSystemData.BmsDateTime.year
, aSystemData.BmsDateTime.month
, aSystemData.BmsDateTime.day
, aSystemData.BmsDateTime.hour
, aSystemData.BmsDateTime.minute
, aSystemData.BmsDateTime.second
);
break;
case 81: aSystemData.FloatVoltage = (int)Convert.ToDouble(sdata); break; // Float Voltage - 0.01V
case 82: aSystemData.BoostVoltage = (int)Convert.ToDouble(sdata); break; // Boost Voltage - 0.01V
case 83: aSystemData.MinChargeTemp = (int)Convert.ToDouble(sdata); break; // Min. Charge Temp - C
case 84: aSystemData.MaxChargeTemp = (int)Convert.ToDouble(sdata); break; // Max. Charge Temp - C
case 90: aSystemData.Information.ModelName = (string)sdata; break; // Model - string
case 91: aSystemData.Information.SwProductRev = (string)sdata; break; // BMS Fw Version - string
case 92: aSystemData.Information.HwSerialNumber = (string)sdata; break; // Pack Serial Number - string
case 93: aSystemData.Information.VendorName = (string)sdata; break; // Vendor Name - string
case 94: aSystemData.Information.ProductCode = (string)sdata; break; // Product Code - string
case 95: aSystemData.Information.MajorMinorRev = (string)sdata; break; // Major Minor Revision - string
case 96: aSystemData.Information.HwProductRev = (string)sdata; break; // Hardware Product Revision - string
case 97: aSystemData.Information.ManufacturingDate = (string)sdata; break; // Manufacturing Date - string
default:
break;
}
}
public static void MakeAlarm(ref DeviceSystemData rSystemData)
{
if (((rSystemData.StatusData.faultAndStatus >> 14) & 0x0001) == 0x0001)
{
rSystemData.StatusData.batteryStatus = 4; // Anti-theft Gyroscope
}
else if (((rSystemData.StatusData.faultAndStatus >> 15) & 0x0001) == 0x0001)
{
rSystemData.StatusData.batteryStatus = 5; // Anti-theft Comm.
}
else if (rSystemData.StatusData.protection != 0x0000)
{
rSystemData.StatusData.batteryStatus = 2;
}
else if (rSystemData.StatusData.warning != 0x0000)
{
rSystemData.StatusData.batteryStatus = 1;
}
else
{
rSystemData.StatusData.batteryStatus = 0;
}
}
public static short MakeSnmpTripData(short rdata)
{
short result = 0;
bool[] bAlarm = csUtils.Int16ToBitArray(rdata);
if (bAlarm[0] == true) result |= (short)(1 << 4); // 0x0001Cell OV
if (bAlarm[1] == true) result |= (short)(1 << 2); // 0x0002Pack OV
if (bAlarm[2] == true) result |= (short)(1 << 5); // 0x0004Cell UV
if (bAlarm[3] == true) result |= (short)(1 << 3); // 0x0008Pack UV
if (bAlarm[4] == true) result |= (short)(1 << 6); // 0x0010Charging OC1
if (bAlarm[5] == true) result |= (short)(1 << 6); // 0x0020Charging OC2
if (bAlarm[6] == true) result |= (short)(1 << 7); // 0x0010Discharging OC1
if (bAlarm[7] == true) result |= (short)(1 << 7); // 0x0020Discharging OC2
if (bAlarm[8] == true) result |= (short)(1 << 9); // 0x0200Short Circuit Protection
if (bAlarm[9] == true) result |= (short)(1 << 0); // 0x0080: Charging Over Tempratuer
if (bAlarm[10] == true) result |= (short)(1 << 1); // 0x0080: Charging Under Tempratuer
if (bAlarm[11] == true) result |= (short)(1 << 0); // 0x0040: Discharging Over Tempratuer
if (bAlarm[12] == true) result |= (short)(1 << 1); // 0x0040: Discharging Under Tempratuer
return result;
}
public static short MakeSnmpWarningData(short rdata)
{
short result = 0;
bool[] bAlarm = csUtils.Int16ToBitArray(rdata);
if (bAlarm[0] == true) result |= (short)(1 << 4); // 0x0001Cell OV
if (bAlarm[1] == true) result |= (short)(1 << 5); // 0x0002Cell UV
if (bAlarm[2] == true) result |= (short)(1 << 2); // 0x0004Pack OV
if (bAlarm[3] == true) result |= (short)(1 << 3); // 0x0008Pack UV
if (bAlarm[4] == true) result |= (short)(1 << 6); // 0x0010Charging OC
if (bAlarm[5] == true) result |= (short)(1 << 7); // 0x0020Discharging OC
if (bAlarm[6] == true) result |= (short)(1 << 8); // 0x0040ENV OT
if (bAlarm[7] == true) result |= (short)(1 << 9); // 0x0080ENV UT
if (bAlarm[8] == true) result |= (short)(1 << 0); // 0x0100: Charging Over Temprature
if (bAlarm[9] == true) result |= (short)(1 << 1); // 0x0200: Charging Under Temprature
if (bAlarm[10] == true) result |= (short)(1 << 0); // 0x0400: Discharging Over Temprature
if (bAlarm[11] == true) result |= (short)(1 << 1); // 0x0800: Discharging Under Temprature
if (bAlarm[12] == true) result |= (short)(1 << 11); // 0x1000SOC Low
if (bAlarm[13] == true) result |= (short)(1 << 13); // 0x2000Diff Volt
if (bAlarm[14] == true) result |= (short)(1 << 14); // 0x4000CB Off
return result;
}
}
}