FB_DBRecordSelect

FB_DBRecordSelect 1:

The FB_DBRecordSelect allows individual data records to be read from a database.
This function block is not compatible with 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                    : Is a string containing the AMS network identifier of the target device to which the ADS command is directed.

hDBID                     : Indicates the ID of the database to be used.

sSelectCmd         : Indicates which SELECT command is to be executed.

nRecordIndex     : Gives the index of the data record that is to be read.

cbRecordSize     : Provides the size of a data record in bytes.

pDestAddr           : Provides the address of the structure into which the data record is to be written.

bExecute          : The command is executed with the rising edge.

tTimeout              : States the time before the function is cancelled.

VAR_OUTPUT

VAR_OUTPUT
    bBusy       : BOOL;
    bError      : BOOL;
    nErrID      : UDINT;
    sSQLState   : ST_DBSQLError;
    nRecords    : UDINT;
END_VAR

bBusy          : The command is in the process of being transmitted by ADS. No new command will be accepted if "bBusy" remains TRUE.

bError          : Becomes TRUE, as soon as an error occurs.

nErrID          : Supplies the ADS Error Code or the TcDatabaseSrv_Error_Codes when the bError output is set.

sSQLState  : Supplies the SQL error code of the specified database type.

nRecords    : Returns the number of data records.

Example in ST:

Because the table out of which a data record is to be read has the following structure...

Column name

Data type

ID

bigint

Timestamp

datetime

Name

ntext

Value

float

... a PLC structure must be created having a comparable structure.

TYPE ST_Record :
STRUCT
    ID         : T_ULARGE_INTEGER;
    Timestamp  : DT;
    Name       : STRING;
    VALUE      : LREAL;
END_STRUCT
END_TYPE

To get the data type T_ULARGE_INTEGER, you have to add the library TcUtilities.lib to the PLC-Program

For ARM - processors the order of the data types is different and you have to add a "Dummy-BYTE" to the struct because of the different byte alignment at ARM - processors.

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';
    (*FOR ARM *)
    (*cmd           : T_Maxstring   := 'SELECT ID,Timestamp,Value,Name FROM myTable';*)
    (*--------*)
    record          : ST_Record;
    busy            : BOOL;
    err             : BOOL;
    errid           : UDINT;
    recAnz          : DINT;
END_VAR

PLC 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);

Requirements

Development environment

Target system type

PLC libraries to be linked

TwinCAT v2.10.0

PC or CX (x86)

TcDatabase.Lib

TwinCAT v2.10.0

CX (ARM)