Probleme mit OPC bei kooperierenden Robotern

  • Hallo zusammen,


    vielleicht erzähl ich erstmal um was es bei mir geht und wo ich im Moment grade steh:
    Bei uns am Institut sollen zwei KUKA-Bots zusammen Objekte mit ner Kamera aufnehmen, also ein Roboter hält das Objekt und der andere hat die Kamera montiert. Dann soll man über das Bildverarbeitungsprogramm (Remote-Zugriff) Roboterdaten auslesen und solche schreiben können (zum Beispiel Positionsdaten, um das Objekt aus einer bestimmten Lage zu betrachten o.ä.). Dazu soll OPC verwendet werden.
    Nun ist es meine Aufgabe als HiWi mich da mal einzuarbeiten. Ich habe auch schon das OPC-Paket von KUKA bekommen, installiert und konnte auch schon Daten mit dem KUKA-TestClient (C++) sowohl lesen als auch schreiben.
    Dabei sind aber noch nen paar Probleme aufgetreten, die ich hier gerne mal reinschreiben würde. Vielleicht hat ja jemand ne Lösung für mich.


    1.Problem:
    Beim Aufbau der Remote-Verbindung vom Client zum Server erhalte ich folgende Fehlermeldung:
    IDataObject::DAdvise: Zugriff verweigert
    Danach kann ich aber trotzdem die Tag-List vom Server abrufen.
    Was hat das zu bedeuten???


    2.Problem:
    Neue Variablen, die man dem Client verfügbar machen will, werden auf dem Server in die Datei KUKA_OPC_Config.XML eingetragen. Dabei muss auch ein Cross-Name und ein Item-Name angegeben werden.
    Wo ist da der Unterschied? Muss Cross-Name genau mit dem Namen übereinstimmen, mit dem die Variable in beispielsweise einer .dat-Datei definiert wurde und ist Item-Name dann ein beliebiger Name, unter dem die Variable dann in der Tag-List aufgeführt wird???


    3.Problem:
    Wenn ich ein paar Variablen mittels Add Item unter Beobachtung nehme, bekomme ich bestensfalls den Initialwert der Variable und bei unitialisierten Variablen den Wert BAD. Ich hätte allerdings gerne, dass sich zum Beispiel die Positionsvariable bei Programmablauf ständig auf dem aktuellen Stand bringt (synchrones Abfragen nach bestimmten Zeitintervallen).
    Das scheint aber nicht zu funktionieren. Ich muss immer zuerst selbst auf Refresh klicken, um den neuen Wert zu bekommen.


    4.Problem:
    Bei allen Aktionen, wie Read (asynchron), Refresh und auch Write, gibt es eine entsprechende Fehlermeldung:
    Async Read/Refresh/Write: OPC Server failed GetErrorString
    Hier gehe ich davon aus, dass vielleicht einfach der TESTClient nicht ganz korrekt und bis ins Detail durchprogrammiert ist. Denn es geht ja dann doch. Wollte nur mal wissen, ob diese Fehler auch schon bei anderen aufgetaucht sind.


    5.Problem:
    Bisher habe ich nur Variablen von dem Roboter auslesen können, auf dem der OPC-Server installiert ist.
    Die beiden Roboter sind aber miteinander synchronisiert und gekoppelt. Allerdings funktioniert es komischerweise nicht, den OPC-Server auch auf dem anderen zu installieren. Warum weiss ich nicht??? Any ideas???
    Ansonsten: Wie kann ich auch über den OPC-Server auf Rob1 auf Variablen von Rob2 zugreifen??? Gibt es auf Rob1 ein Verzeichnis, in dem die Variablen von Rob2 drinstehen???


    6.Problem:
    Wie oben schon erwähnt, soll die Lese/Schreibe-Funktionalität letztendlich mit in das Bildverarbeitungsprogramm eingebunden werden. Dazu muss ich wohl dann die entsprechenden Client-Funktionen in den Code des BVPs einbauen. Gibt es dafür eine API oder Bibliotheken oder Dokus oder irgendsoetwas???


    Ich weiss, dass das hier jetzt etwas länger geworden ist.
    Ihr braucht ja auch nicht alle Fragen auf einmal beantworten. :mrgreen:
    Bin aber trotzdem dankbar für jedes bisschen Hilfe!!! :merci:


    Grüße
    Felix

  • Schritt für Schritt zum Roboterprofi!
  • 1.Problem:
    Beim Aufbau der Remote-Verbindung vom Client zum Server erhalte ich folgende Fehlermeldung:
    IDataObject::DAdvise: Zugriff verweigert
    Danach kann ich aber trotzdem die Tag-List vom Server abrufen.
    Was hat das zu bedeuten???


    Bei einem Connect vom OPC Client zum Server werden zwei Verbindungen aufgebaut


    Client zum Server (Lesen der Tags)
    Server zum Client (Advise – asynchrones Lesen)
    In der DCOM Einstellung müssen beide Verbindungen entsprechend konfiguriert werden (genaue Vorgehensweise hängt vom BS ab)


    2.Problem:
    Neue Variablen, die man dem Client verfügbar machen will, werden auf dem Server in die Datei KUKA_OPC_Config.XML eingetragen. Dabei muss auch ein Cross-Name und ein Item-Name angegeben werden.
    Wo ist da der Unterschied? Muss Cross-Name genau mit dem Namen übereinstimmen, mit dem die Variable in beispielsweise einer .dat-Datei definiert wurde und ist Item-Name dann ein beliebiger Name, unter dem die Variable dann in der Tag-List aufgeführt wird???


    Aussage stimmt so – Vorteil: Falls sich hardwareseitig was ändert (z. B. es wird ein anderer Ausgang verwendet) muss nur diese Zuweisung geändert werden. Im Visualisierungsprogramm keine Änderung notwendig, da ja über den Itemname darauf zugegriffen wird.



    3.Problem:
    Wenn ich ein paar Variablen mittels Add Item unter Beobachtung nehme, bekomme ich bestensfalls den Initialwert der Variable und bei unitialisierten Variablen den Wert BAD. Ich hätte allerdings gerne, dass sich zum Beispiel die Positionsvariable bei Programmablauf ständig auf dem aktuellen Stand bringt (synchrones Abfragen nach bestimmten Zeitintervallen).
    Das scheint aber nicht zu funktionieren. Ich muss immer zuerst selbst auf Refresh klicken, um den neuen Wert zu bekommen.
    siehe Problem 1



    4.Problem:
    Bei allen Aktionen, wie Read (asynchron), Refresh und auch Write, gibt es eine entsprechende Fehlermeldung:
    Async Read/Refresh/Write: OPC Server failed GetErrorString
    Hier gehe ich davon aus, dass vielleicht einfach der TESTClient nicht ganz korrekt und bis ins Detail durchprogrammiert ist. Denn es geht ja dann doch. Wollte nur mal wissen, ob diese Fehler auch schon bei anderen aufgetaucht sind.


    siehe Problem 1



    6.Problem:
    Wie oben schon erwähnt, soll die Lese/Schreibe-Funktionalität letztendlich mit in das Bildverarbeitungsprogramm eingebunden werden. Dazu muss ich wohl dann die entsprechenden Client-Funktionen in den Code des BVPs einbauen. Gibt es dafür eine API oder Bibliotheken oder Dokus oder irgendsoetwas???


    Eine gute Quelle ist http://www.opcfoundation.org/

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden