Protokolle für den Datenaustausch

Zusätzlich zum Konfigurieren der Hilscher card muss auch sichergestellt werden, dass die speicherprogrammierbare Steuerung (SPS) ordnungsgemäß konfiguriert ist. Sie muss zum Senden und Empfangen von Daten in einer vordefinierten Struktur eingerichtet sein, die von MERLIC gefordert und erwartet wird. Werden die Daten nicht in der erforderlichen Struktur übertragen, kann MERLIC oder die SPS die Daten nicht ordnungsgemäß verarbeiten. Die erforderliche Struktur für den Datenaustausch ist in den folgenden Protokollen definiert:

  • FromMerlicProtocol
  • FromPLCProtocol

Sie definieren die übertragenen Informationen zusammen mit den jeweiligen Datentypen.

Um eine Kommunikation zwischen MERLIC und der Hilscher card einzurichten, müssen auch die verfügbaren internen Zustände von MERLIC im Prozessintegrationsmodus und die verfügbaren Befehle, z. B. zum Starten einer Einzelausführung, berücksichtigt werden. Diese Informationen sind erforderlich, um den Kommunikationsprozess für die Prozessintegration ordnungsgemäß zu konfigurieren. Weitere Informationen finden Sie unter MERLIC-Zustände und Befehle (Hilscher).

Werden Daten als ganzes Speicher-Array ausgetauscht, z. B. durch Definieren von Datenstrukturdeklarationen, werden bei einigen SPS standardmäßig Füllbytes zwischen den Elementen der Strukturdeklarationen hinzugefügt.

FromPLCProtocol

Dieses Protokoll definiert die erwartete Struktur der Daten, die von der SPS an MERLIC gesendet werden. Der folgende Codeblock veranschaulicht, in welcher Reihenfolge und als welche Datentypen die Daten von der SPS erwartet und von MERLIC interpretiert werden.

Kopieren
TYPE FromPLCProtocol :
STRUCT
    Preamble : BYTE;
    CommandCode : WORD;
    Selector : DINT;
END_STRUCT
END_TYPE

Die folgende Tabelle beschreibt die jeweiligen Elemente, die in diesem Protokoll erforderlich sind.

Element

Beschreibung

Offset

Größe in Byte

Preamble

Präambel, die definiert, wo die Daten des eigentlichen Protokolls beginnen. MERLIC erwartet den Wert 17.

0

1

CommandCode

Code des Befehls, dessen Ausführung die SPS von MERLIC anfordert. Weitere Informationen zu Befehlen finden Sie unter Befehle (Hilscher).

1

2

Selector

Möglicher Parameter für einen Befehl. Er wird derzeit zusammen mit den Befehlen „PrepareRecipe“ und „GetResult“ verwendet, um eine Rezept-ID bzw. eine Ergebnis-ID zu übergeben.

3

4

FromMerlicProtocol

Dieses Protokoll definiert die Struktur der Daten, die von MERLIC an die SPS gesendet werden. Der folgende Codeblock veranschaulicht, in welcher Reihenfolge und als welche Datentypen die Daten von MERLIC gesendet werden.

Kopieren
TYPE FromMerlicProtocol :
STRUCT
    Preamble : BYTE;
    VersionMajor : USINT;
    VersionMinor : USINT;
    RecipeId : INT;
    CommandCode : WORD;
    ActionResponse : WORD;
    CurrentState : WORD;
    LastResultId : UDINT;
    LastStartedJobId : UDINT;
    Reserved : ARRAY[1..5] OF BYTE;
    ResultState : BYTE;
    BoolCount : USINT;
    ByteCount : USINT;
    WordCount : USINT;
    DWordCount : USINT;
    LWordCount : USINT;
    SIntCount : USINT;
    USIntCount : USINT;
    IntCount : 0USINT;
    UIntCount : USINT;
    DIntCount : USINT;
    UDIntCount : USINT;
    LIntCount : USINT;
    ULIntCount : USINT;
    RealCount : USINT;
    LRealCount : USINT;
    TimeCount : USINT;
    TimeOfDayCount : USINT;
    LTimeCount : USINT;
    DateCount : USINT;
    DateAndTimeCount : USINT;
    Str80Count: USINT;
    TotalResultCount : UINT;
    // For each transmitted result, the data integrity
    // and value is returned.
    // They are assigned by their index i.
    DataIntegrity{i} : BYTE;
    Result{i} : VALUE_TYPE;
    DataIntegrity{i+1} : BYTE;
    Result{i+1} : VALUE_TYPE;
    ...
END_STRUCT
END_TYPE

Die folgende Tabelle beschreibt die jeweiligen Elemente, die in diesem Protokoll erforderlich sind.

Member

Beschreibung

Offset

Größe in Byte

Preamble

Präambel, die definiert, wo die Daten des eigentlichen Protokolls beginnen. Der Standardwert wird von MERLIC auf 17 eingestellt.

0

1

VersionMajor

Hauptversionsnummer des Protokolls.

1

1

VersionMinor

Nebenversionsnummer des Protokolls.

2

1

RecipeId

ID des geladenen Rezepts.

3

2

CommandCode

Befehlscode, der von MERLIC an die SPS zurückgegeben wird, um zu bestätigen, dass ein Befehl gelesen wurde.

5

2

ActionResponse

Antwort auf den angeforderten Befehl. Weitere Informationen zu den möglichen Werten finden Sie im Abschnitt ActionResponse.

7

2

CurrentState

Der aktuelle Zustand von MERLIC. Weitere Informationen zum unterstützten Zustand finden Sie unter MERLIC-Zustände.

9

2

LastResultId

ID des vollständigen Ergebnissatzes, der in der letzten Iteration einer MVApp berechnet wurde. Die ID beginnt bei 0 und wird für jedes Ergebnis erhöht.

11

4

LastStartedJobId

ID des letzten gestarteten Jobs im Typ UDINT.

15

4

Reserved

Für die zukünftige Verwendung reserviert.

19

5

ResultState

Status der abgefragten Ergebnisdaten. Dieser wird bei jeder Ergebnisabfrage festgelegt. Die folgenden Werte für „ResultState“ sind möglich:

  • 0 (Undefined)
  • 1 (Completed): Die Verarbeitung wurde erfolgreich durchgeführt.
  • 2 (Processing): Die Verarbeitung wurde noch nicht beendet.
  • 3 (Aborted): Die Verarbeitung wurde an einer Stelle vor deren Abschluss angehalten.
  • 4 (Failed): Die Verarbeitung ist fehlgeschlagen.

24

1

BoolCount

Anzahl der booleschen Ergebnisse, die an die SPS übertragen werden.

25

1

ByteCount

Anzahl der BYTE-Ergebnisse, die an die SPS übertragen werden.

26

1

WordCount

Anzahl der WORD-Ergebnisse, die an die SPS übertragen werden.

27

1

DWordCount

Anzahl der DWORD-Ergebnisse, die an die SPS übertragen werden.

28

1

LWordCount

Anzahl der LWORD-Ergebnisse, die an die SPS übertragen werden.

29

1

SIntCount

Anzahl der SINT-Ergebnisse, die an die SPS übertragen werden.

30

1

USIntCount

Anzahl der USINT-Ergebnisse, die an die SPS übertragen werden.

31

1

IntCount

Anzahl der INT-Ergebnisse, die an die SPS übertragen werden.

32

1

UIntCount

Anzahl der UINT-Ergebnisse, die an die SPS übertragen werden.

33

1

DIntCount

Anzahl der DINT-Ergebnisse, die an die SPS übertragen werden.

34

1

UDIntCount

Anzahl der UDINT-Ergebnisse, die an die SPS übertragen werden.

35

1

LIntCount

Anzahl der LINT-Ergebnisse, die an die SPS übertragen werden.

36

1

ULIntCount

Anzahl der ULINT-Ergebnisse, die an die SPS übertragen werden.

37

1

RealCount

Anzahl der REAL-Ergebnisse, die an die SPS übertragen werden.

38

1

