Index: dialin/common/hd_defs.py =================================================================== diff -u -rc61eff081973c9fb186c353e9ff0360549b57a78 -r680ab4c35b3902a5397513ef93c97f8b7a6daca8 --- dialin/common/hd_defs.py (.../hd_defs.py) (revision c61eff081973c9fb186c353e9ff0360549b57a78) +++ dialin/common/hd_defs.py (.../hd_defs.py) (revision 680ab4c35b3902a5397513ef93c97f8b7a6daca8) @@ -27,4 +27,14 @@ MODE_TREA = 6 # Treatment mode MODE_POST = 7 # Post-Treatment mode MODE_NLEG = 8 # Not legal - an illegale mode transition occurred - NUM_OF_MODES = 9 # Number of HD operation modes \ No newline at end of file + NUM_OF_MODES = 9 # Number of HD operation modes + +@unique +class HeparinStates(DialinEnum): + HEPARIN_STATE_OFF = 0 # Heparin treatment parameters set to zero or not yet set + HEPARIN_STATE_STOPPED = 1 # Heparin delivery is stopped because treatment paused or not yet started + HEPARIN_STATE_PAUSED = 2 # Heparin delivery is paused by user + HEPARIN_STATE_INITIAL_BOLUS = 3 # Heparin bolus is currently being delivered + HEPARIN_STATE_DISPENSING = 4 # Heparin continuous delivery is in progress + HEPARIN_STATE_COMPLETED = 5 # Heparin delivery is completed + HEPARIN_STATE_EMPTY = 6 # Heparin syringe is empty Index: dialin/dg/load_cells.py =================================================================== diff -u -rc8e3d47e1c55e29eb03eb86207d2c99c2ddcf56d -r680ab4c35b3902a5397513ef93c97f8b7a6daca8 --- dialin/dg/load_cells.py (.../load_cells.py) (revision c8e3d47e1c55e29eb03eb86207d2c99c2ddcf56d) +++ dialin/dg/load_cells.py (.../load_cells.py) (revision 680ab4c35b3902a5397513ef93c97f8b7a6daca8) @@ -50,17 +50,10 @@ msg_id = MsgIds.MSG_ID_LOAD_CELL_READINGS.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_load_cells_sync) - # test code - msg_id = 0x998 - self.can_interface.register_receiving_publication_function(channel_id, msg_id, - self._handler_load_cells_raw_sync) - self.load_cell_A1 = 0.0 self.load_cell_A2 = 0.0 self.load_cell_B1 = 0.0 self.load_cell_B2 = 0.0 - # test code - self.rawA1 = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0] def get_load_cells(self): """ @@ -70,40 +63,6 @@ """ return [self.load_cell_A1, self.load_cell_A2, self.load_cell_B1, self.load_cell_B2] - # test code - @_publish(["rawA1"]) - def _handler_load_cells_raw_sync(self, message): - r1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - r2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - r3 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) - r4 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - r5 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) - r6 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) - r7 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) - r8 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) - r9 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) - r10 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])) - self.rawA1[0] = r1[0] - self.rawA1[1] = r2[0] - self.rawA1[2] = r3[0] - self.rawA1[3] = r4[0] - self.rawA1[4] = r5[0] - self.rawA1[5] = r6[0] - self.rawA1[6] = r7[0] - self.rawA1[7] = r8[0] - self.rawA1[8] = r9[0] - self.rawA1[9] = r10[0] - @_publish(["load_cell_A1", "load_cell_A2", "load_cell_B1", "load_cell_B2"]) def _handler_load_cells_sync(self, message): """ Index: dialin/hd/syringe_pump.py =================================================================== diff -u -r5b8814a19b1691f263de795014f30cda2e8d72eb -r680ab4c35b3902a5397513ef93c97f8b7a6daca8 --- dialin/hd/syringe_pump.py (.../syringe_pump.py) (revision 5b8814a19b1691f263de795014f30cda2e8d72eb) +++ dialin/hd/syringe_pump.py (.../syringe_pump.py) (revision 680ab4c35b3902a5397513ef93c97f8b7a6daca8) @@ -20,9 +20,9 @@ from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish +from ..common.hd_defs import HeparinStates from logging import Logger - class HDSyringePump(_AbstractSubSystem): """ HDSyringePump @@ -40,20 +40,13 @@ SYRINGE_PUMP_HEP_CONTINUOUS_STATE = 6 SYRINGE_PUMP_CONFIG_FORCE_SENSOR_STATE = 7 - # Heparin states - HEPARIN_STATE_OFF = 0 - HEPARIN_STATE_PAUSED = 1 - HEPARIN_STATE_INITIAL_BOLUS = 2 - HEPARIN_STATE_DISPENSING = 3 - HEPARIN_STATE_COMPLETED = 4 - HEPARIN_STATE_EMPTY = 5 - # Syringe pump operations SYRINGE_PUMP_OP_STOP = 0 SYRINGE_PUMP_OP_RETRACT = 1 - SYRINGE_PUMP_OP_SEEK_AND_PRIME = 2 - SYRINGE_PUMP_OP_BOLUS = 3 - SYRINGE_PUMP_OP_CONTINUOUS = 4 + SYRINGE_PUMP_OP_SEEK = 2 + SYRINGE_PUMP_OP_PRIME = 3 + SYRINGE_PUMP_OP_BOLUS = 4 + SYRINGE_PUMP_OP_CONTINUOUS = 5 def __init__(self, can_interface, logger: Logger): """ @@ -71,7 +64,7 @@ self._handler_syringe_pump_data) self.syringe_pump_state = self.SYRINGE_PUMP_INIT_STATE - self.heparin_state = self.HEPARIN_STATE_OFF + self.heparin_state = HeparinStates.HEPARIN_STATE_OFF.value self.syringe_pump_set_rate_ml_hr = 0.0 self.syringe_pump_meas_rate_ml_hr = 0.0 self.syringe_pump_position = 0 @@ -102,11 +95,12 @@ @return: latest published Heparin state. HEPARIN_STATE_OFF = 0 - HEPARIN_STATE_PAUSED = 1 - HEPARIN_STATE_INITIAL_BOLUS = 2 - HEPARIN_STATE_DISPENSING = 3 - HEPARIN_STATE_COMPLETED = 4 - HEPARIN_STATE_EMPTY = 5 + HEPARIN_STATE_STOPPED = 1 + HEPARIN_STATE_PAUSED = 2 + HEPARIN_STATE_INITIAL_BOLUS = 3 + HEPARIN_STATE_DISPENSING = 4 + HEPARIN_STATE_COMPLETED = 5 + HEPARIN_STATE_EMPTY = 6 """ return self.heparin_state @@ -169,7 +163,7 @@ @_publish(["syringe_pump_state", "syringe_pump_set_rate_ml_hr", "syringe_pump_meas_rate_ml_hr","syringe_pump_position", "syringe_pump_volume_ml","syringe_pump_home_v", - "syringe_pump_switch_v","syringe_pump_force_v"]) + "syringe_pump_switch_v","syringe_pump_force_v","heparin_state"]) def _handler_syringe_pump_data(self, message): """ Handles published syringe pump data messages. Syringe pump data are captured @@ -187,7 +181,7 @@ message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) mrt = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - pos = struct.unpack('f', bytearray( + pos = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) vol = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) @@ -224,9 +218,10 @@ Syringe pump operation IDs: SYRINGE_PUMP_OP_STOP = 0 SYRINGE_PUMP_OP_RETRACT = 1 - SYRINGE_PUMP_OP_SEEK_AND_PRIME = 2 - SYRINGE_PUMP_OP_BOLUS = 3 - SYRINGE_PUMP_OP_CONTINUOUS = 4 + SYRINGE_PUMP_OP_SEEK = 2 + SYRINGE_PUMP_OP_PRIME = 3 + SYRINGE_PUMP_OP_BOLUS = 4 + SYRINGE_PUMP_OP_CONTINUOUS = 5 """ op = integer_to_bytearray(operation) Index: tests/test_lc.py =================================================================== diff -u -r5b8814a19b1691f263de795014f30cda2e8d72eb -r680ab4c35b3902a5397513ef93c97f8b7a6daca8 --- tests/test_lc.py (.../test_lc.py) (revision 5b8814a19b1691f263de795014f30cda2e8d72eb) +++ tests/test_lc.py (.../test_lc.py) (revision 680ab4c35b3902a5397513ef93c97f8b7a6daca8) @@ -16,7 +16,6 @@ import sys sys.path.append("..") -#from dialin.hd.hemodialysis_device import HD from dialin.dg.dialysate_generator import DG from time import sleep Index: tests/test_syringe.py =================================================================== diff -u -rc8e3d47e1c55e29eb03eb86207d2c99c2ddcf56d -r680ab4c35b3902a5397513ef93c97f8b7a6daca8 --- tests/test_syringe.py (.../test_syringe.py) (revision c8e3d47e1c55e29eb03eb86207d2c99c2ddcf56d) +++ tests/test_syringe.py (.../test_syringe.py) (revision 680ab4c35b3902a5397513ef93c97f8b7a6daca8) @@ -17,28 +17,51 @@ import sys sys.path.append("..") from dialin.hd.hemodialysis_device import HD -#from dialin.dg.dialysate_generator import DG from time import sleep if __name__ == "__main__": # create an HD object called hd hd = HD() - # create a DG object called dg -# dg = DG() sleep(2) # log in to HD and DG as tester - if hd.cmd_log_in_to_hd() == 0: - exit(1) -# if dg.cmd_log_in_to_dg() == 0: +# if hd.cmd_log_in_to_hd() == 0: # exit(1) - sleep(1) +# sleep(1) # hd.syringe_pump.cmd_syringe_pump_operation(0,0.0,0.0) # stop # hd.syringe_pump.cmd_syringe_pump_operation(1,0.0,0.0) # retract # sleep(10) -# hd.syringe_pump.cmd_syringe_pump_operation(2,0.0,0.0) # seek/prime +# hd.syringe_pump.cmd_syringe_pump_operation(2,0.0,0.0) # seek # sleep(5) - hd.syringe_pump.cmd_syringe_pump_operation(3,0.0,2.0) # bolus -# hd.syringe_pump.cmd_syringe_pump_operation(4,1.0,0.0) # continuous +# hd.syringe_pump.cmd_syringe_pump_operation(3,0.0,0.0) # prime +# sleep(5) +# hd.syringe_pump.cmd_syringe_pump_operation(4,0.0,2.0) # bolus +# hd.syringe_pump.cmd_syringe_pump_operation(5,1.0,0.0) # continuous + # create log file + with open("syringe_test.log", "w") as f: + # write column header labels to log file + header = "PumpState, Hep.State, SetRate, MeasRate, Position, Volume, HomeV, SwitchV, ForceV\n" + f.write(header) + + # write syringe pump related data from HD to log file + while True: + sleep(1) + syringeData = '{:2d}'.format(hd.syringe_pump.syringe_pump_state) + \ + ", " + '{:2d}'.format(hd.syringe_pump.heparin_state) + \ + ", " + '{:12.6f}'.format(hd.syringe_pump.syringe_pump_set_rate_ml_hr) + \ + ", " + '{:12.6f}'.format(hd.syringe_pump.syringe_pump_meas_rate_ml_hr) + \ + ", " + '{:10d}'.format(hd.syringe_pump.syringe_pump_position) + \ + ", " + '{:12.9f}'.format(hd.syringe_pump.syringe_pump_volume_ml) + \ + ", " + '{:5.3f}'.format(hd.syringe_pump.syringe_pump_home_v) + \ + ", " + '{:5.3f}'.format(hd.syringe_pump.syringe_pump_switch_v) + \ + ", " + '{:5.3f}'.format(hd.syringe_pump.syringe_pump_force_v) + "\n" + + # log data + f.write(syringeData) + + # print to console + print(syringeData) + +