Cross.ocx Eingänge setzen

  • Hallo miteinander,


    was muss beachtet werden, wenn man mittels einer eigenen Anwendung die Eingänge über Cross.ocx in OfficeLite setzen/rücksetzen möchte ? Mein Code (C++) sieht so aus:


    shJob=m_KukaCross.SetVar("$IOSIM_IN[]", "100100000000000000000000000000000100100000000011");


    Eingebettet ist das Ganze in die Codevorlage von Tilmann (vielen Dank übrigens dafür, hat mir bis hierhin sehr geholfen).


    Nach Aufruf der Zeile wartet das Programm auf eine Rückmeldung durch:


    if (!(BOOL) (m_KukaCross.SetVarResult(shJob))) {
    state=TIMER_CONNECT;
    break;
    }


    Da bleibt das Ganze dann hängen und im Cross-Monitor wird der Job ebenfalls rot markiert. Andere Variablen kann ich schreiben (z.B. $PHGCONT, $ oder $mode_op). Hat es etwas mit dem ACCESS Mode zu tun. Sind die Eingänge vielleicht schreibgeschützt ? Lesen kann ich jedenfalls alle Variablen.


    Danke für Eure Hilfe im voraus.

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Mitsubishifan,



    Ich habe den Eindruck, daß $IOSIM_IN nur zur Anzeige der Eingänge dient, also schreibgeschützt ist. Versuche es mal mit $INSIM_TBL (nur so eine Idee, habe ich noch nicht selbst gemacht).


    Mehr dazu in diesem Thread.



    Schöne Grüße,
    Tilman/Frankreich

  • Hallo Tilmann,


    tausend Dank für Deinen Tip. Jetzt gehts. Hat mich eine Woche gekostet. Ich baue gerade an einem Interface OfficeLite zu meiner Anwendung Simulation Wildlife (3D-Simulation mit SPS-Unterstützung PLCSim etc. http://www.zebra-one.com) Sobald ich die Kuka-Schnittstelle fertig habe, poste ich hier. Die Software ist nämlich für Privatleute kostenlos. Wenn Du Interesse hast, schenke ich Euch eine Laborlizenz für Eure Fachhochschule als Dank für Deine Hilfe.


    Viele Grüss, Mitsubishifan

  • Hallo Mitsubishifan,


    Toll, daß es jetzt klappt!


    Zitat

    schenke ich Euch eine Laborlizenz für Eure Fachhochschule

    Komme ich u.U. drauf zurück, Danke Dir!


    Viele Grüße,
    Tilman/Frankreich

  • Hallo Tilman,


    auf meiner Seite http://www.zebra-one.com ist jetzt eine Version fertig, mit der Du Deinen Kuka-Roboter mit OfficeLite testen kannst. Ansonsten, mein Versprechen gilt immer noch. Kurze Email mit der Anschrift von deiner Fachhochschule, damit ich das Lizenzfile generieren kann. Übrigens, Schnittstelle zu RT Toolbox von Mitsubishi habe ich auch eingebunden wenn du es gebrauchen kannst.


    Grüsse, Mitsubishifan

  • Hi Mitsubishifan.
    Kannst du uns ein bischen mitteilen, was du benutzt hast (OfficeLite Version...)
    Vielleicht auch, was du über die Funktionen der Cross.ocx (zu deiner KRC-Schnittstelle) herausgefunden hast?


    Ansonsten muß ich sagen, sieht dein Programm schon mal sehr gut aus. :grinser043:

  • Hallo miteinander,


    hier mal kurz meine Erfahrungen mit dem Cross.ocx. Programmierungsumgebung Microsoft Visual C++ 6.0 und Visual Studio 2010.


    Das größte Problem stellte die Generierung der Wrapperclasse unter VC dar. Gelungen ist das nur unter Visual Studio 2010. Visual C++ 6.0 weigert sich strikt mit der meldung, dass die typenbibliothek fehlerhaft oder nicht vorhanden ist. Bei der Generierung entstehen zwei Klassen CCross und CCrossEvent (siehe Anhang). Und damit das nächste Problem. Das Eventhandling wird einfach nicht unterstützt, obwohl es vorhanden ist. Mein Code sieht so aus:


    // Event-Handling (funzt nicht)
    if (m_KukaCrossEvents.CreateDispatch(CLSID_Cross)) {
    // Deklaration
    IConnectionPoint* pConnectionPoint;
    IConnectionPointContainer *pConnPtContainer;

    if (m_KukaCrossEvents.m_lpDispatch->QueryInterface(IID_IConnectionPointContainer, (void **)&pConnPtContainer) == S_OK) {
    if (pConnPtContainer->FindConnectionPoint(DIID__DCrossEvents, &pConnectionPoint) == S_OK) {
    m_pKukaCrossEventUnk=m_KukaCrossMyEvents.GetIDispatch(FALSE);
    if (m_pKukaCrossEventUnk) {
    hr = pConnectionPoint->Advise(m_pKukaCrossEventUnk, &m_dwEventCookie);
    }
    pConnectionPoint->Release();
    pConnPtContainer->Release();
    }
    }
    }


    Das fehlende Eventhandling führt dazu, dass beim Lesen und Schreiben der Variablen $IOSIM_OPT, $AXIS_ACT, $IOSIM_IN[], $IOSIM_OUT[], $INSIM_TBL[] das Ergebnis nicht abgewartet werden kann und bei zwei oder mehreren unbeantworteten Anfragen an Cross der Server irgendwann abstürzt. Gelöst habe ich es über einen Timeout, der nach Ablauf die Funktionen CmdAbort() und Exit() aufruft. Danach muss neu initialisiert werden.


    Beschreibung der einzelnen variablen:


    $IOSIM_OPT (SetVar)


    Auf TRUE schaltet in den Simulationsmodus


    $AXIS_ACT (Showvar)


    Aktuelle Achsposition


    $IOSIM_IN[] (ShowVar)


    Liest alle Eingänge


    $INSIM_TBL[EingangsNr] (SetVar)


    #SIM_TRUE Setzen, #SIM_FALSE rücksetzen


    $IOSIM_OUT[] (ShowVar)


    Liest alle Ausgänge


    Hoffe, es hilft. Kuka sollte sich mal ein Beispiel an Mitsubishi nehmen. Die haben ihre Schnittstelle komplett dokumentiert und ermuntern sogar zur Eigenentwicklung.


    Grüsse,


    Mitsubihifan

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