LRealCount

Anzahl der LREAL-Ergebnisse, die an die SPS übertragen werden.

39

1

TimeCount

Anzahl der TIME-Ergebnisse, die an die SPS übertragen werden.

40

1

TimeOfDayCount

Anzahl der TIME_OF_DAY-Ergebnisse, die an die SPS übertragen werden.

41

1

LTimeCount

Anzahl der LTIME-Ergebnisse, die an die SPS übertragen werden.

42

1

DateCount

Anzahl der DATE-Ergebnisse, die an die SPS übertragen werden.

43

1

DateAndTimeCount

Anzahl der DATE_AND_TIME-Ergebnisse, die an die SPS übertragen werden.

44

1

Str80Count

Anzahl der STRING_80-Ergebnisse, die an die SPS übertragen werden.

45

1

TotalResultCount

Anzahl aller Ergebnisse, die an die SPS übertragen werden.

46

2

DataIntegrity{i}

Informationen zur Gültigkeit und zu möglichen Konvertierungsfehlern des Ergebnisses mit dem Index i. Der Index i beginnt bei 0 und bezieht sich auf den Ergebniswert des i-ten MVApp-Ergebnisses, das für die angeforderte „LastResultId“ ausgegeben wurde.

Die Ergebnisse werden in der oben beschriebenen Reihenfolge in das Protokoll übertragen. Beispielsweise werden zuerst alle Ergebnisse des Typs Boolean ausgegeben, dann alle BYTE-Ergebnisse usw.

Weitere Informationen zur Bedeutung der einzelnen Bits finden Sie im Abschnitt Byteinformationen für DataIntegrity.

48

1

Result{i}

Wert des übertragenen Ergebnisses mit dem Index i. Der Index i beginnt bei 0 und bezieht sich auf das i-te MVApp-Ergebnis, das für die angeforderte „LastResultId“ ausgegeben wurde.

Die Ergebnisse werden in der oben beschriebenen Reihenfolge in das Protokoll übertragen. Beispielsweise werden zuerst alle Ergebnisse des Typs Boolean ausgegeben, dann alle BYTE-Ergebnisse usw.

 

 

ActionResponse

In der folgenden Tabelle sind alle möglichen Werte für das ActionResponse-Element aufgelistet.

Wert

ActionResponse

Beschreibung

0x0000

Unknown

Die Antwort ist unbekannt, z. B. wenn noch kein Befehl ausgeführt wurde.

0x0001

Success

Der Befehl wurde erfolgreich verarbeitet.

0x1110

InternalError

Es ist ein schwerwiegender Fehler aufgetreten, der zu einem inkonsistenten internen Zustand des Erkennungssystems geführt hat. Das Erkennungssystem muss neu gestartet werden.

0x1134

RecipeUnpreparationFailed

Die Anwendung konnte nicht entladen werden; das System konnte den Initialisierungszustand nicht wiederherstellen.

0x2113

NotImplemented

Der Befehl wird nicht unterstützt.

0x2116

AcquisitionDeviceLost

Das Bildeinzugsgerät, d. h. die Kamera oder das Bilddateiverzeichnis, ist nicht vorhanden.

0x2130

UserAccessDenied

Der angeforderte Befehl konnte nicht ausgeführt werden, weil der Aufrufer derzeit nicht dazu berechtigt ist.

0x2133

RecipePreparationFailed

Die in der Rezeptdatei angegebene Anwendung konnte nicht geladen werden.

0x2135

ResponsePromiseBroken

Der Status des angeforderten Befehls ist unbekannt und wird zukünftig nicht festgelegt.

0x2138

AcquisitionConflictingTimeout

Das Zeitlimit für den Bildeinzug wurde teilweise überschritten. In einer Einrichtung mit mehreren Kameras wurde der Bildeinzug von einigen Kameras mit Hardwaretrigger erfolgreich durchgeführt, während beim Bildeinzug von anderen Kameras ein Timeout aufgetreten ist, sodass nicht gewährleistet ist, dass die Bildpuffer aller Kameras einen konsistenten Zustand aufweisen.

