def _set_check_pwrstate_dclinks(self, state, devices=list(), ps2check=list()): self.ok_ps.clear() self.nok_ps.clear() if not devices: pwrsupplies = self._get_selected_ps() if not pwrsupplies: return devices = self._get_related_dclinks(pwrsupplies, include_regatrons=True) ps2check = set() for dev in devices: ps2check.update(PSSearch.conv_dclink_2_psname(dev)) if not devices: return if state == 'off': self.ok_ps_aux_list.clear() self.nok_ps_aux_list.clear() self._check_pwrstate(ps2check, state='offintlk', show=False) if len(self.nok_ps_aux_list) > 0: for dev in self.ok_ps_aux_list: self._log(dev, True) for dev in self.nok_ps_aux_list: self._log(dev, False) QMessageBox.critical( self, 'Message', 'Make sure all related power supplies\n' 'are turned off before turning DCLinks off!') return task0 = CreateTesters(devices, parent=self) task1 = SetPwrState(devices, state=state, parent=self) task2 = CheckPwrState(devices, state=state, is_test=True, parent=self) tasks = [task0, task1, task2] labels = [ 'Connecting to DCLinks...', 'Turning DCLinks ' + state + '...', 'Checking DCLinks powered ' + state + '...' ] if state == 'on': task3 = CheckInitOk(devices, parent=self) task3.itemDone.connect(self._log) tasks.append(task3) labels.append('Wait DCLinks initialize...') else: task2.itemDone.connect(self._log) dlg = ProgressDialog(labels, tasks, self) dlg.exec_()
def _handle_checked_items_changed(self, item): devname = PVName(item.data(0, Qt.DisplayRole)) if not _re.match('.*-.*:.*-.*', devname): return state2set = item.checkState(0) # ensure power supplies that share dclinks are checked together if devname in self._si_fam_psnames and not self._is_adv_mode: dclinks = PSSearch.conv_psname_2_dclink(devname) if dclinks: psname2check = set() for dcl in dclinks: relps = PSSearch.conv_dclink_2_psname(dcl) relps.remove(devname) psname2check.update(relps) self.ps_tree.tree.blockSignals(True) for psn in psname2check: item2check = self.ps_tree._item_map[psn] if item2check.checkState(0) != state2set: item2check.setData(0, Qt.CheckStateRole, state2set) self.ps_tree.tree.blockSignals(False) self._needs_update_setup = True
def _prepare_sidclinks(self): self.ok_ps.clear() self.nok_ps.clear() selected = self._get_selected_ps() ps2check = [ps for ps in selected if ps in self._si_fam_psnames] dclinks = self._get_related_dclinks(ps2check, include_regatrons=True) if not ps2check: return # if power state is on, do nothing self.ok_ps_aux_list.clear() self.nok_ps_aux_list.clear() self._check_pwrstate(ps2check, state='on', is_test=False, show=False) if set(self.ok_ps_aux_list) == set(ps2check): for dev in dclinks: self._log(dev, True) return ps2act = list(self.nok_ps_aux_list) # act in PS off dcl2act = self._get_related_dclinks(ps2act, include_regatrons=True) # print('act', ps2act, dcl2act) # if need initializing, check if DCLinks are turned off self.ok_ps_aux_list.clear() self.nok_ps_aux_list.clear() self._check_pwrstate(dcl2act, state='off', is_test=False, show=False) if not self.nok_ps_aux_list: for dev in dclinks: self._log(dev, True) return dcl2ctrl = list(self.nok_ps_aux_list) # control DCLink on dcl_ok = set(dclinks) - set(dcl2ctrl) ps2ctrl = set() # get related psnames for dcl in dcl2ctrl: pss = PSSearch.conv_dclink_2_psname(dcl) ps2ctrl.update(pss) # print('ctrl', ps2ctrl, dcl2ctrl) # if some DCLink is on, make sure related PS are turned off self.ok_ps_aux_list.clear() self.nok_ps_aux_list.clear() self._check_pwrstate(ps2ctrl, state='off', is_test=False, show=False) if self.nok_ps_aux_list: ps2ctrl = list(self.nok_ps_aux_list) self.ok_ps_aux_list.clear() self.nok_ps_aux_list.clear() self._set_zero_ps(ps2ctrl, show=False) self.ok_ps_aux_list.clear() self.nok_ps_aux_list.clear() self._set_check_pwrstate(dev_type=ps2ctrl, state='off', show=False) if self.nok_ps_aux_list: for dev in self.ok_ps_aux_list: self._log(dev, True) for dev in self.nok_ps_aux_list: self._log(dev, False) text = 'The listed PS seems to be taking too\n'\ 'long to turn off.\n'\ 'Try to execute this step once again.' QMessageBox.warning(self, 'Message', text) return # finally, turn DCLinks off self._set_check_pwrstate_dclinks(state='off', devices=dcl2ctrl, ps2check=ps2ctrl) # log DCLinks Ok for dev in dcl_ok: self._log(dev, True)