Skip to content

Instantly share code, notes, and snippets.

@wenfengand
Created October 10, 2021 08:50
Show Gist options
  • Select an option

  • Save wenfengand/39885183cb5c9efcb4f670e675acbbfb to your computer and use it in GitHub Desktop.

Select an option

Save wenfengand/39885183cb5c9efcb4f670e675acbbfb to your computer and use it in GitHub Desktop.
小牛电池诊断软件关键代码
public void UpdateTextBox(string text)
{
byte b = 0;
byte b2 = 0;
byte b3 = 0;
ushort num = 0;
double num2 = 0.0;
ushort num3 = 0;
double num4 = 0.0;
short num5 = 0;
double num6 = 0.0;
double num7 = 0.0;
byte b4 = 0;
byte b5 = 0;
byte b6 = 0;
byte b7 = 0;
byte b8 = 0;
byte b9 = 0;
float num8 = 0f;
float num9 = 0f;
float num10 = 0f;
float num11 = 0f;
float num12 = 0f;
float num13 = 0f;
float num14 = 0f;
ushort[] array = new ushort[24];
ushort num15 = 0;
ushort num16 = 0;
byte[] array2 = new byte[24];
double[] array3 = new double[24];
ushort num17 = 0;
byte b10 = 0;
byte[] array4 = new byte[3];
byte[] array5 = new byte[3];
byte[] array6 = new byte[3];
try
{
// 104 = 0x68
if (!check_F || Rbuffer[b] != 104)
{
return;
}
b = (byte)(b + 1);
// 49 = 0x31
if (Rbuffer[b] != 49)
{
return;
}
b = (byte)(b + 1);
// 206 = 0xCE
if (Rbuffer[b] != 206)
{
return;
}
b = (byte)(b + 1);
if (Rbuffer[b] != 104)
{
return;
}
// Com_RW_Sta 在何处修改未知
if (Com_RW_Sta == 1)
{
b = (byte)(b + 1);
// 0x82
if (Rbuffer[b] == 130)
{
for (byte b11 = 0; b11 < Rbuffer[5] + 6; b11 = (byte)(b11 + 1))
{
b2 = (byte)(b2 + Rbuffer[b11]);
}
if (Rbuffer[Rbuffer[5] + 6] == b2)
{
for (byte b11 = 6; b11 < Rbuffer[5] + 6; b11 = (byte)(b11 + 1))
{
Rbuffer[b11] = (byte)(Rbuffer[b11] - Data_chag);
}
Com_Succeed_Pre_F = true;
Recive_OT_F = true;
array4[0] = Rbuffer[6];
array5[0] = (byte)((uint)(array4[0] >> 4) & 0xFu);
array6[0] = (byte)(array4[0] & 0xFu);
string text2 = ByteArrayToHexString(array4);
string text3 = $"{array5[0]:0}";
string text4 = $"{array6[0]:0}";
string text5 = ".";
// 版本号
text2 = "V" + text3 + text5 + text4;
label72.Text = text2;
array4[0] = Rbuffer[7];
array5[0] = (byte)((uint)(array4[0] >> 4) & 0xFu);
array6[0] = (byte)(array4[0] & 0xFu);
text2 = ByteArrayToHexString(array4);
text3 = $"{array5[0]:0}";
text4 = $"{array6[0]:0}";
text5 = ".";
text2 = "V" + text3 + text5 + text4;
label74.Text = text2;
for (b10 = 0; b10 < 16; b10 = (byte)(b10 + 1))
{
BMS_SN[b10] = Rbuffer[b10 + 13];
}
text2 = Encoding.Default.GetString(BMS_SN);
label3.Text = text2;
array4[0] = Rbuffer[47];
array4[1] = Rbuffer[48];
num17 = array4[0];
num17 = (ushort)(num17 << 8);
num17 = (ushort)((ushort)(num17 & 0xFF00u) | (ushort)(0xFFu & array4[1]));
text2 = $"{num17:0}\n";
label75.Text = text2;
Com_RW_Sta = 0;
}
else
{
label76.Text = "未连接...";
richTextBox1.AppendText(" 接收数据校验失败!\n");
}
}
}
if (Com_RW_Sta != 2)
{
return;
}
b = (byte)(b + 1);
if (Rbuffer[b] != 130)
{
return;
}
// 累加求校验位
for (byte b11 = 0; b11 < Rbuffer[5] + 6; b11 = (byte)(b11 + 1))
{
b2 = (byte)(b2 + Rbuffer[b11]);
}
// 校验位判断
if (Rbuffer[Rbuffer[5] + 6] == b2)
{
// 数据位全部减去 0x33 = 51
for (byte b11 = 6; b11 < Rbuffer[5] + 6; b11 = (byte)(b11 + 1))
{
Rbuffer[b11] = (byte)(Rbuffer[b11] - Data_chag);
}
Com_Succeed_data_F = true;
if (Com_RW_Sta == 2)
{
Recive_OT_F = true;
num = Rbuffer[6];
num = (ushort)(num << 8);
num = (ushort)((ushort)(num & 0xFF00u) | (ushort)(0xFFu & Rbuffer[7]));
num2 = (double)(int)num / 10.0;
string text6 = $"{num2:00.0}\n";
label17.Text = text6;
num3 = Rbuffer[8];
num3 = (ushort)(num3 << 8);
num3 = (ushort)((ushort)(num3 & 0xFF00u) | (ushort)(0xFFu & Rbuffer[9]));
num4 = (double)(int)num3 / 10.0;
num5 = Rbuffer[10];
num5 = (short)(num5 << 8);
num5 = (short)((ushort)(num5 & 0xFF00) | (ushort)(0xFF & Rbuffer[11]));
num5 = (short)(-num5);
num6 = (double)num5 / 10.0;
b4 = Rbuffer[12];
if (b4 > 100)
{
b4 = 100;
verticalProgressBar2.Value = 100;
}
else
{
verticalProgressBar2.Value = b4;
}
text6 = $"{b4:00}%\n";
label22.Text = text6;
Bat_Sta_RT = 0;
Bat_Sta_RT = Rbuffer[13];
Bat_Sta_RT <<= 8;
Bat_Sta_RT = (ushort)((ushort)(Bat_Sta_RT & 0xFF00u) | (ushort)(0xFFu & Rbuffer[14]));
num7 = (double)(int)Rbuffer[15] / 10.0;
text6 = $"{num7:00.0}\n";
label86.Text = text6;
if ((Bat_Sta_RT & 0xFFFF) == 0)
{
label76.Text = "空载";
text6 = $"{num6:00.0}\n";
label18.Text = text6;
}
if (((uint)Bat_Sta_RT & (true ? 1u : 0u)) != 0)
{
label76.Text = "放电";
text6 = $"{num6:00.0}\n";
label18.Text = text6;
}
if ((Bat_Sta_RT & 2u) != 0)
{
label76.Text = "充电";
text6 = $"{num4:00.0}\n";
label18.Text = text6;
}
if ((Bat_Sta_RT & 4u) != 0)
{
label76.Text = "过充保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 8u) != 0)
{
label76.Text = "过放保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 0x10u) != 0)
{
label76.Text = "充电过流保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 0x20u) != 0)
{
label76.Text = "放电过流保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 0x40u) != 0)
{
label76.Text = "高温保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 0x80u) != 0)
{
label76.Text = "低温保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 0x100u) != 0)
{
label76.Text = "BMS故障";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
if ((Bat_Sta_RT & 0x200u) != 0)
{
label76.Text = "短路保护";
text6 = (((Bat_Sta_RT & 2) == 0) ? $"{num6:00.0}\n" : $"{num4:00.0}\n");
label18.Text = text6;
}
// 温度值处理
b5 = Rbuffer[16];
num10 = (sbyte)b5;
text6 = $"{num10:00}\n";
label19.Text = text6;
b6 = Rbuffer[17];
num11 = (sbyte)b6;
text6 = $"{num11:00}\n";
label20.Text = text6;
b7 = Rbuffer[18];
num12 = (sbyte)b7;
text6 = $"{num12:00}\n";
label21.Text = text6;
b8 = Rbuffer[19];
num13 = (sbyte)b8;
text6 = $"{num13:00}\n";
label84.Text = text6;
num8 = num10;
num9 = num10;
if (num8 < num11)
{
num8 = num11;
}
if (num8 < num12)
{
num8 = num12;
}
if (num8 < num13)
{
num8 = num13;
}
if (num9 > num11)
{
num9 = num11;
}
if (num9 > num12)
{
num9 = num12;
}
if (num9 > num13)
{
num9 = num13;
}
b9 = Rbuffer[20];
num14 = (sbyte)b9;
text6 = $"{num14:00}\n";
label85.Text = text6;
// 单个电池的电压读取
array[0] = Rbuffer[21];
array[0] = (ushort)(array[0] << 8);
array[0] = (ushort)((ushort)(array[0] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[22]));
// 单个电池的电压百分比
array2[0] = (byte)((double)(array[0] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[0] < Bat_G_UV)
{
array2[0] = 0;
}
if (array[0] > Bat_G_OV)
{
array2[0] = 100;
}
verticalProgressBar4.Value = array2[0];
array3[0] = (double)(int)array[0] / 1000.0;
text6 = $"{array3[0]:0.000}V\n";
label23.Text = text6;
// 第二个电压的读取
array[1] = Rbuffer[23];
array[1] = (ushort)(array[1] << 8);
array[1] = (ushort)((ushort)(array[1] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[24]));
array2[1] = (byte)((double)(array[1] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[1] < Bat_G_UV)
{
array2[1] = 0;
}
if (array[1] > Bat_G_OV)
{
array2[1] = 100;
}
verticalProgressBar5.Value = array2[1];
array3[1] = (double)(int)array[1] / 1000.0;
text6 = $"{array3[1]:0.000}V\n";
label25.Text = text6;
array[2] = Rbuffer[25];
array[2] = (ushort)(array[2] << 8);
array[2] = (ushort)((ushort)(array[2] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[26]));
array2[2] = (byte)((double)(array[2] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[2] < Bat_G_UV)
{
array2[2] = 0;
}
if (array[2] > Bat_G_OV)
{
array2[2] = 100;
}
verticalProgressBar7.Value = array2[2];
array3[2] = (double)(int)array[2] / 1000.0;
text6 = $"{array3[2]:0.000}V\n";
label26.Text = text6;
array[3] = Rbuffer[27];
array[3] = (ushort)(array[3] << 8);
array[3] = (ushort)((ushort)(array[3] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[28]));
array2[3] = (byte)((double)(array[3] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[3] < Bat_G_UV)
{
array2[3] = 0;
}
if (array[3] > Bat_G_OV)
{
array2[3] = 100;
}
verticalProgressBar9.Value = array2[3];
array3[3] = (double)(int)array[3] / 1000.0;
text6 = $"{array3[3]:0.000}V\n";
label27.Text = text6;
array[4] = Rbuffer[29];
array[4] = (ushort)(array[4] << 8);
array[4] = (ushort)((ushort)(array[4] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[30]));
array2[4] = (byte)((double)(array[4] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[4] < Bat_G_UV)
{
array2[4] = 0;
}
if (array[4] > Bat_G_OV)
{
array2[4] = 100;
}
verticalProgressBar17.Value = array2[4];
array3[4] = (double)(int)array[4] / 1000.0;
text6 = $"{array3[4]:0.000}V\n";
label31.Text = text6;
array[5] = Rbuffer[31];
array[5] = (ushort)(array[5] << 8);
array[5] = (ushort)((ushort)(array[5] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[32]));
array2[5] = (byte)((double)(array[5] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[5] < Bat_G_UV)
{
array2[5] = 0;
}
if (array[5] > Bat_G_OV)
{
array2[5] = 100;
}
verticalProgressBar15.Value = array2[5];
array3[5] = (double)(int)array[5] / 1000.0;
text6 = $"{array3[5]:0.000}V\n";
label30.Text = text6;
array[6] = Rbuffer[33];
array[6] = (ushort)(array[6] << 8);
array[6] = (ushort)((ushort)(array[6] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[34]));
array2[6] = (byte)((double)(array[6] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[6] < Bat_G_UV)
{
array2[6] = 0;
}
if (array[6] > Bat_G_OV)
{
array2[6] = 100;
}
verticalProgressBar13.Value = array2[6];
array3[6] = (double)(int)array[6] / 1000.0;
text6 = $"{array3[6]:0.000}V\n";
label29.Text = text6;
array[7] = Rbuffer[35];
array[7] = (ushort)(array[7] << 8);
array[7] = (ushort)((ushort)(array[7] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[36]));
array2[7] = (byte)((double)(array[7] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[7] < Bat_G_UV)
{
array2[7] = 0;
}
if (array[7] > Bat_G_OV)
{
array2[7] = 100;
}
verticalProgressBar11.Value = array2[7];
array3[7] = (double)(int)array[7] / 1000.0;
text6 = $"{array3[7]:0.000}V\n";
label28.Text = text6;
// 高位 8 字节
array[8] = Rbuffer[37];
array[8] = (ushort)(array[8] << 8);
// 低位 8 字节
array[8] = (ushort)((ushort)(array[8] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[38]));
// 根据当前电压,计算电池百分比
array2[8] = (byte)((double)(array[8] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
// 百分比做限制
if (array[8] < Bat_G_UV)
{
array2[8] = 0;
}
if (array[8] > Bat_G_OV)
{
array2[8] = 100;
}
verticalProgressBar25.Value = array2[8];
// 计算实际电压值
array3[8] = (double)(int)array[8] / 1000.0;
text6 = $"{array3[8]:0.000}V\n";
label35.Text = text6;
array[9] = Rbuffer[39];
array[9] = (ushort)(array[9] << 8);
array[9] = (ushort)((ushort)(array[9] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[40]));
array2[9] = (byte)((double)(array[9] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[9] < Bat_G_UV)
{
array2[9] = 0;
}
if (array[9] > Bat_G_OV)
{
array2[9] = 100;
}
verticalProgressBar23.Value = array2[9];
array3[9] = (double)(int)array[9] / 1000.0;
text6 = $"{array3[9]:0.000}V\n";
label34.Text = text6;
array[10] = Rbuffer[41];
array[10] = (ushort)(array[10] << 8);
array[10] = (ushort)((ushort)(array[10] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[42]));
array2[10] = (byte)((double)(array[10] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[10] < Bat_G_UV)
{
array2[10] = 0;
}
if (array[10] > Bat_G_OV)
{
array2[10] = 100;
}
verticalProgressBar21.Value = array2[10];
array3[10] = (double)(int)array[10] / 1000.0;
text6 = $"{array3[10]:0.000}V\n";
label33.Text = text6;
array[11] = Rbuffer[43];
array[11] = (ushort)(array[11] << 8);
array[11] = (ushort)((ushort)(array[11] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[44]));
array2[11] = (byte)((double)(array[11] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[11] < Bat_G_UV)
{
array2[11] = 0;
}
if (array[11] > Bat_G_OV)
{
array2[11] = 100;
}
verticalProgressBar19.Value = array2[11];
array3[11] = (double)(int)array[11] / 1000.0;
text6 = $"{array3[11]:0.000}V\n";
label32.Text = text6;
array[12] = Rbuffer[45];
array[12] = (ushort)(array[12] << 8);
array[12] = (ushort)((ushort)(array[12] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[46]));
array2[12] = (byte)((double)(array[12] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[12] < Bat_G_UV)
{
array2[12] = 0;
}
if (array[12] > Bat_G_OV)
{
array2[12] = 100;
}
verticalProgressBar49.Value = array2[12];
array3[12] = (double)(int)array[12] / 1000.0;
text6 = $"{array3[12]:0.000}V\n";
label47.Text = text6;
array[13] = Rbuffer[47];
array[13] = (ushort)(array[13] << 8);
array[13] = (ushort)((ushort)(array[13] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[48]));
array2[13] = (byte)((double)(array[13] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[13] < Bat_G_UV)
{
array2[13] = 0;
}
if (array[13] > Bat_G_OV)
{
array2[13] = 100;
}
verticalProgressBar47.Value = array2[13];
array3[13] = (double)(int)array[13] / 1000.0;
text6 = $"{array3[13]:0.000}V\n";
label46.Text = text6;
array[14] = Rbuffer[49];
array[14] = (ushort)(array[14] << 8);
array[14] = (ushort)((ushort)(array[14] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[50]));
array2[14] = (byte)((double)(array[14] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[14] < Bat_G_UV)
{
array2[14] = 0;
}
if (array[14] > Bat_G_OV)
{
array2[14] = 100;
}
verticalProgressBar43.Value = array2[14];
array3[14] = (double)(int)array[14] / 1000.0;
text6 = $"{array3[14]:0.000}V\n";
label44.Text = text6;
array[15] = Rbuffer[51];
array[15] = (ushort)(array[15] << 8);
array[15] = (ushort)((ushort)(array[15] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[52]));
array2[15] = (byte)((double)(array[15] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[15] < Bat_G_UV)
{
array2[15] = 0;
}
if (array[15] > Bat_G_OV)
{
array2[15] = 100;
}
verticalProgressBar37.Value = array2[15];
array3[15] = (double)(int)array[15] / 1000.0;
text6 = $"{array3[15]:0.000}V\n";
label41.Text = text6;
array[16] = Rbuffer[53];
array[16] = (ushort)(array[16] << 8);
array[16] = (ushort)((ushort)(array[16] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[54]));
array2[16] = (byte)((double)(array[16] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[16] < Bat_G_UV)
{
array2[16] = 0;
}
if (array[16] > Bat_G_OV)
{
array2[16] = 100;
}
verticalProgressBar45.Value = array2[16];
array3[16] = (double)(int)array[16] / 1000.0;
text6 = $"{array3[16]:0.000}V\n";
label45.Text = text6;
array[17] = Rbuffer[55];
array[17] = (ushort)(array[17] << 8);
array[17] = (ushort)((ushort)(array[17] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[56]));
array2[17] = (byte)((double)(array[17] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[17] < Bat_G_UV)
{
array2[17] = 0;
}
if (array[17] > Bat_G_OV)
{
array2[17] = 100;
}
verticalProgressBar41.Value = array2[17];
array3[17] = (double)(int)array[17] / 1000.0;
text6 = $"{array3[17]:0.000}V\n";
label43.Text = text6;
array[18] = Rbuffer[57];
array[18] = (ushort)(array[18] << 8);
array[18] = (ushort)((ushort)(array[18] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[58]));
array2[18] = (byte)((double)(array[18] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[18] < Bat_G_UV)
{
array2[18] = 0;
}
if (array[18] > Bat_G_OV)
{
array2[18] = 100;
}
verticalProgressBar39.Value = array2[18];
array3[18] = (double)(int)array[18] / 1000.0;
text6 = $"{array3[18]:0.000}V\n";
label42.Text = text6;
array[19] = Rbuffer[59];
array[19] = (ushort)(array[19] << 8);
array[19] = (ushort)((ushort)(array[19] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[60]));
array2[19] = (byte)((double)(array[19] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[19] < Bat_G_UV)
{
array2[19] = 0;
}
if (array[19] > Bat_G_OV)
{
array2[19] = 100;
}
verticalProgressBar35.Value = array2[19];
array3[19] = (double)(int)array[19] / 1000.0;
text6 = $"{array3[19]:0.000}V\n";
label40.Text = text6;
array[20] = Rbuffer[61];
array[20] = 0;
array[20] = (ushort)(array[20] << 8);
array[20] = (ushort)((ushort)(array[20] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[62]));
array2[20] = (byte)((double)(array[20] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[20] < Bat_G_UV)
{
array2[20] = 0;
}
if (array[20] > Bat_G_OV)
{
array2[20] = 100;
}
verticalProgressBar33.Value = array2[20];
array3[20] = (double)(int)array[20] / 1000.0;
array3[20] = 0.0;
text6 = $"{0:0.000}V\n";
label39.Text = text6;
array[21] = Rbuffer[63];
array[21] = (ushort)(array[21] << 8);
array[21] = (ushort)((ushort)(array[21] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[64]));
array2[21] = (byte)((double)(array[21] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[21] < Bat_G_UV)
{
array2[21] = 0;
}
if (array[21] > Bat_G_OV)
{
array2[21] = 100;
}
verticalProgressBar31.Value = array2[21];
array3[21] = (double)(int)array[21] / 1000.0;
text6 = $"{0:0.000}V\n";
label38.Text = text6;
array[22] = Rbuffer[65];
array[22] = (ushort)(array[22] << 8);
array[22] = (ushort)((ushort)(array[22] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[66]));
array2[22] = (byte)((double)(array[22] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[22] < Bat_G_UV)
{
array2[22] = 0;
}
if (array[22] > Bat_G_OV)
{
array2[22] = 100;
}
verticalProgressBar29.Value = array2[22];
array3[22] = (double)(int)array[22] / 1000.0;
text6 = $"{0:0.000}V\n";
label37.Text = text6;
array[23] = Rbuffer[67];
array[23] = (ushort)(array[23] << 8);
array[23] = (ushort)((ushort)(array[23] & 0xFF00u) | (ushort)(0xFFu & Rbuffer[68]));
array2[23] = (byte)((double)(array[23] - Bat_G_UV) / (double)(Bat_G_OV - Bat_G_UV) * 100.0);
if (array[23] < Bat_G_UV)
{
array2[23] = 0;
}
if (array[23] > Bat_G_OV)
{
array2[23] = 100;
}
verticalProgressBar27.Value = array2[23];
array3[23] = (double)(int)array[23] / 1000.0;
text6 = $"{0:0.000}V\n";
label36.Text = text6;
verticalProgressBar33.Value = 0;
verticalProgressBar27.Value = 0;
verticalProgressBar29.Value = 0;
verticalProgressBar31.Value = 0;
if (Bat_Sta_RT_Old != Bat_Sta_RT || Com_Succeed_sta_old != Com_Succeed_sta)
{
Bat_Sta_RT_Old = Bat_Sta_RT;
Com_Succeed_sta_old = Com_Succeed_sta;
if (BMS_SN[4] == 76)
{
bater_un = 13;
}
else if (BMS_SN[4] == 80)
{
bater_un = 17;
}
else
{
bater_un = 0;
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请写入电池包正确序列号!\n");
b3 = (byte)(b3 | 2u);
}
if ((Bat_Sta_RT & 0xFFFF) == 0 && (num3 >= 50 || num5 >= 50))
{
richTextBox1.SelectionColor = Color.Yellow;
richTextBox1.AppendText(" 请确认电流校准是否正确!\n");
}
if (((uint)Bat_Sta_RT & (true ? 1u : 0u)) != 0)
{
richTextBox1.SelectionColor = Color.Yellow;
richTextBox1.AppendText(" 请确认电池是否在真实放电状态,若非放电状态则电流校准异常,请重新校准电流!\n");
}
if ((Bat_Sta_RT & 2u) != 0)
{
richTextBox1.SelectionColor = Color.Yellow;
richTextBox1.AppendText(" 请确认电池是否在真实充电状态,若非充电状态则电流校准异常,请重新校准电流!\n");
}
if ((Bat_Sta_RT & 4u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池过充!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请立即停止充电,并确认电池均衡情况和充电器空载电压是否正常!\n");
b3 = (byte)(b3 | 1u);
}
if ((Bat_Sta_RT & 8u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池过放!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请立即暂停使用,并充电!\n");
b3 = (byte)(b3 | 1u);
}
if ((Bat_Sta_RT & 0x10u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 充电过流保护!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请立即停止充电,并检查充电器输出电流是否正常!\n");
b3 = (byte)(b3 | 1u);
}
if ((Bat_Sta_RT & 0x20u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 放电过流保护!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请移除负载,并检查负载是否正常!\n");
b3 = (byte)(b3 | 1u);
}
if ((Bat_Sta_RT & 0x40u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池高温!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请暂停使用待温度恢复正常!\n");
b3 = (byte)(b3 | 1u);
}
if ((Bat_Sta_RT & 0x80u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池低温!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请暂停使用待温度恢复正常!\n");
b3 = (byte)(b3 | 1u);
}
if ((Bat_Sta_RT & 0x100u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池包故障!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请暂停使用!检查电池包内部连线是否正常,电池组电压是否正常!\n");
b3 = (byte)(b3 | 2u);
}
if ((Bat_Sta_RT & 0x200u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 短路保护!\n");
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请移除负载,并检查负载是否正常!\n");
b3 = (byte)(b3 | 1u);
}
if (num8 - num9 > 8f)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 请检查温度传感器是否异常!\n");
b3 = (byte)(b3 | 1u);
}
if (bater_un != 0)
{
num15 = array[0];
num16 = array[0];
for (b10 = 1; b10 < bater_un; b10 = (byte)(b10 + 1))
{
if (array[b10] > num15)
{
num15 = array[b10];
}
if (array[b10] < num16)
{
num16 = array[b10];
}
}
if (num16 > 3100 && num15 - num16 > 250)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池电压不均衡,请立即维护电池!\n");
b3 = (byte)(b3 | 2u);
}
else if (num16 <= 3100 && num15 - num16 > 500)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池电压不均衡,请立即维护电池!\n");
b3 = (byte)(b3 | 2u);
}
if (num16 > 3700 && b4 < 35)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" SOC估算异常!请完成一次满充满放!\n");
b3 = (byte)(b3 | 1u);
}
else if (num16 < 3500 && b4 > 50)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" SOC估算异常!请完成一次满充满放!\n");
b3 = (byte)(b3 | 1u);
}
}
if ((b3 & 2u) != 0)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(" 电池故障!\n");
label78.ForeColor = Color.Red;
label78.Text = "电池故障";
}
else if (((uint)b3 & (true ? 1u : 0u)) != 0)
{
richTextBox1.SelectionColor = Color.Yellow;
richTextBox1.AppendText(" 电池亚健康!\n");
label78.ForeColor = Color.Yellow;
label78.Text = "电池亚健康";
}
else if (0 == 0)
{
richTextBox1.SelectionColor = Color.LimeGreen;
richTextBox1.AppendText(" 电池健康!\n");
label78.ForeColor = Color.LimeGreen;
label78.Text = "电池健康";
}
}
}
Com_RW_Sta = 0;
}
else
{
label76.Text = "未连接...";
richTextBox1.AppendText(" 接收数据校验失败!\n");
}
}
catch
{
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment