Commit 836911b6 authored by Andrea Orlati's avatar Andrea Orlati Committed by GitHub
Browse files

fix issue #346: Fixed a problem with the localoscillator management during...

fix issue #346: Fixed a problem with the localoscillator management during Noto receiver configuration. The component (#347)

is now ported into a standard nomencalature inside the repository. Also the code has been structured as Medicina component.
parent bd3c988b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              
	Name="LocalOscillator"
	Code="LocalOscillatorImpl.LocalOscillator"
	Code="NotoLocalOscillatorImpl.NotoLocalOscillator"
	Type="IDL:alma/Receivers/LocalOscillator:1.0"
	Container="LocalOscillatorContainer"
	KeepAliveTime="10"
+0 −199
Original line number Diff line number Diff line
import socket
import time
import decimal

QUERYERROR="SYST:ERR? \n"

FREQCMD="FREQ "
QUERYFREQ="FREQ?;"+QUERYERROR
QUERYPOWER="POW?\n"
RFONCMD="OUTP:STAT ON"
RFOFFCMD="OUTP:STAT OFF"
QUERYRF="OUTP:STAT?"
FREQUNIT=" MHZ\n"
POWERUNIT=" dBM\n"

class CommandLineError(Exception):
   def __init__(self, value):

      self.value = value
   def __str__(self):
      return repr(self.value)


class CommandLine:
   
    
   def __init__(self):
     
       try: 
          self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       except socket.error , msg:
          print msg
          

   def __del__(self):
       pass
   
   def configure(self,ip,port):
      '''
      Connect to the HW
      Clear query error
      
      '''
        
   
      try:
         self.ip=ip
         self.port=port
         
         self.sock.connect((ip,port))
         msg_ok ='OK' 
         self.sock.sendall('*CLS\n;SYST:ERR?\n++read\n')
         msg = self.sock.recv(1024)

         return msg_ok
      except socket.error , msg:
         print msg
         print "connect error: " ,msg
         return msg
   
   def init(self,reply):
     
     pass
   
   def setPower(self,power):
       cmd= "POW " + str(power) + "DBM;SYST:ERR?\n"
 
       try:
           msg=self.query(cmd)   

           return  msg
           
       except socket.error , msg:
          print "connect error: " ,msg
          return msg
   
   def getPower(self):
       QUERYPOWER="POW?;SYST:ERR?\n"
       cmd=QUERYPOWER
       try:
          msg=self.query(cmd)
          commands=msg.split(';')
          
          if len(commands)>1:
             val=int(decimal.Decimal(commands[0]))# unit is MHZ,
             err_msg=commands[1]
          else:
             val=-1
             err_msg='Communication Error with synth'
           
          return err_msg,val
   
       except socket.error , msg:
          print "connect error: " ,msg
          return msg,-1
       except CommandLineError,msg:
          raise
       except ValueError,msg:
          raise CommandLineError(msg)   
   
     
   def setFrequency(self,freq):

       cmd=  'FREQ '+str(freq)+ 'MHZ;SYST:ERR?'

 
       try:
           msg=self.query(cmd)
           return msg
           
       except socket.error , msg:
          print "connect error: " ,msg
          return msg
   
   def getFrequency(self):
         
        cmd= 'FREQ?;SYST:ERR?'
        try:
           
          msg=self.query(cmd)
          commands=msg.split(';')
          if len(commands)>1:
              val=int(decimal.Decimal(commands[0]))/1e6 # unit is MHZ,
              err_msg=commands[1]
          else:
              val=-1
              err_msg='Communication Error with synth'
          print "Error Messager from Synt:",msg
          #if err_msg != '0,\"No error\"\n': 
                #print "exception",err_msg
                #raise CommandLineError(err_msg)   
          return err_msg,val
   
        except socket.error , msg:
          print "connect error: " ,msg
          return msg,-1
          
        except CommandLineError,msg:
          raise
        except ValueError,msg:
          raise CommandLineError(msg)   
   
   def readStatus(self):
       ''' 
       Query the error code of the synt.      
       '''       
       try:
           
          msg=self.query(QUERYERROR)
          print "query err",msg
          if msg != '0,\"No error\"\n': 
                print "exception",msg
                raise CommandLineError(msg)   
          return msg
       except socket.error , msg:
          print "connect error: " ,msg
          return msg
          
   def rfOn(self):
     
       pass
   
   def rfOff(self):
      
      
      pass
      
   def close(self):
     
       self.sock.close()

   def query(self,cmd):
       try:
           self.sock.sendall(cmd+'\n++read\n') 
           msg = self.sock.recv(1024) 
           if len(msg)==0:
             
                 self.sock.close()
                 
                 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                 self.configure(self.ip,self.port)
                 
           return msg
       
       except socket.error , msg:
          print "connect error: " ,msg
          print 'len msg received',len(msg)
          
          self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          self.configure(self.ip,self.port)
  
          
          return msg
   
       
       
      
     
 No newline at end of file
+0 −91
Original line number Diff line number Diff line
from ACSImpl.DevIO import DevIO
from math import fabs
from CommandLine import CommandLineError
from IRAPy import logger

SYNTH_TOLLERANCE = 1.

class GenericDevIO(DevIO):
    def __init__(self, value=0):
        DevIO.__init__(self, value)

    def read(self):
        return self.value

    def write(self, value):
        self.value = value


class amplitudeDevIO(DevIO):
    def __init__(self, cl,value=0):
        DevIO.__init__(self, value)

    def read(self):
        return self.value

    def write(self, value):
        self.value = value
                                    
class frequencyDevIO(DevIO):
    '''
       frequency read from the synth.
       
    ''' 
    def __init__(self, cl,value=0):
        DevIO.__init__(self,value)
        self.cl=cl
    def read(self):
        try:
           msg,value=self.cl.getFrequency()
           return value
        except CommandLineError, ex:
                success = False
                msg = ex.message if ex.message else 'unexpected exception'
                answer = 'Error - %s' %(ex.getReason() if hasattr(ex, 'getReason') else msg)
                logger.logError(answer)
                return 0
        
        except Exception, ex:
                success = False
                msg = ex.message if ex.message else 'unexpected exception'
                answer = 'Error - %s' %(ex.getReason() if hasattr(ex, 'getReason') else msg)
                logger.logError(answer)
                return 0

    def write(self, value):
        self.value = value
class isLockedDevIO(DevIO):
    '''
      This checks if the Synthetizer is actually set  to the set frequecy 
       
    ''' 
    
    def __init__(self, component,commandline,value=0):
        DevIO.__init__(self, value)
        self.cl=commandline
        self.impl=component
    def read(self):
        try:
           component_frequency=self.impl.getInternalFrequency()  #read freq from component
           msg,synth_frequency=self.cl.getFrequency() #read freq from synth
           offset=fabs(component_frequency-synth_frequency)
           if offset <= SYNTH_TOLLERANCE:
               return 1
           else:
               return 0
        except CommandLineError, ex:
                success = False
                msg = ex.message if ex.message else 'unexpected exception'
                answer = 'Error - %s' %(ex.getReason() if hasattr(ex, 'getReason') else msg)
                logger.logError(answer)
                return 0
        
        except Exception, ex:
                success = False
                msg = ex.message if ex.message else 'unexpected exception'
                answer = 'Error - %s' %(ex.getReason() if hasattr(ex, 'getReason') else msg)
                logger.logError(answer)
                return 0
             
    def write(self, value):
        self.value = value
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ PY_SCRIPTS_L =
PY_MODULES         = 
PY_MODULES_L       =

PY_PACKAGES        =LocalOscillatorImpl 
PY_PACKAGES        = NotoLocalOscillatorImpl 
PY_PACKAGES_L      =
pppppp_MODULES	   =

+174 −0
Original line number Diff line number Diff line
import socket
import time
import decimal
from NotoLocalOscillatorImpl import CommandLineError

QUERYERROR="SYST:ERR? \n"

