Alles klar,
Vielen Dank, Ihr habt mir sehr weitergeholfen.
Alles klar,
Vielen Dank, Ihr habt mir sehr weitergeholfen.
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.
Vielen Dank fubini,
Das hatte ich gesucht.
Eigentlich logisch mit $BASE zu arbeiten, bin noch nicht so lange als Kuka Programmierer unterwegs.
Danke auch für die Infos zu den bewegten Basen.
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?
So, habe eine Lösung gefunden.
FOR Z = 1 TO 24 STEP 1
TestText[Z]= 0
ON_ERROR_PROCEED
TestText[Z]= BASE_NAME[U,Z]
ENDFOR Vielen Dank für eure Ideen, hoffe das ON_ERROR_PROCEED verursacht keine weiteren Fehler.
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?
Leider wirft auch STRLEN(BASE_NAME[U,]) den Fehler Operand oder Ausdruck erwartet.
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.