Beiträge von Micky

    Hi,


    über den Parameter Object kannst Du den Namen filtern, in dem du einen einen regulären Ausdruck angibst. Die genaue Beschreibung wie das funktioniert kannst Du dem Referenzhandbuch entnehmen.


    Anbei die Lösung für dein Problem:


    Code
    SetDataSearch "robtarget"\Object:="pROBPOS_*"\InTask;


    Gruß


    Micky

    Hi,


    du kannst die Instruktion GetDataval zum auslesen einer Variablen verwenden. Desweiteren besteht die Möglichkeit nach allen Robtargets zu suchen und ggf. noch einen Namensfilter zu setzen (siehe SetDataSearch)


    Anbei ein Beispiel:



    Ich hoffe das hilft Dir weiter.


    Gruß
    Micky

    Hallo Lars,


    RobInstall ist nur für die Roboter mit einer S4c-Plus Steuerung gedacht und kann bei einer S4c-Steuerung nicht verwendet werden.
    Das Betriebssystem der S4c-Steuerung hat die Bezeichnung OS3.1 oder OS3.2, bei der S4c-Plus heißt das Betriebsystem OS4.0.


    Ab der S4c-Plus gibt es eine neue Rechnerhardware, die auf einem PC-Board basiert, und ist somit nicht mehr kompatibel mit der S4c.


    Für die S4c gibt es keine RobInstall-Software, sondern nur die Bootdisketten.


    Mfg
    Micky

    Hallo Lars,


    also ich würde mich an den Service von ABB Robotics wenden, die können Dir bestimmt einen Bootdiskettensatz für genau Deinen Roboter erstellen.


    Weiterhin können sie Dir bestimmt auch bei Deinem Problem mit dem Joystick und dem fehlenden Kabel weiterhelfen.


    Eventuell musst Du die Bootdisketten bezahlen, aber das ist mit Sicherheit immer noch günstiger als die Steuerung wegzuschmeißen


    Kontaktinformation:
    ABB Robotics GmbH
    MCI/CS/CS-TSU
    Grüner Weg 6
    D-61169 Friedberg


    Telefon +49 6031 85-307
    Fax +49 6031 85-426


    http://www.abb.de/product/ge/9AAC128747.aspx


    Gruß
    Micky

    Hallo Lars,


    eine Verbindung zu einem Roboter kannst Du bisher nur bei der S4c-Plus per FTp-Zugriff auf die Flashdisk herstellen.


    Ein Online-Zugriff direkt auf das Roboterprogramm geht erst ab der IRC5.


    Bei allen Steuerungsgeneration vor S4c-Plus, also bis Robotware 3.2, erfolgt der Zugriff auf das Roboterprogramm durch Laden bzw. Speichern auf einer Diskette, Ramdisk oder einer Remote Mounted Disk.


    Auf die Ramdisk der S4c Steuerung, kann man mit einem FTP-Programm nicht zugreifen, da die S4c-Steuerung keinen FTP-Server besitzt.


    Die serielle Kommunikation kann man nutzen um Daten z.B. mit einer Kamera (Visionsystem) auzutauschen.


    Über einen Terminalserver kann man auch einen Roboter seriell an ein Ethernet basiertes Netzwerk anschliessen.


    Es gibt die Möglichkeit eine Neztwerkkarte bei der S4c nachzurüsten, mit der z.B. ein Zugriff auf eine Remote Mounted Disk (PC) über FTP bzw- NFS-Zugriff möglich ist, also zum Laden und Speichern von Modulen von einem Server, dazu wird aber zusätzlich eine Roboteroption benötigt.


    Über eine Software die auf der Webware bzw. WebWare SDK basiert kann man, auf die Variablen, Signale zugreifen oder ein Backup bzw. Restore durchführen, hierzu ist einerseits am Roboter die Option FactoryInterface erforderlich und anderseits ein Programm wie "S4Online" oder ein selbst erstelltes PC-Programm das auf der Webware SDK basiert.


    Das ganze ist aber nicht ganz billig, da Du zusätzliche Hardware und Software benötigst.


    Gruß


    Micky

    Hallo Lars,


    soweit ich mich erinnere, waren die Bootdisketten seriennummerabhängig und haben Eure Zusatzoptionen entsprechend freigeschaltet.


    Wenn Du jetzt einen Bootdiskettesatz von einem anderen Roboter verwendest, so sind ggf. nicht alle Deiner benötigten Optionen vorhanden.


    Außerdem würde sich Dein Roboter mit der Seriennummer des neuen Bootdiskettensatzes melden.


    Gruß


    Micky

    Hallo,


    um einzelne Bits eines Bytes, also maximal 8 Bits, setzen oder löschen zu können gibt es in RAPID die Instruktionen BitSet und BitClear.


    Der Programmcode könnte z.B. wie folgt aussehen:



    Gruß


    Micky

    Hallo,


    probier bitte folgendes aus:


    Im Eigenschaftsfenster des Buttons gibt es den Abschnitt "States"


    1. Setze die Eigenschaft "AllowMultipleStates" auf True und wähle dabei "Text" und Backcolor" in dem sich öffnenden Dialog aus.


    2. Verbinde die Eigenschaft "SelectedStateValue" mit dem Ausgang den Du schalten möchtest


    3. In der Eigenschaft "States" füge die folgenden Zustände in der Auflistung hinzu:


    0: Backcolor: red, Text: Luft aus, Value: 0
    1: Backcolor: lime, Text: Luft ein, Value: 1


    4. Erzeuge das Clickereignis für den Button


    5. Füge in dem Event panel die Action "Invert a digital signal" hinzu und wähle dann Deinen Ausgang aus der geschaltet werden soll.


    Sobald die Applikation gestartet wird, wird der Button in der erforderlichen Farbe rot bzw. grün, sowie mit den eingestellten Texten in Abhängigkeit von dem Zustand des Ausgangs angezeigt.


    Beim Betätigen des Buttons wird der Ausgang invertiert und der Button aktualisiert automatisch seinen Zustand (Farbe und Text)


    Gruß


    Micky

    Hallo,


    ich glaube die Funktion GetTaskName hilft hier nicht weiter.


    Meines Erachtens müsstest Du in jedes Modul eine Kennzeichnung für den Modulnamen hinterlegen, der mit SetDataSearch gesucht werden kann.


    Zum Beispiel könnte man einen String mit dem Modulnamen oder die Codenummer in einem eigenen Datentyp (z.B. codenum) in jedem Modul deklarieren
    und diese Variable über SetDataSearch suchen.


    Über eine While-Schleife können alle Deklarationen nacheinader aufglistet werden (siehe unten).






    Gruß


    Micky

    Hallo,


    SpeedRefresh gibt es erst seit der Robotware 5.09, so dass alle vorherigen Versionen mit der Instruktionen Velset auskommen mussten.


    SpeedRefresh arbeitet unabhängig von dem am Flexpendant eingestelltem Override und ist Bewegungstaskbezogen.


    Über die Instruktion CSpeedOverride() kann der am Flexpendant eingestellte Systemoverride ausgelesen werden, aber durch SpeedRefresh nicht beinflusst werden.


    Der über SpeedRefresh eingestellte Override wird über die Funktion CSpeedOverride(\CTask) ausgelesen.


    Die beiden Overides beinflussen sich gegenseitig, da die einzelnen Prozentwerte multipliziert werden
    z.B. Systemoveride 50%, SpeedRefresh 75% ==> Resultiernder Override = 0.5 * 0.75 = 0,375 = 37,5%


    Gruß
    Micky

    Hallo,


    beim ABB Roboter besteht die Möglichkeit die Motorströme, etc. auch über RAPID (Funktion TestSignRead) auszulesen.


    Mit den vordefinierten Testsignalen können aber nur die Werte einer externen Achse ausgelesenen werden.


    Um die Testsignal-Codes für das Auslesen der Roboterachsen zu erhalten, wendest Du Dich am besten direkt an ABB.


    Gruß
    Micky

    Hallo,


    meines Erachtens benötigt die Funktion "ReadStr" ein <LF> als Endekennung für das Einlesen eines Strings.


    Probier doch mal ob Du ein LineFeed-Zeichen (<LF> = 0A h) an Deinen zu sendenden Text anhängen kannst.


    Alternativ könntest Du auch mal probieren ob das zeichenweise Einlesen mit "ReadBin" funktioniert, also nur um sicherzustellen ob die Übertragung funktioniert.



    Es könnte aber auch sein, dass Deine Baudrate zu hoch eingestellt ist, bzw. dein Kabel zu lang ist. Beim seriellen Übertragen über RS232 beträgt die max. Kabellänge 15m.


    Gruß


    Micky

    Hi,


    wenn Du das Robotersystem noch auf deinem Rechner hast kannst, Du mit RobInstall den Key auslesen, indem Du auf Update klickst und anschließend Dein System in der Listbox auswählst.


    Rechts in der Optionsanzeige musst Du ganz nach unten scrollen und kannst dann die "Loaded Keys" sehen.


    Gruß


    Micky

    Hallo,


    ich habe bisher die serielle Kommunikation immer nur über einen binär geöffneten Kanal durchgeführt, so dass man sich das Öffnen und Schließen spart, wenn man Schreiben bzw. Lesen will.


    Desweiteren solltest Du eine Fehlerbehandlung für die Überschreitung der Wartezeit einfügen, denn sonst wird der Timeout-Fehler als Systemfehler angezeigt.


    Anbei ein kurzes Beispiel für den binären Zugriff, wobei Du die Fehlerbehandlung noch fertig programmieren musst.





    Prinzipiell gibt es bei der seriellen Kommunikation die folgenden möglichen Fehler:


    1. Das Kabel ist nicht gekreuzt (Nullmodemkabel)
    2. Die Kommunikationsparameter sind an beiden Steuerungen nicht identisch (also Baudrate, Stopbit, Parität, Anzahl der Bits)
    3. Es fehlen Steuerzeichen bei der Übertragung der Daten (z.B. "\0D" für Carriage Return)
    4. Die Anzahl der zu übertragenden Zeichen stimmt nicht mit der erwarteten Anzahl überein.


    Anmerkung:


    Die Bezeichnung der Signale (z.B. DO10_14) solltest Du vielleicht nochmal überdenken, den die Verwendung der physikalischen Adresse im Signalnamen bedeutet, dass der gesamte Programmcode angepasst werden muss, wenn das Signal auf eine andere Karte bzw. anderen Kanal gelegt wird. Desweiteren ist für einen Aussenstehenden die Verwendung des Signals nicht klar, hier würde eher eine Signalbezeichnung helfen, die die Funktion des Signals beschreibt.



    Gruß


    Micky

    Hi,


    bei der Signaldeklaration von Eingängen gibt es die Möglichkeit einen Aktiv- und einen Passivfilter zu definieren, d.h. Du gibst die Zeit in ms vor, die das Signal mindestens auf high (aktiv) oder auf low (passiv) sein muss, bevor die Steuerung dieses verarbeitet.


    Hierdurch kannst Du dem Flackern des Signals entgegenwirken und der Interrupt wird nicht ständig ausgelöst.


    Gruß


    Micky

    Hallo Buschmann,


    die Fehlermeldung bezieht sich auf deine Load Instruktion in der Zeile 101 der main routine.


    Zitat


    Load "HOME:/4-Punkt-Greifer/4-Punkt-Greifer.mod";
    %"4-Punkt-Greifer:main"%;


    Versuche mal Deine Module und Routinen so umnzubenennen, dass diese nicht mit einer Zahl sondern mit einem Buchstaben beginnen.
    Außerdem sind Bindestriche in Modul- und Routinennamen nicht erlaubt.


    z.B.

    Code
    Load "HOME:/Pkt4_Greifer/Pkt4_Greifer.mod";
      %"Pkt4_Greifer:main"%;


    Weiterhin solltest Du darauf achten, dass die Main-Routine in dem Modul das Du lädst als lokal deklariert ist, da diese sonst zweimal vorhanden ist oder Du verwendest einen anderen Namen als main.


    Gruß
    Micky

    Hallo mischwarz,


    die Verwendung eines Interrupts, so wie Du ihn einsetzt, ist für Dein Problem eher ungeeignet, da die momentane Abarbeitung kurz unterbrochen wird und nach beendigen des Interrupts genau dort wieder fortgesetzt wird. Wird eine Bewegung nicht mit Stopmove angehalten, so fährt der Roboter in jedem Fall bis zum programmierten Endpunkt.


    Wird die Bahn mit Clearpath verworfen und Du setzt das Programm fort ohne eine neue Bewegungsinstruktion aufzurufen, bleibt der Roboter stehen, da keine berechnete Bahn mehr vorhanden ist.


    Die generelle Lösung für das Problem ist eigentlich der Einsatz der SearchL-Instruktion.


    Du könntest Dir aber eine eigene Suchinstruktion in Verbindung mit dem Interrupt schreiben, die Bewegung muss aber auf jedem Fall mit einem finepunkt enden (wegen Rechnervorlauf !!).


    Du verlässt Deine Interruptroutine mittels Fehlerbehandlung und Longjump und gelangst so in die Fehlerbehandlung deiner Suchinstruktion und kannst von dort Dein Programm fortsetzen.


    Deine Suchinstruktion könnte in der Grundstruktur zum Beispiel wie folgt aussehen:



    Gruß
    Micky

    Hallo Free,


    Du könntest z.B. deine Positionswerte als Analogeingang übertragen, denn dann bist Du in der Lage die Werte zu skalieren.


    Alternativ könntest Du deine Positionswerte auch als 1/10 mm übertragen, indem Du an der SPS die Positionen mit dem Faktor 10 multiplizierst und am Roboter die empfangenden Werte wieder durch 10 teilst.


    PackRawbytes kann nur bei serieller Datenüberatragung oder by Socket Messaging verwendet werden, da hier eine Byte Array übertragen wird.