|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 12.03.2022, 16:58 Titel: Roboter mit QBasic programmieren |
|
|
Hallo,
ich möchte einen Roboter ( Mitsubishi Movemaster RV-M2 ) mit QBasic
programieren.Vielleicht kann mir ja hier jemand einen Tip geben wie ich das hin bekomme. Ich würde mich sehr über eure Hilfe freuen .
Aktuell kann ich den Roboter mit der Software Cosirop steuern.Der Roboter hat einen Befehlssatz : "Movemaster Command",der ca. 80 Befehle umfasst.
Das reicht auch um ihn zu bewegen etc.,aber ich kann leider keine
Variablen definieren,habe keine Mathematischen Funktionen +-x/ und
kann keine Bedingungen wie " IF / Then " ,Kreisbewegungen etc.
Der Roboter ist ca. 35 Jahre alt und lief wohl damals noch unter DOS.
Die Einstellungen in "Cosirop"für die serielle Schnittstelle mit denen der PC und der Controller des Roboters kommunizieren sind folgende :
Com1 , Baudrate 9600,Datenbits 7,Parität Gerade ,Stopbits 2
Flusskontrolle : DTR aktiviert ,RTS/CTS aktiviert.
Und das funktioniert auch wunderbar. Um ihn mit Basic zu programmieren
geht man laut Anleitung folgender Maßen vor :
MS-Dos aktivieren ,MBasic4 laden und den Comport öffnen .
Das habe ich in Qbasic im unteren Fenster (direct) versucht mit :
open"com1:9600,e,7,2"as#1 Ergebnis = Laufzeitfehler
mit open"com1:9600,e,7,2,cs,ds,rs"as#1 scheint er den Port geöffnet zu haben.Denn wenn ich den Befehl erneut eingebe,sagt er das der Port bereits geöffnet ist. Soweit so gut .
In der Anleitung steht auch das ich dann für die serielle Schnittstelle die Befehle in folgendem Format sende
print #1,"NT" (Grundstellung) print #1,"Mo1" (Move Pos.1).
wenn ich es so mache kommt zwar keine Fehlermeldung aber bewegen
tut sich auch nix.Wenn ich ins obere Fenster ein Programm schreibe passiert auch nichts.
Ich bin leider kein Computerexperte und bin ohnehin
schon froh das ich den Roboter überhaupt ans laufen gebracht habe.
Ich habe die Dosbox installiert und QBasic ,daß funktioniert ja auch soweit.Auf dem Rechner läuft Windows Pro.
Ich weiß nicht ob es an den Kommunikations Einstellungen liegt ,an der Dos-Version oder an irgendetwas anderem ?
Höchstwahrscheinlich liegts an mir
Im voraus besten Dank
Gruß Michael |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 110
|
Verfasst am: 13.03.2022, 19:32 Titel: |
|
|
Versuch's erstmal mit einem Terminal-Programm.
Z. B. Terminal.exe (B.Kainka)
oder Hterm.
Wenn das funktioniert verwende besser Freebasic oder VB.net oder Powerbasic (CC oder Win) |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 14.03.2022, 12:30 Titel: |
|
|
Hallo,
danke für die schnelle Antwort. Über Hterm hatte ich auch schon mal eine Verbindung aufgebaut ,der Roboter hat aber nur auf wenige Befehle reagiert.
Mit dem Programm Cosirop ,kann ich ihn ja auch steuern.Ich möchte ihn aber,
so wie im Handbuch des Roboters beschrieben ,mit Basic programmieren.
Da ich dadurch viel mehr Möglichkeiten habe.
In Qbasic kann ich ja auch den Comport öffnen.Ich weiß aber nicht ob die einzelnen Parameter ( CS,DS,RS ) stimmen. Der Controller ist auf jeden Fall
per Dip Schalter auf 9600,e,7,2 eingestellt und läuft ja auch unter Cosirop.
Laut Handbuch müssen DTR und RTS/CTS aktiviert sein.Habe ich das durch die angehängten Parameter ( CS,DS,RS ) dann richtig aktiviert ??
Wie bereits geschrieben,reagiert er auf die Befehle ,denen print #1, voran-gestellt sind nicht . ER sollte bei dem Befehl print #1,"NT" in seine Grundstellung fahren .
Ich denke es ist ein kleines Kommunikations Problem mit der seriellen Schnittstelle.
Im voraus besten Dank
Gruß Michael |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1235 Wohnort: Ruhrpott
|
Verfasst am: 14.03.2022, 14:16 Titel: |
|
|
Welche Windows - Version hast du denn installiert? Seit XP ist der Zugriff auf die Schnittstellen nicht mehr so ohne weiteres möglich. Und QBasic ist aus der Sicht von Windows ein ganz "normales" Programm und kein Bestandteil des Betriebssystems.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 14.03.2022, 15:49 Titel: |
|
|
Hallo,
Eine genauere Beschreibung des Problems steht oben in meinem ersten Post. Ich habe Windows 7 auf dem Rechner.
Die Kommunikation Roboter und PC funktioniert ja bereits unter Win7 ,mit der für den Roboter mitgelieferten Software ( Cosirop ).
Bevor es die Cosirop Software überhaupt gab, wurde der Roboter laut Handbuch unter dem Betriebssystem DOS mit Basic programmiert .
Das möchte ich auch ! Den Roboter mit Basic programmieren !
Laut Handbuch wird im Basic Programm die Schnittstelle mit dem Befehl :
open ,geöffnet und die Befehle dann im folgenden Format :
print #1,"Befehl" zum Roboter übertragen .
Auf die Print Befehle reagiert er aber nicht .
Ich denke es liegt nur an den Parameter Einstellungen der Schnittstelle.
Im voraus besten Dank
Gruß Michael |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 110
|
Verfasst am: 14.03.2022, 15:55 Titel: |
|
|
Zitat: | Ich habe die Dosbox installiert und QBasic |
Ich vermute es liegt an der DODBox.
Mit einem 32-Bit Win7 (ohne DOSBox) gab's bei mir keine Probleme mit der seriellen Schnittstelle. |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 14.03.2022, 16:16 Titel: |
|
|
Mein Betriebssystem ist Windows 7 Pro. 64bit . Und mit der Software Cosirop
funktioniert die Datenübertragung über die serielle Schnittstelle ja auch .
In Qbasic im unteren Fenster (direct) gebe ich ein:
open"com1:9600,e,7,2"as#1 Ergebnis = Laufzeitfehler
mit open"com1:9600,e,7,2,cs,ds,rs"as#1
scheint er den Port geöffnet zu haben.Denn wenn ich den Befehl erneut eingebe,sagt er das der Port bereits geöffnet ist.
Wie aktiviere ich mit dem "OPEN" Befehl "DTR" ?
Ich denke RTS/CTS habe ich mit den Parametern "CS,RS" schon aktiviert .
Oder muss ich zu dem "Print #1" Befehl noch weitere Angaben machen ,
das die Daten über die serielle Schnittstelle zum Roboter geschickt werden und nicht woanders hin ? |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4648 Wohnort: ~/
|
Verfasst am: 14.03.2022, 18:12 Titel: |
|
|
Ich habe zugegebenermaßen überhaupt keine Ahnung von der Materie, sondern nur mal einen Thread herausgefischt, der mir vielversprechend erschien. Vielleicht ist da etwas hilfreiches dabei.
https://forum.qbasic.at/viewtopic.php?t=8611 _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 955 Wohnort: Austria
|
Verfasst am: 14.03.2022, 21:38 Titel: |
|
|
Du musst DosBox entsprechend konfigurieren, damit dies die COM-Schnittstelle wirklich nach außen anspricht und nicht nur simuliert. Standardmäßig ist die Konfiguration nämlich folgende:
Code: | serial1=dummy
serial2=dummy
serial3=disabled
serial4=disabled |
Was du brauchst ist aber etwas in dieser Art:
Code: | serial1=directserial realport:com1 | oder eventuell Code: | serial1=directserial realport:com1 defaultbps:9600 parity:n bytesize:8 stopbit:1 irq:4 |
siehe https://www.dosbox.com/wiki/Configuration:SerialPort _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 15.03.2022, 10:34 Titel: |
|
|
Hallo,
danke für eure Hilfe.Ich werde es nachher mal ausprobieren
und die Einstellungen der Dosbox ändern.
serial1=directserial realport:COM1
Hört sich viel versprechend an !
Gruß Michael |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 20.03.2022, 13:58 Titel: |
|
|
Hallo,
ich bin erst heute dazu gekommen es auszuprobieren .
Mit der Einstellung " serial1=directserial realport:COM1 "
hatte sich nichts geändert . Dann habe ich es mit der Einstellung :
" serial1=directserial realport:com1 defaultbps:9600 parity:e bytesize:7 stopbit:2 irq:4 " versucht ,
Und es hat funktioniert ! Vielen Dank für die Hilfe !
Mit " open"com1:9600,e,7,2"as#1 kann ich den Comport öffnen.
Ich kann jetzt im unteren Fenster (direct ) Befehle in der Form :
Print #1,"Befehl" eingeben und ausführen.
Dann habe ich ein kleines Programm geschrieben :
10 open"com1:9600,e,n,7,2"as#1
20 Print #1,"NT (Grundstellung)
30 Print #1,"SP 7" (Geschwindigkeit auf Stufe 7)
40 Print #1,"Mo 1" (Position 1 anfahren)
50 Print #1,"Ti 1" (Wartezeit 1 Sekunde)
60 Print #1,"Mo 4" (Position 4 anfahren)
70 End
Im Einzelschritt führt der Roboter die Befehle dann aus.
Will ich das Programm komplett ablaufen lassen ,dann stopt er
bei Zeile 40 und es kommt die Meldung " Laufzeit Fehler am Gerät".
Ich habe schon in den Unterlagen des Roboters nachgesehen ob man
die Zeit Wartezeit für das erhalten der Befehle irgendwie verändern kann.
Habe aber nichts gefunden . In der Roboter Software "Cosirop" kann ich
die Zeiten einstellen,wie lange er auf Befehle warten soll.
Ich weiß auch nicht ob man mit den Parametern (cs,ds,rs etc.) die
Einstellungen für den Comport so anpassen kann das sich die Warte-
zeiten verlängern oder ob es nur am Roboter Controller einzustellen ist.
Vielleicht hat ja noch jemand einen Tip ,was man da machen könnte.
Nochmals besten Dank
Gruß Michael |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1235 Wohnort: Ruhrpott
|
Verfasst am: 20.03.2022, 17:34 Titel: |
|
|
Mika hat Folgendes geschrieben: | Vielleicht hat ja noch jemand einen Tip ,was man da machen könnte. | Wie wäre es mit einem (oder eine andere geeignete Anzahl von Sekunden) nach Zeile 40?
Noch besser wäre es natürlich, wenn der Roboter bzw. das Steuerprogramm jeweils ein Rückmeldesignal ausgeben würde, sobald ein Befehl komplett abgearbeitet ist. Damit wäre ein perfektes Timing möglich.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 21.03.2022, 12:52 Titel: |
|
|
Hallo,
habe es mit dem Befehl "Sleep" probiert,es ändert nichts.
Bei meinem Programm wird immer nur der 1.Befehl ausgeführt,
egal welcher Befehl (NT oder Mo )etc..
Danach meldet der Roboter Controller eine Störung (lautes Piepen)
und ich muss den Reset Taster betätigen um den Fehler zu löschen.
In QBasic erscheint dann meistens die Meldung "Laufzeit Fehler am Gerät".
Lass ich das Programm im Einzelschritt Modus ablaufen führt er jeden
einzelnen Befehl aus .
Nur das ganze Programm nicht,immer nur den 1.Befehl !
Ich habe auch schon bei dem "Open Com Befehl" die Parameter
CS,DS,CD auf eine längere Wartezeit hochgesetzt z.B. (CS 60000)=60 Sekunden. Das ändert aber auch nichts .
Gruß Michael |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1235 Wohnort: Ruhrpott
|
Verfasst am: 21.03.2022, 15:19 Titel: |
|
|
Hmmm...
Versuche es mal mit einem nach jeder Zeile, so daß du jedesmal eine Taste drücken mußt, um zum nächsten Befehl zu kommen.
Falls das nicht hilft, setz mal ein Semikolon nach jeder PRINT #1... - Zeile. Möglicherweise stört das angehängte LF/CR die Kommunikation.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Mika
Anmeldungsdatum: 12.03.2022 Beiträge: 8
|
Verfasst am: 04.04.2022, 16:31 Titel: |
|
|
Hallo,
ich bin leider erst jetzt dazu gekommen es auszuprobieren.
Mit dem " ; Semikolon ; "hinter jeder Programmzeile bringt leider
auch nichts.Das mit dem " Sleep " Befehl hatte ich ja bereits
schon versucht,hat aber leider auch nichts gebracht.
Trotzdem besten Dank für die Hilfe.
Gruß Michael |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 110
|
Verfasst am: 05.04.2022, 12:56 Titel: |
|
|
Bei den gefundenen Beispielen kommt nach dem Print ein Input.
Versuch' mal:
Code: |
...
20 Print #1,"NT ' (Grundstellung)
25 D$ = Input$(1,1)
26 Print D$
30 Print #1,"SP 7" '(Geschwindigkeit auf Stufe 7)
35 D$ = Input$(1,1)
36 Print D$
40 Print #1,"Mo 1" '(Position 1 anfahren)
45 D$ = Input$(1,1)
46 Print D$
50 Print #1,"Ti 1" '(Wartezeit 1 Sekunde)
55 D$ = Input$(1,1)
56 Print D$
60 Print #1,"Mo 4" '(Position 4 anfahren)
65 D$ = Input$(1,1)
66 Print D$
70 End
|
Nochmal mein Tipp mit einem Terminalprogramm z. B. Hterm oder Terminal.exe zum Testen.
Dann siehst du evtl. Rückmeldungen. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|