Created
October 10, 2021 08:50
-
-
Save wenfengand/39885183cb5c9efcb4f670e675acbbfb to your computer and use it in GitHub Desktop.
小牛电池诊断软件关键代码
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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