Index: HD_DialOutFlow.py =================================================================== diff -u -rc172ebf4d713b654fb5a75113c96bf7f5ef5d858 -r09680e63c3b35ef6e8c29dee008ea3dcd96c97cc --- HD_DialOutFlow.py (.../HD_DialOutFlow.py) (revision c172ebf4d713b654fb5a75113c96bf7f5ef5d858) +++ HD_DialOutFlow.py (.../HD_DialOutFlow.py) (revision 09680e63c3b35ef6e8c29dee008ea3dcd96c97cc) @@ -1,6 +1,7 @@ from enum import Enum from DialityCoreCanProtocol import DenaliMessage from DialityCoreCanProtocol import DenaliChannels +import matplotlib.pyplot as plt import sys @@ -44,6 +45,13 @@ 'measured_volume': 0, 'pwm': 0} + self.BroadCastSignals = {'time': [], + 'state': [], + 'target_volume': [], + 'measured_volume': [], + 'pwm': []} + self.time = 0 + def setUFState(self, new_state): """ setUFState function sets the new states to STOP, RUN or PAUSE @@ -81,14 +89,15 @@ if isinstance(rx_total_volume_ml, int) and isinstance(rx_time_min, int) and \ isinstance(rx_flow_rate, int): - payload = list(rx_total_volume_ml.to_bytes(2, DenaliMessage.BYTE_ORDER)) - payload += list(rx_time_min.to_bytes(2, DenaliMessage.BYTE_ORDER)) - payload += list(rx_flow_rate.to_bytes(2, DenaliMessage.BYTE_ORDER)) + payload = list(rx_total_volume_ml.to_bytes(2, byteorder=DenaliMessage.BYTE_ORDER, signed=False)) + payload += list(rx_time_min.to_bytes(2, byteorder=DenaliMessage.BYTE_ORDER, signed=False)) + payload += list(rx_flow_rate.to_bytes(2, byteorder=DenaliMessage.BYTE_ORDER, signed=False)) msg = DenaliMessage.buildMessage(channel_id=DenaliChannels.dialin_to_hd_ch_id, message_id=self.MSG_ID_SET_DIALOUT_FLOW_RX, payload=payload) received_msg = self.__can_interface.send(msg) + print(received_msg) else: print("Arguments to setUFRx are incorrect", file=sys.stderr) @@ -109,3 +118,24 @@ byteorder=DenaliMessage.BYTE_ORDER, signed=True) self.DialOutBroadcast['pwm'] = int.from_bytes(bytearray(payload[6:8]), byteorder=DenaliMessage.BYTE_ORDER, signed=True) + + self.BroadCastSignals['time'].append(self.time) + self.BroadCastSignals['state'].append(state_num*100) + self.BroadCastSignals['target_volume'].append(self.DialOutBroadcast['target_volume']) + self.BroadCastSignals['measured_volume'].append(self.DialOutBroadcast['measured_volume']) + self.BroadCastSignals['pwm'].append(self.DialOutBroadcast['pwm']) + self.time += 1 + + + def plotBroadCastSignals(self): + + time = self.BroadCastSignals['time'] + state = self.BroadCastSignals['state'] + target = self.BroadCastSignals['target_volume'] + volume = self.BroadCastSignals['measured_volume'] + pwm = self.BroadCastSignals['pwm'] + + plt.plot(time, state,'o', time, target, 'b-', time, volume, 'b--', time, pwm, 'g--') + + plt.legend(('state', 'target vol', 'act vol', 'pwm')) + plt.show() \ No newline at end of file Index: HemodialysisDevice.py =================================================================== diff -u -rc172ebf4d713b654fb5a75113c96bf7f5ef5d858 -r09680e63c3b35ef6e8c29dee008ea3dcd96c97cc --- HemodialysisDevice.py (.../HemodialysisDevice.py) (revision c172ebf4d713b654fb5a75113c96bf7f5ef5d858) +++ HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 09680e63c3b35ef6e8c29dee008ea3dcd96c97cc) @@ -890,6 +890,13 @@ sleep(2) hd_obj._Basics.CmdLogInToHD() + totalVolumeInMl = 2400 + rxTimeInMins = 240 + flowRateMlmin = 100 + + hd_obj.DialOut.setUFRx(totalVolumeInMl, rxTimeInMins, flowRateMlmin) + + sleep(5) hd_obj.DialOut.setUFState(DialOutStates.RUN) sleep(2) @@ -919,6 +926,44 @@ sleep(2) hd._Basics.CmdLogInToHD() + totalVolumeInMl = 2400 + rxTimeInMins = 30 + flowRateMlmin = 100 + + resp = hd.DialOut.setUFRx(totalVolumeInMl, rxTimeInMins, flowRateMlmin) + print("Set TotalVolume(mL): {}, TotalTime(mins): {} and flowrate (ml/min): {}".format(totalVolumeInMl, + rxTimeInMins, flowRateMlmin)) + + sleep(5) + hd.DialOut.setUFState(DialOutStates.RUN) + state_run = hd.DialOut.DialOutBroadcast['state'] + sleep(2) + print("After RUN: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(20) + print("After 20 secs RUN: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(20) + print("After 40 secs RUN: {}".format(hd.DialOut.DialOutBroadcast)) + + hd.DialOut.setUFState(DialOutStates.PAUSE) + sleep(2) + print("After pausing: {}".format(hd.DialOut.DialOutBroadcast)) + state_pause = hd.DialOut.DialOutBroadcast['state'] + + sleep(10) + print("After 10 sec PAUSE:{}".format(hd.DialOut.DialOutBroadcast)) + hd.DialOut.setUFState(DialOutStates.STOP) + + sleep(3) + hd.DialOut.setUFState(DialOutStates.STOP) + sleep(2) + state_stop = hd.DialOut.DialOutBroadcast['state'] + print("After Stop: {}".format(hd.DialOut.DialOutBroadcast)) + + sleep(5) + hd.DialOut.plotBroadCastSignals() + tgtRate = 0 hd.BloodFlow.CmdBloodFlowBroadcastIntervalOverride(hd.NO_RESET, 2000)