ADS Zugriff per Variablenname (Sample 9 Infosys)

Leto

Level-1
Beiträge
53
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

Habe mir eine ADS Kommunikation anhand des Beispiel 9 der Beckhoff Seite aufgebaut (Link)

Hier der Quellcode:

Code:
#include <iostream.h>
#include <windows.h>
#include <conio.h>
#include "c:\twincat\ads api\tcadsdll\include\tcadsdef.h"
#include "c:\twincat\ads api\tcadsdll\include\tcadsapi.h"

void main()
{ 
  long      nErr, nPort; 
  AmsAddr   Addr; 
  PAmsAddr  pAddr = &Addr; 
  ULONG     lHdlVar, nData; 
  char      szVar []={"MAIN.PLCVar"}; 

  // Kommunikationsport auf dem ADS Router öffnen
  nPort = AdsPortOpen();
  nErr = AdsGetLocalAddress(pAddr);
  if (nErr) cerr << "Error: AdsGetLocalAddress: " << nErr << '\n';
  pAddr->port = AMSPORT_R0_PLC_RTS1;

  // Handle einer SPS-Variablen <szVar> holen 
  nErr = AdsSyncReadWriteReq(pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(lHdlVar), &lHdlVar, sizeof(szVar), szVar);
  if (nErr) cerr << "Error: AdsSyncReadWriteReq: " << nErr << '\n';
  do 
  { 
    // Wert einer SPS-Variablen auslesen, per Handle 
    nErr = AdsSyncReadReq( pAddr, ADSIGRP_SYM_VALBYHND, lHdlVar, sizeof(nData), &nData ); 
    if (nErr) 
      cerr << "Fehler: AdsSyncReadReq: " << nErr << '\n'; 
    else 
      cout << "Wert: " << nData << '\n'; 
    cout.flush(); 
    if (Data > 10)
    { 
      // Wert der SPS-Variablen wieder auf 0 setzen 
      nData = 0; 
      nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_VALBYHND, lHdlVar, sizeof(nData), &nData); 
      if (nErr) cerr << "Error: AdsSyncWriteReq: " << nErr << '\n';
    }
  }
  while ( getch() == '\r');  // nächsten Wert auslesen mit RETURN, sonst Ende


  //Handle der SPS-Variablen wieder freigeben
  nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_RELEASEHND, 0, sizeof(lHdlVar), &lHdlVar); 
  if (nErr) cerr << "Error: AdsSyncWriteReq: " << nErr << '\n';

  // Kommunikationsport schließen 
  nErr = AdsPortClose(); 
  if (nErr) cerr << "Error: AdsPortClose: " << nErr << '\n';
}

Klappt auch alles soweit wunderbar. In der Dekleration

Code:
char      szVar []={"MAIN.PLCVar"};

wird jedoch auf den Baustein "MAIN" zugegriffen und dort auf die Variable "PLCVar". Ich würde jedoch gerne auf Globale Variablen zugreifen.
Ändere ich jetzt jedoch den Zugriff auf "Global_Variables.PLCVar" bekomme ich keine Verbindung zu der Variablen.

Hat jemand eine Idee?

Gruß
 
Zurück
Oben