Hallo,
mir wurde aufgetragen eine ProfiBus-Verbindung zwischen einem FANUC Arcmate 100iC und einem Pulverförderer des Herstellers GTV einzurichten. Der Pulverförderer fungiert dabei als Slave, und der Roboter als Master. Die grundlegende Kommunikation und das Setzen einzelner Bytes funktioniert inzwischen auch so weit.
Jetzt habe ich jedoch ein Problem bei der Reihenfolge der übertragenen Bits wenn man diese im Fanuc als gruppiert.
Ich möchte bspw. einen Integer-Wert von 431 übertragen. Also: GO[1] = 431
Die Steuerung rechnet das auch richtig in die entsprechende Bitbelegung um. Da 16 Bit vom Pulverförderer erwartet werden sehen die DO[] dann so aus:
431 = 0000 0001 1010 1111 --> DO[15] = 0; DO[14] = 0; .........; DO[1] = 1; DO[0] = 1
Die Steuerung sendet diese Bits dann auch in dieser Reihenfolge. Also:
15/14/13/12/11/10/9/8 | 7/6/5/4/3/2/1/0
So weit so gut. Das Problem ist jedoch das der Förderer die beiden Bytes beim Einlesen vertauscht. Der Förderer deutet die gesendeten Daten in dieser Reihenfolge:
7/6/5/4/3/2/1/0 | 15/14/13/12/11/10/9/8
Normalerweise kann man das einfach umstellen. Der Support von GTV hat mir mitgeteilt dass dafür jedoch das SPS-Programm geändert werden muss und das Geld kostet. Das findet mein Chef natürlich nicht so toll.
FANUC hat mir wiederrum mitgeteilt, dass ich das über ein Makro lösen soll.
Prinzipiell ist das ja auch nicht schwer. Ich dachte ich dividiere einfach klassisch den Integerwert immer mit 2 und bei Rest = 1 ist das Bit eben 1 und bei Rest = 0 ist eben 0. Dabei arbeite ich mit einem R[]-Parameter und weise innerhalb des Makros einzeln die entsprechend vertauschten DO[] zu....so weit zur Theorie
Das Problem ist, dass ich noch nie ein Fanuc-Programm erstellt habe und deswegen recht "erstaunt" auf das Pendant drücke und gucke was passiert. Ich finde online auch keinerlei Dokumentation wo alle Programmierbefehle aufgeführt sind. Die Schulungsunterlagen die mir zur Verfügung gestellt wurden beinhalten nur das Teachen eines Pfades etc. aber keine Berechnungen o.Ä..
Gibt es also eine entsprechende Rechenfunktion für das "Behalten" des Restes? Oder sogar eine alternative Lösung des Problems?
Danke im Vorraus,
Rico