Upload PLC-variable declaration (dynamic)
This sample describes how to upload the PLC symbol information in a more efficient dynamic way.
The PLC symbol information contains the following parts :
- variablename
- datatype
- length
- address (IndexGroup / IndexOffset)
- comment
We highly recomment to NOT work with this IndexGroup/IndexOffset for ADS communication but instead use handles of symbols for ADS communication. |
Read the major information via ADS into internal class "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:
The routine Get Parent will jump NOT jump to the direct parent of a child. Instead this command will jump to the next entry of the direct parent.
Get Sibling:
Selecting this option will return the next symbol within the current hierachy level. Symbols containing child information will be displayed, but the child elements will not be displayed.
Get Child:
If the current symbol contains child-symbol information (so the current symbol is an instance of a datatype description), this command will enter the next hierachy and return the information about first child object.
Get Next:
Clicking this button the next symbol will be extracted from internal class "CAdsParseSymbols" and be displayed.
Selecting always just this option allows to navigate from first ADS-symbol through the hierachy symbol tree to the end of list.