Hallo,
du könntest virtuelle Ausgänge erstelllen und diese mit den erforderlichen Systemeingängen verbinden. Diese Ausgänge setzt Du dann im RAPID-Programm in Abhängigkeit von deinen empfangen Daten.
In RobotStudio kann man Ausgänge leider nicht bei den Systemeingängen auswählen, aber Du kannst dies direkt in der EIO.cfg konfigurieren.
Posts by Micky
-
-
Hallo,
du kannst in RobotStudio unter "Optionen -> Text Editor" die "RAPID Text Stile" ändern.
D.h. Du kannst die Textfarbe, die Hintergrundfarbe, Fett und Kursiv einstellen.
Die Unterscheidung zwischen bool und num geht aber meines Erachtens nicht -
Hallo RobiMan,
du erstellst eine eigene Routine für Deine Suchinstruktion z.B. "SearchLGI" mit den erforderlichen Parametern (ahnlich SearchL) am besten in einem separatem Modul, so dass die die Instruktion später in anderen Projekten weiterverwenden kannst.
Diese Routine ist dafür zuständig, das Dein LongJump immer in diese Routine zurückkehrt und nicht sonstwo im Aufrufstapel landet.
In dieser Routine machst Du folgendes:
----------------------------------------------------------
1. Fehlernummer "ERR_SEARCH_GI", "ERR_WHLSEARCH_GI" und "ERR_SIGSUPSEARCH_GI" mit "BookErrNo" buchen, falls dieses noch nicht erfolgt ist.
2. Prüfen ob der Gruppeneingang bereits den gewünschten Wert hat.
3. Falls dies der Fall ist, brichst Du die Suche ab. (z.B. über Fehlerbehandlung mit eigener Fehlernummer ERR_SIGSUPSEARCH_GI)
4. Interrupt mit dem Gruppensignal verbinden.
5. Falls der Gruppeneingang einen bestimmten Wert haben muss, kannst Du diesen einer globalen Variablen zuweisen, die in der TRAP Routine abgefragt werden muss.
6. Bewegung mit FINE-Punkt ausführen .
7. Interrupt löschen.8. Wenn die Bewegung bis zum Ende ausgeführt wurde, wurde der Punkt nicht gefunden und du muss dies als Fehler auswerten (z.B: mit "RAISE ERR_WHLSEARCH_GI)
9. In der Fehlerbehandlung wertest Du die Fehlernummer "ERR_SEARCH_GI" aus, indem Du
"Storepath" ausführst und die aktuelle Position der Rückgabeposition "SEARCHPOINT" zuweist.
10. Danach führst Du "RestoPath", "ClearPath" und "StartMove" aus um dann mit "RETURN" zurück in die aufrufende Routine zu springen.
11. In der TRAP Routine prüfst Du den Wert des Gruppeneingangs.
12. Wenn dieser Deinen Zielwert erreicht hat, löschst Du den Interrupt, rufst "STOPMOVE" und dann die Fehlerbehandlung mit "RAISE ERR_SEARCH_GI" auf. -
Hallo,
man kann über die Variable "intno" die Nummer des aktiven Interrupts in der Trap-Routine abfragen.
Wenn Du die Interruptnummer mit den Interruptdeklarationen vergleichst, kannst Du herausfinden, welcher Interrupt ausgelöst wurde. Den Signalnamen findest Du aber hiermit nicht heraus.
Beispiel:
TRAP T_SuchSensor
var num nIndex;TEST INTNO
CASE intScanAnalog:
nIndex:=1;
CASE intScanGI:
nIndex:=2;
DEFAULT:
nIndex:=3;
ENDTEST
!Auswertung von nIndex
ENDTRAP
Eventuell könnte man den Signalnamen bei der Interruptdeklaration in ein Array schreiben und diesen in der Traproutine mit nIndex aus dem Array auslesen und mit AliasIo oder GetDataVal den Wert des Signals auslesen -
-
-
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. -
Die Dokumentation findest Du in der "ABB Library" die Du unter dem folgenden Link findest:
ABB Library
Das Dokument siehst Du aber nur, wenn Du einen Premium Account hast. -
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"
-
Hallo,
du kannst den Reset-Button über dem USB-Port am FlexPendant drücken, um dieses neu zu starten -
-
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:- Erstelle ein Backup von der Steuerung [1] die das UAS-Problem hat
- Konfiguriere an einem anderen Roboter [2] die UAS-Daten, so wie Du sie an in der Steuerung [1] benötigst.
- Erstelle ein Backup von dieser Steuerung [2].
- 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].
- 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 igoslaus,
du kannst entweder den oframe eines Wekobjektes in Z-Richtung verschieben oder Du fährst den Punkt mit Hilfe der Funktion "Offs" an. -
Hallo,
du könntes auch RWS (Robot Web service) verwenden um direkt Deine Werte in eine Rapid-variable zu schreiben oder um geänderte RAPID-Variablen zu subscriben.
Nähere Infos hierzu findets Du unter https://developercenter.robotstudio.com/api/RWS -
Hallo,
eine detailierte Beschreibung zu den Achskonfigurationen findest Du Im Handbuch "Technical reference manual RAPID Instructions, Functions and Data types" im Kapitel "Datentypen, confdata"