Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
18. Mai 2012, 11:55:37
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: English and international Robotsupport now on Robot Forum. Also Supported by the Moderators of the roboterforum.de

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Negative Integerwerte von der SPS zum IRB6400RF/2.8-150 übertragen 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Negative Integerwerte von der SPS zum IRB6400RF/2.8-150 übertragen  (Gelesen 1279 mal)
strango
Neuling
*
Offline Offline

Geschlecht: Männlich
Beiträge: 9



« am: 20. Mai 2008, 20:46:58 »

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
Gespeichert
strango
Neuling
*
Offline Offline

Geschlecht: Männlich
Beiträge: 9



« Antworten #1 am: 21. Mai 2008, 15:24:05 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #2 am: 21. Mai 2008, 16:37:25 »

Hallo Strango,

das liegt daran. Das er nur positive Zahlen empfangen und senden kann.Wenn du positive und negative Zahlen über das gleiche Byte haben willst. Müsstest Du noch ein extra Bit deklarieren was dir das Vorzeichen angibt.

Dann musst du nur noch deine eingelesen Zahl auf ein Numerische Variable legen und invertieren.

Gruß..
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
strango
Neuling
*
Offline Offline

Geschlecht: Männlich
Beiträge: 9



« Antworten #3 am: 21. Mai 2008, 17:04:54 »

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?
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #4 am: 21. Mai 2008, 18:16:29 »

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...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
Paulaner
Junior Member
****
Offline Offline

Geschlecht: Männlich
Beiträge: 116



WWW
« Antworten #5 am: 26. Mai 2008, 19:49:15 »

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
Gespeichert

Erfahrung kann man nicht kaufen,
aber man kann dafür bezahlen.
strango
Neuling
*
Offline Offline

Geschlecht: Männlich
Beiträge: 9



« Antworten #6 am: 26. Mai 2008, 20:45:28 »

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
Gespeichert
Paulaner
Junior Member
****
Offline Offline

Geschlecht: Männlich
Beiträge: 116



WWW
« Antworten #7 am: 26. Mai 2008, 21:48:31 »

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.
Gespeichert

Erfahrung kann man nicht kaufen,
aber man kann dafür bezahlen.
WolfHenk
Forenjunkie
********
Offline Offline

Geschlecht: Männlich
Beiträge: 1522


GIT d- s+:- a+ C++ UL+ P+ L+ E-- W++ !N !o !K w !O


WWW
« Antworten #8 am: 27. Mai 2008, 00:35:54 »

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...

Gespeichert

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."

http://www.xing.com/go/invita/5634410

PMs mit Anfragen wie "Wie geht das..." werden nicht beantwortet. Diese Fragen und die Antworten interessieren jeden hier im Forum.
http://roboterszene.de
strango
Neuling
*
Offline Offline

Geschlecht: Männlich
Beiträge: 9



« Antworten #9 am: 27. Mai 2008, 13:02:57 »

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

Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Negative Integerwerte von der SPS zum IRB6400RF/2.8-150 übertragen « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS