Beiträge von Programmiersklave

    Dann schau doch mal in den Systemparametern und lösche die Hintergrundtask (falls vorhanden) und evtl. Ereignisroutinen (ich denke eher, es ist eine Ereignisroutine auf Start, die stört).
    Verschiedenes -> Systemparameter -> Steuerung -> Ereignisroutinen und/oder Tasks
    Anschließend warmstarten.


    Falls irgendwas davon noch gebraucht wird: VORHER Backup auf Diskette machen. Da sind dann auch alle Programme drauf, so daß man den Quatsch im Speicher löschen kann.
    "Programm" neu anlegen ist wahrscheinlich irreführend; was Du bräuchtest, ware ein neues MODUL mit einer ROUTINE darin. Unter PROGRAMM versteht der ABB nämlich ALLES, was im Speicher ist, und da ist ja schon eins. Weiß gar nicht mehr, wie das da war ... könnte damit zu tun haben.


    Grüße,
    Michael

    Soweit ich mich erinnere, darf zwischen SWITCH und dem ersten CASE gar nichts sein. Jedenfalls kann ich mich erinnern, mal ziemlich lange gesucht zu haben, warum der Kuka mein Programm nicht haben wollte - es war, weil ich einen Kommentar zwischen SWITCH und CASE hatte.


    Grüße,
    Michael


    Es gibt ja schon sowas ähnliches,wo man den Roboter mit der Hand an die Punkte führen kann. Aber das habe ich auch noch nie im Einsatz gesehen.


    Soweit ich weiß, ist das bei Lackieraufgaben mehr gefragt (gewesen), weil das Führen der Sprühpistole wohl eine Art von schwarzer Magie darstellt, wenn man einen gleichmäßigen Auftrag erhalten will. Jedenfalls gibt man dem menschlichen Lacker dann einfach den TCP in die Hand, um das zu erreichen. Meine ich zumindest mal so gehört zu haben.


    Grüße,
    Michael

    "Unsichere Synchronisierung" bedeutet nur, dass ein Synchronpunkt mehrfach benutzt wird - das läßt sich manchmal gar nicht anders machen und ist völlig unkritisch. Davon bleibt die Maschine nicht stehen.
    50056 ist eine Kollisionswarnung, da zeigt er normalerweise auch, was gerade kollidiert ist oder zu schwer geht. Entweder eine Roboterachse oder die externe Achse. Da liegt auf jeden Fall das Problem, nicht bei der Synchronisierung.


    Grüße,
    Michael

    Könnte man nicht auch einfach eine Textdatei lesend öffnen, den gelesenen String umwandeln und in die Variable schreiben?


    edit: Befehle
    open ... \read
    ReadStr
    close
    StrToVal oder StrToByte (?)
    ...
    ...


    Open ... \write
    write
    close



    Grüße,
    Michael


    also ich muss ein Ablaufprogramm schreiben


    @ Daiela (OT): mich würde dann ja doch mal der Rahmen interessieren, in welchem Du diese Aufgabe bekommst. Ist das eine Aufgabe im Studium oder so? Die Sache erfordert doch Einiges an Vorkenntnissen und Wissen drumherum, so dass Du entweder eine lange Zeit SEHR GUT beschäftigt sein wirst oder man Dich übelst in eine Falle laufen lässt....


    Grüße,
    Michael


    das abrufen der größe machst du bestimmt mit filesize


    Ich machs wie Robiman mit einem Index. Die absolute Größe ist ja nicht so ganz wichtig, Hauptsache, es bläht sich nicht endlos auf. Wobei die Abfrage der Dateigröße sicher besser wäre, falls der Index mal verschütt geht...


    Zitat

    aber leerst du dann das älteste file oder löschst du es und machst ein neues
    so mit datum oder so ?? (geht das überhaupt)


    Bei der 4er-Steuerung konnte man das File nur überschreiben, ich habe dann die Inhalte der jüngeren Datei einfach sequentiell in die "Archivdatei" kopiert und diese damit überschrieben.
    Die 5er-Steuerung kennt ja mittlerweile auch Lösch- und Kopierbefehle, soweit ich weiß, damit wird es dann einfacher.


    Zitat

    achja kann man eigentlich die orginal logs von abb auch da mit rein speichern ??


    Weiß nicht genau, man wird tricksen müssen, denke ich, zumindest die Fehlernummer wird sich bestimmt abfangen lassen und durch irgendwas wegschreiben lassen - nur eben nicht die Fehler in der Task, die selbst einen nicht behebbaren Fehler verursacht. Das heisst, wenn Dein Speicher- und Protokollprogramm wegen eines Fehlers stirbt, dann wird es diesen Fehler schwerlich speichern können :)


    Vorsicht, wenn Du mehrere Tasks hast, die gleichzeitig in dieselbe Datei speichern wollen....


    Grüße,
    Michael

    Die Frage klingt so, als könnte man sie mißverstehen.
    Ich interpretier mal so: Du hast Punkte mit Variablennamen in einem Task, teacht im anderen Task und stellst fest, dass die Punkte im ersten Task verändert wurden. In dem Fall ist der Fehler, dass die Punkte als "PERS" angelegt wurden, ohne LOCAL oder TASK davor zu schreiben. Wenn die Variablen als CONST oder als LOCAL PERS oder als TASK PERS deklariert werden, ist man den Effekt los. (Wobei PERS bei größeren Datenmengen evtl. zu Problemen führen kann...)


    Falls Du irgendwas meinst, was sich auf die Anweisung "waitsynctask" bezieht (völlig anderes Thema), präzisiere das bitte noch mal.


    Grüße, Michael


    kann ich die größe begrenzen ?
    so das er 1000 meldungen schreibt und immer die älteste rausschmeißt ??
    oder von der KB größer begrenzen das ich
    3 files mache und immer wenn wieder eine voll ist die älteste löschen kann ??
    sonst werde ich bald einen vollen speicher haben !


    Die letzte Idee ist machbar und sinnvoll, mache ich auch so. Die Datei selbst verkleinern ist nicht problemlos möglich.
    Man muss auch daran denken, dass die Dateioperationen Zeit kosten (zwar nur ein bissl, aber das kann sich zusammenläppern).


    Grüße,
    Michael

    Bitte nochmal KLAR und DEUTLICH, was du eigentlich vorhast.


    @ Daniela: und bitte nochmal klar und deutlich, welche Optionen Du offen hast. Wenn beide Roboter durch die Option "kooperierend" in der höchsten Ausbaustufe miteinander verbunden sind, wäre es eine blödsinnige Verschwendung, diese Fähigkeit NICHT zu nutzen. Sollte es sich um zwei unabhängige Robbis handeln, die nur über eine wie auch immer geartete EA-Kopplung miteinander reden, sieht der Lösungsansatz ganz anders aus.


    Grüße,
    Michael

    Stell Dir das nicht zu trivial vor.
    Erstmal kannst Du die Robbis desynchronisieren, indem Du einen etwas warten lässt nach dem Befehl.
    Dann müssen BEIDE unbedingt die Freigabe des jeweils anderen abwarten, derjenige, der zuerst an dem Programmpunkt angekommen ist, muss den jeweils anderen zum Warten zwingen. Dabei darf man sich nicht darauf verlassen, dass der, der nicht warten musste, tatsächlich erster ist.
    Dann, ganz wichtig: es kann vorkommen, dass aufgrund von Latenzen beim Setzen und Lesen der Signale dennoch beide gleichzeitig losfahren. Man tut also gut daran, nach einer bestimmten, auch wieder unterschiedlichen Zeit, aber noch vor dem Gefahrenbereich, nochmals zu prüfen, ob die Freigabe nicht ein Irrtum war.


    Wenn wirklich einer der Master sein soll und der andere immer auf den ersten warten MUSS und nicht aus produktionstechnischen Gründen auch mal alleine fahren darf, dann kann man auch ein Ping-Pong-Spiel mit Ein-und Ausgängen machen, eine Art Schrittkette.


    Spektakuläre Kollisionen sind aber auch was Feines :shock:


    Grüße,
    Michael

    Hallo,


    Arrays kann man "einfach so" ohne Sonderzeichen umbrechen. Die Zeilenwechsel werden nicht ausgewertet. (Ich glaub, generell nicht.)


    "HOME:" ist ein Alias für den richtigen Pfad. Die Pfade sind im System verankert, ich habe gerade vergessen, wo. Jedenfalls ist die Diskette als "flp1:" (Alias-Bezeichner) ansprechbar oder als "bd0" usw. Unix-Style.
    Man sollte vielleicht wissen, dass es ein paar Versionen gab, wo die Strings "HOME:" im System falsch verlinkt waren. Es gab da Versionen, wo der Slash schon drin war und welche, wo nicht. Das Beispiel wie im Handbuch muss also nicht unbedingt funktionieren....
    Nachschauen kannst Du die Bezeichner unter Datentypen "String", sie werden dort als normale Konstanten angezeigt.


    Bei "UnLoad" gibts den optionalen Parameter "\save", es funktioniert wie im Handbuch beschrieben. Nur den Pfad zu finden ist u. U. ein bissl ungewohnt für Windows-Spezis :)
    Prinzipiell ist es bei Dir aber dann wohl derselbe wie bei "load".


    Grüße,
    Michael

    Schmeiß aus der cell alles raus und ruf dein Programm dort auf, fertig. Das ganze Gelumpe da drin brauchst Du nur, wenn Du tatsächlich auf diese Art Programmnummern übertragen willst etc.


    Start dann über einen externen Taster.


    Grüße,
    Michael

    In einem anderen Thread wurde hier der Umweg über die Achswinkel genannt... CRobT usw. Wobei man dann die Robtargets als Variablen haben sollte, um das halbwegs automatisieren zu können.... - ich würd's nicht machen.


    Ich verwende unser Offline-Programmiersystem - da ist das natürlich pillepalle, da die Bindung der Bahnen und das Referenzkoordinatensystem völlig voneinander unabhängig sind.


    Wenn es tatsächlich den Sinn hat, die Punktkoordinaten vorstellbar zu machen, so dass der Bediener leichter ändern kann (z. B. vorher: irgendein zellenbezogenes Wobj, hinterher: Werkobjekt im Fahrzeugkoordinatensystem) und man daher nötigerweise die angepassten Punktkoordinaten braucht, wird man nicht drumherumkommen, alle Punkte irgendwie umzuschreiben. Wenn es nur darum geht, ein neues, anderes Bezugssystem zu haben ohne die Punkte anzufassen, kann man ja den UFrame das neue Koordinatensystem beschreiben lassen und in den OFrame einen festen Frame packen, der die Differenz vom neuen zum alten Werkobjekt beschreibt. Auf diese Weise hätte man mathematisch dasselbe Werkobjekt, aber an anderer Stelle eingemessen.


    Grüße,
    Michael


    und dann jede Position einmal umrechnen und fertig


    Na ja, kommt immer drauf an... bei jeweils zweieinhalbtausend Punkten auf 5 Artikelvarianten mal zwei Tischseiten oder so wäre das Verfahren eher suboptimal. Und wenn dann noch 2 verschiedene Tools verwendet werden... :P


    Und so richtig am Popo ist man damit, wenn im Programm basisbezogene, sich dynamisch ändernde Verschiebungen verwendet werden.


    Grüße,
    Michael


    3. Programmierweise wie SPS -> Zyklischer Aufbau Deines Programmes. Es dürfen keine Wait etc verwendet werden da sonst andere Funktionen nicht mehr funktionieren würden.


    Das ist nicht zwangsläufig. Man kann mehr als 1 Hintergrundtask anlegen, und wenn es darum geht, irgendwas Spezielles zu steuern, muss man nicht sklavisch dem SPS-Prinzip folgen. Dann ist es kein Problem, auf Eingänge zu warten etc..
    Die "Herausforderung" liegt bei sowas darin, rechtzeitig dafür zu sorgen, dass man die Abarbeitung der Task irgendwie stoppen und zurücksetzen kann, wenn mal was schiefgeht.


    Eine andere Philosophie ist es, die Task überhaupt nichts anderes als eine endlose 30-Sekunden-Warteschleife ausführen zu lassen und alle Programmanweisungen an auftretende Interrupts zu hängen.


    Grüße,
    Michael