[KRC4] Übertragung und Ausführung von dynamisch generierten .src Dateien zur Laufzeit

  • Hallo,

    ich schreibe momentan an meiner Masterarbeit und stehe vor dem Problem, dass ich nun Roboterprogramme, welche von einer externen Bahnplanung generiert werden, bei laufendem Roboter auf die Steuerung übertragen, auswählen und anschließend ausführen muss, ohne dabei jemals am smartPad eingreifen zu müssen. (aka automatik extern).


    Die Dateien bekomme ich schon auf die Krc4 übertragen und sie werden auch auf dem smartPad angezeigt.

    Jedoch werden neue Dateien nicht korrekt als ausführbare Module erkannt und wenn ich existierende überschreibe, dann werden die Änderungen zwar auf dem smartPad angezeigt, aber wenn man sie ausführt dann passt das was beim Programmzeiger steht nicht zu dem was ausgeführt wird...

    Hat wohl irgendwas mit der RAM-Disk zu tun, aber da schreit der Programmierer in mir wie KUKA so einen desync zwischen HMI und Roboter verzapfen kann!


    Ich habe hier bereits in mehreren Threads ähnliche Anfragen gesehen, aber nie ist einer bis zur Lösung des Problems gekommen...


    Ich habe bereits von dirloader und ähnlichen paketen gehört, aber ich würde gerne ohne aus kommen.



    Mein Firmenbetreuer behauptet zwar sie hätten sowas schon mal gemacht, aber aktuell bekommt er es auch nicht mehr zusammen, wenn er denn mal die zeit findet, sich um meine probleme zu kümmern...;(


    daher meine frage hier:

    geht es und wenn ja wie?


    ich komm so langsam in bisschen Bedrängnis, da meine Abgabe am 20.04. ist und die Ergebnisse ohne automatische Übertragung schon bisschen getrübt werden...

  • AD
  • Kommt drauf an, was in den Programmen genau passiert.


    Wenn die im Prinzip "nur Bahnen/Punkte abfahren" dann kann man das auch anders lösen. Man kann eine Datei mit den abzufahrenden Koordinaten erstellen (CSV-Datei o.ä.), auf den Roboter übertragen und dort über ein Programm einlesen und einfach abfahren. Dazu braucht es keine weitere Option. Die Möglichkeit Dateien einzulesen ist Standard. Funktioniert einwandfrei, habe mehrere Anlagen programmiert, die schon seit Jahren so laufen.

  • Hermann mit welchen Befehlen würde das dann gemacht werden? Ich kenn mich in KRL nicht so aus, da ich jetzt zum ersten mal wirklich damit arbeite und sonst eher in Hochsprachen (C++ und Java) programmiere...


    Und würden die einfach in ein fixes Array von Punkten reingeschrieben werden?

    Weil ich meine zu wissen, dass es keine dynamischen Arrays in KRL gibt.

    Da müsste ich das dann ja groß genug anlegen dass es immer passt


    Wenn ja gibt es da irgendwelche Begrenzungen in der Größe von Arrays, weil es können je nach geplanter Bahn schon mal ne Menge Punkte zusammenkommen...

  • ...

    Hat wohl irgendwas mit der RAM-Disk zu tun, aber da schreit der Programmierer in mir wie KUKA so einen desync zwischen HMI und Roboter verzapfen kann!

    ...

    Moin,

    bei Deinen Gedankengängen bist Du in die falsche Richtung unterwegs.

    Die Daten befinden sich im für das Echtzeitbetriebssystem reservierten Arbeits-Speicher. Die Daten auf der Harddisk werden bei Änderungen im Arbeits-Speicher aktualisiert. Nicht andersherum. Das Aktualisieren (Sichern) erfolgt auch beim Herunterfahren.
    Der angesprochene DirectoryLoader bewerkstelligt genaugenommen nur das Nachladen (bzw. Entladen) von Harddisk in den Speicher. Generell werden die Daten sonst nur beim Hochlauf des Systems von der Harddisk in den Speicher geladen.

    Ein direkter Zugriff zur Laufzeit der KSS auf die Daten im R1 Ordner auf der Harddisk ist somit sinnlos bis gefährlich.

    Grüße

    never touch a running system

  • Um den DirectoryLoader wirst du nicht drum rum kommen...

    man kommt schon herum, wenn man die internen Schnittstellen kennt.

    Dass KUKA Infos dazu nicht so einfach rausgibt, versteht sich von selbst.

    Wer hat's erfunden?

    Mal direkt angefragt in Augsburg, ob sie Dir dazu den einen oder anderen Tipp geben könnten?

    Geht ja hier um Konzept RTOS VxWorks (VxWin) // Parallelbetrieb zu Windows 7 // Shared Memory - Kommunikation.

    Auch schon hier mal versucht zu Infos zu kommen? KUKA sind ja nicht die einzigen heutzutage, die dieses Konzept einsetzt.

    Eine Masterarbeit sollte auch solche " direkte Kontaktpflege + Kontaktsuche mit Herstellern" beinhalten.


    Dass es zum Beispiel geht:

    https://www.dehof.de/de/software.html

    Matthias Downloader erfüllt diverses deiner Kriterien. Zum Bsp. auch den Filetransfer.


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • 13 Tage Zeitrahmen sind dafür dann schon etwas ambitioniert.;)

    Zu den Fragen:

    Ja, man muss da ein festes Array anlegen, es gibt keine dynamischen.

    Ja es gibt Größenbegrenzungen, 1. was einzelne Arrays angeht und 2. was einzelne Dateien angeht. Aber man kann ja auch mehrere Arrays über mehrere Dateien verteilt anlegen und dann 'intelligent' programmieren. Habe so durchaus schon 200000 Punkte für eine Bahn realisiert, wenn das nicht reicht:?:

    Man könnte evtl. auch eine Art Ringspeicher bauen, und nach und nach / parallel einlesen (das habe ich selber noch nicht probiert).


    Die Befehle heissen, nur mal so ungefähr, zusammengeschrieben, den Rest bitte in der Doku nachlesen:


  • 13 Tage Zeitrahmen sind dafür dann schon etwas ambitioniert.

    20.04.2020 , nicht 20.02.2020

    ganz soooo knapp dran bin ich dann auch noch nicht...


    das läuft dann also alles über den kommandokanal von CWRITE. da hab ich schon mal was zu gelesen...

    erfahrungswerte wie lang das einlesen von so ner punktliste dann so dauert?

    damit ich weiss wenn ich mist gecodet habe XD

  • ok hier mal rückmeldung:


    kuka support schlägt auch zu aller erst directory loader vor, räumt jedoch ein, dass minimale funktionalität ( n punkte zur laufzeut einlesen und hintereinander lin abfahren) auch mit cwrite geht.


    auslesen aus datei klappt und tut auch was es soll...

    parsen der daten geht auch automatisch mit "krl_fscanf", wenn man in der .csv ein leerzeichen als trennzeichen benutzt.

    einfach 6 float werte pro zeile und "%f %f %f %f %f %f"


    größenbegrenzung des statischen arrays für die zu lesenden punkte liegt bei 32766 bei 32767 meckert er

    2^15=32768

    also hats wohl was mit dem positiven bereich eines vorzeichenbehafteten 16bit integer zu tun...


    einlesen von 30000 werten dauert so ca 5 sekunden

    das ist ne dateigröße von ca 2MB und max 10 MB darf man in den ordner Userfiles legen aus dem standardmäßig gelesen wird.

  • ... räumt jedoch ein, dass minimale funktionalität ( n punkte zur laufzeut einlesen und hintereinander lin abfahren) auch mit cwrite geht......

    Da reicht demjenigen am Hotlinetelefon nur die Fantasie nicht aus. Grenzen des Machbaren sind da hauptsächlich dem Erfindungsreichtum des Programmierers geschuldet.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now