public GS(byte[] data, int lengthread) { var str = ""; try { if (lengthread < 10) { Logging.V($"Data read too short: {UTF8Encoding.UTF8.GetString(data)}"); return; } //first calculate the CRC. //copy all the data except the last 3 bytes, which are CRC, CRC, 0x0d byte[] nocrc = new byte[lengthread - 3]; for (int i = 0; i < nocrc.Length; i++) { nocrc[i] = data[i]; } //check the CRC var crc = MpsCrc.caluCRC(nocrc); if (data[lengthread - 3] != crc[0] || data[lengthread - 2] != crc[1]) { Logging.V("GS Bad CRC\r\n"); Logging.V($"Calced CRC: {crc[0].ToString()} and {crc[1].ToString()}"); Logging.V($"CRC from device: {data[lengthread - 3].ToString()} and {data[lengthread - 2].ToString()}"); return; } str = UTF8Encoding.UTF8.GetString(data); var split = str.Trim().Substring(5).Split(','); PVInputVoltage1 = int.Parse(split[0]) / 10; PVInputVoltage2 = int.Parse(split[1]) / 10; BatteryVoltage = int.Parse(split[4]); BatteryVoltage = BatteryVoltage / 10.0; BatteryCapacity = int.Parse(split[5]); ChargingCurrent = int.Parse(split[6]); ChargingCurrent = ChargingCurrent / 10.0; GridVoltage = int.Parse(split[7]) / 10.0; GridFreq = int.Parse(split[10]) / 10.0; GridCurrent = int.Parse(split[11]) / 10.0; InnerTemp = int.Parse(split[21]); MaxTemp = int.Parse(split[22]); TimeStamp = DateTime.UtcNow; DataValid = true; //Logging.I("GS Data valid!"); } catch (Exception ex) { Logging.V($"GS Data string {str} " + ex.ToString()); } }
public BATS(byte[] data, int lengthread) { try { if (lengthread < 10) { Logging.V($"Data read too short: {UTF8Encoding.UTF8.GetString(data)}"); return; } //first calculate the CRC. //copy all the data except the last 3 bytes, which are CRC, CRC, 0x0d byte[] nocrc = new byte[lengthread - 3]; for (int i = 0; i < nocrc.Length; i++) { nocrc[i] = data[i]; } //check the CRC var crc = MpsCrc.caluCRC(nocrc); if (data[lengthread - 3] != crc[0] || data[lengthread - 2] != crc[1]) { Logging.V("BATS Bad CRC\r\n"); Logging.V($"Calced CRC: {crc[0].ToString()} and {crc[1].ToString()}"); Logging.V($"CRC from device: {data[lengthread - 3].ToString()} and {data[lengthread - 2].ToString()}"); return; } var str = UTF8Encoding.UTF8.GetString(data); var split = str.Trim().Substring(5).Split(','); MaxChargingCurrent = int.Parse(split[0]) / 10.0; MaxChargingVoltage = int.Parse(split[1]) / 10.0; FloatVoltage = int.Parse(split[2]) / 10.0; CutOffVoltageGridLoss = int.Parse(split[6]) / 10.0; RecoverVoltageGridLoss = int.Parse(split[7]) / 10.0; CutOffVoltage = int.Parse(split[8]) / 10.0; RecoverVoltage = int.Parse(split[9]) / 10.0; MaxAcChargingCurrent = int.Parse(split[16]) / 10.0; MaxBatDischargeCurrentInHybrid = int.Parse(split[17]); TimeStamp = DateTime.UtcNow; DataValid = true; } catch (Exception ex) { Logging.V("BATS " + ex.ToString()); } }
public PS(byte[] data, int lengthread) { var str = ""; try { if (lengthread < 10) { Logging.V($"Data read too short: {UTF8Encoding.UTF8.GetString(data)}"); return; } //first calculate the CRC. //copy all the data except the last 3 bytes, which are CRC, CRC, 0x0d byte[] nocrc = new byte[lengthread - 3]; for (int i = 0; i < nocrc.Length; i++) { nocrc[i] = data[i]; } //check the CRC var crc = MpsCrc.caluCRC(nocrc); if (data[lengthread - 3] != crc[0] || data[lengthread - 2] != crc[1]) { Logging.V("PS Bad CRC\r\n"); Logging.V($"Calced CRC: {crc[0].ToString()} and {crc[1].ToString()}"); Logging.V($"CRC from device: {data[lengthread - 3].ToString()} and {data[lengthread - 2].ToString()}"); return; } str = UTF8Encoding.UTF8.GetString(data); var split = str.Trim().Substring(5).Split(','); PVInputPower1 = int.Parse(split[0]); PVInputPower2 = int.Parse(split[1]); TimeStamp = DateTime.UtcNow; DataValid = true; } catch (Exception ex) { Logging.V($"PS Data string {str} " + ex.ToString()); } }