Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: PLC Variablen per C++ ADS API auslesen

  1. #1
    Registriert seit
    20.05.2015
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    ich bin ganz neu was Beckhoff und EtherCat angeht. Ich habe nun TwinCAT3, eine Intel Netzwerkkarte, für welche ich dein TwinCat Treiber installiert habe und eine Ethercat Sklave Karte. Beide Karten sind über ein CAT6 Kabel verbunden. Wenn ich in Visual Studui 2012 nun ein neues TwinCAT Projekt erstelle, nach DEvices Scane, dann werden auch beide gefunden, ein Master und ein Slave. Soweit so gut.

    Nun habe ich mir auf der Beckhoff Seite die Beispiele für die C++ Programmierung mit der ADS Api geladen und ausgeführt.
    http://infosys.beckhoff.de/index.php...o.htm&id=16480

    Hier bekomme ich jedoch keine Verbindung zum Master und mir ist noch nicht klar wieso.
    In Beispiel 9 wird die Variablen Deklaration des Masters ausgelesen:

    // Read the length of the variable declaration
    nErr = AdsSyncReadReq(pAddr, ADSIGRP_SYM_UPLOADINFO, 0x0, sizeof(tAdsSymbolUploadInfo), &tAdsSymbolUploadInfo);

    Dies liefert jedoch Fehlercode 6 zurück.
    Weiß jemand was ich falsch mache und wo es vielleicht eine genauere Anleitung gibt, wie man die Beispiele nutzt?
    Zitieren Zitieren PLC Variablen per C++ ADS API auslesen  

  2. #2
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard

    Hallo!
    Dies liefert jedoch Fehlercode 6 zurück.
    Das ist ein ADS Return Code: http://infosys.beckhoff.com/content/...s.htm?id=16711

    Welchen Port und welche AmsNetId hast du denn oben in dem Beispiel angegeben?
    Worauf möchtest du überhaupt zugreifen?

    Gruß,
    mac203

  3. #3
    LewAshby ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.05.2015
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ethercat1.PNG

    Ich habe einen Ethercat Master in TwinCat3 eingerichtet und nutze dafür meine Intel Netzwerkkarte. Siehe Screenshot. Zu diesem möchte ich mich gerne Verbinden. Wo seh ich denn die Portnummer?


    Hier der Original Quellcode für das Beispiel von Beckhoff:
    der Port Steht auf 851

    Code:
    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    #include <assert.h>
    #include "C:\TwinCAT3\AdsApi\TcAdsDll\Include\TcAdsDef.h"
    #include "C:\TwinCAT3\AdsApi\TcAdsDll\Include\TcAdsAPI.h"
    
    
    using namespace std;
    
    
    void main()
    {
      long                  nErr, nPort; 
      char                  *pchSymbols = NULL; 
      UINT                  uiIndex; 
      AmsAddr               Addr; 
      PAmsAddr              pAddr = &Addr; 
      AdsSymbolUploadInfo   tAdsSymbolUploadInfo; 
      PAdsSymbolEntry       pAdsSymbolEntry; 
    
    
    
    
    
    
    
    
      // Open communication port on the ADS router
      nPort = AdsPortOpen();
      nErr = AdsGetLocalAddress(pAddr);
      if (nErr) cerr << "Error: AdsGetLocalAddress: " << nErr << '\n';
      pAddr->port = 851;
    
    
      // Read the length of the variable declaration
      nErr = AdsSyncReadReq(pAddr, ADSIGRP_SYM_UPLOADINFO, 0x0, sizeof(tAdsSymbolUploadInfo), &tAdsSymbolUploadInfo);
      if (!nErr)
      {
          pchSymbols = new char[tAdsSymbolUploadInfo.nSymSize]; 
          assert(pchSymbols); 
    
    
          // Read information of the PLC-variable 
          nErr = AdsSyncReadReq(pAddr, ADSIGRP_SYM_UPLOAD, 0, tAdsSymbolUploadInfo.nSymSize, pchSymbols); 
          if (nErr) cerr << "Error: AdsSyncReadReq: " << nErr << '\n'; 
    
    
          // Print out the information of the PLC-variable 
          pAdsSymbolEntry = (PAdsSymbolEntry)pchSymbols; 
          for (uiIndex = 0; uiIndex < tAdsSymbolUploadInfo.nSymbols; uiIndex++)
          { 
            cout << PADSSYMBOLNAME(pAdsSymbolEntry) << "\t\t" 
                 << pAdsSymbolEntry->iGroup << '\t' 
                 << pAdsSymbolEntry->iOffs << '\t' 
                 << pAdsSymbolEntry->size << '\t' 
                 << PADSSYMBOLTYPE(pAdsSymbolEntry) << '\t' 
                 << PADSSYMBOLCOMMENT(pAdsSymbolEntry) << '\n'; 
            pAdsSymbolEntry = PADSNEXTSYMBOLENTRY(pAdsSymbolEntry); cout.flush();
          }
      }
      else
      {
          cerr << "Error: AdsSyncReadReq: " << nErr << '\n'; 
      }
      getch();
    
    
      // Close the communication port 
      nErr = AdsPortClose(); 
      if (nErr) cerr << "Error: AdsPortClose: " << nErr << '\n';
    
    
      // Release the allocated memory
      if (pchSymbols) delete(pchSymbols);
    }
    Ich denke mir fehlen noch etwas die Grundlagen, aber es fällt auch schwer da einen Überblick zu bekommen. Die Beckhoff Seite ist etwas unübersichtlich was Doku angeht.

  4. #4
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo LewAshby,

    der Port 851 steht für die erste PLC in TwinCAT3.

    Du kannst nicht direkt vom EtherCAT Master Daten per ADS abholen, da dieser selbst bzw. den Feldbus ohne Task gar nicht aktualisiert.
    Du musst zuvor unter System-Tasks eine Task mit Prozessabbild einfügen und dort Variablen für den Feldbus anlegen, die du dann verknüpfst.
    Der Zugriff aus C++ findet dann auf den Port genau dieser Task statt.

    Gruß,
    mac203

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 20.03.2015, 09:45
  2. ADS C++ Summenkommando Variablen schreiben
    Von vo13 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 06.06.2014, 12:58
  3. PLC über ADS resetten
    Von Breakstuff im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.07.2013, 17:52
  4. TwinCat Pro Projekt auslesen bzw. API zur anaylse von Projektfiles
    Von BorisDieKlinge80 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 19.11.2012, 11:39
  5. Antworten: 0
    Letzter Beitrag: 06.07.2007, 10:26

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •