Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
08. Februar 2012, 23:39:01
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: >> Roboterprogrammierer gesucht !? <<

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  Mitsubishi Roboter (Moderatoren: Werner Hampel, Urmel)  |  Thema: Mitsubishi RV-M1 Befehlsfolge in C# 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Mitsubishi RV-M1 Befehlsfolge in C#  (Gelesen 1337 mal)
MLOV
Neuling
*
Offline Offline

Beiträge: 6


« am: 04. März 2010, 12:48:07 »

Hallo zusammen,

bin neu hier und benötige mal eure Expertenmeinung.
Nachdem wir den Roboter in Betrieb genommen haben, wollen wir mittels WindowsFormAnwendung über einen Button eine Befehlsfolge starten.

Einzelbefehle lassen sich ohne Probleme absetzen.
Wenn jedoch mehrere Befehle abgesetzt werden wollen, dann wird immer nur der erste Befehl ausgeführt.

hier der Auszug aus dem Programmcode:

 private void sendButton_Click(object sender, EventArgs e)
        {
            try
            {
               
                serialPort.WriteLine("MJ -10, 0, 0, 0, 0");
                serialPort.WriteLine("MJ +10, 0, 0, 0, 0");   
                               
                 
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message,"Error in sendButton_Click");
            }
        }

Weiß grad echt nicht mehr weiter und häng schon mehrere Tage daran.

Vielen Dank schon mal im Voraus für eure Hilfe

Gruß David
 danke
Gespeichert
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #1 am: 04. März 2010, 13:28:59 »

Ich glaube diese alten Steuerungen können keine neuen Befehle verarbeiten, wenn noch ein anderer in Bearbeitung ist.

Beim C++-Interface für den E2 bzw. E4 gab es eine spezielle Funktion mit der man abfragen konnte, ob die Steuerung bereit ist für den nächsten Bewegungsbefehl.

Kannst du deine Befehle nicht mit Zeilennummern versehen und dann als Programm mit RN starten ?

Grüße

  Urmel
Gespeichert
MLOV
Neuling
*
Offline Offline

Beiträge: 6


« Antworten #2 am: 08. März 2010, 14:41:32 »


Hallo    gutidee

Vielen Dank für deine super schnelle Antwort.
Unser Problem ist damit vorerst gelöst.

Aber ich denke, wir werden uns hier auf jeden Fall nochmal melden.

Gruß David

 supi
Gespeichert
MLOV
Neuling
*
Offline Offline

Beiträge: 6


« Antworten #3 am: 11. März 2010, 17:34:18 »

So,

haben uns wohl zu früh gefreut.

Folgender Ablauf funktioniert ohne Probleme:

                serialPort.WriteLine("SP 2");
                serialPort.WriteLine("100 DW 50, 0, 0");
                serialPort.WriteLine("110 DW 0, 30, 0");
                serialPort.WriteLine("120 ED ");
                serialPort.WriteLine("RN 100");

Wenn ich jetzt aber in der Programmabfolge mit einer Absolutposition (MP)
bzw. mit einer Gelenkverfahrung (MJ) in Verbindung mit einer Relativbewegung anfahren möchte, bekomme ich den beliebten Piepston zu hören.  kopfkratz

Anbei ein Bsp dafür:

private void Grundstellung()

{

            serialPort.WriteLine("MP 0, 380, 300, -70, -40");
            serialPort.WriteLine("100 DW 10, 0, 0");
            serialPort.WriteLine("110 ED ");
            serialPort.WriteLine("RN 100");

}

Danke für eure Meinung zu meinem Problem

Gruss David
Gespeichert
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #4 am: 11. März 2010, 18:52:56 »

Auf den ersten Blick würde ich sagen:

private void Grundstellung()
{

            serialPort.WriteLine("MP 0, 380, 300, -70, -40");  <-- Fehlt da eine Zeilennummer ?
            serialPort.WriteLine("100 DW 10, 0, 0");
            serialPort.WriteLine("110 ED ");
            serialPort.WriteLine("RN 100");

}

Sonst kriegt er die Programmzeilen während er sich bewegt und das mag er nicht ...


Wenn es das nicht ist, oder er MP nicht mit Zeilennummer mag, dann speichere die Position mit PD unter einer Positionsnummer (ohne Zeilennummer vor der Zeile) und fahre dann im Programm mit MO dahin.

Oder warte bis das MP fertig ist, bis du die anderen Zeilen sendest.
Gespeichert
MLOV
Neuling
*
Offline Offline

Beiträge: 6


« Antworten #5 am: 24. März 2010, 16:57:32 »

Hallo Urmel,

also den MP-Befehl mag er nicht in Kombination mit der Zeilennummer, haben es jetzt wirklich, wie von dir vorgeschlagen, mit PD gemacht.

