Posts by KaiF

    Hier noch ein Beispiel dazu, wie ich es löse.

    Routinen für die einzelnen Inputtypen mit Fehlerprüfung:

    Die Routine wird jeweils mit Indexwert (für das jeweilige Eingangsargument) aufgerufen. Nachdem ich die Daten gelesen habe, Prüfe ich nach, ob der gelesene Typ dem erwarteten Typ. Entspricht. Andernfalls wird ein Fehler ausgelöst.

    Und hier noch der jeweilige Call aus der Hauptroutine:

    Code
    iTempSocket = getTPEInt(2); -- Get Socketnumber
    if (iTempSocket < 1) or (iTempSocket > 8) then nova_err(6,2); endif
    iTempUALM = getTPEInt(3); -- Get User alarm number
    if (iTempUALM < 1) or (iTempUALM > 10) then nova_err(6,3); endif


    Der Call aus dem TP Programm sieht dann so aus wie bei dir.

    Hallo zusammen,

    ich bin neu in der ABB Welt (bisher nur FANUC und UR). Ich stehe aktuell vor dem Problem, dass ich zwei Socket Verbindungen zur selben Zeit betreiben möchte.

    • Eine in einem Semistatic Hintergrundtask, zyklisch alle 250ms soll hier Nachricht an einen Server raus gehen und die Antwort empfangen werden. Dabei möchte ich den Socket offen halten.
    • Und eine weitere Verbindung zu einem anderen Server im Haupttask, welche an einem bestimmten Punkt geöffnet werden soll und nach dem Empfang der Nachricht wieder schließt.

    Aktuell tritt nun folgendes auf:

    Der Hintergrundtask wird zyklisch, wie angedacht abgearbeitet, der Port bleibt offen, die Daten werden im 250ms Takt gesendet und Empfangen. Der Vordergrundtask bleibt allerdings nach dem Socket definieren bei Socket Connect immer hängen. Nach Ablauf des Timers, bekomme ich im Flexpendant den Socket Error (Timer abgelaufen bevor Abarbeitung abgeschlossen) und in dem Moment steht dann auch die Nachricht auf dem Socket beim Empfänger an. Zudem kann ich an meinem Server erkennen, dass der Socket Verbunden ist, in dem Moment in dem SocketConnect ausgeführt wird.

    Zum Test habe ich nun mal den Hintergrundtask so umgebaut, dass dieser ebenfalls jedes mal den Socket Öffnet und Schließt. Das öffnen kostet mich allerdings nun 500ms fürs Verbinden. Dann funktioniert es problemlos.


    Woran könnte es liegen, dass der Haupttask "keine Verbindung" aufbauen kann? Ist ABB hier tatsächlich auf einen Verbundenen Socket begrenzt?

    Danke vorab für die Hilfe!

    BG

    Kai

    Okay vielleicht nicht genau genug beschrieben.

    Hintergrund ist, ich möchte eine GUI anzeigen, welche verschiedene Optionen zum Editieren anzeigt.

    Nachdem Aufbau der GUI, steht das Script auf der Readabfrage, welche Option geändert werden soll. Dort sind aktuell auch zwei Zahlenwerte (Zurück und Löschen) hinterlegt.

    Aus Platz- und Logikgründen, möchte ich nun die beiden Optionen (Zurück und Löschen) auf den F1-5 Tasten hinterlegen.

    Der User soll dann entweder die Zahl eingeben können oder per TPIN (F1-5) die anderen Aktionen machen können.

    Ich schätze, dass es aufgrund des Wartens bei Read nicht klappt. Aber vielleicht kennt ja jemand den Weg es parallel laufen zu lassen.

    Hallo zusammen,

    kann mir jemand sagen, ob es einen Weg gibt zeitgleich auf eines der beiden Ereignisse zu warten: TPIN (die F-Tasten) oder Eingabe via Keyboard (READ TPDISPLAY)?

    Das KAREL Manual liefert mir hierzu kein Befriedigendes Ergebnis und der Compiler wirft mich mit Fehler raus.

    Danke und Grüße

    Kai

    PS: Habe spaßhalber mal ChatGPT gefragt, die sagt das geht so :S wer weiß ob da je mal einer wirklich KAREL korrekt eingepflegt hat. ^^

    Guten morgen zusammen,

    kennt jemand eine Möglichkeit einen String aus verschiedenen Datentypen (String, Integer, Real) zusammenzusetzen, ohne vorher die anderen Datentypen konvertieren zu müssen?

    Im Prinzip so wie bei WRITE TPDISPLAy (oder anderen Files). So das ich den String anschließend weiter verarbeiten kann.

    Bsp:

    string = err_msg.name,'; Job: ',err_msg.job::3,cr,'Errorcode: ',err_msg.derror::5,'; Description:';

    WRITE TPDISPLAY(err_msg.name,'; Job: ',err_msg.job::3,cr,'Errorcode: ',err_msg.derror::5,'; Description:')

    Guten Morgen Tom,

    liegen dir die Daten für den TCP vor? So liest sich das für mich, dann brauchst du die Approach Punkte garnicht beschreiben. Du kannst stattdessen die FRAMES und TOOLS direkt beschreiben:

    Für USER FRAMES:

    $mnuframe[1,#] = dein_frame (XYZWPR)

    Für TOOLs:

    $MNUTOOL[1, #] = dein_tool (XYZWPR)

    Die 1 beschreibt jeweils die Gruppe. # gibt das zu beschreibende Frame an.

    Die Variablen findest du im Software Reference Manual und den Rest im KAREL Reference Manual.

    BG

    Ja, wenn ich dazu auch die original von FANUC definierten XML verwende läuft das Programm wie es soll.

    Wenn ich allerdings die andere Variante nehme, mit den einzelnen Tags und dem Inhalt zwischen Start und End, dann lässt er die einzelnen Structure Elemente uninitialisiert, läuft allerdings auch ohne Fehler durch.

    Die Variablenausgabe links ist einmal mit der geänderten XML und rechts mit der originalen. Die Ausgabe auf dem Userscreen ist in beiden Fällen identisch.

    Es wirkt fast so als könne er nicht eine Ebene Tiefer tauchen.

    Hallo Hermann,

    danke für das posten des korrigierten Beispiels von FANUC. Endlich hab ich das auch mal laufen sehen. 🙃 War da auch schon seit 2019 vergeblich dran ...

    Kurze Frage, laut Anleitung muss ja die Struktur: <xmlstrct_t first="123456" second="7.8910" third="1" fourth="A string"> gegeben sein.

    Konntest du mit dem Built-In auch eine Struktur wie diese:

    <xmlstrct_t>

    <first>123456</first>

    <second>7.8910</second>

    <third>1</third>

    <fourth>A string</fourth>

    Text assocated with xmlstrct_t tag

    </xmlstrct_t>

    zum laufen bringen?

    Bisher musste ich das mit einem Work-around (einzeln jedes Zeichen durch eine IF-Schleife durchführen und prüfen ob es Datenteil oder Tag ist) lösen. Würde aber gerne auf die Bordmittel zurückgreifen, wenn diese das irgendwie zulassen.

    Danke schon mal vorab.

    BG

    Hallo Sven,

    Gedanke war, dass der Endanwender, wenn er die Applikation einspielt, nur ein einziges Skript, das PC File, benötigt und keine weiteren LS/ TP Files, die er einspielen und am Ende noch modifzieren muss.

    Und da der Endanwender während der Initialiserung und später durch ein Setup die Möglichkeit hat, das entsprechende Positionsregister (und auch einen UAlarm in einem Programm) anzupassen, wollte ich die Erzeugung und Änderung des Programms aus dem PC-File heraus machen. Auch zur Vermeidung von IBN Fehlern (vergessen anzupassen etc.).

    Hallo zusammen,

    kann mir jemand eine kleine Vorlage geben, wie man ein TPE Programm mittels Karel erzeugt bzw. modifziert.

    Es geht um das folgende Programm, welches zwecks Flexibiliserung statt einem statischen Positionsregister ein "flexibles" Positionsregister erhalten soll.

    Die Positionsregisternummer soll dabei aus einer in KAREL hinterlegten Variable definiert werden. Diese wird während eines Setupprozesses vom Anwender festgelegt (oder wieder geändert).

    Da das Programm direkt aus Karel aufgerufen wird, scheiden Argumente aus. Ebenso scheidet ein Zwischenregister wegen des Flexibiliserungsgedanken aus.

    Jemand Erfahrung mit dem generieren von TPE Programmen aus KAREL heraus?

    Danke und beste Grüße

    Kai

    Hallo zusammen,

    ich suche nach einem Weg, eigene Fehlermeldungen (samt Stopp etc.) in der Statuszeile des Robots aus KAREL heraus auszugeben. Wenn möglich mit eigener Facility, Nummer, Text und Severity.

    Bspw: PLX-101 Part not found.

    Weiß jemand wie ich ein eigenes Fehler-Dictionary erstellen kann, welches ich in einen Roboter laden kann? Meine hierzu mal etwas gelesen zu haben, aber finde leider keinen Link mehr.

    Ich kenne sowas bereits aus Customs (bspw. für GM oder VW), daher muss es ja einen Weg geben.

    Bisher habe ich mich mit Useralarms versucht (siehe UAlarm auslösen aus Karel heraus mit Post_Err) und dort auch einen mehr schlechten als rechten Workaround mir zurecht gebaut. Auch hier wäre ein Weg, die UAlarms ohne diese unbeschrifteten Parameter ausgeben zu können gut.

    Bin für Hinweise und Ratschläge sehr dankbar.

    Beste Grüße

    Kai