HSL2.0 - Einrichtung und Erste Schritte
Inhalt
1.
Python-Version
2.
Voraussetzungen
3.
Erstellung eines Bausteins
3.1.
Einrichtung des Frameworks
3.2.
Definition
3.3.
Generierung
4.
Test eines Bausteins
4.1.
Durchführung eines Tests
4.1.1.
Test des Beispiel-Bausteins
4.1.2.
Allgemeines zu Baustein-Tests
Eine kurze Zusammenfassung, wie man das HSL 2.0-Framework einrichtet und zu ersten Ergebnissen gelangt.

## 1.Python-Version

Informationen und Download siehe folgenden Link.
Hinweis
Beim Klicken auf einen der folgenden Links verlassen Sie diese Dokumentation!

- www.python.org - Version 2.6.6
- www.python.org - Version 2.7.9

Achtung
Das Framework wurde mit den Python-Versionen 2.6.6 und 2.7.9 entwickelt und getestet und ist nur für die Verwendung mit diesen Versionen freigegeben!

## 2.Voraussetzungen

- Sie haben eine Python-Version (v2.6.x oder v2.7.x) installiert und so eingerichtet, dass Sie die python.exe-Datei von überall aufrufen können. Eine Anleitung dazu finden Sie auf den Internet-Hilfe-Seiten von python.org.
- Sie haben mindestens die Version 4.5 des Experten und der Firmware installiert.
  - Für Experte/FW Version 4.5 wird nur Python Version 2.6.x unterstützt!
  - Für Experte/FW Version ab 4.6 wird nur Python Version 2.7.x unterstützt!
- Sie haben einen Editor zur Verfügung, mit dem Dateien im ".py" (Python-Script) und ".xml"-Format bearbeitet werden können.

## 3.Erstellung eines Bausteins

Dieses Dokument erklärt die Einrichtung des HSL 2.0-Framework anhand der Erzeugung eines Bausteins am Beispiel des bereits aus dem HS/FS bekannten Binär-Auslösers.
Hinweis
Der fertige Baustein liegt den Beispielen bei.

### 3.1.Einrichtung des Frameworks

Sie haben eine Kopie des HSL 2.0 Frameworks vorliegen.
Es besteht aus mehreren Dateien und 3 Unterverzeichnissen:

`generator.pyc create_project.pyc /projects /hsl20 /python26`

Das Verzeichnis `projects` ist leer, im Verzeichnis `hsl20` befinden sich die Quell-Dateien des Frameworks.
Die zwei direkt im Verzeichnis liegenden Dateien (die Tools), liegen in einer mit Python 2.7.x kompatiblen Version vor.
Achtung
Falls Sie mit Experte/FW 4.5 oder 4.6 arbeiten, ersetzen Sie bitte diese Dateien mit den Versionen aus dem `python26`-Verzeichnis, bevor Sie fortfahren.
Rufen Sie nun das Einrichtungs-Script mit dem Parameter "-auto" auf.
`python create_project.pyc -auto`
Im Verzeichnis `projects` wurde ein neues Verzeichnis namens `my project` erzeugt.
In diesem Verzeichnis wurden wiederum einige Unterverzeichnisse angelegt und eine Datei wurde neu erstellt:
Verzeichnisse:

`debug release src`

Datei:

`config.xml`

Die Datei config.xml ist die Definitions-Datei für Ihren Baustein.
Die Beschreibungen der einzelnen Parameter und Werte der Datei config.xml finden Sie in der Doku zur XML-Definitionsdatei.

### 3.2.Definition

Tragen Sie in der Datei config.xml folgende Daten zum Baustein ein:

- `category="hsl20\fw_examples"`
  Menü-Struktur im GLE.
- `context="hsl20_fw_examples"`
  Kontext des Bausteins.
- `id="10700"`
  5-stellige Baustein-ID.
- `name="Binary_Trigger"`
  Name im GLE und Teil des Dateinamens.
- `version="1.0"`
  Versions-Nr des Bausteins.

Der Binär-Auslöser verfügt nur über einen Eingang. Geben Sie folgende Attribute dafür an:

- `type="number"`
  Datentyp. Ist immer entweder "number" oder "string".
- `const_name="input"`
  Name des Eingangs, wie er im Python-Script verwendet werden soll.
- `init_value="0"`
  Wert, mit dem der Eingang vorbelegt sein soll.
- Der Inhalt des input-Elements ist die Beschriftung des Eingangs im Baustein und wird auf "`I1`" gesetzt.

Gehen Sie analog dazu für die beiden Ausgänge vor:
Ausgang 1:

