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 : 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) |