Beispielprogramm 3 (LookUp-Tabelle schreiben)
Download TwinCAT 3 Projekt: Programlink
Programmbeschreibung/ Funktion:
Übertragung von LookUp-Tabellenstützwerten per CoE‑Zugiff in die Klemme für die Abbildung einer Funktion f(x) = x3.
Variablendeklaration Beispielprogramm 3
PROGRAM MAIN
VAR
//LookUp-Table (LUT) generated by: MBE * x³
aLUT:ARRAY[0..99] OF DINT :=
[
-7812500,-7812500,-7493593,-6894382,
-7174765,-6051169,-6855859,-5279674,-6536953,-4576709,
-6218125,-3939087,-5899218,-3363620,-5580390,-2847120,
-5261484,-2386402,-4942578,-1978275,-4623750,-1619555,
-4304843,-1307052,-3985937,-1037580,-3667109,-807951,
-3348203,-614978,-3029375,-455472,-2710468,-326248,
-2391562,-224117,-2072734,-145892,-1753828,-88385,
-1434921,-48409,-1116093,-22776,-797187,-8300,
-478281,-1792,-159453,-66,159453,66,
478281,1792,797187,8300,1116093,22776,
1434921,48409,1753828,88385,2072734,145892,
2391562,224117,2710468,326248,3029375,455472,
3348203,614978,3667109,807951,3985937,1037580,
4304843,1307052,4623750,1619555,4942578,1978275,
5261484,2386402,5580390,2847120,5899218,3363620,
6218125,3939087,6536953,4576709,6855859,5279674,
7174765,6051169,7493593,6894382,7812500,7812500
];
// For CoE 0x8000 and 0x8005 - write values:
// ===============================================
wCoEIndexScaler :WORD := 16#8005; // CoE Index
wState :BYTE := 0; // Write status
fb_coe_writeEx :FB_EcCoESdoWriteEx; // Function Block for writing in CoE
userNetId :T_AmsNetId := '172.128.1.1.5.1'; // Have to be entered
userSlaveAddr :UINT := 1003; // Have to be entered
bWriteLUT2CoE :BOOL:=FALSE; // Sign for start writing
bError :BOOL:=FALSE; // Sign for any error
END_VAR
Anmerkungen:
- Die Variable „startWrite“ (BOOL) wird bereits in Beispielprogramm 4 ebenfalls deklariert.
- Die Variable ‚userNetId‘ muss die Geräte-EtherCAT-Netz ID enthalten. Diese ist über den Karteireiter „EtherCAT“ bei Auswahl von „Device (EtherCAT)“ einsehbar.
- Die Variable „userSlaveAddr” muss die EtherCAT-Adresse der Klemme enthalten.
Beispielprogramm zur Übertragung der LookUp-Tabelle:
Ausführungsteil:
// Example program 3:
// ###### Write Lookup-Table in CoE Objekt 0x8005: #######
IF bWriteLUT2CoE THEN
CASE wState OF
0:
fb_coe_writeEx(bExecute := FALSE);// Prepare CoE-Access
wState := wState + 1;// Next state
1:
// Write 100 X/Y LookUp-Table entries
fb_coe_writeEx(
sNetId:= userNetId,
nSlaveAddr:= userSlaveAddr,
nSubIndex:= 1,
nIndex:= wCoEIndexScaler,
pSrcBuf:= ADR(aLUT),
cbBufLen:= SIZEOF(aLUT),
bCompleteAccess:= TRUE,
bExecute:= TRUE
);
wState := wState + 1; // Next state
2:
// Proceed with writing to CoE
fb_coe_writeEx();
IF NOT fb_coe_writeEx.bBusy THEN
wState := 0;// Done
bWriteLUT2CoE := FALSE;
bError := fb_coe_writeEx.bError; // See nErrId if TRUE
END_IF
END_CASE
END_IF
Durch eine einfache Variablen-Abfrage z.B. von einem Taster, der mit bEnable verknüpft ist kann die Übertragung in Gang gesetzt werden. Dafür ist die Variablendeklaration:
VAR_INPUT
bEnable AT%I* :BOOL;
END_VAR
sowie die folgenden Programmzeilen erforderlich:
IF bEnable AND NOT startWrite THEN
bWriteLUT2CoE := TRUE;
END_IF