Beiträge von Lukas Braun

    Bitte beachten: wenn Du $BASE direkt überschreibst (was problemlos funktioniert) geht bei den jüngeren Systemen (weiss nicht ab welcher Version) das Teachen in diesem Base nicht mehr. Es wird dann nicht in dem gleichen Frame geteacht, wie der, in dem gefahren wird, was unter ExpertTech u. U. gefährlich wird.


    Je nachdem, was Du vorhast, ist es daher die bessere Idee, BASE_DATA[16] oder so als temporäres Berechnungsergebnis zu überschreiben und das dann zu verwenden, auch wenn es ein Schritt mehr ist.

    Ok, danke.

    Ja so etwas hatte ich befürchtet.

    Klar könnte ich einfach irgendeine BASE_DATA nehmen, falls die aber doch mal wer benutzt, wird diese von meinem Programm überschrieben. Das gefällt mir nicht.


    Was ist wenn ich nach der vollständigen Berechnung wieder $BASE = BASE_DATA[BaseNumber] schreibe?

    Bzw mit BAS(#BASE,BaseNumber) wieder den aktuellen Datensatz übertrage?


    Dann müsste ich nur noch eine Lösung für den Fehlerfall finden.


    In meinem Programm selbst benötige ich keine Teachpunkte. Nach der Ausführung meines Programms soll aber die BASE_DATA aktualisiert sein und von anderen Programmen genutzt werden können. Diese haben ja aber sowieso immer BAS(#BASE,...) am Anfang stehen.

    Mithilfe eines Programms möchte ich mir eine neue Basis einmessen.


    BASE_DATA[BaseNumber] = TEACHBASE(BaseNumber, ToolNumber,....)


    In dem Programm soll der Roboter jedoch Verfahren werden. Um es mir etwas leichter zu machen, berechne ich zunächst eine grobe Basis und schiebe mir die dann zurecht, bis sie exakt wird.


    Eigentlich möchte ich mir aber die BASE_DATA eben erst überschreiben, wenn das Programm durch ist. Um den Roboter zu Verfahren möchte ich aber auf die groben Basen zugreifen. Bricht das Programm aber zwischendurch ab, so ist eine der groben Basen hinterlegt.


    Klar brauche ich immer eine Basis, diese ist jedoch im Aufbau auch nur ein Frame. Dementsprechend könnte es ja sein, das ich statt einer Basis eben direkt einen Frame nutzen kann.

    Sorry, meine Erklärung war nicht Ideal.

    Naja, ich möchte ja den Frame als Base verwenden. Also die BASE_DATA[] gar nicht überschreiben. (Zumindest nicht in dem Programm)


    Bisher ist es also so gemacht worden:

    DECL FRAME Basis_Neu

    Basis_Neu = CALCBASE(Ursprung, PunktX, PunktY)


    BASE_DATA[1] = Basis_Neu

    BAS(#Base,1)


    Jetzt steht in 1 meine neue Basis drin, mit der ich nun verfahren kann. Läuft bei CALCBASE aber etwas falsch, dann stehen die falschen Daten auch drin.

    Daher möchte ich direkt im FRAME verfahren, ohne die BASE_DATA[] zu beschreiben.


    DECL FRAME Basis_Neu

    Basis_Neu = CALCBASE(Ursprung, PunktX, PunktY)


    BAS(#Base,Basis_Neu)

    Hallo zusammen,

    Ich brauche nochmal eure Hilfe.
    ich möchte einen berechneten Frame als Basis verwenden. Aktuell ist es so, dass ich die Basis die ich berechnen möchte, immer wieder überschreibe.


    BASE_DATA[Base_Nr] = CALCBASE(Ursprung, PunktX, PunktY)
    BAS(#Base,Base_Nr)


    Schöner wäre es aber, wenn ich einen FRAME berechne:


    DECL FRAME Basis_Neu
    Basis_Neu = CALCBASE(Ursprung, PunktX, PunktY)


    Und diesen dann verwende:
    BAS(#Base,Basis_Neu)


    Kann ich einen Frame Zeitweise als Basis verwenden? Und wie gebe ich das dann an?

    Moin Lukas,


    StrLen liefert dir ja auch nur die Länge des Strings. Weiter wirst du wahrscheinlich mit der Funktion CopyStrArray2Str. Die Funktion kommt allerdings aus der Zusatzsoftware AppTech.

    Danke, sollte ja aber eigentlich auch ohne Zusatzsoftware funktionieren.

    Ich wäre ja froh, wenn ich die String-Länge zurückbekommen würde.

    Leider lässt sich das Programm aber gar nicht starten, da er in jeder Zeile, bei der ich mit BASE_NAME[U,] arbeiten möchte einen Fehler meldet.

    Danke für die Idee, hilft bei mir leider nicht.

    Hatte U bereits einen Wert zugewiesen, aber es jetzt nochmals direkt mit 1 getestet, leider immer noch derselbe Fehler.

    Hast du deinen Code mal auf einer Steuerung getestet?

    Bei mir ist die C4 compact verbaut, kann das noch ein Problem sein?

    Hallo,


    Ich habe ein Problem mit dem CHAR[ 32, 24] Array: BASE_NAME aus der config.dat

    Ich möchte eigentlich nur die Namen auslesen, damit ich sie mit HMI easy ausgeben und bearbeiten kann.


    Der Code sollte ja eigentlich so aussehen:

    FOR U = 1 TO 32 STEP 1

    TextTest[] = BASE_NAME[U,]

    TextSet100(BaseDaten[U].BaseName[], TextTest[])

    ENDFORTextTest ist ein Array mit 24 Zeichen.

    BaseDaten ist eine Struktur, die unter anderem ein Char Array der Größe 24 enthält.


    Auf der Steuerung wird jedoch ein Fehler: "Operand oder Ausdruck erwartet" ausgegeben.


    Habe auch schon versucht die Chars einzeln über eine weitere For-Schleife zu kopieren, hier scheint ein Problem aufzutreten, wenn ein Char nicht beschrieben wurde.


    Habt ihr da eine Idee? Ein zweidimensionales Char Array scheint auch nur in der Config.dat möglich zu sein.