Jetzt kommt aber schon wieder ein kleines Problem:


                serialPort.WriteLine("201 GO");
                serialPort.WriteLine("202 TI 5");
                serialPort.WriteLine("203 MO 1");
                serialPort.WriteLine("204 GC");
                serialPort.WriteLine("205 TI 5");
                serialPort.WriteLine("206 MO 3");
                serialPort.WriteLine("207 ED ");
                serialPort.WriteLine("RN 201");

Wenn ich diesen Code eingebe, schließt er zwar den Greifer, öffnet ihn allerdings danach sofort wieder, bevor er in Position 3 fährt, mit anderen Worten ausgedrückt, ich kann momentan nichts von A nach B mit geschlossenen Greifer heben.

Danke für deine Hilfe

Gruss

DAvid
Gespeichert
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #6 am: 24. März 2010, 18:24:29 »

Da kann ich nur spekulieren.  Denken

Bei Movemaster Command auf dem E2 und E4 war es so, dass zu einer Position auch der Greiferzustand gehörte. Wenn der Greifer offen war und man zu einer Position fuhr, die mit geschlossenen Greifer geteacht war, machte der Roboter den Greifer zu sobald, er sich dahin bewegte.

Man brauchte die Greiferbefehle da fast gar nicht, dafür musste man die Greifpositionen in einer offenen und geschlossenen Variante vorhalten.

Bin mir aber nicht sicher, wie das bei M1 war.  Denken

Edit:
Hab gerade mal ins Handbuch geschaut, man kann
Code:
MO 1, O
oder
Code:
MO 1, C
schreiben um bei der Bewegung den Greifer zu steuern.
Gespeichert
MLOV
Neuling
*
Offline Offline

Beiträge: 6


« Antworten #7 am: 25. März 2010, 17:09:06 »

Ja mit dem Befehl MO 1, C in Kombination mit einem TI Befehl hat das Problem gelöst, so dass ich jetzt Teile verschieben kann. Die Möglichkeit die Position mit geschlossenen Greifer zu speichern hätte ebenfalls zum Ziel geführt.danke

Als nächster Aufgabenpunkt steht nun an, die aktuelle Position des Roboters zu bestimmen, um eventuelle Kollisionen mit dem TCP zu vermeiden.

Ich habe dazu im Handbuch auch den Befehl WH (where gefunden). Des weiteren ist folgendes Codebsp für Basic im Handbuch beigefügt:

10 Open "COM 1: 96010, E,7,2" AS#1
20# Print #1, "WH"
30 Line Input # 1, A$
40 Print "Momentane Position = " ; A$
50 END
RUN
Momenta Position = +10,0, +380,0, +300,0, -70,0, -40,0


Wenn ich das jetzt abgewandelt in C# wie folgt schreibe, bekomme ich immer eine Timeoutüberschreitung (habe Timeout verschiedene Werte probiert):

serialPort.Write("WH");   // serialPort.WriteLine selbes Ergebniss, serialPort.Open ist ja nicht nötig da eh schon an
textBox1.text = serialPort.ReadLine();

Es scheint so, als ob ich vom Roboter nichts erhalten würde. Mache ich irgendwas falsch bei der Umlegung des Codes in C#? kopfkratz

Gruss

DAvid
Gespeichert
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #8 am: 26. März 2010, 08:33:25 »

Es scheint so, als ob ich vom Roboter nichts erhalten würde. Mache ich irgendwas falsch bei der Umlegung des

Der Roboter braucht ein Zeilenende, also versuch mal WriteLine statt Write oder Write("WH\r").
Gespeichert
MLOV
Neuling
*
Offline Offline

Beiträge: 6


« Antworten #9 am: 27. März 2010, 12:48:55 »

Hallo Urmel,

ich habe sowohl SerialPort.WriteLine als auch SerialPort.Write Befehl ausprobiert (zweiterer in Kombination mit \r) . Trotzdem bekomme ich keine Rückantwort, daran kann es also nicht liegen.
Gespeichert
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #10 am: 27. März 2010, 14:13:21 »

Bist du denn sicher, dass nichts zurückkommt ?

Wird nach einem
Code:
serialPort.Write("WH\r");
Thread.Sleep(1000);
textBox1.text = serialPort.BytesToRead.ToString();
etwas anders angezeigt als 0 ?

Wenn da eine Zahl größer als 0 steht, könnte es am ReadLine liegen, das erwartet Windows Zeilenumbrüche (die Zeichen "Carriage Return" (13) und "Line Feed" (10)), der Roboter arbeitet aber wahrscheinlich wie seine Nachfolger mit Unix Zeilenumbrüchen (nur CR).

Andernfalls, kannst du mit anderer Software Daten vom Roboter lesen ? Vielleicht mit HyperTerminal (Bei Windows im Startmenu unter Zubehör) ? Wenn nein, ist dein Verbindungskabel ok ?  kopfkratz
Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  Mitsubishi Roboter (Moderatoren: Werner Hampel, Urmel)  |  Thema: Mitsubishi RV-M1 Befehlsfolge in C# « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS