-> Hier kostenlos registrieren
Moin zusammen,
Habe mir eine ADS Kommunikation anhand des Beispiel 9 der Beckhoff Seite aufgebaut (Link)
Hier der Quellcode:
Klappt auch alles soweit wunderbar. In der Dekleration
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ß
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ß