FREQCMD="FREQ "
QUERYFREQ="FREQ?;"+QUERYERROR
QUERYPOWER="POW?\n"
RFONCMD="OUTP:STAT ON"
RFOFFCMD="OUTP:STAT OFF"
QUERYRF="OUTP:STAT?"
FREQUNIT=" MHZ\n"
POWERUNIT=" dBM\n"

class CommandLine:    
	def __init__(self):
		self.sock=None
		self.connected=False;
		self.ip=""
		self.port=0
		self.power=0.0
		self.freq=0.0
		self.powerTime=0
		self.freqTime=0		
          
	def __del__(self):
		self.close()
   
	def initialize(self):
		#raises an error.....
		self.create()   
   
	def configure(self,ip,port):
		'''
		Connect to the HW
		Clear query error
		'''  
		self.ip=ip
		self.port=port
		#raises an error.....
		self.connect() 
			
	def create(self):
		try:
			if self.sock==None:
				self.sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		except socket.error,msg:
			exc=CommandLineError(msg);
			self.sock=None
			raise exc
			
	def close(self):
		if self.connected:
			if self.sock!=None:
				self.sock.close()
		self.connected=False
		self.sock=None   

	def connect(self):
		try:
			if self.connected==False:
				self.sock.connect((self.ip,self.port))
				self.sock.sendall('*CLS\n;SYST:ERR?\n++read\n')
				msg=self.sock.recv(1024)
				self.connected=True
		except socket.error, msg:
			exc=CommandLineError(msg);
			raise exc
			   
	def check(self):
		try:
			self.create()
			self.connect()
			return True
		except Exception:
			return False
			
	def setPower(self,power):
		cmd="POW "+str(power)+"DBM;SYST:ERR?\n"
		#can raise an error......
		msg=self.query(cmd)   
		return msg

	def getPower(self):
		QUERYPOWER="POW?;SYST:ERR?\n"
		cmd=QUERYPOWER
		now=time.time()
		if now<self.powerTime:
			return "Read from internal memory",self.power
		#can raise an error.....
		msg=self.query(cmd)
		commands=msg.split(';')
		if len(commands)>1:
			self.power=int(decimal.Decimal(commands[0]))# unit is MHZ
			self.powerTime=time.time()+30
			err_msg=commands[1]
		else:
			self.power=-1.0
			err_msg='Communication Error with synth'  
		return err_msg,self.power
   
	def setFrequency(self,freq):
		cmd='FREQ '+str(freq)+ 'MHZ;SYST:ERR?'
		#can raise an error......
		msg=self.query(cmd)
		return msg   
   
	def getFrequency(self):       
		cmd='FREQ?;SYST:ERR?'
		now=time.time()
		if now<self.freqTime:
			return "Read from internal memory",self.freq
		#can raise an error.....
		msg=self.query(cmd)
		commands=msg.split(';')
		if len(commands)>1:
			self.freq=int(decimal.Decimal(commands[0]))/1e6
			self.freqTime=time.time()+30
			err_msg=commands[1]
		else:
			self.freq=-1.0
			err_msg='Communication Error with synth'
		return err_msg,self.freq
   
	def readStatus(self):
		''' 
		Query the error code of the synt.      
		'''       
		try:
           
			msg=self.query(QUERYERROR)
			print "query err",msg
			if msg != '0,\"No error\"\n': 
					print "exception",msg
					raise CommandLineError(msg)   
			return msg
		except socket.error , msg:
			print "connect error: " ,msg
			return msg
          
	def rfOn(self):
		pass
   
	def rfOff(self):
		pass

	def query(self,cmd):
		msg=""
		if self.check():			
			try:
				self.sock.sendall(cmd+'\n++read\n')
			except socket.error,msg:
				self.close()
				exc=CommandLineError(msg);
				raise exc
			try:
				msg=self.sock.recv(1024)
			except socket.error,msg:
				self.close()
				exc=CommandLineError(msg);
				raise exc
			if	len(msg)==0:
				self.sock.close()
				raise CommandLineError("disconnection from remote side"); 					        
			return msg
		else:
			exc=CommandLineError("connection is not available");
			raise exc   
       
       
      
     
 No newline at end of file
Loading