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.
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.
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:
Mfg
Micky
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
Habs gelöst fast laut deiner Beschreibung Programmiersklave.
konnte es noch ein wenig verkürzen
aber Danke für den Denkanstoß
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:
Das hilft mir schon mal weiter.
Vielen Dank für die schnelle Rückmeldung!
is zwar ewig her, aber hast mir grad super geholfen !
Hallo,
ein 16-Bit breites Signalgruppe kann in dem Parameter "Device Mapping" der Signaldefinition z.B. wie folgt definiert werden:
Danke Leute! Wieder was gelernt!
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
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können