FB_DBRecordSelect
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: String containing the AMS network ID of the target device, at 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: Indicates the address of the structure to which the record is to be written.
bExecute: The command is executed with a rising edge.
tTimeout: Indicates 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 as long as bBusy remains TRUE.
bError: Becomes TRUE, as soon as an error occurs.
nErrID: Returns the ADS error code or TcDatabaseSrv_Error_Codes if the bError output is set.
sSQLState: Returns the SQL error code of the corresponding database type
nRecords: Returns the number of data records.
Example in ST:
Since the table, from which the records are to be read, has the structure below, a PLC structure with a similar structure must be created.
Table:
Column name |
Data type |
---|---|
ID |
Bigint |
Timestamp |
datetime |
Name |
Ntext |
Value |
Float |
Structure:
TYPE ST_Record :
STRUCT
ID : T_ULARGE_INTEGER;
Timestamp: DT;
Name : STRING;
VALUE : LREAL;
END_STRUCT
END_TYPE
The library TcUtilities.lib must be integrated in order to be able to use the data type T_ULARGE_INTEGER.
For ARM processors the data types have to be arranged differently due to the byte alignment, and a "dummy BYTE" has to be added.
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
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 v3.0.0 |
PC or CX (x86) |
Tc2_Database |