FB_DBRecordArraySelect
Mit dem Funktionsbaustein FB_DBRecordArraySelect können mehrere Datensätze mit beliebiger Struktur aus einer Datenbanken ausgelesen werden. Mit diesem Baustein können sie einen SQL SELECT Befehl mit bis zu 10000 Zeichen ausführen.
Dieser Funktionsbaustein ist nicht kompatibel mit ASCII-Files.
VAR_INPUT
VAR_INPUT
sNetID : T_AmsNetID;
hDBID : UDINT;
cbCmdSize : UDINT;
pCmdAddr : UDINT;
nStartIndex : UDINT;
nRecordCount : UDINT;
cbRecordArraySize : UDINT;
pDestAddr : DWORD;
bExecute : BOOL;
tTimeout : TIME;
END_VAR
sNetID : Ist ein String, der die AMS-Netzwerkkennung des Zielgerätes enthält, an das der ADS-Befehl gerichtet wird.
hDBID : Gibt die ID der zu verwendenden Datenbank an.
cbCmdSize : Gibt die länge des SELECT-Befehls an, der ausgeführt werden soll.
pCmdSize : Gibt die Pointer Adresse einer String Variablen mit dem auszuführenden SQL-Befehl an.
nStartIndex : Gibt den Index des ersten zu lesenden Datensatzes an.
nRecordCount : Gibt die Anzahl der zu lesenden Datensätzen an.
cbRecordArraySize : Gibt die Größe des Strukturarrays in Byte an.
pDestAddr : Gibt die Adresse des Strukturarrays an in das die Datensätze geschrieben werden soll.
bExecute : Mit der steigende Flanke wird das Kommando ausgeführt.
tTimeout : Gibt die Zeit bis zum Abbrechen der Funktion an.
VAR_OUTPUT
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
nErrID : UDINT;
sSQLState : ST_DBSQLError;
nRecords : UDINT;
END_VAR
bBusy : Kommando wird gerade per ADS übertragen. Solange bBusy auf TRUE, wird kein neues Kommando angenommen.
bError : Wird TRUE, sobald ein Fehler eintritt.
nErrID : Liefert bei einem gesetzten bError-Ausgang den ADS Error Code bzw. TcDatabaseSrv_Error_Codes.
sSQLState : Liefert den SQL - Fehlercode des entsprechenden Datenbanktyps
nRecords : Liefert die Anzahl der Datensätze.
Beispiel in ST:
Da die Tabelle, aus der Datensätze gelesen werden sollen, folgende Struktur besitzt...
Spaltenname | Datentyp |
---|---|
ID | bigint |
Timestamp | datetime |
Name | nvarchar(80) |
Value | float |
... muss eine SPS-Struktur erstellt werden, die einen vergleichbaren Aufbau besitzt.
TYPE ST_Record :
STRUCT
ID : T_ULARGE_INTEGER;
Timestamp : DT;
Name : STRING(80);
VALUE : LREAL;
END_STRUCT
END_TYPE
Um den Datentyp T_ULARGE_INTEGER verwenden zu können, muss die Bibliothek TcUtilities.lib eingebunden werden.
Bei ARM - Prozessoren müssen auf Grund des Byte-Alignment die Datentypen anders geordnet und ein "Dummy-BYTE" hinzugefügt werden.
TYPE ST_Record :
STRUCT
ID : T_ULARGE_INTEGER;
Timestamp : DT;
Value : LREAL;
Name : STRING(80);
Dummy : BYTE;
END_STRUCT
END_TYPE
PROGRAM MAIN
VAR
FB_DBRecordArraySelect1 : FB_DBRecordArraySelect;
cmd : T_Maxstring := 'SELECT * FROM myTable';
(* Unter ARM*)
(*cmd : T_Maxstring := 'SELECT ID,Timestamp,Value,Name FROM myTable'*)
(*----------*)
recordArray : ARRAY [1..5] OF ST_Record;
busy : BOOL;
err : BOOL;
errid : UDINT;
sqlstate : ST_DBSQLError;
recAnz : UDINT;
END_VAR
SPS-Program
FB_DBRecordArraySelect1(
sNetID:= ,
hDBID:= 1,
cbCmdSize:= SIZEOF(cmd),
pCmdAddr:= ADR(cmd),
nStartIndex:= 0,
nRecordCount:= 5,
cbRecordArraySize:= SIZEOF(recordArray),
pDestAddr:= ADR(recordArray),
bExecute:= TRUE,
tTimeout:= T#15s,
bBusy=> busy,
bError=> err,
nErrID=> errid,
sSQLState=> sqlstate,
nRecords=> recAnz);
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 | PC oder CX (x86) | TcDatabase.Lib |
TwinCAT v2.10.0 | CX (ARM) |