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:

Auslesen der Variablendeklaration (dynamisch) 1:

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.
Nach dem Hochladen der Informationen "name", "datatype" und "length" ist es sinnvoll, ein Handle für dieses Symbol anzufordern. 

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.