Beispielprogramm R/W CoE

Programmbeschreibung/ Funktion:

Nach Start dieses Programmbeispiels kann durch das Setzen von TRUE der Variablen startRead oder startWrite ein Schreib- oder Lesezugriff auf das CoE Verzeichnis eines bestimmten EtherCAT-Teilnehmers erfolgen.

Hinweise:

Dieses Beispiel schreibt in das CoE Objekt 0x8000 mit dem Sub‑Index 0x16 den Wert 22 und aktiviert damit den Filter 1 mit „IIR Butterw. LP 5th Ord. 1000 Hz“ bzw. liest den internen Temperaturwert der Klemme EL3751 aus dem CoE Objekt 0x9000, Sub‑Index 0x01. Die Programmvariable für das Schreiben hat den Wert bei der Variablendeklaration bereits zugewiesen. Zur Kontrolle kann das Schreiben durch Einsehen des CoE‑Verzeichnisses und das Lesen kann zur Laufzeit durch Betrachtung der Variable für das Lesen (int16Buffer) geprüft werden.

Download: Programmlink

Vorbereitungen zum Starten des Beispielprogramms (tnzip-Datei/TwinCAT 3)

  • Nach Klick auf den Download-Button speichern Sie das Zip-Archiv lokal auf ihrer Festplatte und entpacken die *.tnzip-Archivdatei in einem temporären Ordner.
  • Beispielprogramm R/W CoE 1:
    Öffnen des *. tnzip-Archives
  • Wählen Sie die zuvor entpackte .tnzip-Datei (Beispielprogramm) aus.
  • Ein weiteres Auswahlfenster öffnet sich: wählen nun Sie das Zielverzeichnis, wo das Projekt gespeichert werden soll.
  • Die generelle Vorgehensweise für die Inbetriebnahme der PLC bzw. dem Start des Programms kann u. a. den Klemmen‑Dokumentationen oder der EtherCAT-Systemdokumentation entnommen werden.

Deklaration (ST)

PROGRAM MAIN
VAR
   fb_coe_write          : FB_EcCoESdoWrite; // Function Block for writing in CoE
   fb_coe_read           : FB_EcCoESdoRead;  // Function Block for reading from CoE
   userNetId             : T_AmsNetId := 'a.b.c.d.4.1'; // Have to be entered
   userSlaveAddr         : UINT := 1002;     // Have to be entered
   startWrite            : BOOL := FALSE;    // Sign for start writing
   startRead             : BOOL := FALSE;    // Sign for start reading
   nState                : BYTE := 0;        // RW-status
   // Example: Read EL3751 PAI Internal Data: Temperature Value
   int16Buffer           : INT;              // Buffer for reading
   // Example: Select EL3751 Filter1: 22 = IIR Butterw. LP 5th Ord. 1000 Hz:
   uint16Buffer          : UINT:=22;         // Buffer for writing
   bTxPDOState AT%I*     : BOOL;             // (PDO for synchronization)
END_VAR

Implementierung (ST):

CASE nState OF
0:
   IF startWrite THEN
      // Prepare CoE-Access: Write value of CoE object/ sub index:
      fb_coe_write(bExecute := FALSE);
      nState := 1;// Next state for writing
      startWrite := FALSE;
   END_IF
   IF startRead THEN
      // Prepare CoE-Access: Read value of CoE object/ sub index:
      fb_coe_read(bExecute := FALSE);
      nState := 11;// Next state for reading
      startRead := FALSE;
   END_IF
// ============== COE WRITE ================
1:
   // Write entry
   fb_coe_write(
   sNetId:= userNetId,
   nSlaveAddr:= userSlaveAddr,
   nSubIndex:= 16#16,
   nIndex:= 16#8000,
   pSrcBuf:= ADR(uint16Buffer),
   cbBufLen:= 2,
   bExecute:= TRUE,
   tTimeout:= T#1S
   );
   nState := nState + 1; // Next state
2:
   fb_coe_write();       // Execute CoE write until done
   IF fb_coe_write.bError THEN
      nState := 100;     // Error case
   ELSE
      IF NOT fb_coe_write.bBusy THEN
         nState := 0;    // Done
      END_IF
   END_IF
// ============== COE READ =================
11:
   // Read entry
   fb_coe_read(
   sNetId:= userNetId, 
   nSlaveAddr:= userSlaveAddr, 
   nSubIndex:= 1, 
   nIndex:= 16#9000,
   pDstBuf:= ADR(int16Buffer), 
   cbBufLen:= 2, 
   bExecute:= TRUE, 
   tTimeout:= T#1S 
   );

   nState := nState + 1; // Next state
12:
   fb_coe_read();        // Execute CoE read until done
   IF fb_coe_read.bError THEN
      nState := 100;     // Error case
   ELSE
      IF NOT fb_coe_read.bBusy THEN
         nState := 0;    // Done
      END_IF
   END_IF
   100:
   ;                     // Error handling..
END_CASE
CoE_Access.zip