Index: dialin/dg/load_cells.py =================================================================== diff -u -re38f90b8c83f4f89b8388d526fec8a751f9900ed -rd8a3f72286485cdf8c5300a303c75eb3590564c3 --- dialin/dg/load_cells.py (.../load_cells.py) (revision e38f90b8c83f4f89b8388d526fec8a751f9900ed) +++ dialin/dg/load_cells.py (.../load_cells.py) (revision d8a3f72286485cdf8c5300a303c75eb3590564c3) @@ -7,8 +7,8 @@ # # @file load_cells.py # -# @author (last) Sean Nash -# @date (last) 12-Nov-2021 +# @author (last) Dara Navaei +# @date (last) 23-Aug-2022 # @author (original) Sean # @date (original) 14-Apr-2020 # @@ -21,7 +21,7 @@ from ..protocols.CAN import DenaliMessage, DenaliChannels from ..utils.base import AbstractSubSystem, publish from ..utils.checks import check_broadcast_interval_override_ms -from ..utils.conversions import integer_to_bytearray, float_to_bytearray +from ..utils.conversions import integer_to_bytearray, float_to_bytearray, bytearray_to_float class DGLoadCells(AbstractSubSystem): @@ -37,6 +37,8 @@ LOAD_CELL_B1 = 2 LOAD_CELL_B2 = 3 + EMPTY_RESERVOIR_WEIGHT_GRAMS = 1600 + def __init__(self, can_interface, logger: Logger): """ @@ -74,14 +76,14 @@ @return: None """ - a1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - a2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - b1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) - b2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) + self.load_cell_A1 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.load_cell_A2 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.load_cell_B1 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] + self.load_cell_B2 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] self.load_cell_A1 = a1[0] self.load_cell_A2 = a2[0] @@ -97,6 +99,7 @@ @param sensor: unsigned int - sensor ID @param grams: float - weight (in grams) to override sensor with + @param add_reservoir_weight: bool - Adds the empty reservoir weight, 1600g to the override @param reset: integer - 1 to reset a previous override, 0 to override @param raw: integer - 1 to override calibrated weight, 0 to override filtered/tared weight @return: 1 if successful, zero otherwise @@ -108,21 +111,25 @@ 3 = B2 \n """ + if add_reservoir_weight: + grm = float_to_bytearray(grams + self.EMPTY_RESERVOIR_WEIGHT_GRAMS) + else: + grm = float_to_bytearray(grams) + rst = integer_to_bytearray(reset) - grm = float_to_bytearray(grams) idx = integer_to_bytearray(sensor) cal = integer_to_bytearray(raw) payload = rst + grm + idx + cal message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=MsgIds.MSG_ID_LOAD_CELL_OVERRIDE.value, payload=payload) - - self.logger.debug("override load cell weight value for sensor " + str(sensor)) - # Send message received_message = self.can_interface.send(message) + self.logger.debug( + f"override load cell weight value for sensor {str(sensor)} to {bytearray_to_float(grm, 0)[0]} grams") + # If there is content... if received_message is not None: # response payload is OK or not OK