0x2139

AcquisitionError

Der Bildeinzug ist fehlgeschlagen.

0x2175

UnknownRecipeId

Die angegebene Rezept-ID ist unbekannt.

0x2236

DataflowError

Der in der angeforderten Rezeptdatei angegebene Datenfluss der Anwendung weist Blockierungen oder laufzeitbedingte Konflikte auf.

0x2801

MessageTooSmall

Es ist nicht genügend Speicherplatz für die Übertragung der Nachricht verfügbar.

0x4131

ActionRejected

Die angeforderte Aktion ist im aktuellen Zustand des Erkennungssystems nicht zulässig.

0x4132

ActionSuperseded

Die angeforderte Aktion wird nicht wie erwartet beendet, da sie durch eine andere Aktion ersetzt wurde, die Vorrang hat.

0x4137

AcquisitionTimeout

Das Zeitlimit für den Bildeinzug wurde überschritten. Dies kann beispielsweise vorkommen, wenn eine Kamera mit Hardwaretrigger das Triggersignal nicht im angegebenen grab_timeout-Intervall empfangen hat oder die Verbindung zu einer Kamera während des Einzugs unterbrochen wurde.

0x4176

UnknownResultId

Die angegebene Ergebnis-ID ist unbekannt. Das entsprechende Ergebnis wurde möglicherweise aus dem Ringpuffer des Ergebnisspeichers gelöscht und ist nicht mehr verfügbar.

0x4296

IncompatibleParameters

Das angegebene Jobparametertupel passt nicht zur Rezeptschnittstelle, weil die Anzahl der Tupelelemente beispielsweise nicht mit der Anzahl der Rezeptwerte übereinstimmt oder die Konvertierung der Tupelelemente in den Datentyp des jeweiligen Rezeptwerts verlustbehaftet ist.

Byteinformationen für DataIntegrity

Das Byte, das für das Element DataIntegrity übertragen wird, enthält verschiedene Informationen zum Wert eines bestimmten Ergebnisses. Die ersten beiden Bits geben an, ob der Wert gültig und ob überhaupt ein Wert enthalten ist.

Bit

Name

Beschreibung

0

Gültigkeit

Dieses Bit ist auf 1 gesetzt, wenn der Wert gültig ist, andernfalls auf 0.

1

Wert der letzten Iteration

Dieses Bit ist auf 1 gesetzt, wenn der Wert in der letzten Iteration der MVApp ermittelt wurde. Wenn der Wert nicht in der letzten Iteration berechnet wurde (Parameter z. B. in einem inaktiven Zweig), ist dieses Bit auf 0 gesetzt.

Die folgenden Bits enthalten Informationen zu möglichen Konvertierungsfehlern.

Bit

Name

Beschreibung

2

Leerer Wert

Dieses Bit ist auf 1 gesetzt, wenn der Wert leer ist, andernfalls auf 0.

3

Verlustbehaftete Konvertierung

Dieses Bit ist auf 1 gesetzt, wenn bei der Konvertierung des Werts Informationen verloren gegangen sind, andernfalls auf 0.

4

Mehrere Werte

Dieses Bit ist auf 1 gesetzt, wenn das Ergebnis mehrere Werte enthält, andernfalls auf 0. Dieses Bit ist reserviert, da mehrere Werte derzeit nicht unterstützt werden.

5

Konvertierbarkeit

Dieses Bit ist auf 1 gesetzt, wenn der Typ des Ergebniswerts nicht in den Datentyp konvertiert werden kann, der für das jeweilige MVApp-Ergebnis ausgewählt wurde, andernfalls auf 0.

6

Außerhalb des Bereichs

Dieses Bit ist auf 1 gesetzt, wenn der Wert nicht im zulässigen Bereich liegt, der für das jeweilige MVApp-Ergebnis ausgewählt wurde, andernfalls auf 0.

7

Zeichenfolge zu lang

Dieses Bit ist auf 1 gesetzt, wenn der Wert eine Zeichenfolge darstellt, die zu lang ist, andernfalls auf 0.