- `type="number"`
- `const_name="not_equal_to_zero"`
- `init_value="0"`
- Der Inhalt des output-Elements ist die Beschriftung des 1. Ausgangs im Baustein und wird auf "`O1 (I1<>0)`" gesetzt.

Ausgang 2:

- `type="number"`
- `const_name="equal_to_zero"`
- `init_value="0"`
- Der Inhalt des output-Elements ist die Beschriftung des 2. Ausgangs im Baustein und wird auf "`O2 (I1=0)`" gesetzt.

Das Ergebnis sollte nun so aussehen:

    01 <?xml version="1.0" encoding="UTF-8"?>
    02 <config>
    03    <modules>
    04       <module category="hsl20\fw_examples" context="hsl20_fw_examples" id="10700" name="Binary_Trigger" version="1.0">
    05           <inputs>
    06               <input type="number" const_name="input" init_value="0">I1</input>
    07           </inputs>
    08           <outputs>
    09               <output type="number" const_name="not_equal_to_zero" init_value="0">O1 (I1<>0)</output>
    10               <output type="number" const_name="equal_to_zero"     init_value="0">O2 (I1=0)</output>
    11           </outputs>
    12       </module>
    13    </modules>
    14 </config>

Damit ist die Definition Ihres Bausteins vollständig.

### 3.3.Generierung

Speichern Sie die Datei config.xml und rufen Sie den HSL 2.0-Generator auf.
`python generator.pyc "my project" UTF-8`
Der HSL 2.0-Generator erzeugt beim ersten Aufruf für jeden in der Datei config.xml definierten Baustein einige Dateien im Testverzeichnis der Projektstruktur.

- Eine Datei `[id]_[Name].py` im Verzeichnis `src`
- Eine Datei `[id]_[Name].py` im Verzeichnis `debug`
- Eine Datei `[id]_[Name].hsl` im Verzeichnis `release`

Für unseren Binär-Auslöser sind das:

- 10700_Binary_Trigger.py im Verzeichnis `src`
- 10700_Binary_Trigger.py im Verzeichnis `debug`
- 10700_Binary_Trigger.hsl im Verzeichnis `release`

Bei allen weiteren Aufrufen des Generators werden die Dateien in den Verzeichnissen `debug` und `release` komplett, die Datei(en) im `src`-Verzeichnis teilweise neu generiert.
Achtung
Bei Fehlern im Code kann es dazu kommen, dass `generator.pyc` eine leere Datei (0 bytes groß) im `src`-Verzeichnis erzeugt. In diesem Fall löschen Sie bitte diese Datei.
Da der Baustein weder remanent ist, noch bei Initialisierung der Logik feuert, besteht der gesamte selbst zu programmierende Python-Code aus folgenden Zeilen:

    def on_input_value(self, index, value):
          if self._get_input_value(index) != 0:
              self._set_output_value(self.PIN_O_UNGLEICH_NULL, 1)
          else:
              self._set_output_value(self.PIN_O_GLEICH_NULL, 1)

Achtung
Nach Abschluß der Programmierarbeiten muss der Baustein ein letztes Mal neu generiert werden!
Ein HSL 2.0-Baustein hat als Basis immer die Klasse BaseModule. Über die Methode _get_framework() erhält man Zugriff auf das restliche Framework.

## 4.Test eines Bausteins

### 4.1.Durchführung eines Tests

#### 4.1.1.Test des Beispiel-Bausteins

Nach der erfolgreichen Generierung des Bausteins gehen Sie wie folgt vor:

- Falls der HS/FS Experte läuft, beenden Sie ihn
- Kopieren Sie den erstellten Baustein `projects\my project\release\10700_Binary_Trigger.hsl` in das "logic"-Verzeichnis Ihrer Experte-Installation.
- Starten Sie den HS/FS Experten neu!
  - Im GLE haben Sie nun im Zugriff auf den neuen Baustein unter `hsl20\fw_examples\Binary_Trigger`". Sie können Ihn auf dieselbe Art wie jeden anderen Baustein verwenden.
- Übertragen Sie das Projekt auf den HS/FS

#### 4.1.2.Allgemeines zu Baustein-Tests

Die empfohle Methode für den Test von noch in der Entwicklung befindlichen Bausteinen ist die Verwendung der dem Experte-Setup beigefügten ".iso"-Datei, mit der Sie einen HS in einer Virtuelle Maschine simulieren können, da die jeweils nach einer Änderung notwendige Neu-Übertragung des Experte-Projekts nur wenige Sekunden benötigt.
Ist der Baustein prinzipiell fertig, können intensivere Tests mittels eines "normalen" HS/FS durch Verwendung des GLE-Debuggers vorgenommen werden.
Näheres zum "HS als VM" und zum "GLE-Debugger" finden Sie in der HTML-Hilfe des HS/FS Experte.