Skip to content

Class definition

Device

Bases: PviObject

class representing a device

Typical usage example:

line = Line( pviConnection.root, 'LNANSL', CD='LNANSL')
device = Device( line, 'TCP', CD='/IF=TcpIp' )
cpu = Cpu( device, 'myArsim', CD='/IP=127.0.0.1' )
Source code in pvi\pvi_objects\Device.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class Device(PviObject):
    '''class representing a device

        Typical usage example:
        ```
        line = Line( pviConnection.root, 'LNANSL', CD='LNANSL')
        device = Device( line, 'TCP', CD='/IF=TcpIp' )
        cpu = Cpu( device, 'myArsim', CD='/IP=127.0.0.1' )
        ```    
    '''
    def __init__( self, parent : PviObject, name : str, **objectDescriptor: Union[str,int, float]):
        '''
        Args:
            parent : line object  
            name : the device's name in PVI hierarchy, e.g. 'TCP'  
            objectDescriptor :  see PVI documentation for details
                ANSL : CD='/IF=TcpIp'
                INA2000 : e.g. CD='/IF=com1' or CD='/IF='tcpip /SA=113' or CD='inacan1'
                SNMP : CD='/IF=snmp' 
        '''
        if parent.type != T_POBJ_TYPE.POBJ_LINE:
            raise PviError(12009)            
        super().__init__( parent, T_POBJ_TYPE.POBJ_DEVICE, name, **objectDescriptor)


    def __repr__(self):
        return f"Device( name={self._name}, linkID={self._linkID} )"

descriptor: dict property

object descriptor example:

temperature = Variable( task1, 'gHeating.status.actTemp' )
...
print( "descriptor=", temperature.name)

results in:

descriptor= {'CD': 'gHeating.status.actTemp', 'RF': 0}

errorChanged: Callable property writable

callback for 'error changed'

It is advisable to always check the error status '0' before accessing an object.

Args:
    cb: callback( PviObject, int ) or callback( int )

typical example:

cpu = Cpu( device, 'myArsim', CD='/IP=127.0.0.1' )
...
def cpuErrorChanged( error : int ):
    if error != 0:
        raise PviError(error)

cpu.errorChanged = cpuErrorChanged

name: str property

hierarchical PVI object name

example:

name= @Pvi/LNANSL/TCP/myArsim/mainlogic/gHeating.status.actTemp

objectName: str property

object name

example:

temperature = Variable( task1, 'gHeating.status.actTemp' )
...
print( "oname=", temperature.name)

results in:

oname= gHeating.status.actTemp

status: dict property writable

PviObject.status read the object's status

example:

cpu = Cpu( device, 'myArsim', CD='/IP=127.0.0.1' )
task1 = Task( cpu, 'mainlogic')
temperature = Variable( task1, 'gHeating.status.actTemp' )
...
print("status=", cpu.status )

results in:

cpu.status= {'ST': 'WarmStart', 'RunState': 'RUN'}
task1.status {'ST': 'Running'}
temperature.status= {'ST': 'Var', 'SC': 'g'}

type: T_POBJ_TYPE property

object type

example:

temperature = Variable( task1, 'gHeating.status.actTemp' )
...
print( "type=", temperature.type)

results in:

type= T_POBJ_TYPE.POBJ_PVAR

__init__(parent, name, **objectDescriptor)

Parameters:

Name Type Description Default
parent

line object

required
name

the device's name in PVI hierarchy, e.g. 'TCP'

required
objectDescriptor

see PVI documentation for details ANSL : CD='/IF=TcpIp' INA2000 : e.g. CD='/IF=com1' or CD='/IF='tcpip /SA=113' or CD='inacan1' SNMP : CD='/IF=snmp'

{}
Source code in pvi\pvi_objects\Device.py
39
40
41
42
43
44
45
46
47
48
49
50
51
def __init__( self, parent : PviObject, name : str, **objectDescriptor: Union[str,int, float]):
    '''
    Args:
        parent : line object  
        name : the device's name in PVI hierarchy, e.g. 'TCP'  
        objectDescriptor :  see PVI documentation for details
            ANSL : CD='/IF=TcpIp'
            INA2000 : e.g. CD='/IF=com1' or CD='/IF='tcpip /SA=113' or CD='inacan1'
            SNMP : CD='/IF=snmp' 
    '''
    if parent.type != T_POBJ_TYPE.POBJ_LINE:
        raise PviError(12009)            
    super().__init__( parent, T_POBJ_TYPE.POBJ_DEVICE, name, **objectDescriptor)

kill()

PviObject.kill: kills this object this should be called when object is not beeing used anymore to save PVI resources

Source code in pvi\pvi_objects\Object.py
468
469
470
471
472
473
474
475
476
477
478
479
480
481
def kill(self):
    '''
    PviObject.kill: kills this object
    this should be called when object is not beeing used anymore
    to save PVI resources
    '''
    if self._linkID != 0 and self._connection != None:

        self._connection._linkIDs.pop(self._linkID) # remove from linkIDs
        self._connection._pviObjects.remove(self) # remove from PviObjects
        self._result = PviXUnlink(self._hPvi, self._linkID)
        self._linkID = 0
        if self._result != 0 and self._result != 12045:
            raise PviError(self._result, self)