FB_DBRecordSelect

FB_DBRecordSelect 1:

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)