Beiträge von DanielK

    Hm, was soll ich sagen. Ich habe noch ein bissl herumgewurschtelt und jetzt gehts. War wahrscheinlich nur ein Schreibfehler INTERUPT statt INTERRUPT und ich habe versucht auf Eingang 1 mit $IN[0] zuzugreifen anstatt mit $IN[1]. Komisch, dass keine Fehlermeldung beim compilieren kam. Jetzt hab ich es so wie es unten steht und so funktioniert es prima. Nochmal :danke: für die Tips APT.


    Gruß Daniel


    ...
    DEF PROG ()
    ;FOLD INI
    ;FOLD BASISTECH INI
    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
    INTERRUPT ON 3
    BAS (#INITMOV,0 )
    ;ENDFOLD (BASISTECH INI)
    ;FOLD USER INI
    ; Make your modification here
    WAIT FOR NOT $IN[1]
    INTERRUPT DECL 4 WHEN $IN[1]==TRUE DO IR_BRAKE ( )
    INTERRUPT ON 4
    ;ENDFOLD (USER INI)
    ;FOLD SPOTTECH INI
    ...
    LOOP
    ...
    ENDLOOP
    END
    DEF IR_BRAKE()
    INTERRUPT 4 OFF
    BRAKE
    WAIT FOR NOT $IN[1]
    INTERRUPT 4 ON
    END

    Hallo APT,


    vielen Dank für das InterruptBrake-Beispiel. Das habe ich auch bei mir in den Code so eingebaut. Leider habe ich keine Möglichkeit, Daten aus dem Kuka-herauszubekommen (wegen Codebeispielen), da der USB-Anschluss nicht funktioniert und der Kuka auch nicht im Netzwerk ist.


    Die Eingänge (Anzeige->Ein-/Ausgänge) habe ich überprüft. Die Lämpchen schalten korrekt auf ROT um, wenn ich das Signal setze. Also das funktioniert.


    Was nicht funktioniert ist die Aktivierung des Interupts.
    In meinem Beispiel-Unterprogramm ist folgende Routine bereits implementiert gewesen (nicht von mir):


    ;FOLD INI
    ;FOLD BASISTECH INI
    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
    INTERRUPT ON 3
    BAS (#INITMOV,0 )
    ;ENDFOLD (BASISTECH INI)
    ;FOLD SPOTTECH INI


    Ich habe meinen Interupt auf folgende Weise ergänzt:
    ;FOLD INI
    ;FOLD BASISTECH INI
    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
    INTERRUPT ON 3
    INTERRUPT DECL 21 WHEN $IN[0]==TRUE DO IR_BRAKE ( )
    INTERRUPT ON 21
    BAS (#INITMOV,0 )
    ;ENDFOLD (BASISTECH INI)
    ;FOLD SPOTTECH INI


    auch mal mit/ohne GLOBAL - Schlüsselwort, ENABLE hat auch nix gebracht. Sie werden mir nie unter Menü Anzeige->Diagnose->Interrupts angezeigt. Da ist nur der GLOBALE INTERUPT 3 zu sehen. Komischerweise, selbst dann, wenn ich die Nummer in der oben genannten Zeile ändere. So als hätte diese Zeile überhaupt gar keine Bedeutung???


    Mein Unterprogramm wird von einem übergeordneten Programm cell.src aufgerufen. Auch da ist der Interupt 3, genauso wie im Beispiel deklariert.
    Ich habe meine Interupt-Deklaration dahin verschoben, doch auch hier funktioniert sie nicht. :nocheck:


    Viele Grüße
    Daniel.

    Hallo APT,


    in meinem Testfahrprogramm habe ich zum bestehenden Interupt 3 der auf das Signal $STOPMESS reagiert einen Interupt 4 definiert und aktiviert, der auf meinen Eingang $IN[0] reagieren soll. Seltsamer weise taucht dieser zur Laufzeit nicht in dem Diagnosefenster auf, sondern nur die 3. Dann habe ich testweise $STOPMESS durch meinen $IN[0] ersetzt, um damit das Signal wenigstens auf dem Interupt 3 zu testen. Aber auch hier tut sich nix. Im Programmierhandbuch steht was von einer E/A-Aktivierung durch die Variable $I_O_ACT, was aber nur im externen Modus funktioniert?


    Viele Grüße
    Daniel

    Hallo APT,


    vielen Dank für Deine hilfreiche Antwort. Dass die Übertragung funktioniert konnte ich per Telnet prüfen.


    In den Programmablauf habe ich eine Interuptroutine eingebaut, die, wenn $IN[0]== TRUE ist, ein BRAKE veranlassen soll. Leider tut sich nichts, wenn ich den Eingang während des Programmablauf schalte. Muss ich noch irgendetwas anderes einstellen, oder ist vielleicht $IN[0] schon irgendwie anderweitig belegt? Wie finde ich das heraus? Getestet habe ich im Automatik-Modus. Geht das evtl. nur im Automatik-Extern Modus?


    Viele Grüße
    Daniel

    Hallo,


    über eine Device-Net-Karte (Hilscher CIFX 50E-DN (M/S) PCIe) möchte ich binäre Steuersignale an eine Robotersteuerung (KUKA KRC2 ) übertragen, und zwar genau so, wie ein Buskoppler (z. B. http://www.beckhoff.de/default…ents/system_devicenet.htm) elektrische Steuersignale als Byte-Array auf den Feldbus wandelt. Wie muss denn das Datenpaket konkret aussehen? Wird zyklisch (objektorientierte Mail) oder azyklisch übertragen?
    Ich finde leider keine konkreten Protokollbeschreibungen diesbezüglich. Hat jemand von Euch noch eine Idee.


    Viele Grüße
    Daniel

    Hallo,


    ich möchte einen KUKA KR3 (KR C2-Steuerung) Roboter über DeviceNet (MFC-Karte) mit einem Windows 7 x64 PC verbinden, um binäre I/O-Signale für den Automatik-Extern-Modus zu übertragen.
    Auf der PC-Seite ist eine Hilscher CIFX 50E-DN(M/S) PCIe-DeviceNet-Karte (MacId=2) verbaut.
    Auf der Kuka-Seita habe ich in der iosys.ini die digitalen Eingänge und Ausgänge definiert:


    [DEVNET]
    INB0=2,0,x1
    OUTB0=2,0,x1


    Die HilscherAPI stellt zum Senden u. a. die Funktion xChannelIOWrite zur Verfügung.
    Function call:
    int32_t xChannelIOWrite( CIFXHANDLE hChannel, uint32_t ulAreaNumber, uint32_t ulOffset, int32_t ulDataLen, void* pvData, uint32_t ulTimeout);


    Wie muss denn konkret das Datenpaket für "pvData" aussehen, um beispielsweise einen digitalen Eingang zu setzen (zb. B. setze Eingang 202 der mit $EXT_START verdrahtet ist)? Gibt es dafür eine Übersicht von Kuka, über das konkrete Kommunikationsprotokoll?


    Viele Grüße
    Daniel

    Japp, das war es. Besten Dank Micha. Ich habe allerdings eine externe Spannungsversorgung dazwischengeklemmt, da ich im KUKA-Schrank keinen 24V Abgang gefunden habe und ich auch nicht wußte wo genau auf der MFC-Karte der 24V-Eingang ist.
    Aber nun funktioniert die Verbindung auch mit den konfigurierten INB0 und OutB0.


    Viele Grüße
    Daniel

    Hallo,


    ich möchte einen KUKA KR3 (KR C2-Steuerung) Roboter über DeviceNet (MFC-Karte) mit einem Windows 7 x64 PC verbinden, um binäre I/O-Signale für den Automatik-Extern-Modus zu übertragen.
    Auf der PC-Seite ist eine Hilscher CIFX 50E-DN(M/S) PCIe-DeviceNet-Karte (MacId=2) verbaut. Beide Systeme sind direkt mit einander verbunden mit dem 5-Poligen Combicon-Stecker (jeweils 120 Ohm Abschlusswiderstand). Die 24V Spannung wird nicht eingespeist.


    Folgende Einstellungen habe ich vorgenommen:


    devnet.ini:
    [krc]
    DEBUG=0
    BAUDRATE=500


    [1]
    Macid=2


    iosys.ini:
    ...
    [DRIVERS]
    ...
    DEVNET=2,dnInit,dn2drv.o
    ...
    [DEVNET]
    ;INB0=2,0,x1
    ;OUTB0=2,0,x1


    Sobald ich einen der Einträge (INB0 bzw OUTB0) unter DEVNET aktiviere, bekomme ich nach der Rekonfiguration der E/A-Treiber die Meldung: 6503 Fehler Konfiguration E/A-Treiber DN2DRV
    Sind die Einträge auskommentiert, kommt diese Fehlermeldung nicht.
    Im Telnet liefert mir die Eingabe dnShow (INB0 und OUTB0 in der iosys.ini sind auskommentiert) folgenden Output:


    DN2DRV Version 1.22.8.0
    Scanner Enable stopped
    Scanner State Error
    CAN Errors 28
    CAN Overflow 0
    SystemTime -63346054
    BaudRate 500 KBaud
    [00]KRC State 00 Master none
    I:
    O:


    [02] Warn 0 State 03:01 offline
    Value = 1 = 0x1


    Ich bekomme das DeviceNet auf der KUKA Seite nicht zum laufen. Es leuchtet auch kein Lämpchen auf der MFC-Karte. Muss die 24V Spannung doch noch eingespeist werden? Der Master müsste doch mit dnShow als online zu sehen sein, auch wenn kein Kabel angeschlossen ist? Oder habe ich eventuell noch was übersehen? Ich würde mich sehr über einen Tip freuen.


    Viele Grüße
    Daniel