Semi|House Logiken erstellen

>> Logiken >> Logiken erstellen

Einen Logikblock erstellen ...

Im Folgenden wird beschrieben wie ein Logikblock erstellt werden kann. Die Definition für einen Logikblock besteht aus einem XML-File, in dem die Eigenschaften definiert werden und einem oder mehreren Python Script-Dateien, die die Funktion implementieren. Bei der Ausführung der Logiken auf dem Server werden die Python Dateien instantiiert.

Beispiel: Block zur logischen UND-Verknüpfung

Der Block zur logischen UND-Verknüpfung von Eingängen kann bis zu 16 Eingänge ver-und-en und das Ergebnis am Ausgang zur Verfügung stellen.

XML-Definition

    <BlockInfo name="und" category="Operatoren" version="1.0.0">

      <Group count="2" min_count="1" max_count="12">
        <Input id="0" text="Eingang" />
      </Group>

      <Group>
        <Output id="0" text="Ausgang" />
      </Group>

    </BlockInfo>
    

In der XML Definition werden allgemeine Eigenschaften wie Name, Kategorie und Version festgelegt.
Über das Group Tag wird eine Gruppe von Eingängen/Ausgängen definiert.Die Anzahl ist in dem definierten Bereich konfigurierbar. Jeder Eingang/Ausgang wird über eine eindeutige ID referenziert.

Python-Implementation

Das Python script muss eine Klasse enthalten, die von der Klasse logic.Block abgeleitet ist.

    import datetime

    import logic


    class And(logic.Block):

        def __init__(self):
            """
            The constructor just initializes the internal data.
            """
            pass

        def initialize(self):
            self._setup_input (input_name ="logic_input",  input_id =0, input_type=bool)
            self._setup_output(output_name="logic_output", output_id=0)

            # set a new value only if it is changed
            self.logic_output.set_when_changed = True

        def execute(self):
            result = True
            for idx in range(self.logic_input.count):
                result = result and self.logic_input[idx].value

            self.logic_output.set_value(result)
    

Die Funktion def initialize(self) wird beim Start ausgeführt. Hier kann der Block initialisiert werden.

Die Funktion def execute(self) wird ausgeführt wenn ein Eingang sich geändert hat. Hier kann wenn notwendig festgestellt werden, welcher Eingang die Ursache für die Ausführung ist.