[c/c++]OPC-client -> IOPCItemProperties

Pagina: 1
Acties:
  • 160 views sinds 30-01-2008
  • Reageer

  • Paradiddle
  • Registratie: Oktober 2001
  • Laatst online: 30-01-2024
Zitten hier misschien ook een paar OPC-experts bij?
Ik ben namelijk voor mijn afstudeeropdracht een OPC-client aan het bouwen in c/c++ en ik ben al aardig op weg. Nu wil ik naast de groepsnamen + adressen ook graag de description uit kunnen lezen. Hiervoor wil ik gebruik maken van OPCItemProperties->QueryAvailableProperties
Als ik deze gebruik dan krijg ik alleen maar wartaal terug. Kan iemand mij vertellen hoe deze methode werkt?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Misschien moet je ff wat meer info geven ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Paradiddle
  • Registratie: Oktober 2001
  • Laatst online: 30-01-2024
Ik denk dat mensen die verstand hebben van OPC hier genoeg info aan moeten hebben. In ieder geval:
Er draait een EIB OPC Server van Eiba. Hiervoor ben ik de client aan het ontwikkelen. De enige info van de objecten die ik tot nu toe uit de server kan halen, zijn de groepen en de groepsadressen. Deze worden gecombineerd en zijn op die manier elk voor zich aan te spreken. Bijvoorbeeld: "Alarm + Deurbel.0/3" Hierbij is "Alarm + Deurbel" de groep en "0/3" het groepsadres.
Deze 0/3 heeft als description "Deurbel" en dat wil ik in mijn client zichtbaar maken. De enige OPC methode die iets van een description kan teruggeven is (volgens mij) QueryAvailableProperties van de klasse OPCItemProperties. Als ik deze echter gebruik, dan krijg ik per object alleen 5x een "I" terug als beschrijving. Kan iemand mij vertellen hoe het werkt? Of iemand die me een voorbeeld kan geven?

  • Paradiddle
  • Registratie: Oktober 2001
  • Laatst online: 30-01-2024
Hier is nog een lap code. Misschien kan iemand zien wat ik fout doe.

void BrowseIDs(void)
{
HRESULT hr = 0;
IEnumString *pEnumString = NULL;

USES_CONVERSION;

printf("Getting Reference to Item ID's%s\nBrowsing...%s%s\n\n", BrTag(), BrTag(), BrTag() );
hr = pOPCBrowse->BrowseOPCItemIDs(OPC_FLAT, L""/*NULL*/, VT_EMPTY, 0, &pEnumString);
PrintError("pOPCBrowse->BrowseOPCItemIDs", hr);

LPOLESTR pszName = NULL;
DWORD dwCount = NULL, *pdwPropertyIDs = NULL;
LPWSTR *pDescriptions = NULL;
VARTYPE *pvtDataTypes = NULL;
ULONG count = 0;
int i = 0;
while((hr = pEnumString->Next(1, &pszName, &count)) == S_OK)
{
printf("%s%s\n", OLE2T(pszName), BrTag() );
//Het gaat om de regel hieronder:
hr = pOPCItemProperties->QueryAvailableProperties(A2W(OLE2T(pszName)), &dwCount, &pdwPropertyIDs, &pDescriptions, &pvtDataTypes);
PrintError("pOPCItemProperties->QueryAvailableProperties", hr);

for(i = 0; i < dwCount; i++)
{
printf("\t%d %s%s\n", i, pDescriptions[i], BrTag() );
}

::CoTaskMemFree(pDescriptions);
::CoTaskMemFree(pvtDataTypes);
::CoTaskMemFree(pdwPropertyIDs);

::CoTaskMemFree(pszName);
}
pEnumString->Release();
}

[ Voor 10% gewijzigd door Paradiddle op 17-03-2004 09:20 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Naar mijn idee moet je eerst de itemid hebben, doe je daarna een QueryAvailableProperties met die itemid, en daarna een IOPCItemProperties::GetItemProperties om de waarden op te halen.

De descriptions die jij nu krijgt zijn volgens mij een descriptions van de properties, niet de values.

[ Voor 5% gewijzigd door farlane op 17-03-2004 20:11 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Paradiddle
  • Registratie: Oktober 2001
  • Laatst online: 30-01-2024
dat was em tnx :)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
En ik heb helemaal geen verstand van OPC. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Paradiddle
  • Registratie: Oktober 2001
  • Laatst online: 30-01-2024
Nou, toch bedankt dat je even hebt willen kijken. Het is gewoon vervelend als je er al zo lang mee bezig bent, dat je dan blindstaart op die code. Toen ik een keer goed keek zag ik inderdaad dat dezelfde parameters bij de queryavailableproperties uit-paramaters waren en bij de getproperties in-parameters. Beetje vage constructie maar goed.
Het werkt nu. Niet meer aankomen :P
Pagina: 1