Zum Hauptinhalt springen

TLP — Target-Link-Protokoll — Standard Protokoll

Falls für Ihre Steuerung noch keine Bibliothek zur Verfügung steht, können Sie das Protokoll zwischen Steuerung und Connector anhand der folgenden Dokumentation nachbilden. Kontaktieren Sie uns vorher, da wir stetig Bibliotheken für weitere Steuerungen entwickeln.

Standard Protokoll

Mit jeder SQL-Anfrage an die Datenbank werden dem Connector vorab Informationen mitgesendet.

Anfrage an Connector

AttributDatentypBeschreibungDefault
MRPNullterminierter StringMax Return Parameter
<MRP Value>Nullterminierter StringMinimum 1Nicht optional
MRNullterminierter StringMax Rows
<MR Value>Nullterminierter StringMinimum 1Nicht optional
MCNullterminierter StringMax Columns
<MC Value>Nullterminierter StringMinimum 1Nicht optional
MSNullterminierter StringMax String
<MS Value>Nullterminierter StringMinimum 1Nicht optional
MBNullterminierter StringMax Buffer
<MB Value>Nullterminierter StringMaximale Datenmenge in Byte, welche die Steuerung einlesen kannNicht aktiv
CTNullterminierter StringConnector Timeout
<CT Value>Nullterminierter String0 = kein Timeout, Verbindung bleibt offen, >0 = Timeout in SekundenNicht aktiv
CNNullterminierter StringColumn Names
<CN Value>Nullterminierter String0 = keine Spaltennamen, 1 = Spaltennamen (default 1)1
CSNullterminierter StringCut String
<CS Value>Nullterminierter StringString jedes einzelnen Wertes wird auf die Länge CS gekürztNicht aktiv
SNullterminierter StringString (SQL Request)
<S Value>Nullterminierter StringMinimum 1 ZeichenNicht optional
TNullterminierter StringTransmit Request
<MRP><NUL><MRP Value><NUL>Maximale Anzahl der Return-Parameter, welche in der Steuerung gespeichert werden können
<MR><NUL><MR Value><NUL>Maximale Anzahl der Datensätze, welche in der Steuerung gespeichert werden können
<MC><NUL><MC Value><NUL>Maximale Anzahl der Spalten, welche in der Steuerung gespeichert werden können
<MS><NUL><MS Value><NUL>Länge der Stringvariable in der Steuerung
<MB><NUL><MB Value><NUL>Maximale Datenmenge in Byte, welche die Steuerung einlesen kann (optional)
<CT><NUL><CT Value><NUL>Timeout Connector (optional)
<CN><NUL><CN Value><NUL>Eine Datenbankabfrage liefert neben den Daten auch die Spaltennamen mit oder nicht. (optional)
<CS><NUL><CS Value><NUL>Eine Datenbankabfrage liefert auch Daten, wenn die Größe eines Datenbankwerts die vorgegebene maximale Stringlänge (MS) überschreitet. Der Wert wird nach CS-Zeichen abgeschnitten und der Fehler wird ignoriert. (optional)
<S><NUL><S Value><NUL>SQL-Anfrage-String
<S><NUL><S Value><NUL>Falls der SQL-Anfrage-String für die Steuerung zu groß ist, kann er zerlegt an den Connector gesendet werden. (optional)
<T><NUL>Startbefehl, um den SQL-Anfrage-String an die Datenbank zu senden

Beispiele:

MRPNUL15NULMRNUL80NULMCNUL40NULMSNUL255NULSNULSELECT id, iParam1, fParam2, sText1 FROM tTable1NULTNUL

MRPNUL15NULMRNUL80NULMCNUL40NULMSNUL255NULCS NUL80NULCNNUL0NUL
SNULSELECT id, iParam1, fParam2, sText1 FROM tTable1NUL
SNULWHERE id < 4NUL
TNUL

Antwort vom Connector

