Posts by Micky

    Hallo RobiMan,

    warum verwendest Du nicht einfach das Start-Event, so wie es in der Doku beschrieben ist.

    Falls Du z.B. nach dem PowerOn-Event noch Änderungen durchführst, musst Du jedesmal die Steuerung neustarten um die Signale zu verbinden.

    Außerdem könnten irgenwelche Nebeneffekte auftreten, aufgrund Du dann wieder irgendwelche Workarounds programmieren musst.

    Hallo RobiMan,

    laut Handbuch sollte man die Alias-Signale im Event "Start" verbinden bzw. vor der ersten Verwendung der Signale.



    Das heißt sie sind so lange gültig, bis der Programmzeiger versetzt wird bzw. von "main" gestartet wird (Nur in diesem Fall wird das Start Event ausgeführt).

    AliasIO muss damit nicht bei den folgenden Events verwendet werden:
    "Restart", "PowerOn" oder "StepEvent", etc. ausgeführt werden.

    Falls die Signalverbindung explizit mit "AliasIOReset" gelöscht wurde, muss es vor der nächsten Verwendung neu verbunden werden

    Hallo,

    mit AliasIO verbindest ein reales Signal mit einem im Programm verwendeten Signalvariable und kannst damit den Zustand des verbundenen Signals abfragen bzw. setzen.

    Die realen Signale behalten ihren Zustand bei auch wenn Du die Verbindung mit dem Alias-Signal trennst oder mit einem anderen Signal neu verbindest.

    Beim Verbinden mit AliasIO erhälst Du immer den aktuellen Wert des realen Signals.

    Wenn das reale Signal den Zustand bei einem Neustart beibehalten soll, kannst Du dies über die EIO-Konfiguration über den "Signal Safe Level" konfigurieren.



    image.png

    In dem Step-Event musst m.E. die Alias-Verbindung nicht neu ausführen, da Variablen nur beim Versetzen des Programmzeigers in eine andere Routine zurückgesetzt würden.

    Hallo AtoK09,

    beim Pfadnamen ("Argument 3") musst du "SYSTEM:" weglassen, einfach "Data/CustomOrdner" verwenden.

    Das "Argument 1" in den Systemparametern enthält "System:", um das Backup in einem Verzeichnis oder TAR-File mit dem Systemnamen anzulegen.

    Laut der "Bedienungsanleitung OmniCore" Dokument-Nr: 3HAC065036-003 sieht die Verzeichnisstruktur der OmniCore Steuerung wie folgt aus:



    Der Root-Pfad "\hd0a" gibt es in der OmniCore-Steuerung nicht mehr und man kann auch keine Ordner im Root mehr anlegen.

    Wenn Du das Backup-Verzeichnis nicht verwenden willst, kannst Du das Data-Verzeichnis verwenden und dort einen Unterordner anlegen.

    Verwende einfach den folgenden Pfad "BACKUP" oder "DATA/MeinOrdner"

    Um den Puffer zu leeren, könnte man in einer Schleife solange Daten empfangen, bis der Befehl über den Timeout abgebrochen wird.

    Code
     PROC ClearSocket(VAR socketdev socket)
           VAR string stData;
           WHILE TRUE DO
               SocketReceive socket\str:=stData\Time:=1;
           ENDWHILE
       ERROR
           SkipWarn;
           RETURN ;
       ENDPROC

    Hallo,
    du kannst den Interrupt als "\SingleSafe" deklarieren,

    Das Ereignis des sicheren Interrupts wird bei einem Programmstopp und der schrittweisen Abarbeitung in die Warteschlange gestellt. Wenn die kontinuierliche Abarbeitung fortgesetzt wird, wird der Interrupt ausgeführt.

    In der Trap-Routine musst Du den Interrupt immer neu verbinden, da er sonst nicht mehr ausgelöst wird


    Z.B. ISignalDI\SingleSafe, di1,1,sig1int;

    Hallo,
    es besteht auch die Möglichkeit eine neue UAS-Konfiguration über einen RESTORE in die Steuerung zu laden.

    Hierzu muss Du wie folgt vorgehen:

    1. Erstelle ein Backup von der Steuerung [1] die das UAS-Problem hat
    2. Konfiguriere an einem anderen Roboter [2] die UAS-Daten, so wie Du sie an in der Steuerung [1] benötigst.
    3. Erstelle ein Backup von dieser Steuerung [2].
    4. Kopiere die Dateien "uas_groups.xml" und "uas_users.xml" aus dem Verzeichnis "CS" des Backup der Steuerung [2] in das Verzeichnis "CS" des Backup der Steuerung [1].
    5. Führe einen RESTORE mit dem modifizierten Backup der Steuerung [1] aus, wobei Du die Checkbox "Include Controller Settings" anwählen musst, so dass die UAS-Daten installiert werden.

    Die RAPID-Module wurden wie folgt geändert

    • Das „.prg“-Dateiformat wurde entfernt.
    • Das RAPID-Modul "user.sys", das in allen RAPID Tasks geladen und im HOME-Ordner abgelegt wurde, wurde entfernt. Der Inhalt wird in einem Systemmodul abgelegt, das beim Start geladen wird.
    • Neue Dateiformate für Module, „.modx“ und „.sysx“, da jetzt die UTF-8-Kodierung verwendet wird.
    • „.mod“- und „.sys“-Dateien können noch geladen werden, werden aber in das neue UTF-8 Format konvertiert und können nur als ".sysx" bzw. ".modx" gespeichert werden.
    • Die Dateieendungen ".mod" und ".sys" dürfen nicht in ".modx" bzw. ".sysx" umbenannt werden, da anhand der Dateiendung die Kodierung der Module bestimmt wird und somit falsche Zeichen dargestellt werden. D.h. alte Module laden und mit der neuen Dateiendung speichern.
    • RAPID-Zeichenfolgen in einem Backup können möglicherweise, beim Konvertieren von ASCII nach Unicode, zu lang sein.

    Änderung am String-Format

    • Alle RAPID-Anweisungen, die Zeichenketten verwenden, können UTF-8 verarbeiten. Dies führt zu einigen Unterschieden im Verhalten.
    • Ein String kann 80 Byte groß sein, wobei ein Zeichen aus mehreren Bytes bestehen kann (z.B. ä,ö,ü sind 2-byte groß). Das heißt, enthält ein String ein „ä“, so reduziert sich die maximale String-Länge auf 79 Zeichen.
    • Es gibt neue Instruktionen für die Stringverarbeitung (z.B. Concat, StrSize) sowie die Möglichkeit das Verhalten im Fehlerfall (String ist zu lang) über die Systemparameter einzustellen (Controller -> General Rapid -> TruncateLongRapidStrings) oder den Fehler über die Fehlerbehandlung (ERR_STRTOOLNG).
    • Der beste Weg um zwei Strings zusammen zu bauen, ist aber die Verwendung der Funktion "CONCAT", den die kümmert sich um die Bytegröße jedes Zeichens und gibt den Text der nicht mehr in einen String reingepasst, als Variable zurück.

    Hallo,
    wenn Du mehrere User im UAS anlegst, könntest Du mit der Funktion "GetUASUserName" den gerade am Roboter angemeldeten User abfragen (z.B. "Default User") und in Deinem Menü den Menüpunkt "Geschwindigkeit" ausblenden, wenn nicht der richtige User angemeldet ist.

    Hallo,
    verwendest Du den Systemausgang "Motoren Off" oder "Motor Off State".
    Der Systemausgang "Motor Off" blinkt und "Motor Off State" steht statisch an.

    Wenn die SPS basierend auf dem Systemausgang "Motoren aus" den Systemeingang pulst, solltest Du als Systemausgang "Motor Off State" verwenden.

    Hallo RobiMan,
    wie bereits erwähnt, solltest Du einen Single Interrupt verwenden, da du durch den Dialog in der TRAP-Routine verweilst und alle weiteren Interrupts in die Queue eingereiht werden. Diese werden erst nach dem verlassen Deiner TRAP Routine ausgeführt. Das heißt, wenn Dein Interrupt weiterhin Werte liefert läuft Dir zwangsläufig die Queue über.

    Du solltest auf jeden Fall sicherstellen das deine Endposition mit einem Fine-Punkt angefahren wird, da ansonsten Dein Programm durch den Programmzeigervorlauf an einer falschen Stelle fortgesetzt wird.

    Du solltest einen ClearPath ausführen, falls Du nicht bis zum Endpunkt weiterfahren willst

    Hallo Robiman,
    CyclicBool funktioniert nicht mit Gruppeneingängen.

    Die Interrupt Queue sollte nicht überlaufen, wenn die Interruptroutine sofort wieder verlassen wird.
    Du könntest außerdem einen Single Interrupt verwenden, den Du am Ende der TRAP Routine wieder neu verbindest, so treten zumindest keine weiteren Interrupts auf.

    Du musst die TRAP Routine mit einem Long-Jump verlassen, sobald deine Bedingung erfüllt ist,
    Das heißt. du verwendest den RAISE Befehl in der TRAP-Routine z.B. RAISE ERR_SEARCHL_GI
    und in Deiner SEARCHL_GI-Instruktion verwendet Du in der Fehlerbehandlung

    Code
    ERROR (ERR_SEARCHL_GI)
      IF ERRNO = ERR_SEARCHL_GI THEN
    
      ENDIF
    ENDPROC