OPC Client



  • Hallo,

    nun habe ich den OPC Client mal mit dem Beispiel von Softing probiert.
    Funzt soweit auch.
    Nur wenn ich das gleiche Item nochmals den Wert ändern will, geht das nicht.
    d.h. Ich kann den Wert einmal ändern, ein zweites mal nicht.



  • ???
    Wie hast Du das denn gemacht?
    Liegt das jetzt am Server oder am Client?

    OT: Es hat wenig mit MFC zu tun...



  • Wenn ich den Server starte, bzw ich ein Connect durchführe und direkt dann eine Gruppe und ein paar Items erstelle und dann sofort Werte schreibe, werden die Werte auch im Server übernommen.
    Wenn ich dann ein 2. mal auf die Item's zugreifen will, geht es nicht mehr.
    Und zwar passiert folgendes:
    In der Funktion :

    void CKGroup::WriteSync (CObArray &cItemList, CStringArray &cValues, DWORD cdwItems)
    {
     try
     {
      // Issue read request using IOPCSyncIO interface:
      hr = m_pISync->Write ( cdwSentItems,	// Item count
    			phServer,	// Array of server handles for items
    			pValues,	// Array of values
    			&pErrors	// Array of errors							);
    

    bekomme ich als hr = -2178257 (so irgendwas zurück).
    Wenn es geht, liefert mir die Funktion eine 0 zurück.

    Weiter weiss ich jetzt nicht mehr........



  • simcon schrieb:

    bekomme ich als hr = -2178257 (so irgendwas zurück).

    Es wäre gut, wenn Du die genaue Nummer sagen könntest und nicht nur "ungefähr"... und am besten als Hex-String...



  • Hi,

    also die genauen Werte lauten:

    hr = -2147467259 in hex 0x80004005
    pError = 0x00000000

    Ich hoffe, das hilft........



  • => "Unspecified error"...
    Kannst Du den Wert mehrmals mit einem anderen OPC-Client schreiben?

    PS: Ein schreiben mit dem SOfting-CLient-Toolkit solltest Du aber so machen:

    SOCmnList<SODaCItem> itemList;
      itemList.create(SOCMNLIST_TYPE_ORG_LIST | SOCMNLIST_TYPE_KEY_NO | SOCMNLIST_TYPE_OBJ_OBJECT);
      itemList.add(pItem);
      pItem->setWriteValue(msg->varValue); // TODO: Fehlerprüfung
    
      HRESULT res = pGroup->syncWrite(&itemList);
      itemList.destroy();
    

    !!!



  • Es war ein anderer Fehler.
    Und zwar ist das schreiben und lesen über einen Thread gegangen.
    Das mochte der Server irgendwie nicht.
    Auf alle Fälle läuft es jetzt.......

    Danke für die Beiträge 👍


Anmelden zum Antworten