Abarbeiten eines Arrays

  • Schritt für Schritt zum Roboterprofi!
  • ich glaube ich konnte das Problem schon soweit lösen. Die Schleife läuft komplett durch und springt im Hauptprogramm wieder zurück.


    Ich brauche zusätzlich ein VARSTATE für jede Array Position. Leider weiß ich aber nicht wie die Syntax bei eine Array in Verbindung mit VARSTATE aussieht.


    Ich bräuchte ...

    WAIT FOR (VARSTATE "POSARRAY[ZAEHLER]"==#INITIALIZED)


    Aber ZAEHLER ist ja immer ein anderer Wert.

  • Das hilft dir nicht weiter. Die Daten sind ja initialisiert, sonst würde das Programm stoppen und eine Fehlermeldung erscheinen.

    Wo liegt denn der Sinn der Abarbeitung des Arrays, wenn es denn doch wieder nicht abgearbeitet werden soll, bzw auf irgendwas gewartet werden soll?

    Achtung jetzt kommt die Glaskugel: schätze mal da sollen in einem parallelen Prozess (Sps.sub?, oder über KukaVarProxy? ) die Positionen reihum in das array geschrieben werden.

    Da müsste man dann noch etwas mehr Hirnschmalz investieren.

  • Auch ON_ERROR_PROCEED hilft nicht weiter, da das Array komplett initialisiert ist. Würde nur helfen wenn der Index die Arraygröße überschreitet.

    Das Programm ist absolut korrekt und die Abarbeitung ist auch korrekt, es passiert genau das was programmiert ist.

    Völlig unklar ist was cncandi mit dem Programm überhaupt erreichen will. Er hat da irgend etwas vor, das weder aus seinem Post, noch aus dem Film hervorgeht.

  • Leider kann ich nichts erkennen was wie ein Gummiball springt. Was passiert denn wenn du das Programm Zeilenweise abarbeitest? Wie verhält sich der Robi wenn du ohne Überschleifen fährst?


    Ich würde (unter anderem wegen der Übersichtlichkeit) mir eine POS-Variable erstellen welche ich mit der POS aus dem Array beschreibe, diese würde ich in meine LIN abfahren (nach jeder abgefahrenen POS würde ich dann eine nicht erreichbare POS in die Variable schreiben), so kann ich zumindest zu jedem Zeitpunkt auch klar rauslesen wohin der Robi möchte. Dann würde ich ohne Überschleifen das Programm Zeilenweise abfahren und beobachten. Hier sollte dann doch auch zu erkennen sein was in deinem .src vorgeht.


    Edit sagt: Hab den "Gumiball-Zähler" dann doch noch erkannt. Unter realen Bedingungen würde ich sagen das ist die Trägheit des Bildschirms. Auch dein Programmzeiger sagt eindeutig ich bin zu schnell für deinen Monitor. Deshalb einmal versuchen ohne Überschleifen und im "Automatik-Ablauf" auch ruhig mal ohne Vorlauf abarbeiten!

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • gelinkte video zeigt es. die Abarbeitung ist auch korrekt, es passiert genau das was programmiert ist.

    Daten verursachen kleine Bewegungen in der X Richtung, 9mm forwaerts und zurueck, wie erwartet...

  • Programm ist wieder da. Aber wenn wir schon beim Array sind habe ich dazu noch eine kurze Frage.

    Wie kann man den Inhalt eines Arrays löschen? also nicht das komplette Array sondern einzelne Elemente wie Array[0], Array[1], usw.

  • Zitat

    Ich bräuchte ...

    WAIT FOR (VARSTATE ("POSARRAY[ZAEHLER]")==#INITIALIZED)

    Aber ZAEHLER ist ja immer ein anderer Wert.

    Literal durch Variable ersetzen, Variable mit SWRITE beschreiben, zB.


    Code
    DECL CHAR sTmp[20]DECL STATE_T s
    DECL INT Ofs
    ;...
    sTmp[]="                    "
    Ofs=0
    SWRITE(sTmp[],S,Ofs,"POSARRAY[%d]",zahler)
    ;....
  • geht nicht... aber, so was ist naehe... (POS, E3POS, E6POS aber kein FRAME)


    Code
    FOR n=1 to 10   
       Array[n] = {S 0}
    ENDFOR


    oder mit unerichbare Position beschreiben gehts schon...


    Code
    FOR n=1 to 10
       Array[n] = {Z 999999}  
    ENDFOR

    2 Mal editiert, zuletzt von panic mode ()

  • ok, hier ein paar Bilder was wir machen ...


    Bild 1 ist unsere programmierte Software, die den Arduino mit Extruder Steuerung und den Roboter verbindet. Das funktioniert schon sehr gut.


    Bild 2 ist unsere Simulationssoftware, welche den Fertigungsprozess simuliert und den Code erzeugt.


    Es geht darum, den erzeugten Code an den Roboter zu bringen und kompletten Einfluss auf die Bearbeitung des Extruders parallel zur Bearbeitung

    des Roboters zu haben.

  • Wirklich klarer ist das Problem für mich jetzt auch nicht. Aber ich denke meine Glaskugel von gestern hatte doch nicht so ganz Unrecht?

    Da baut man sich halt ein paar Zeiger (integer variable als index des Arrays), einer wird vom PC hochgezählt, wenn er den Punkt abgearbeitet hat, einer vom PC, wenn er einen weiteren Punkt in das array geschrieben hat.

    Man muss auf beiden Seiten sicherstellen, dass der eigene Zeiger nie den der Gegenseite überholt. Fertig ist die Laube.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden