#!/bin/env python3 """ Properties PlcIpAddress: '192.168.999.999.1.1' PlcPort: 851 AdsMotor: MAIN.temp_water MAIN.temp_water_status MAIN.temp_water_read MAIN.temp_water_set MAIN.temp_water_min MAIN.temp_water_max """ import PyTango import sys, os, time, inspect import pyads # # # def getDeviceProperty( devName, propName, tangoHost = None): ”' return a list containing property values devName: 'p17/macroserver/haspp17.01' propName: 'MacroPath' tangoHost e.g.: "haspp99:10000" ”' db = PyTango.Database() try: dct = db.get_device_property( devName, [ propName]) except PyTango.DevFailed as e: PyTango.Except.print_exception( e) print( "getDeviceProperty: %s " % (propName)) return False return list(dct[ propName]) class VM: # # init_device # def __init__( self): self.parent = inspect.currentframe().f_back.f_locals['self'] try: self.plcIpAddress = getDeviceProperty( self.parent.get_name(), "PlcIpAddress")[0] self.plcPort = getDeviceProperty( self.parent.get_name(), "PlcPort")[0] self.adsMotor = getDeviceProperty( self.parent.get_name(), "AdsMotor")[0] except Exception as e: print( "pyAdsMotor.py: expecting the properties: PlcIpAddress, PlcPort, AdsMotor") sys.exit( 255) print( "pyAdsMotor.__init__: connecting to %s, %s" % ( self.plcIpAddress, repr( self.plcPort))) self.plc = pyads.Connection( self.plcIpAddress, int( self.plcPort)) self.plc.open() self.isatty = os.isatty( 1) return # # dev_state # def dev_state( self): argout = self.plc.read_by_name( "%s_status" % self.adsMotor, pyads.PLCTYPE_INT) argout = PyTango.DevState.ON if self.isatty: print( "pyAdsMotor.state, %s" % repr( argout)) return argout # # Position # def read_Position( self): argout = self.plc.read_by_name( "%s_read" % self.adsMotor, pyads.PLCTYPE_INT) if self.isatty: print( "pyAdsMotor.read_position: %s " % repr( argout)) return float( argout) def write_Position( self, argin): argout = self.plc.write_by_name( "%s_set" % self.adsMotor, int( argin), pyads.PLCTYPE_INT) if self.isatty: print( "pyAdsMotor.write_position %s, %s " % (repr( argin), repr( argout))) return 1 # # UnitLimitMax # def read_UnitLimitMax( self): argout = self.plc.read_by_name( "%s_max" % self.adsMotor, pyads.PLCTYPE_INT) if self.isatty: print( "pyAdsMotor.read_UnitLimitMax %s " % repr( argout)) return argout def write_UnitLimitMax( self, argin): argout = self.plc.write_by_name( "%s_max" % self.adsMotor, int( argin), pyads.PLCTYPE_INT) if self.isatty: print( "pyAdsMotor.write_UnitLimitMax %s, %s " % ( repr( argin), repr( argout))) return # # UnitLimitMin # def read_UnitLimitMin( self): argout = self.plc.read_by_name( "%s_min" % self.adsMotor, pyads.PLCTYPE_INT) if self.isatty: print( "pyAdsMotor.read_UnitLimitMin %s " % repr( argout)) return argout def write_UnitLimitMin( self, argin): argout = self.plc.write_by_name( "%s_min" % self.adsMotor, int( argin), pyads.PLCTYPE_INT) if self.isatty: print( "pyAdsMotor.write_UnitLimitMin %s, %s " % ( repr( argin), repr( argout))) return # # CwLimit, CcwLimit # def read_CwLimit( self): return 0 def read_CcwLimit( self): return 0 def StopMove( self): if self.isatty: print( "pyAdsMotor.stopMove: no action") return 1