AttributDatentypBeschreibung
RSNullterminierter StringReturn State
<RS Value>Nullterminierter String
RPNullterminierter StringReturn Parameter
<RP Value>Nullterminierter String
RRNullterminierter StringResult Rows
< RR Value>Nullterminierter String
RCNullterminierter StringResult Columns
< RC Value>Nullterminierter String
RNNullterminierter StringResult Column-Names
< RN Values>Nullterminierter String
RDNullterminierter StringResult Data
< RD Values>Nullterminierter String
<RS><NUL><RS Value><NUL>RS Value = 0: Okay, Daten folgen.
RS Value > 0: Fehlercode, es folgen keine Daten.

Bei RS Value = 0:

<RP><NUL><RP Value><NUL>RP Value = Anzahl Return-Parameter
<RR><NUL><RR Value><NUL>RR Value = Anzahl Datensätze
<RC><NUL><RC Value><NUL>RC Value = Anzahl Spalten

Nur bei RP Value > 0 folgen Return-Parameter-Daten (RPD)

RPDNUL
123NUL321NULabcNUL

Bei RC Value > 0 folgen Daten, ansonsten enthält RR Value die Anzahl der verarbeiteten Datensätze (Update, Delete…)

<RN><NUL>Gefolgt von allen Spaltennamen
<RD><NUL>Gefolgt von allen Daten

Spaltennamen (RN) werden wie folgt aufgezählt:

For iC = 1 to RC
<RN Value[iC]><NUL>
Next iC

Datenwerte (RD) werden wie folgt aufgezählt:

For iR = 1 to RR
For iC = 1 to RC
<RD Value[iR, iC]><NUL>
Next iC
Next iR

Beispiel:

RSNUL0NULRPNUL3NULRRNUL3NULRCNUL4NUL
RPDNUL
123NUL321NULabcNUL
RNNUL
idNULiParam1NULfParam2NULsText1NUL
RDNUL
1NUL501NUL10.1NULText Example 1NUL
2NUL502NUL10.2NULText Example 2NUL
3NUL503NUL10.3NULText Example 3NUL

Fehlercodes Return-Value

Fehler-NummerFehler-Beschreibung
0Kein Fehler, es folgen Daten der Abfrage
1Unbekannter SQL-Befehl
2Abfrage ergibt mehr Datensätze als mit MaxRows definiert, Abfrage anpassen oder MaxRows vergrößern
3Abfrage ergibt mehr Spalten als mit MaxColumns definiert, Abfrage anpassen oder MaxColumns vergrößern
4Abfrage gibt mehr Daten zurück als die definierte Puffergröße (nur bei Target-Typ Siemens)
Abfrage anpassen oder Buf. Size im Connector und in der Steuerung vergrößern.
5Abfrage gibt mindestens einen Wert zurück, der größer ist als mit MaxStringLength definiert, Abfrage anpassen oder MaxStringLength vergrößern
10Interner Connector-Fehler
11Interner Connector-Fehler, Datenbank kann nicht geöffnet werden
23Request-String ist leer
24Anzahl MaxRows nicht definiert
25Anzahl MaxColumns nicht definiert
29Größe MaxStringLength nicht definiert
>100Fehlernummern der ODBC-Datenbankanbindung (einige bekannte Fehlernummern sind angehängt)
40002Allgemeiner Fehler bei der SQL-Anfrage, Request-String ist ungültig

Handshake

Fehlerfreie Abfrage

Zeitdiagramm einer fehlerfreien Abfrage: xExecute steigt, xReady fällt und steigt erneut, xBusy ist während der Verarbeitung aktiv, xDone gibt einen Impuls, sobald die Abfrage abgeschlossen ist.

Abbruch während der Abfrage

Zeitdiagramm einer abgebrochenen Abfrage: xExecute steigt, xAbort wird gesetzt während xBusy aktiv ist, wodurch xReady wieder steigt, ohne dass xDone oder xError ausgelöst werden.

Fehler bei Abfrage

Zeitdiagramm einer fehlerhaften Abfrage: xExecute steigt, xBusy ist aktiv, und xError gibt einen Impuls anstelle von xDone, sobald die Verarbeitung beendet ist.