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: 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 steigender Flanke wird das Kommando ausgeführt.
tTimeout: Gibt die Zeit bis zum Abbruch 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 ist, 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, die nachfolgende Struktur besitzt, muss eine SPS-Struktur erstellt werden, die einen vergleichbaren Aufbau besitzt.
Tabelle:
Spaltenname | Datentyp |
---|---|
ID | Bigint |
Timestamp | datetime |
Name | Ntext |
Value | Float |
Struktur:
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 aufgrund 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-Programm
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 v3.0.0 |
PC oder CX (x86) |
Tc2_Database |