PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] !!! RN-Control + RN Schrittmotor mehr als 255 schritte über Printbefehl verfahren? !!



kpoint
19.02.2013, 16:27
Hallo ihr da draußen :-)
Ich muss in einer Woche mein Hochschul-Projekt abgeben und wärend der Testphase meines Programms kam folgender Fehler auf:

Ich möchte mit meinem Schrittmotor (mit 50:1 Übersertzung) 2500 Schritte verfahren.

Allerdings kann ich mit dem normalen Printbefehl (über RS232) ja nur maximal 255 Schritte verfahren (wenn Rs232daten(7) als Byte dimensioniert ist).

Ich habe jetzt Rs232daten(7) As integer dimensioniert.
Muss ich da sonst noch was machen? (anbei die Subroutine)


Sub Sendebytearray()
Local I As Byte
Print "!#";
For I = 1 To 7
Print Chr(rs232daten(i));
Next I
End Sub


EVtl. "I" auch als Integer dimensionieren und evtl. "For I = 1 to 4096"?
Meine nächste Frage wäre dann, versteht mein RN Schrittmotor solche hohen Werte überhaupt? (habe meinen RN Control leider gerade nicht da zum testen)

Vielen Dank im voraus für eure Antwotrten! :-)

kpoint
19.02.2013, 19:34
EVtl. "I" auch als Integer dimensionieren und evtl. "For I = 1 to 4096"?
Das ist quatsch habe ich nach etwas Überlegen gemerkt.
"I" ist ja deswegen auf 7 gesetzt, weil ein Printbefehl für den RN Schrittmotor einen String aus 7 Charactern( Chr(i) ) besteht.

Habe jetzt gerade meinen RN Control + RN Schrittmotor da zum testen und mit "Dim Rs232daten(7) As integer" geht es definitiv nicht :-( wenn ich da den Befehl 2500 Schritte an den RN schrittmotor sende läuft er vielleicht gerade mal 10 Schritte.

Gibt es da wirklich keine andere Lösung?
Ich will nicht unbedingt schlampig programmieren und den Befehl für 250 Schritte 10 mal hintereinander senden. :-(

Kann mir da echt Niemand helfen?!?! :-(

kpoint
22.02.2013, 11:31
Also für alle die evtl. auch mal das selbe Problem haben,ich habe es jetzt so gemacht:


If L = 2 Then '2500 Schritte fahren
M = 0
While M < 10
Rs232daten(1) = Befehl_schrittzahldrehen
Rs232daten(2) = Motor_2
Rs232daten(3) = 250
Sendebytearray
Incr M
Wait 3
Wend
End If

L wird benötigt wenn man mehrere Schrittzahlen in einem Programm verfahren muss. Für andere Schrittzahlen dann analog L=1, L=3, etc..
Das ganze kommt natürlich in eine Subroutine die man mit gosub im Hauptprogramm aufruft :-)

Wenn Jemand ne bessere Idee hat, lasst es mich wissen! :-)


EDIT: die einzelenen Funktionen wie zb Rs232daten(i) sind aus Beispielprogrammen für RN-Control / RN Schrittmotor von Robotikhardware.de

Frank
22.02.2013, 12:23
In der Anleitung steht das eigentlich genau beschrieben. Die Schreittzahl wird duch LOW und HIGH Byte angebenen.

Der normale Befehl lautet so, das wären 200 Schritte
Print "!#": chr(55);chr(3);chr(200); chr(0); chr(0); chr(0); chr(0);


Hier ist noch das High Byte auf 1, also kommen 1x256 hinzu, also 200+(1x256)=456
Print "!#": chr(55);chr(3);chr(200); chr(1); chr(0); chr(0); chr(0);

Wenn du also 2500 Schritte machen willst, dann musst du erst mal 2500 in 16 Bit Binär umwandel und schaun wie das Low und High Byte lautet. Können heute viele Taschenrechner (Informatik Grundlage).
HEX Zahl wäre 09C4 (09=Dezimal 9) (c4=Dezimal =196)

Also low wäre 196 und High 9

Befehlsfolge in basic:
Print "!#": chr(55);chr(3);chr(196); chr(9); chr(0); chr(0); chr(0);


Dein Programm müsste also nur so aussehen


Rs232daten(1) = Befehl_schrittzahldrehen
Rs232daten(2) = Motor_2
Rs232daten(3) = 196
Rs232daten(4) = 9
Sendebytearray

kpoint
23.02.2013, 17:13
Ah okay konnte mir unter der Bezeichnung Low und High Byte in diesem Fall nicht vorstellen.
Habe mir aber schon gedacht, dass das irgendwie Mit Hex-Zahlen funktionieren sollte.

Rechner brauch ich nicht, sollte ich gerade noch so im Kopf hinbekommen :-D

Also Vielen Dank! werde es gleich mal ausprobieren, das macht meinen Quelltext gleich ein ganzes Stückchen kürzer :-)