Parse new logging format
This commit is contained in:
parent
61f652ee8f
commit
a3f3b2c23e
@ -33,8 +33,8 @@ LOG_FRAME_LENGTH = 8 # bytes
|
|||||||
PARALLEL_CELLS = 9
|
PARALLEL_CELLS = 9
|
||||||
CELLS_PER_SLAVE = 10
|
CELLS_PER_SLAVE = 10
|
||||||
TEMP_SENSORS_PER_SLAVE = 32
|
TEMP_SENSORS_PER_SLAVE = 32
|
||||||
VOLTAGE_CONV = 5.0 / 255 # volts/quantum
|
VOLTAGE_CONV = 5.0 / 0xFFFF # volts/quantum
|
||||||
TEMP_CONV = 0.0625 * 16 # °C/quantum
|
TEMP_CONV = 0.0625 # °C/quantum
|
||||||
|
|
||||||
ERRORCODE_TIMEOUT_SLAVE = 1
|
ERRORCODE_TIMEOUT_SLAVE = 1
|
||||||
ERRORCODE_SLAVE_PANIC = 2
|
ERRORCODE_SLAVE_PANIC = 2
|
||||||
@ -53,6 +53,8 @@ MASTER_THRESH_OT = 1
|
|||||||
MASTER_THRESH_UV = 2
|
MASTER_THRESH_UV = 2
|
||||||
MASTER_THRESH_OV = 3
|
MASTER_THRESH_OV = 3
|
||||||
|
|
||||||
|
TS_ERROR = 4
|
||||||
|
|
||||||
|
|
||||||
class SlaveData:
|
class SlaveData:
|
||||||
cell_voltages: list[float]
|
cell_voltages: list[float]
|
||||||
@ -60,7 +62,9 @@ class SlaveData:
|
|||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.cell_voltages = [-1] * CELLS_PER_SLAVE
|
self.cell_voltages = [-1] * CELLS_PER_SLAVE
|
||||||
self.cell_temps = [-1] * TEMP_SENSORS_PER_SLAVE
|
self.cell_temps = ([-1] * (TEMP_SENSORS_PER_SLAVE // 2)) + (
|
||||||
|
[0] * (TEMP_SENSORS_PER_SLAVE // 2)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AccumulatorData:
|
class AccumulatorData:
|
||||||
@ -492,6 +496,10 @@ class Worker(QObject):
|
|||||||
self.decode_panic_frame(rx_data[frame_start + 3 : frame_start + 11])
|
self.decode_panic_frame(rx_data[frame_start + 3 : frame_start + 11])
|
||||||
rx_data = rx_data[frame_start + 11 :]
|
rx_data = rx_data[frame_start + 11 :]
|
||||||
continue
|
continue
|
||||||
|
elif (frame_start := self.check_status_start(rx_data)) != -1:
|
||||||
|
self.decode_status_frame(rx_data[frame_start + 3 : frame_start + 11])
|
||||||
|
rx_data = rx_data[frame_start + 11 :]
|
||||||
|
continue
|
||||||
break
|
break
|
||||||
|
|
||||||
def check_log_start(self, buf: bytes):
|
def check_log_start(self, buf: bytes):
|
||||||
@ -503,6 +511,9 @@ class Worker(QObject):
|
|||||||
def check_panic_start(self, buf: bytes):
|
def check_panic_start(self, buf: bytes):
|
||||||
return buf[:-12].find(b"PAN")
|
return buf[:-12].find(b"PAN")
|
||||||
|
|
||||||
|
def check_status_start(self, buf: bytes):
|
||||||
|
return buf[:-12].find(b"STA")
|
||||||
|
|
||||||
def decode_log_frame(self, buf: bytes):
|
def decode_log_frame(self, buf: bytes):
|
||||||
msg_id = buf[0]
|
msg_id = buf[0]
|
||||||
slave = msg_id >> 4
|
slave = msg_id >> 4
|
||||||
@ -512,25 +523,44 @@ class Worker(QObject):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if frame_id == 0:
|
if frame_id == 0:
|
||||||
for i in range(7):
|
for i in range(3):
|
||||||
data.slaves[slave].cell_voltages[i] = buf[i + 1] * VOLTAGE_CONV
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_voltages[i] = raw * VOLTAGE_CONV
|
||||||
elif frame_id == 1:
|
elif frame_id == 1:
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
data.slaves[slave].cell_voltages[i + 7] = buf[i + 1] * VOLTAGE_CONV
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
for i in range(4):
|
data.slaves[slave].cell_voltages[i + 3] = raw * VOLTAGE_CONV
|
||||||
data.slaves[slave].cell_temps[i] = buf[i + 4] * TEMP_CONV
|
|
||||||
elif frame_id == 2:
|
elif frame_id == 2:
|
||||||
for i in range(7):
|
for i in range(3):
|
||||||
data.slaves[slave].cell_temps[i + 4] = buf[i + 1] * TEMP_CONV
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_voltages[i + 6] = raw * VOLTAGE_CONV
|
||||||
elif frame_id == 3:
|
elif frame_id == 3:
|
||||||
for i in range(7):
|
for i in range(1):
|
||||||
data.slaves[slave].cell_temps[i + 11] = buf[i + 1] * TEMP_CONV
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_voltages[i + 9] = raw * VOLTAGE_CONV
|
||||||
|
for i in range(2):
|
||||||
|
raw = (buf[i * 2 + 3] << 8) | buf[i * 2 + 4]
|
||||||
|
data.slaves[slave].cell_temps[i] = raw * TEMP_CONV
|
||||||
elif frame_id == 4:
|
elif frame_id == 4:
|
||||||
for i in range(7):
|
for i in range(3):
|
||||||
data.slaves[slave].cell_temps[i + 18] = buf[i + 1] * TEMP_CONV
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_temps[i + 2] = raw * TEMP_CONV
|
||||||
elif frame_id == 5:
|
elif frame_id == 5:
|
||||||
for i in range(7):
|
for i in range(3):
|
||||||
data.slaves[slave].cell_temps[i + 25] = buf[i + 1] * TEMP_CONV
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_temps[i + 5] = raw * TEMP_CONV
|
||||||
|
elif frame_id == 6:
|
||||||
|
for i in range(3):
|
||||||
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_temps[i + 8] = raw * TEMP_CONV
|
||||||
|
elif frame_id == 7:
|
||||||
|
for i in range(3):
|
||||||
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_temps[i + 11] = raw * TEMP_CONV
|
||||||
|
elif frame_id == 8:
|
||||||
|
for i in range(3):
|
||||||
|
raw = (buf[i * 2 + 1] << 8) | buf[i * 2 + 2]
|
||||||
|
data.slaves[slave].cell_temps[i + 14] = raw * TEMP_CONV
|
||||||
else:
|
else:
|
||||||
print(f"Unknown frame ID: {frame_id} (buf: {repr(buf)})", file=sys.stderr)
|
print(f"Unknown frame ID: {frame_id} (buf: {repr(buf)})", file=sys.stderr)
|
||||||
# time.sleep(1)
|
# time.sleep(1)
|
||||||
@ -609,6 +639,10 @@ class Worker(QObject):
|
|||||||
data.panic_errorcode = buf[0]
|
data.panic_errorcode = buf[0]
|
||||||
data.panic_errorarg = buf[1]
|
data.panic_errorarg = buf[1]
|
||||||
|
|
||||||
|
def decode_status_frame(self, buf: bytes):
|
||||||
|
ts_state = buf[1] & 0x7F
|
||||||
|
data.panic = ts_state == TS_ERROR
|
||||||
|
|
||||||
INTERNAL_RESISTANCE_CURVE_X = [2.0, 4.12]
|
INTERNAL_RESISTANCE_CURVE_X = [2.0, 4.12]
|
||||||
INTERNAL_RESISTANCE_CURVE_Y = [0.0528, 0.0294]
|
INTERNAL_RESISTANCE_CURVE_Y = [0.0528, 0.0294]
|
||||||
SOC_OCV_X = [2.1, 2.9, 3.2, 3.3, 3.4, 3.5, 3.68, 4.0, 4.15, 4.2]
|
SOC_OCV_X = [2.1, 2.9, 3.2, 3.3, 3.4, 3.5, 3.68, 4.0, 4.15, 4.2]
|
||||||
@ -633,8 +667,8 @@ class Worker(QObject):
|
|||||||
temps = [-1]
|
temps = [-1]
|
||||||
min_t = min(temps)
|
min_t = min(temps)
|
||||||
max_t = max(temps)
|
max_t = max(temps)
|
||||||
for i in range(16, 32):
|
# for i in range(16, 32):
|
||||||
data.slaves[slave].cell_temps[i] = random.randint(min_t, max_t)
|
# data.slaves[slave].cell_temps[i] = random.randint(min_t, max_t)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.continue_run = False # set the run condition to false on stop
|
self.continue_run = False # set the run condition to false on stop
|
||||||
|
Loading…
x
Reference in New Issue
Block a user