Integer Werte via Profinet

  • Hallo Kollegen,


    weiß jemand eine Lösung um integer Werte vom Roboter zur Siemens SPS und umgekehrt zu senden ohne dass man die Bytes in der SPS drehen muss und nur Positive Werte
    senden darf.


    :hilfe:

    Wer nichts weiß wird alles glauben

  • ANZEIGE
  • Hallo,


    du kannst die Bytes ja direkt in der EIO drehen.
    Ich würds als AI/AO machen.


    -Name "aiBlockWert1" -SignalType "AI" -Unit "PlcInOut"\
    -UnitMap "376 - 383, 368 - 375, 360 - 367, 352 - 359" -Access "All"\
    -MaxLog 2.14749E+07 -MaxPhys 2.14749E+07 -MaxPhysLimit 2.14749E+07\
    -MaxBitVal 2147483647 -MinLog -2.14749E+07 -MinPhys -2.14749E+07\
    -MinPhysLimit -2.14749E+07 -MinBitVal -2147483647


    In der SPS verwendest du den Wert als DINT.
    Ist jetzt nicht direkt die Antwort auf deine Frage, aber wohl eine gute Lösung.


    MfG
    MisterRobot

  • Hi,


    Du kannst aber auch einen Gruppenausgang bzw. -Eingang verwenden und drehst in der EIO.CFG die Bytes, wie von MisterRobot beschrieben.


    Gruppensignale können generell nur positive Werte übertragen.


    Falls die Werte nicht als Integer vorliegen kannst Du die Funktion "Trunc" verwenden.


    Beispiel:


    Code
    Setgo goTest, Trunc(nValue\Dec:=0);


    Mfg
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Ist aber jetzt auch nicht so schwer, mal eben eine Funktion zu schreiben, welche die beiden Bytes als getrennte Gruppeneingänge einliest, das untere (bei Siemens, Wortgröße) mit 256 multipliziert, dann beide addiert, und im Falle, dass das Ergebnis größer als 32767 ist, dann 65536 abzieht.
    Und das geht rückwärts ja auch in die andere Richtung.
    Trunc schneidet ab, Round rundet.
    Die letzten 5er und neuen 6er RW-Versionen haben ausserdem auch einen wirklich netten Befehlssatz bezüglich DNum. Unter anderem lassen sich alle Bit-Operationen inzwischen auch mit DNum machen, so dass man gar nicht mehr erst in Byte zerlegen muss wie früher. Damit geht's vielleicht sogar noch eleganter. Da DNum irgendwas mit 52 Bit Breite haben dürfen, könnte man sogar andere Formate über einen Gi/Go in einem Rutsch verarbeiten, da müsste man aber mal kurz nachschlagen, was die SPS auf welche Art rausdrückt bzw. erwartet.


    Grüße,
    Michael

  • Hallo zusammen, ich hab da noch eine Frage/Bitte zu diesem Thema.


    Ich selber bin KEIN Roboterprogrammierer, kenne mich da nur schlecht aus und bin eigentlich in der Siemens-Welt (Step7, TIA, ...) zu Hause.

    Zur Zeit bin ich an einem Projekt dran, wo eine Siemens SPS über ProfiNet mit einem ABB-Roboter kommuniziert. Der Austausch der Bits und Bytes funktioniert problemlos, nur mit der Integer gibt’s das Problem, dass die zwei Bytes vertauscht sind. Nach sehr sehr viel Diskussion und Ärger mit dem Roboterprogrammierer, besteht er auf die Aussage, dass der Byte-Tausch nicht auf der ABB-Seite gemacht werden KANN und also auf der SPS-Seite erledigt werden MUSS. Und ja, ich kann es zwar auf der SPS-Seite machen, ist aber aus programmtechnischen Gründen nicht sinnvoll, da auch noch andere Teilnehmer auf den gleichen Speicherbereich (DB) zugreifen und da ein Bytetausch nicht gemacht werden darf. Wie ich aber in dem Beitrag sehe, gib es aber auch auf der ABB-Seite mehrere Lösungen. Kann mir (für einen Dummie) bitte jemand ein paar Beispiele und/oder Sreenshots machen, wie der Byte-Tausch bei einem Integer auf der ABB-Seite aussehen könnte.

    Es würde mir wirklich sehr sehr helfen und weitere unnötige und lästige Diskussionen ersparen.


    Vielen Dank! Gruß

  • RoboDummie
    Ich bin zwar selbst Anfänger in der Geschichte aber stand vor einem ähnlichen Problem.
    vielleicht bringt dich das ja weiter.

    Zu beachten ist lediglich, dass zuerst das 2te Byte gemapt werden muss, ansonsten hat man halt das Problem mit den vertauschten Bytes.. Von der SPS werden die Daten als Word geschickt, wüsste jetzt nicht ob als Integer was anderes rumkommt.

    Einzustellen im Signal-Editor von Robotstudio, GI_x liefert in diesem Fall den gewünschten Wert.


    Ansonsten wie Programmiersklave schon angedeutet hat:

    Code
    FUNC num CalcValue(byte byte1,byte byte2)
        RETURN byte1*256+byte2;
    ENDFUNC
  • Hallo,


    ein 16-Bit breites Signalgruppe kann in dem Parameter "Device Mapping" der Signaldefinition z.B. wie folgt definiert werden:

    • Byteswap "8-15,0-7"
    • Bitswap: "15-0"
    • Byte- und BitSwap: "15-8,7-0"

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Ich mache sowas immer mit Analogwerten das klappt ganz gut:


    Wichtig: bei negatiwerten, geht der BitValue von -27648 bis 27648.


    Wenn man beim DivceMapping die Bytes um dreht z.B. 8-15,0-7 dann kommen dies gleich richtig in der SPS an.

    Um Weitere probleme zu vermeiden sollte man eh bei Simens darauf achten dass bei Signalen größer 1 Byte immer mit einem geraden Byte angefangen wird.




    Gruß Stingray

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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