Posts by HansAlbrecht

    Hallo zusammen,

    ich versuche gerade einen R-30iB Plus Controller als Profinet Controller einzurichten, um mich über einen Siemens 6ES7 158-3AD10-0XA0 PN/PN-Koppler zur Kunden-SPS zu verbinden.

    Laut FANUC Support soll ich im PROFINET-Menü den IO-Controller aktivieren, das IO-Device deaktivieren und die Anleitung befolgen. Ich nehme mal an, der Koppler ist dann das einzige IO Device, das ich laden muss.

    Ich habe also nach Anleitung in PLCnext Engineer ein Projekt angelegt mit dem SW IOC und dem Koppler. Der Koppler hat noch je ein 253Byte IN und OUT Modul bekommen, so wie es der Kunde auch konfiguriert hat. Heraus kam eine controller.tic und eine riesige device-aruid-1.tic mit den Kopplerdaten. Keine Ahnung ob die stimmt, aber in tic.zip gezippt und auf den Roboter nach FR:/PNFB/ geschoben gibts zumindest keine Fehlermeldung. Kann ich die irgendwie prüfen?


    Leider wird aber meine dev_config.dt nicht korrekt geladen. Schon beim Start bekomme ich einen PRIO-721 PNIO: dev_config.dt load error in line 3-5. So sieht die aus:

    Code
    ver : 1.1
    slot[1].name = pn-pn-coupler-1
    slot[1].station_id = 201
    slot[1].di_byte = 253
    slot[1].do_byte = 253
    slot[1].alias = pn-pn-coupler

    Nachdems in der Anleitung steht, habe ich extra darauf geachtet, dass ich keine Leerzeilen habe und vor und nach dem = je ein Leerzeichen ist. Im Profinetmenü in der Device List sehe ich den pn-pn-coupler-1 jetzt mit No. 201, aber in den Details ist DI und DO 0Byte lang und nicht 253 wie eingestellt. Hat da jemand eine Idee dazu?

    Beste Grüße

    Hans

    hi,

    ich versuche nicht die ganze Datei zu laden, sondern nur den Dateinamen als String. Für jedes Bauteil gibts eine Profildatei auf dem Linux-Rechner des Kamerasystems, das über eine Socket Message API geladen werden muss. Dafür gibts eine Routine in Karel, die einen String aus einem String Register entgegennimmt.

    Die SPS hätte den Bauteilnamen parat. Wenn ich diesen irgendwie an das Kamerasystem weiterreichen könnte, müsste ich mir kein dictionary anlegen mit Bauteil Soundso hat die Nummer 15 usw.

    LG

    Hi!

    ich müsste einen String mit einem Dateinamen von einer via Profinet verbundenen SPS an den Roboter mit R30iB-Controller übertragen, um eine Datei auf einem Kamerasystem zu laden. Geht das evtl. über entsprechend viele Bits auf GI?

    Zur Not benenne ich die zu ladenden Dateien auf numerische Zeichen um. Da diese Dateien aber werkstückbasiert sind und den Werkstücknamen tragen wäre ein String eleganter.

    LG
    Hans Albrecht

    Hallo liebes Forum,

    wir haben zwei Extrakarten für Safety-IO in unserem YRC1000 Controller verbaut, um ein paar Safety-Ventile zu steuern. Die grundsätzliche Safety Verbindung zur SPS haben wir nach Handbuch scheinbar hinbekommen, denn in der SLC SIGNAL DISPLAY Übersicht sehen wir Eingangssignale.

    Wie können wir diese Signale FSBIN etc. in einem Job verwenden? Welche Ausgänge sind die, die auf dem Terminal Block landen?

    LG

    Hans Albrecht

    Ich habe nun einen fast funktionierenden Code zur Umrechnung, der nur leider nicht bei negativen Koordinatenwerten funktioniert:

    Beim Schreiben der High-Bytes von LI00X auf LB00X bekomme ich einen "OVER VARIABLE LIMIT" Fehler, weil in die Byte-Variable kein negativer Wert darf.

    Hat jemand eine kreative Idee, wie ich das lösen kann?

    Der Wert sollte tatsächlich nie größer als 100 werden.

    Ich habe nirgends die Gruppendefinitionen gefunden, aber jetzt wo dus gesagt hast, habe ich entdeckt, dass die vordefiniert sind und quasi die PAGEs des GPO sind.

    So sollte es funktionieren, danke!

    *edit: Ja, das klappt:

    SET OG#(98)  EXPRESS B016

    Hallo,

    ich habe einen Integer-Wert auf I016 meiner YRC1000-Steuerung liegen, den ich für die PLC lesbar auf den General Purpose Output 10980-10987 legen muss.

    Mit LADDER kann ich nicht auf den General Purpose Bereich zugreifen, da geht nur der External Output auf >30000:

    Code
    SYS JOB:
    SETREG MREG#(246) I016
    
    LADDER:
    STR #70017
    MOV M246,#31000

    Dort bringt mir der Integer aber leider nichts, der muss auf 10980-10987.

    Gibt es da eine elegante Möglichkeit, das zu bewerkstelligen?

    Beste Grüße

    Hans Albrecht

    Wir haben den Support von Yaskawa gebeten, unser Programm mit ENWAIT zu testen, da es bei unserem Roboter ja noch nicht aktiviert ist (In unserem simulierten Roboter in MotoSim ist es schon verfügbar, aber da funktioniert die Anwendung ja sowieso). Leider haben wir dazu keine Rückmeldung mehr erhalten.

    Da es mit NWAIT auch nicht geklappt hat, habe ich für ENWAIT aber sowieso nicht viel Hoffnung gehabt.

    Wir haben mittlerweile aber eine andere Lösung gefunden: Der Roboter bleibt nicht stehen, wenn zwischen den Bewegungsinstruktionen ausschließlich mit lokalen Variablen gearbeitet wird. Einen Zähler mit INC LB000 zu realisieren war also möglich. Die lokale Variable wird nun beim Programmstart mit dem Wert einer globalen Variable initialisiert und beim Verlassen des Programms zurück in die globale Variable geschrieben.

    Ahh, jetzt hab ichs gefunden.

    Verstehe ich das richtig, dass NWAIT gleich zu Beginn der zugehörigen Bewegung ausgeführt wird, und ENWAIT am Ende der Bewegung? Dann wäre ENWAIT genau das, was wir brauchen.

    Die IF-Blöcke sollen erst verarbeitet werden, wenn der Roboter den Zielpunkt der darüberliegenden Bewegungsanweisung erreicht hat, daher ist NWAIT eigentlicht nicht das, was wir suchen. Wenn die Pfadplanung ohne NWAIT nicht über die IF-Blöcke hinwegplanen kann, dann können wir uns an diese Limitation aber anpassen.

    Trotzdem: Mit NWAIT in der Bewegungsinstruktion haben wir es im Beisein eines YASKAWA-Trainers schon erfolglos versucht, allerdings ohne CWAIT, weil ja der gesamte IF-Block bis zur nächsten Bewegungsinstruktion auf einmal ausgeführt werden soll. Wir könnten noch mit einem CWAIT direkt vor der Bewegungsinstruktion testen.

    Was macht ENWAIT? Dazu konnte ich in meiner Dokumentation nichts finden.

    Hallo,

    danke für die schnelle Antwort! Für die geplante Funktionalität sind die IF-Blöcke und auch die Labels leider unumgänglich. Wir haben auch mit SWITCH-CASE getestet, mit dem gleichen Ergebnis.

    Stehen zwischen den Bewegungsanweisungen keine IF-Conditions sondern nur Labels und Kommentare, funktioniert der Bewegungsablauf rund.

    Die Werte für PL haben wir schon einmal nachgesehen, die sind auf Default (125mm für PL4? bin mir jetzt nicht sicher).

    CR oder PD haben wir tatsächlich noch nicht getestet, das können wir uns mal ansehen.

    Hallo liebes Roboterforum!

    Wir kämpfen seit Jänner damit, dass unser GP110 mit YRC1000 Steuerung Bewegungsabläufe trotz PL=4 nicht durchfährt sondern an jedem Punkt stehen bleibt. Wir versuchen nur nach jedem Punkt unter einer gewissen Bedingung einen Zähler hochzuzählen. Sobald aber eine IF-Abfrage oder ein SWITCH-CASE zwischen den beiden Bewegungsanweisungen steht, fährt der Roboter den Punkt genau an und bleibt kurz stehen, bevor er die nächste Bewegung macht. Auch wenn es in unserem Anwendungsfall nicht ideal ist, haben wir es mit NWAIT probiert, wo er darauffolgende Befehle schon während der Bewegung machen sollte. Das ändert an dem Resultat aber leider auch nichts. Erschwerend kommt hinzu, dass in MotoSim das Verhalten ein anderes ist. Da funktioniert es sehr wohl, und er fährt die Bewegung sauber durch.

    Wir haben unser recht komplexes Programm nun auf einen einfachen Testfall reduziert, wo 4 Punkte zwei mal im Kreis angefahren werden. Nach jedem Bewegungsbefehl steht nur eine IF-THEN-ELSE Anweisung, wo eine Variable gesetzt wird.

    Das Programm ist damit stark vereinfacht, bildet das Verhalten unseres Programmes aber trotzdem ganz gut ab.

    Der Yaskawa-Support konnte uns bisher leider nicht helfen. Habt ihr eine Idee, woran das liegen könnte?

    Beste Grüße

    Hans Albrecht