Negative Integerwerte von der SPS zum IRB6400RF/2.8-150 übertragen

  • Hallo,


    ich bin noch ein absoluter ABB Anfänger und befinde mich zur Zeit an meinem Techniker-Abschlussprojekt.
    Ich muss über eine bestehende Profibus-Verbindung negatve Integerwerte von der SPS (S7) zum Roboter übertragen. Auf der S7-Seite habe ich schon High- und Low-Byte getauscht. Jetzt funktioniert es, aber leider nur mit positiven Werten. Hat jemand dafür eine Erklärung?


    Gruß strango


    Ps.: Falls es an der Profibuskarte liegt, es ist eine DSQC 352. Sie hat 8 Word in & 8 Word out

    Einmal editiert, zuletzt von strango ()

  • ANZEIGE
  • Habe eben herausgefunden, dass es verschiedene Darstellungsarten für Integerwerte (Ganzzahlen) gibt.


    Siemens benutzt die Betrags-Vorzeichendarstellung. Kann es sein das ABB die Zahlen im Zweierkomplement darstellt?
    Wenn ja, dann würde dies die Fehlinterpretation der negativen Zahlen begründen.
    Kann diese Vermutung eventuell jemand bestätigen?


    Habe leider keine ABB-Doku um der Sache auf den Grund zu gehen.


    Zweierkomplement Betrags-Vorzeichendarstellung
    100 0000 0000 0110 0100 0000 0000 0110 0100
    5 0000 0000 0000 0101 0000 0000 0000 0101
    1 0000 0000 0000 0001 0000 0000 0000 0001
    0 0000 0000 0000 0000 0000 0000 0000 0000
    -0 1000 0000 0000 0000
    -1 1111 1111 1111 1111 1000 0000 0000 0001
    -2 1111 1111 1111 1110 1000 0000 0000 0010
    -5 1111 1111 1111 1011 1000 0000 0000 0101
    -100 1111 1111 1001 1100 1000 0000 0110 0100

    Einmal editiert, zuletzt von strango ()

  • Ok danke Robcheck01,
    wenn ich also ein Wort mit dem Inhalt 1111 1111 1111 1111 zum Roboter sende, dann interpretiert er mir das +65535 und nicht als -1.


    Hab ich das so richtig verstanden?


    Und es gibt sicher keine Methode, wie ich nur auf SPS-Seite die negativen Zahlen umwandeln und zum Roboter übertragen kann?

  • So weit ich weiss kanner nur positive. :wallbash:


    Diese Meldung hast Du ja bestimmt auch bekommen.


    Könntest auch so machen, ist allerdings nur ein Ansatz. Musst natürlich sicher stellen das die SPS das richtige schickt.


    VAR num nWertPLC;


    ! Einlesen des Wertes von SPS
    nWertPLC:=giWertSPS;


    IF nWertPLC<=32767 THEN
    ! Positive Wert
    ELSE
    ! Negativwert
    nWertPLC:=nWertPLC-65535;
    ENDIF


    So könntest Du es dir im Roboter drehen.


    Natürlich kannst Du es auch in der SPS selber umwandeln, das liegt voll bei dir.
    Wie schon gesagt, das mit Vorzeichen Bit ist vieleicht gar nicht so verkehrt.


    Gruss...

  • Hi Strango,
    der Robi kann auch negative Werte vom Bus lesen. Du musst nur den Gruppeneingang (was du auch bestimmt gemacht hast) in einen Analogeingang ändern. Dann klappt das. :supi:


    Ein Gruppeneingang wird immer als Integerwert ohne Vorzeichen gelesen.


    -Name "giWertVonSPS" -SignalType "GI" -Unit "BUSKOMM" -UnitMap "0-15"


    ändern in:


    -Name "aiWertVonSPS" -SignalType "AI" -Unit "BUSKOMM" -UnitMap "0-15"\
    -MaxPhys 32767 -MaxBitVal 32767 -MinPhys -32767 -MinBitVal -32767


    Ein Analogsignal wird als Floatzahl gelesen. Den muss man entsprechend parametrieren.


    Mit einem Wort (16 Bits) kannst du eine Zahl ohne Vorzeichen bis 65535 darstellen.
    Mit dem Beispiel Oben kann eine Zahl von: -32767 bis: 32767 dargestellt werden.


    Auf der SPS-Seite wird ein Integerwert mit zwei Bytes dargestellt. Diese zwei Bytes spiegeln sich in dem Analogeingang wieder. Der Name: Analogeingang täuscht ein wenig.!
    Wenn du auch noch Floatzahlen an den Roboter senden willst muss du den Eingang auf vier Bytes erhöhen. Eine Floatzahl auf der SPS-Seite hat 4 Bytes.


    Wenn du zum Beispiel mit dem oberen Vorschlag (mit zwei Bytes) auch Kommazahlen von der SPS einlesen willst, mache folgendes:
    Auf der SPS-Seite: mit 10 Multiplizieren / 5.0*10=50


    Auf der Roboterseite den Analogeingang anpassen.
    -Name "aiWertVonSPS" -SignalType "AI" -Unit "BUSKOMM" -UnitMap "0-15"\
    -MaxPhys 3276.7 -MaxBitVal 32767 -MinPhys -3276.7 -MinBitVal -32767


    beachte -MaxPhys und -MinPhys! Der Wert wird automatisch Skaliert. Das dividieren durch 10 macht das System selbst. Du brauchst keine Funktion die den eingelesenen Wert noch extra durch 10 teilt. :ylsuper:


    Noch viel Erfolg beim Projekt. :supi:

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

  • Hallo Paulaner,



    Die entsprechende Zeile in meiner EIO.cfg lautet im Moment noch:
    -Name "giEntnahmeOff" -Type "GI" -Unit "PROFI_10" -Phsig 49 -Length 16


    wäre sie so richtig geändert?
    -Name "aiEntnahmeOff" -SignalType "AI" -Unit "PROFI_10" -Phsig 49 -UnitMap "0-15"\
    -MaxPhys 32767 -MaxBitVal 32767 -MinPhys -32767 -MinBitVal -32767


    gruß strango

  • Hallo strango,
    das ging aber schnell. :supi:
    Das ist so noch nicht in Ordnung. Wie ich sehe (lese) hast du keine IRC5 Steuerung sondern eine S4 oder S4+
    Mein Beispiel bezog sich auf die IRC5. Die Configurationsdateien sind bei den Versionen etwas unterschiedlich. Und auf der S4 Version bin ich mir nicht sicher ob das so gehen kann. Das musst du am Roboter selbst ausprobieren. Aber Morgen hätte ich einen entsprechenden Roboter zur Hand.
    Hast du zufällig auch Dokus für den Roboter, speziell Konfiguration ? Ich habe mal etwas angefügt. Hoffentlich ist das nicht zu groß!?
    Ich habe gerade noch mal kurz die alten Dokus gelesen und wie es aussieht ist es bei den älteren Versionen etwas umfangreicher. Da steht etwas von "Physikalische Signalkonfiguration"
    --> Mapped IO sollte zur Konfiguration analoger Signale an EA/Einheiten verwendet werden, welche die S4C Steuerung nicht automatisch konfigurieren kann, z.B.
    EA Einheit auf dem Profibus.


    Probiere trotzdem das mal.


    -Name "aiEntnahmeOff" -Type "AI" -Unit "PROFI_10" -Phsig 49 -LogMax 100 -PhMax 100


    Hast du noch hinter dem Eingang 49 noch andere Signale definiert.
    Mist meine Tastatur spinnt..>
    Es konnte sein das du noch hinter dem Eingang 49 noch weitere 64 freie Bits brauchst.
    Muss mich leider erst mal abmelden.
    Bis dann.

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

  • nun, sowas hab ich mal an nem Fanuc gehabt. Später genauso auch bei KUKA.
    Das wurde dann mit einem 15-Bit-Bitstream gelöst. Das 16. Bit war dann das Vorzeichen. Und die Zahlen mussten noch negiert werden:


    Code
    x_wert = TransX*eins ;lese wert ein
      IF VorzTX == TRUE THEN ;wenn Vorzeichen MINUS
        x_wert = (Konst_maxwert - x_wert) * (-1) ;dann rechne um in negative Zahl
      ENDIF


    wobei folgende Konventionen gelten:
    Konst_maxwert = 32768
    eins=1.0 (bei KUKA brauchts das, sonst ists n Integer am Ergebnis, was fatal wirkt)
    TransX = 15 Bit vom Bus (0-32767)
    VorzTX = das sechzehnte Bit (32768)


    Die SPS kann sowas auch, glaube ich. Da verweise ich aber mal an Dennis Keipp oder wen der SPSen besser kann als ich.
    An ner Siemens schreibe ich die negative Zahl direkt ins Ausgangwort und das passt dann...

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

    Einmal editiert, zuletzt von WolfHenk ()

  • Wahnsinn so viele gute Beiträge!
    Wie heißt es immer so schön: "Viele Wege führen nach Rom." oder vielleicht besser "Wer die Wahl hat hat die Qual!"


    Ich denke ich werde als erstes mal die Zeile von Paulaner porbieren.
    Obwohl ich Lösung von WolfHenk auch gut finde, da sie steuerungsunabhängig ist und eigentlich immer funktionieren müsste.


    Werd mal sehen was mich als erstes zum Erfolg bringt!


    Gruss strango

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