Auslesen der Variablendeklaration (dynamisch)
In diesem Beispiel wird beschrieben, wie die SPS-Symbolinformationen auf eine effizientere dynamische Weise hochgeladen werden können.
Download: sample16-c-ads-dll-symboluploaddynamic.zip
Die Informationen des SPS-Symbols bestehen aus den folgenden Teilen:
- variablename
- datatype
- length
- address (IndexGroup / IndexOffset)
- comment
Wir empfehlen dringend, NICHT mit dieser IndexGroup/IndexOffset für die ADS-Kommunikation zu arbeiten, sondern stattdessen Handles von Symbolen für die ADS-Kommunikation zu verwenden. |
Einlesen der wichtigsten Informationen über ADS in die interne Klasse "CAdsParseSymbols" :
// Read major symbol information via ADS from device
AdsSymbolUploadInfo2 info;
nResult = AdsSyncReadReq(&m_amsAddr, ADSIGRP_SYM_UPLOADINFO2, 0, sizeof(info), &info);
if ( nResult == ADSERR_NOERR )
{
// size of symbol information
PBYTE pSym = new BYTE[info.nSymSize];
if ( pSym )
{
// upload symbols (instances)
nResult = AdsSyncReadReq(&m_amsAddr, ADSIGRP_SYM_UPLOAD, 0, info.nSymSize, pSym);
if ( nResult == ADSERR_NOERR )
{
// get size of datatype description
PBYTE pDT = new BYTE[info.nDatatypeSize];
if ( pDT )
{
// upload datatype descriptions
nResult = AdsSyncReadReq(&m_amsAddr, ADSIGRP_SYM_DT_UPLOAD, 0, info.nDatatypeSize, pDT);
if ( nResult == ADSERR_NOERR )
{
// create class-object for each datatype-description
m_pDynSymbols = new CAdsParseSymbols(pSym, info.nSymSize, pDT, info.nDatatypeSize);
if ( m_pDynSymbols == NULL )
nResult = ADSERR_DEVICE_NOMEMORY;
}
delete pDT;
}
}
delete pSym;
}
}
}
Get Parent:
Die Routine Get Parent springt NICHT zu dem direkten Parent eines Childs. Stattdessen springt dieser Befehl zum nächsten Eintrag des direkten Parent.
Get Sibling:
Bei Auswahl dieser Option wird das nächste Symbol innerhalb der aktuellen Hierarchiestufe angezeigt. Symbole, die untergeordnete Informationen enthalten, werden angezeigt, aber die untergeordneten Elemente werden nicht angezeigt.
Get Child:
Wenn das aktuelle Symbol Informationen über ein untergeordnetes Symbol enthält (das aktuelle Symbol ist also eine Instanz einer Datentypbeschreibung), wird mit diesem Befehl die nächste Hierarchieebene aufgerufen und die Informationen über das erste untergeordnete Objekt zurückgegeben.
Get Next:
Wenn Sie auf diese Schaltfläche klicken, wird das nächste Symbol aus der internen Klasse "CAdsParseSymbols" extrahiert und angezeigt.
Wenn Sie immer nur diese Option wählen, können Sie vom ersten ADS-Symbol durch den Symbolbaum der Hierarchie bis zum Ende der Liste navigieren.