FB_DBRecordSelect
Mit dem Funktionsbaustein FB_DBRecordSelect können einzelne Datensätze mit beliebiger Struktur aus einer Datenbank ausgelesen werden.
Dieser Funktionsbaustein ist nicht kompatibel mit ASCII-Files.
VAR_INPUT
VAR_INPUT
sNetID : T_AmsNetID;
hDBID : UDINT;
sSelectCmd : T_MaxString;
nRecordIndex : UDINT;
cbRecordSize : 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.
sSelectCmd : Gibt den SELECT-Befehl an der ausgeführt werden soll.
nRecordIndex : Gibt den Index des zu lesenden Datensatzes an.
cbRecordSize : Gibt die Größe eines Datensatzes in Byte an.
pDestAddr : Gibt die Adresse der Struktur an in die der Datensatz 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 ein Datensatz gelesen werden soll, folgende Struktur besitzt...
Spaltenname | Datentyp |
---|---|
ID | bigint |
Timestamp | datetime |
Name | ntext |
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;
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;
Dummy : BYTE;
END_STRUCT
END_TYPE
PROGRAM MAIN
VAR
FB_DBRecordSelect1 : FB_DBRecordSelect;
cmd : T_Maxstring := 'SELECT * FROM myTable';
(* Unter ARM*)
(*cmd : T_Maxstring := 'SELECT ID,Timestamp,Value,Name FROM myTable'*)
(*----------*)
record : ST_Record;
busy : BOOL;
err : BOOL;
errid : UDINT;
recAnz : DINT;
END_VAR
SPS-Program
FB_DBRecordSelect1(
sNetID:= ,
hDBID:= 2,
sSelectCmd:= cmd,
nRecordIndex:= 0,
cbRecordSize:= SIZEOF(record),
pDestAddr:= ADR(record),
bExecute:= TRUE,
tTimeout:= T#15s,
bBusy=> busy,
bError=> err,
nErrID=> errid,
nRecords=> recAnz);
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 | PC oder CX (x86) | TcDatabase.Lib |
TwinCAT v2.10.0 | CX (ARM) |