checkMotorZMX()

The function checkMotorZMX() is called for a motor, can be a VmExecutor. It finds the related ZMX devices (__SubDevices) and calls checkZMX() for each of them. This function makes sure that the ZMX is activated and that the error attribute is 'no error'. If so, it returns True. Otherwise is calls the reset() command, sleeps 1s, then re-reads the error attribute, returns True, if 'no error', otherise False.

Notice that checkMotorZMX() has the debug parameter. If set to True, debug output is generated, see the end of this subsection for an example output.

The function checkMotorZMX():

p09/door/haso107d10.01 [1]: HasyUtils.checkMotorZMX?
Signature: HasyUtils.checkMotorZMX(motorName, macro=None, Debug=True)
Docstring:
    Inputs: 
      - motorName is a Pool device or a Tango device
      - macro is used for macro.output()
      - debug controls the debug output

    If poolDevice (eh_mot65), we connect to the related TangoDevice and read the SubDevices, 
    If Tango device (p09/motor/eh.65), we read the subDevices directly

    Loop over the subDevices and search for the ZMXDevice property and connect to the ZMX 
    and execute checkZMX()

    This function can be used in hooks, e.g.: 

class gh_pre_scan(Macro):
    def run( self):
        self.output( "general_features.pre_scan hook")
        scanInfo = HasyUtils.createScanInfo( self.getParentMacro().getCommand())
        for motRec in scanInfo[ 'motors']:
            if not HasyUtils.checkMotorZMX( motRec[ 'name'], macro = self, debug = True):
                self.abort()
        ....            
    
File:      /usr/lib/python3/dist-packages/HasyUtils/TgUtils.py
Type:      function

The function checkZMX():

p09/door/haso107d10.01 [2]: HasyUtils.checkZMX?
Signature: HasyUtils.checkZMX(zmxName, macro=None, debug=True)
Docstring:
receives a ZMX name checks the device

  if Deactivation != 0: 
    Deactivation = 0

  if error != 'no error': 
    reset() is called then sleep(1)
    if error != 'no error': 
      return False
    else:
      return True
  return True
File:      /usr/lib/python3/dist-packages/HasyUtils/TgUtils.py
Type:      function

The debug output:

p09/door/haso107d10.01 [6]: ascan eh_mot65 1 1.1 3 0.1
TgUtils.checkMotorZMX: eh_mot65
TgUtils.checkMotorZMX: eh_mot65 has the TangoDevice attribute, follow
TgUtils.checkMotorZMX: reading subDevices from haso107d10:10000/p09/motor/eh.65
TgUtils.checkMotorZMX: subDevices ['p09/motor/eh.65', 'p09/zmx/exp.01']
TgUtils.checkMotorZMX: loop subDev p09/motor/eh.65
TgUtils.checkZMX: p09/zmx/exp.01
TgUtils.checkZMX: return True
TgUtils.checkMotorZMX: loop subDev p09/zmx/exp.01
TgUtils.checkMotorZMX:   p09/zmx/exp.01 not an OmsVme58, continue
TgUtils.checkMotorZMX: return True
scanInfo: {'motors': [{'name': 'eh_mot65', 'start': 1.0, 'stop': 1.1}], 'title': 'ascan eh_mot65 1.0 1.1 3 0.1', 'serialno': 6726, 'intervals': 3, 'sampleTime': 0.1}
Operation will be saved in /home/kracht/Misc/IVP/temp/tst_[ScanId].fio (fio from FIO_FileRecorder)
Scan #6726 started at Thu Mar  2 16:28:24 2023. It will take at least 0:00:11.799600
 #Pt No   eh_mot65   eh_t01    eh_c01   sig_gen    eh_c02      dt   
   0         1        0.1      100000   0.0119563     0      16.2466 
   1      1.03333     0.1      99999    399.481      0      17.0735 
   2      1.06666     0.1      99999    49.7412      0      17.8426 
   3        1.1       0.1      99999    2.3081e-05     0      18.6242 
Operation saved in /home/kracht/Misc/IVP/temp/tst_06726.fio (fio)
Scan #6726 ended at Thu Mar  2 16:28:43 2023, taking 0:00:18.925702. Dead time 95.8% (motion dead time 93.0%)