Index: dialin/dg/valves.py =================================================================== diff -u -r6b31cabf55084262b258446a82090bacdb4ad52a -rfeb07709b0b341823e12a2436d85cf71960fc590 --- dialin/dg/valves.py (.../valves.py) (revision 6b31cabf55084262b258446a82090bacdb4ad52a) +++ dialin/dg/valves.py (.../valves.py) (revision feb07709b0b341823e12a2436d85cf71960fc590) @@ -68,18 +68,18 @@ @unique class DGValvesSensedStates(DialinEnum): - VALVE_STATE_OPEN = 0 # Open valve state, used only for VPi, VBf, VRD1, VRD2, and VSP - VALVE_STATE_CLOSED = 1 # Closed valve state, used only for VPi, VBf, VRD1, VRD2, and VSP - VALVE_STATE_OPEN_C_TO_NC = 2 # Open Common to Normally Closed valve state, used only for VPd - VALVE_STATE_NOFILL_C_TO_NO = 3 # No Fill Common to Normally Open valve state, used only for VPo - VALVE_STATE_FILL_C_TO_NC = 4 # Fill Common to Normally Closed valve state, used only for VPo - VALVE_STATE_DRAIN_C_TO_NO = 5 # Drain Common to Normally Open valve state, used only for VDr and VRc. It is also used for VPd in V3 - VALVE_STATE_RECIRC_C_TO_NC = 6 # Recirculate Common to Normally Closed valve state, used only for VDr and VRc - VALVE_STATE_R1_C_TO_NO = 7 # Reservoir 1 Common to Normally Open valve state, used only for VRo and VRi - VALVE_STATE_R1_C_TO_NC = 8 # Reservoir 1 Common to Normally Closed valve state, used only for VRf - VALVE_STATE_R2_C_TO_NO = 9 # Reservoir 2 Common to Normally Open valve state, used only for VRf - VALVE_STATE_R2_C_TO_NC = 10 # Reservoir 2 Common to Normally Closed valve state, used only for VRo and VRi - NUM_OF_VALVE_STATES = 11 # number of valve states + VALVE_STATE_OPEN = 0 # Open valve state, used only for VPi, VBf, VRD1, VRD2, and VSP + VALVE_STATE_CLOSED = 1 # Closed valve state, used only for VPi, VBf, VRD1, VRD2, and VSP + VALVE_STATE_OPEN_C_TO_NC = 2 # Open Common to Normally Closed valve state, used only for VPd + VALVE_STATE_NOFILL_C_TO_NO = 3 # No Fill Common to Normally Open valve state, used only for VPo + VALVE_STATE_FILL_C_TO_NC = 4 # Fill Common to Normally Closed valve state, used only for VPo + VALVE_STATE_DRAIN_C_TO_NO = 5 # Drain Common to Normally Open valve state, used only for VDr and VRc. It is also used for VPd in V3 + VALVE_STATE_RECIRC_C_TO_NC = 6 # Recirculate Common to Normally Closed valve state, used only for VDr and VRc + VALVE_STATE_R1_C_TO_NO = 7 # Reservoir 1 Common to Normally Open valve state, used only for VRo and VRi + VALVE_STATE_R1_C_TO_NC = 8 # Reservoir 1 Common to Normally Closed valve state, used only for VRf + VALVE_STATE_R2_C_TO_NO = 9 # Reservoir 2 Common to Normally Open valve state, used only for VRf + VALVE_STATE_R2_C_TO_NC = 10 # Reservoir 2 Common to Normally Closed valve state, used only for VRo and VRi + NUM_OF_VALVE_STATES = 11 # number of valve states @unique @@ -111,22 +111,6 @@ START_POS_VALVES_STATES = DenaliMessage.PAYLOAD_START_INDEX END_POS_VALVES_STATES = START_POS_VALVES_STATES + 2 # Valves States come in as a U16 value (2 bytes) - # Valve IDs - VALVE_RESERVOIR_FILL = 0 # VRF - VALVE_RESERVOIR_INLET = 1 # VRI - VALVE_RESERVOIR_DRAIN = 2 # VRD - VALVE_RESERVOIR_OUTLET = 3 # VRO - VALVE_PRESSURE_OUTLET = 4 # VPO - VALVE_BYPASS_FILTER = 5 # VBF - VALVE_RECIRCULATE = 6 # VRC - VALVE_DRAIN = 7 # VDR - VALVE_PRESSURE_INLET = 8 # VPI - VALVE_SAMPLING_PORT = 9 # VSP - VALVE_RESERVOIR_DRAIN_1 = 10 # VRD1 - VALVE_RESERVOIR_DRAIN_2 = 11 # VRD2 - VALVE_PRODUCTION_DRAIN = 12 # VPD - NUM_OF_VALVES = 13 # Number of valves - def __init__(self, can_interface, logger: Logger): """ @@ -144,21 +128,22 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_valves_sync) self.valve_states_all = 0x0000 - self.valve_state_VRF = {"id": self.VALVE_RESERVOIR_FILL, "state": DEENERGIZED} - self.valve_state_VRI = {"id": self.VALVE_RESERVOIR_INLET, "state": DEENERGIZED} - self.valve_state_VRD = {"id": self.VALVE_RESERVOIR_DRAIN, "state": DEENERGIZED} - self.valve_state_VRO = {"id": self.VALVE_RESERVOIR_OUTLET, "state": DEENERGIZED} - self.valve_state_VPO = {"id": self.VALVE_PRESSURE_OUTLET, "state": DEENERGIZED} - self.valve_state_VBF = {"id": self.VALVE_BYPASS_FILTER, "state": DEENERGIZED} - self.valve_state_VRC = {"id": self.VALVE_RECIRCULATE, "state": DEENERGIZED} - self.valve_state_VDR = {"id": self.VALVE_DRAIN, "state": DEENERGIZED} - self.valve_state_VPI = {"id": self.VALVE_PRESSURE_INLET, "state": DEENERGIZED} - self.valve_state_VSP = {"id": self.VALVE_SAMPLING_PORT, "state": DEENERGIZED} - self.valve_state_VRD1 = {"id": self.VALVE_RESERVOIR_DRAIN_1, "state": DEENERGIZED} - self.valve_state_VRD2 = {"id": self.VALVE_RESERVOIR_DRAIN_2, "state": DEENERGIZED} - self.valve_state_VPD = {"id": self.VALVE_PRODUCTION_DRAIN, "state": DEENERGIZED} + self.valve_state_VRF = {"id": DGValveNames.VALVE_RESERVOIR_FILL.value, "state": DEENERGIZED} + self.valve_state_VRI = {"id": DGValveNames.VALVE_RESERVOIR_INLET.value, "state": DEENERGIZED} + self.valve_state_VRO = {"id": DGValveNames.VALVE_RESERVOIR_OUTLET.value, "state": DEENERGIZED} + self.valve_state_VPO = {"id": DGValveNames.VALVE_PRESSURE_OUTLET.value, "state": DEENERGIZED} + self.valve_state_VBF = {"id": DGValveNames.VALVE_BYPASS_FILTER.value, "state": DEENERGIZED} + self.valve_state_VRC = {"id": DGValveNames.VALVE_RECIRCULATE.value, "state": DEENERGIZED} + self.valve_state_VDR = {"id": DGValveNames.VALVE_DRAIN.value, "state": DEENERGIZED} + self.valve_state_VPI = {"id": DGValveNames.VALVE_PRESSURE_INLET.value, "state": DEENERGIZED} + self.valve_state_VSP = {"id": DGValveNames.VALVE_SAMPLING_PORT.value, "state": DEENERGIZED} + self.valve_state_VRD1 = {"id": DGValveNames.VALVE_RESERVOIR_DRAIN_1.value, "state": DEENERGIZED} + self.valve_state_VRD2 = {"id": DGValveNames.VALVE_RESERVOIR_DRAIN_2.value, "state": DEENERGIZED} + self.valve_state_VPD = {"id": DGValveNames.VALVE_PRODUCTION_DRAIN.value, "state": DEENERGIZED} - self.valve_states_enum = [0 for _ in range(self.NUM_OF_VALVES)] + # NOTE: The len function counts the enums with the same number only once. This is not the case in the DG valves + # class because each valve must have a unique ID. + self.valve_states_enum = [0 for _ in range(len(DGValveNames))] for valve in DGValveNames.__members__: self.valves_sensed_states[valve] = '' @@ -187,7 +172,6 @@ return [ self.valve_state_VRF.get("state", None), self.valve_state_VRI.get("state", None), - self.valve_state_VRD.get("state", None), self.valve_state_VRO.get("state", None), self.valve_state_VPO.get("state", None), self.valve_state_VBF.get("state", None), @@ -218,7 +202,6 @@ 'valve_state_VR1': {'id': 10, 'state': True}, 'valve_state_VR2': {'id': 11, 'state': True}, 'valve_state_VRC': {'id': 6, 'state': True}, - 'valve_state_VRD': {'id': 2, 'state': True}, 'valve_state_VRF': {'id': 0, 'state': True}, 'valve_state_VRI': {'id': 1, 'state': True}, 'valve_state_VRO': {'id': 3, 'state': True}, @@ -228,7 +211,6 @@ ('valve_state_VRF', 0, True) ('valve_state_VRI', 1, True) - ('valve_state_VRD', 2, True) ('valve_state_VRO', 3, True) ('valve_state_VPO', 4, True) ('valve_state_VBF', 5, True) @@ -268,7 +250,6 @@ "valve_states_all", "valve_state_VRF", "valve_state_VRI", - "valve_state_VRD", "valve_state_VRO", "valve_state_VPO", "valve_state_VBF", @@ -294,7 +275,6 @@ # Extract each valve state from U16 valves states using bit-masking self.valve_state_VRF["state"] = self._binary_to_valve_state(vst[0] & 1) self.valve_state_VRI["state"] = self._binary_to_valve_state(vst[0] & 2) - self.valve_state_VRD["state"] = self._binary_to_valve_state(vst[0] & 4) self.valve_state_VRO["state"] = self._binary_to_valve_state(vst[0] & 8) self.valve_state_VPO["state"] = self._binary_to_valve_state(vst[0] & 16) self.valve_state_VBF["state"] = self._binary_to_valve_state(vst[0] & 32) @@ -306,19 +286,18 @@ self.valve_state_VRD2["state"] = self._binary_to_valve_state(vst[0] & 2048) self.valve_state_VPD["state"] = self._binary_to_valve_state(vst[0] & 4096) - self.valve_states_enum[self.VALVE_RESERVOIR_FILL] = VRdVRfStates(self._binary_to_valve_state(vst[0] & 1)).name # VRF - self.valve_states_enum[self.VALVE_RESERVOIR_INLET] = VRoVRiStates(self._binary_to_valve_state(vst[0] & 2)).name # VRI - self.valve_states_enum[self.VALVE_RESERVOIR_DRAIN] = VRdVRfStates(self._binary_to_valve_state(vst[0] & 4)).name # VRD - self.valve_states_enum[self.VALVE_RESERVOIR_OUTLET] = VRoVRiStates(self._binary_to_valve_state(vst[0] & 8)).name # VRO - self.valve_states_enum[self.VALVE_PRESSURE_OUTLET] = VPoStates(self._binary_to_valve_state(vst[0] & 16)).name # VPO - self.valve_states_enum[self.VALVE_BYPASS_FILTER] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 32)).name # VBF - self.valve_states_enum[self.VALVE_RECIRCULATE] = VDrVRcStates(self._binary_to_valve_state(vst[0] & 64)).name # VRC - self.valve_states_enum[self.VALVE_DRAIN] = VDrVRcStates(self._binary_to_valve_state(vst[0] & 128)).name # VDR - self.valve_states_enum[self.VALVE_PRESSURE_INLET] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 256)).name # VPI - self.valve_states_enum[self.VALVE_SAMPLING_PORT] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 512)).name # VSP - self.valve_states_enum[self.VALVE_RESERVOIR_DRAIN_1] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 1024)).name # VRD1 - self.valve_states_enum[self.VALVE_RESERVOIR_DRAIN_2] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 2048)).name # VRD2 - self.valve_states_enum[self.VALVE_PRODUCTION_DRAIN] = VPdStates(self._binary_to_valve_state(vst[0] & 4096)).name # VPD + self.valve_states_enum[DGValveNames.VALVE_RESERVOIR_FILL.value] = VRdVRfStates(self._binary_to_valve_state(vst[0] & 1)).name # VRF + self.valve_states_enum[DGValveNames.VALVE_RESERVOIR_INLET.value] = VRoVRiStates(self._binary_to_valve_state(vst[0] & 2)).name # VRI + self.valve_states_enum[DGValveNames.VALVE_RESERVOIR_OUTLET.value] = VRoVRiStates(self._binary_to_valve_state(vst[0] & 8)).name # VRO + self.valve_states_enum[DGValveNames.VALVE_PRESSURE_OUTLET.value] = VPoStates(self._binary_to_valve_state(vst[0] & 16)).name # VPO + self.valve_states_enum[DGValveNames.VALVE_BYPASS_FILTER.value] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 32)).name # VBF + self.valve_states_enum[DGValveNames.VALVE_RECIRCULATE.value] = VDrVRcStates(self._binary_to_valve_state(vst[0] & 64)).name # VRC + self.valve_states_enum[DGValveNames.VALVE_DRAIN.value] = VDrVRcStates(self._binary_to_valve_state(vst[0] & 128)).name # VDR + self.valve_states_enum[DGValveNames.VALVE_PRESSURE_INLET.value] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 256)).name # VPI + self.valve_states_enum[DGValveNames.VALVE_SAMPLING_PORT.value] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 512)).name # VSP + self.valve_states_enum[DGValveNames.VALVE_RESERVOIR_DRAIN_1.value] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 1024)).name # VRD1 + self.valve_states_enum[DGValveNames.VALVE_RESERVOIR_DRAIN_2.value] = VPiVSPVBfVRD1VRD2States(self._binary_to_valve_state(vst[0] & 2048)).name # VRD2 + self.valve_states_enum[DGValveNames.VALVE_PRODUCTION_DRAIN.value] = VPdStates(self._binary_to_valve_state(vst[0] & 4096)).name # VPD start = self.END_POS_VALVES_STATES end = start + 1 @@ -343,7 +322,6 @@ valve IDs: \n 0 = Valve Reservoir Fill \n 1 = Valve Reservoir Inlet \n - 2 = Rserved Space \n 3 = Valve Reservoir Outlet \n 4 = Valve Pressure Outlet \n 5 = Valve Bypass Filter \n @@ -393,7 +371,6 @@ valve IDs: \n 0 = Valve Reservoir Fill \n 1 = Valve Reservoir Inlet \n - 2 = Valve Reservoir Drain \n 3 = Valve Reservoir Outlet \n 4 = Valve Pressure Outlet \n 5 = Valve Bypass Filter \n Index: tests/dg_tests.py =================================================================== diff -u -r2050200f1b9130d4df0e9ea43827ec4f29984c3d -rfeb07709b0b341823e12a2436d85cf71960fc590 --- tests/dg_tests.py (.../dg_tests.py) (revision 2050200f1b9130d4df0e9ea43827ec4f29984c3d) +++ tests/dg_tests.py (.../dg_tests.py) (revision feb07709b0b341823e12a2436d85cf71960fc590) @@ -41,6 +41,7 @@ from dialin.dg.pressures import DGPressures from dialin.dg.conductivity_sensors import ConductivitySensorsEnum from dialin.dg.voltages import DGMonitoredVoltages +from dialin.dg.valves import DGValveNames from dialin.hd.valves import HDValves from dialin.hd.voltages import HDMonitoredVoltages from dialin.hd.pretreatment import PreTreatmentRsrvrState @@ -140,21 +141,20 @@ def get_dg_valves_states(): - info = ('VPi, {}, VSP, {}, VPd, {}, VBf, {}, VPo, {}, VDr, {}, VRc, {}, VRo, {}, VRd, {}, VRi, {}, VRf, {}, ' + info = ('VPi, {}, VSP, {}, VPd, {}, VBf, {}, VPo, {}, VDr, {}, VRc, {}, VRo, {}, VRi, {}, VRf, {}, ' 'VRD1, {}, VRD2, {}, ' - .format(dg.valves.valve_states_enum[dg.valves.VALVE_PRESSURE_INLET], - dg.valves.valve_states_enum[dg.valves.VALVE_SAMPLING_PORT], - dg.valves.valve_states_enum[dg.valves.VALVE_PRODUCTION_DRAIN], - dg.valves.valve_states_enum[dg.valves.VALVE_BYPASS_FILTER], - dg.valves.valve_states_enum[dg.valves.VALVE_PRESSURE_OUTLET], - dg.valves.valve_states_enum[dg.valves.VALVE_DRAIN], - dg.valves.valve_states_enum[dg.valves.VALVE_RECIRCULATE], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_OUTLET], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_INLET], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_FILL], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_1], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_2])) + .format(dg.valves.valve_states_enum[DGValveNames.VALVE_PRESSURE_INLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_SAMPLING_PORT.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_PRODUCTION_DRAIN.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_BYPASS_FILTER.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_PRESSURE_OUTLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_DRAIN.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RECIRCULATE.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_OUTLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_INLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_FILL.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_DRAIN_1.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_DRAIN_2.value])) return info @@ -703,7 +703,8 @@ #collect_hd_treatment() while True: - print(get_hd_fans_info(), get_dg_fans_info(), get_temperature_sensors_info()) + #print(get_hd_fans_info(), get_dg_fans_info(), get_temperature_sensors_info()) + print(get_dg_valves_states()) sleep(1) #while True: