Skip to content

Class definition

Station

Bases: PviObject

class representing station object

ANSL & INA2000: can be used but is not necessary SNMP specifies particular PLC see PVI documentation for more details

Source code in pvi\Station.py
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Station(PviObject):
    '''class representing station object

    ANSL & INA2000: can be used but is not necessary
    SNMP specifies particular PLC
    see PVI documentation for more details
    '''
    def __init__( self, parent : PviObject, name : str, **objectDescriptor: Union[str,int, float] ):
        '''
        Args:
            parent : device object  
            name : name of station in PVI hierarchy
            objectDescriptor :
                ANSL : ''
                INA2000 : ''
                SNMP : MAC address, e.g. CD="/CN=00-60-65-02-f0-2c"
        '''
        if parent.type != T_POBJ_TYPE.POBJ_DEVICE:
            raise PviError(12009, self)          
        super().__init__( parent, T_POBJ_TYPE.POBJ_STATION, name, **objectDescriptor)

    def __repr__(self):
        return f"Station( 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

device object

required
name

name of station in PVI hierarchy

required
objectDescriptor

ANSL : '' INA2000 : '' SNMP : MAC address, e.g. CD="/CN=00-60-65-02-f0-2c"

{}
Source code in pvi\Station.py
35
36
37
38
39
40
41
42
43
44
45
46
47
def __init__( self, parent : PviObject, name : str, **objectDescriptor: Union[str,int, float] ):
    '''
    Args:
        parent : device object  
        name : name of station in PVI hierarchy
        objectDescriptor :
            ANSL : ''
            INA2000 : ''
            SNMP : MAC address, e.g. CD="/CN=00-60-65-02-f0-2c"
    '''
    if parent.type != T_POBJ_TYPE.POBJ_DEVICE:
        raise PviError(12009, self)          
    super().__init__( parent, T_POBJ_TYPE.POBJ_STATION, 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\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)