Beiträge von Programmiersklave

    Man könnte so einfache Verknüpfungen auch zu Beginn des jeweiligen Hauptprogrammes auf ein $CYCFLAG linken, und dann in der SPS.SUB nur noch das $CYCFLAG abfragen.


    Was auch geht, ist: aus der SPS.SUB in eigene Routinen des Hauptprogramms verzweigen, in welchen der spezifische Code steht. Das hat allerdings den Nachteil, dass das Hauptprogramm nicht mehr teachbar oder änderbar ist, solange der Submit-Interpreter rennt.


    Grüße,
    Michael

    Wenn die KRC der PB-Master ist, dann schau trotzdem mal nach, ob die *.ldb-Datei mitgesichert wurde. Den Pfad dorthin kann man in der pfbms.ini festlegen, sinnvollerweise sitzt die master.ldb dann normal auch im Init-Verzeichnis. MUSS aber nicht, und ohne die Datei kanns komisch werden....


    Grüße,
    Michael

    Hallo,


    ich bin gerade an einer Abschlußarbeit: Kuka IR363(KRC32) soll über RS232(3964R) Koordinaten von der Siemens VS710 Kamera bekommen und die Positionen anfahren.


    Machst Du ein Diplom im Technikmuseum?


    Zitat

    Hat jemand so was schon realisiert? Ist sowas überhaupt möglich?


    Vision-Systeme sind ein uralter Hut bei Industrierobotern. Deine spezielle Konfiguration sagt mir freilich nichts...


    Zitat

    In welchen Sprachen ist es überhaupt möglich KRC32 zu programmieren?


    Die Sprache nennt sich KRL: KukaRobotLanguage. Auch schon bei Deinem Museumsstück.


    Zitat

    Was hat es mit *.SRC und *.SUB auf sich?


    Nicht böse sein, aber hier haben die wenigsten Zeit, nebenbei einen Robotergrundkurs zu geben. Abgesehen davon, dass die KRC32 nur noch Leuten bekannt ist, die seit mindestens 12 Jahren im Geschäft sind...


    Das nur zur Erklärung, falls Du enttäuscht bist, dass auf Deine Fragen vielleicht nicht so ganz viele Antworten kommen....


    Grüße,
    Michael


    Jetzt wo das System wieder läuft ist mir beim Einrichten aufgefallen, das die vorher funktionieren Gripper-Softkeys nicht mehr funktionieren. Man kann sie noch sehen, blass dargestellt, man kann sie aber nicht mehr aktivieren. Auch das anwählen der Statustasten für Grippertech bringen keine Besserung. Projektiert sind die Greifer jedoch noch!


    Läuft die SPS.SUB noch?


    Grüße,
    Michael

    muss im System noch irgendwas parametriert werden?


    Ja sicher, in den Maschinendaten (System) muss die Routine als Ereignisroutine auf PowerOn deklariert werden. (Wobei das Systemereignis jetzt exakt so heisst wie Deine Routine... ich würde sie anders nennen.)

    Code
    #
    CAB_EXEC_HOOKS:
    
    
          -Routine "chili1886_init" -Shelf "POWER_ON" -Task "T_ROB1"
    ...


    Grüße,
    Michael

    Im Prinzip gehen auch die klassischen Netzwerkmethoden aus der KRC2. Um die eingebaute Sicherheit zu untergraben, muss man sich allerdings vorher einen zusätzlichen Benutzer auf Windows-Ebene anlegen, und jenem dann die Netzwerk- und Dateifreigaben geben. Dann kann man sich wieder direkt mit C verbinden.


    Grüße,
    Michael

    Wird wohl mit den Ausgängen weniger zu tun haben. Mit etwas Pech setzt Du den Ausgang sogar zu früh, da der Satzvorlauf mit reinspielt. Korrekterweise müsste mit TriggL oder sowas mit der Bahn synchronisiert werden, oder mit waittime\inpos,0 der Vorlaufzeiger vorher angehalten werden.


    Vielleicht bringt Dir das ja das Vision-System durcheinander, so dass das nicht so antworten kann, wie es will.


    Was Du auch noch checken kannst sind die Maschinenparameter des EA-Board. Manche verarbeiten die Signale "polled" mit standardmäßig 100 ms Zykluszeit. Da kann man oft ohne Proble auf 10 runter, oder, wenn die Physik das zuläßt, auf ein ereignisgesteuertes Verfahren.


    Grüße,
    Michael

    Man muss da vielleicht nachhaken, was eigentlich gemeint ist.
    Der Abgleich zwischen RDW und Steuerung ist ja immer nötig (die Frage "was wurde getauscht?").
    Und dann gibts noch die seltsame Info, die WorkVisual liefert. Man könnte erwarten, dass WV nach dem Runterladen des aktuellen (jungfräulichen) Projekts auch den Robbi richtig auflistet. Das ist nicht zwangsläufig der Fall. Dennoch stimmen die Maschinendaten in der Steuerung, lediglich die Informationen für das WV-Projekt sind falsch, was dann auch wieder zur Folge haben kann, dass beim neuen "Compilieren" eines Projektes nun die falschen Daten genommen werden. Lässt sich aber durch Anwahl der korrekten Bibliothek in WV leicht beheben.
    So jedenfalls das, was ich zuletzt mitbekommen habe, hat wohl irgendwas damit zu tun, dass Systeme nicht mehr von Grund auf installiert werden müssen, sondern man nur noch ein Festplattenimage auf die HD dengelt.


    Grüße,
    Michael

    Hier mal zwei Scripte, die mir hauptsächlich beim Kuka helfen, wenn es darum geht, grosse Arrays in Datenlisten anzulegen.
    Zur Verwendung muss u. U. die Menüleiste von UE angepasst werden, so dass man den Menüpunkt "Scripten" sieht. Darunter kann man die Scripte einbinden, wenn man die Zusatzendung ".txt" entfernt hat, so dass sie wieder *.js heissen.


    xmal_einfuegen.js:
    Oft gibt's ja diese Dinger:

    Code
    decl real dings[50]
    dings[1] = 0.0
    dings[2] = 0.0
    ...
    dings[50]= 0.0


    Mich nervt die Pinselei immer entsetzlich.
    Ich schreibe dann nur noch einmal
    dings[##@@##] = 0.0
    und markiere die ganze Zeile (mit Zeilenwechsel, Dreifachklick) und jage dann mein xmal_einfuegen drüber. Der fragt, wie oft, und fügt ein.
    Der Platzhalter (er heisst bei mir ##@@##, aber das lässt sich im Script leicht anpassen) wird dann durch den Zähler ersetzt. Es wird in jeder Zeile nur der erste Platzhalter automatisch ersetzt.
    Hat man keinen Platzhalter, wird halt nichts ersetzt, sondern einfach nur x-mal eingefügt. Vergisst man den Zeilenwechsel, kommt alles hintereinander.
    Achtung: Rückgängig geht, aber nur schrittweise.



    hochzaehlen.js:


    Der ersetzt nur den Platzhalter (bei mir wieder ##@@##) durch Zahlen. Voraussetzung ist, dass der Textblock, in dem sich die Platzhalter befinden, markiert wird. Es wird innerhalb der markierten Zeilen in jeder Zeile nur der erste Platzhalter ersetzt.
    Das Script fragt zu Beginn nach Startwert und Stufenwert, allerdings nicht als Zahlen (merkwürdigerweise erlaubt UE ausschließlich Ziffern bei der Eingabe als Zahlentyp, so dass man keine negativen Zahlen eingeben kann...) sondern als Text. eval() wirds richten, so dass man sogar 3/7 eingeben kann oder -14*(2+1/2), aber da übernehme ich keine Garantien für.
    Auf diese Weise belege ich mir größere Datenfelder vor wenn nötig und fülle sie regelmäßig mit linear ansteigenden Werten, oder versehe eben auch die zweite Dimension des Datenfelds mit einem Index.
    Rückgängig geht nicht!!!!!
    Um den Platzhalter anzubringen, kann man ja auch immer gut den Spaltenmodus oder die gewöhnliche Ersetzung mit regulären Ausdrücken einsetzen.


    Jo, ich bin nicht der muttersprachliche JS-Programmierer, ist nur so zusammengestoppelt und ohne jegliche Gewähr. Aber ich habe mich extrem dran gewöhnt...


    Grüße,
    Michael

    Zitat von [wEm

    link=topic=10517.msg50130#msg50130 date=1338966820]
    Mit der ProConOs hättest du noch eine weitere Task , in welcher du allen möglichen Schindluder betreiben kannst


    Hab' ich ja sogar in der aktuellen Anlage :)
    Nur muss ich das dem SPS-Programmierer überlassen. Der will ja auch noch was zu tun haben. Hilft mir also nix bei meiner krassen Greiferverwaltung mit einem guten Dutzend Zuständen und so...


    Grüße,
    Michael

    Man kann doch in dem einen alles reinbauen was man braucht. Das dürfte dann in den meisten Fällen auch übersichtlicher bleiben.


    Multitasking ist 'ne feine Sache, wenn man eine Anlage steuern will, und wenn man es gewohnt ist ;)
    Die schnelle, zyklische SPS-Task ist ja nur eine Sache. Die Programmierung zeitabhängiger Aktionen ist darinnen eine mühselige Sache, so habe ich dann gerne noch eine langsame Taktgeber-Task, und eigene Tasks für die Positionierung externer Antriebe, wo man auch mal WAIT-Befehle verwenden kann oder gar Interruptgesteuert arbeitet. Und ganz am Rand liegt dann noch 'ne Task, die den Dialog mit dem Bediener macht, dann können die anderen Tasks die Klappe halten und arbeiten. Bin ja schon dankbar, dass man in der KRC4 ein Dialogfenster absetzen kann und dann NICHT auf die Antwort warten muss, sondern jene später irgendwann auslesen kann.


    Zugegebenermaßen ist die SPS.SUB erst in den letzten paar Jahren überhaupt für anspruchsvollere Aufgaben brauchbar geworden... man lotet ja immer Grenzen aus....


    Grüße,
    Michael

    Hallo,


    (KRC 4)
    von der SPS.SUB aus kann man ja in beliebige *.SRC springen, macht KUKA ja schon bei den Technologiepaketen. Andererseits ist es auch möglich, als global deklarierte Routinen in einer *.SUB unterzubringen, und diese aus einer beliebigen SRC heraus aufzurufen.
    Jetzt habe ich mal getestet, eine solche Routine im Submitinterpreter zyklisch aufzurufen und "gleichzeitig" aus dem Roboterprogramm reinzuspringen -> geht problemlos, schrittweise oder kontinuierlich, egal. Der zyklische Aufruf durch den anderen Task bleibt davon unberührt. Auch interne Variablen kommen offensichtlich nicht durcheinander.


    Ich gehe also davon aus, dass die beiden Tasks verschiedene Instanzen derselben Routine benutzen. Anders als vom ABB gewohnt, der zwischen den Tasks recht strikt trennt, kann man hier also Code taskübergreifend verwenden.


    Jetzt frage ich mich allerdings: wieso geht dann - zusätzlich zum Bewegungstask - nur ein einziger Hintergrundtask? Oder gibt es Tricks, ein paar mehr auszuführen? Ich finde das irgendwie halbgar, jetzt mal abgesehen von Leistungslimits. Oder habe ich was übersehen?


    Grüße,
    Michael

    Was aber ausdrücklich CHAR-Strings nicht betrifft.



    Grüße,
    Michael

    Was nicht funktioniert ist Aufruf:

    Code
    ... hinweismeldung ("es funktioniert nicht")


    Weil da ein OUT steht.


    Ich hab zuletzt das hier verwendet:


    und hat eigentl. funktioniert... :denk:


    Grüße,
    Michael

    Ich habe auch mal die x-te Nachkommastelle aus den aktuellen Achswerten als Startwert verwurstet.
    Zufallsgeneratoren programmiert man normalerweise so, dass sie einen REAL-Wert zwischen 0 und 1 auswerfen. Der Rest ist multiplizieren mit dem Maximalwert und dann Runden.


    Grüße,
    Michael