Übergabe Real- Werte SPS S7 zu KUKA...

  • Hallo,
    ich hoffe das Thema gab es noch nicht, hab auf jeden Fall nix passendes gefunden...


    Ich hab die Aufgabe ein Palettierprogramm zu erstellen welches 24 verschiedene Kartongrößen beinhaltet. Allerdings Sortenrein verpackt, also nur 1 Kartongröße pro palette.


    Für diese Aufgabe möchte ich gerne die Verschiebungswerte in X, Y, Z, und für die Ebene (Z_Ebene) als Real Wert von der SPS über Profibus an den KUKA übergeben (KR 210, Softwarestand 4.4).
    Wie müssen diese Werte Kuka seitig deklariert und aufgerufen werden?


    Oder gibt es noch andere einfache Möglichkeiten um diese Palettieraufgabe zu lösen? :?:


    Ich würde mich über eure Hilfe freuen...


    MFG

  • Schritt für Schritt zum Roboterprofi!
  • Das Komma beliebig nach rechts verschieben und Integer draus machen. Beim Palettieren dürften Zehntelmillimeter genau genug sein, da werden wohl 15 Bit pro Wert mehr als ausreichend sein. Vorzeichen beachten, und zusehen, dass die S7 High-und Low-Byte richtigrum sendet.
    Wenn man den SPS-Programmierer auf seiner Seite hat, ist der Rest im Kuka nur noch Deklaration von Gruppeneingängen...


    Grüße,
    Michael

  • Hallo Michi86,


    die Werte kannst du auch über Profibus analog einlesen, damit ersparst du dir die Umrechnerei und kannst einfacher auch Minus-Werte einlesen. Ich bin der Meinung dass darüber hier im Forum auch schon mal geschrieben wurde.


    Prinzipiell musst du folgende Einstellungen vornehmen.
    IOSYS.INI


    [PBMASL]
    ANIN1=127,10,16,1,CAL 10 ; Slave-Modul/Offset-SPS/Datenbreite,Rechtsbündig mit Vorzeichen / Berechnungsfaktor
    ANIN2=127,12,16,1,CAL 10 ; Slave-Modul/Offset-SPS/Datenbreite,Rechtsbündig mit Vorzeichen / Berechnungsfaktor
    ANIN3=127,14,16,1,CAL 10 ; Slave-Modul/Offset-SPS/Datenbreite,Rechtsbündig mit Vorzeichen / Berechnungsfaktor


    $Config.dat


    SIGNAL aiX_Wert $ANIN[1]
    SIGNAL aiY_Wert $ANIN[2]
    SIGNAL aiZ_Wert $ANIN[3]


    In deinem Palettierprogramm kannst du dann auf die Werte entweder direkt zugreifen oder diese vorher einlesen und in entsprechende Variablen schreiben.



    Gruß
    Thilbi

  • Vielen Dank schon mal für eure Antworten..


    Ich habe noch ein paar Verständnis Fragen zu der Variante von Thilbi..


    wenn ich die analogen Eingänge Roboterseitig laut deinem Beispiel deklariert habe muss ich die Werte nur noch im Programm selbst aufrufen??


    ;-------------------------------------------------
    ;*****POSITIONSBERECHNUNG******
    ;-------------------------------------------------
    FOR ebene = 1 TO 2
    FOR reihe = 1 TO 4
    FOR spalte = 1 TO 4
    ABSETZPOS [ebene, reihe, spalte] = XECKPOS

    ABSETZPOS [ebene, reihe, spalte].x = ABSETZPOS [ebene, reihe, spalte].x + (reihe - 1) * aiX_WERT
    ABSETZPOS [ebene, reihe, spalte].y = ABSETZPOS [ebene, reihe, spalte].y + (spalte - 1) * aiY_WERT
    ABSETZPOS [ebene, reihe, spalte].Z = ABSETZPOS [ebene, reihe, spalte].Z + (ebene - 1) * aiZ_EBENE

    UEBER_ABS [ebene, reihe, spalte] = ABSETZPOS [ebene, reihe, spalte]
    UEBER_ABS [ebene, reihe, spalte].z = UEBER_ABS [ebene, reihe, spalte].z + aiZ_WERT
    ENDFOR
    ENDFOR
    ENDFOR


    Wäre das so korrekt?
    Und wird nicht als Wert ein REAL Format gefordert? Also als Datenbreite 32 Bit Gleitpunkt?


    MFG
    Michi86

  • Hi nochmal,
    hat keiner eine Antwort für mich?
    Wäre dankbar über eine Aussage von euch, da ich noch so gut wie keine Erfahrung mit der Programmierung habe, bis auf die ersten 2 Kurse....


    MFG

  • Ich meine das Analoge einlesen von Profibuswerten geht nur, wenn du Master bist. Ich hatte es selber mal als Slave versucht und nicht hinbekommen.
    Aber vielleicht weiss Thilbi da besser bescheid.


    Falls es nicht geht, weil du Slave bist hast du 2 Möglichkeiten.
    Die erste wie oben beschrieben, einfach das Komma selber im Kuka erzeugen:
    Empfangenerwert / 100 z.B.


    Das Vorzeichen kann man dann durch ein seperates Bit erzeugen (Wenn Bit gesetzt, ist diese Zahl negativ, sonst positiv) oder das Umrechnen der Integerzahl in eine zahl mit Vorzeichen:
    ACHTUNG Formel geht nur bei 16 Bit Zahl.


    DEFFCT INT Vorzeichen(Wert:IN)


    INT Wert


    ;--Vorzeichen bestimmen
    IF Wert > 32767 THEN


    Wert = Wert-65536

    ENDIF


    RETURN Wert


    ENDFCT





    Vorteil dieser Methode du brauchst kein doppelwort für den Wert. Und sparst Platz auf der Schnittstelle.


    Wenn du wirklich einen Realwert empfangen möchtest, kannst du auch gleich die Zahl umrechnen.
    Die SPS sendet auf dem doppelwort die real Zahl und du nutzt im KUKA diese Formel zur Umrechnung:
    http://de.wikipedia.org/wiki/I…92_IEEE754-Gleitkommazahl


    Ich habe das selber mal gemacht. War aber für meine alte Firma und das Programm habe ich nicht mehr. Ist zwar aufwenig, aber machbar.

  • Da hab ich noch eine einfachere Möglichkeit:


    In Steu/Mada/$Maschine.dat:


    SIGNAL $DIGIN1 $IN[129] TO $IN[144] ;DIGITALEINGANG 1


    Unsigned/Signed: Mit/ohne Vorzeichen
    DECL DIGINCODE $DIGIN1CODE=#SIGNED ;KODIERUNG FUER DIGITALEINGANG 1


    Da brauch man nix selber basteln.

  • Ist es unbedingt nötig die Werte über die SPS zu senden? Oder reicht es nicht auch die Maße in einem Array in der Config.dat zu halten? etwa:
    Kiste[nr].x = x
    Kiste[nr].y = y
    Kiste[nr].z = z
    ....


    Und dann ausgehend von der Eckposition die ja bei jeder Kiste zu Beginn gleich ist, in der Schleife die Folgepositionen immer zu berechnen. Du brauchst dann nur noch von der SPS eine Integer-Nr die dir sagt, welche Kistenconfig du nehmen sollst, wie etwa so:


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