Hey, ich hab ein ziemliches Problem. Soll in einem Projekt in der Schule über die serielle Schnittstelle mit einem Schrittmotor zwei Schlitten bewegen, habe aber nicht wirklich Ahnung wie ich das machen soll. (Das soll ich mit dem C++Builder 6 machen.) Kann mir da irgendjemand weiter helfen? Wär echt super, mfg Lisa
Wer suchet, der findet: http://www.mikrocontroller.net/forum/forum.php?query=rs232&forums%5B%5D=8&onlyroot=on&number=20&action=sendsearch
Wie viel Zeit hast du dafür ?
Das sinnvollste wäre wohl die hardware zu bauen und dan software dazu
schreiben.
>C++Builder 6
Also in C was für ein BS ?
Ich könnte es so aufbauen:
PC->MCU->Leistungstufe->Schrittmotor
Sicher liese sich MCU weglassen aber so wirts wohl einfacher.
Also zu erst:
Was für ein Schrittmotor soll gesteuert werden,Typ-bezeichnung, hast du
vielleicht Dattenblatt ?
Ich bräuchte es, um zu wissen wie die Leistungstufe aufgebaut werden
soll, dann kann ich dir weiter helfen.
Ich habe noch knapp 2Wochen dafür Zeit. Also, der Motor heißt "ProStep4 kompakt" von Herzel. Ich hab dazu auch noch zwei Endstufen (Medi oder Mini Step, weiß mein Lehrer auch nich,er hat das alles mal irgendwann bekommen), die ich da irgendwie mit reinbauen soll. Ich hab aber überhaupt keine Ahnung wie und mein "toller" Lehrer auch nich. Was von MCU hat er nich gesagt. Ich hab auch schon mit nem Programm angefangen. Da versuch ich den Schrittmotor über die RS232 anzusprechen. Ich kann die COM auch öffnen und wieder schließen, aber wenn ich sie nachm Schließen wieder öffnen will, geht das nicht mehr. Weiß auch nich, wieso. Ich kann auch schon diese Einstellungsdaten wie Stopbit und Parity,... senden(wenn das wirklich funktioniert...,kann das ja nur in der Schule ausprobieren). Was meinst mit Datenblatt? Als Technische Daten stand da: Maße: 110x 165x 40mm Steckverbinder: 5,08 mm Schraub/Steckklemmen Stromversorgung: 24Vcd (20.....30Vcd) 100mA Serielle Schnittstelle: 9-poliger Sub-D-Stecker 19200Baud 8 Datenbits 1 Stopbit keine Parität max. Taktfrequenz: 200kHz je Achse Eingänge: 20 binäre Ausgänge: 8 binäre (bis 300kHz)HighSide Treiber 200mA, kurzschlussfest 8 HighSpeed Ausgänge (bis 300kHz)TotemPole,50mA,kurzschlussfest optional: RS422 kompatibler Takt Eingang Mehr weiß ich aber auch nich, ich hab überhaupt keine Ahnung, wie ich das mit dem Motor überhaupt machen soll. Wär echt super, wenn mir geholfen werden kann:) mfg lisa
>Was meinst mit Datenblatt Damit meinte ich Datenblatt , das ist so ein Dokument in dem ein Gerät bzw. Bauteil beschrieben ist, aber das weisst du doch. Egal Jetzt ist einiges klarer. Du verwendes ein fertiges Steurungsmodul und Endstufe. Du must also nichts bauen.Aus deinem ersten Posting ging das nicht hervor Das macht die Sache aber nicht leichter, eher komplizierter.Auf der Seite des Herstellers gibt es mämlich fast gar keine Dokumentation. Was du als Schrittmotor bezeichnest ist eben das Steurungsmodul "ProStep4 kompakt". Ein Schrittmotor ist z.B das Teil hier: http://www.schrittmotor.de/produkte/motor/smdaten/pk243/pk243.htm >Einstellungsdaten wie Stopbit und Parity,... senden Das ist unlogisch. Diese Daten sendet man nicht, die serielle Schnittstelle muss von vornerein auf beiden Seiten gleich konfiguriert sein(Anzahl der Datenbits,Stopbits usw.) sonst kommt die Verbindung garnicht zu Stande. >Ich kann die COM auch öffnen und wieder schließen. Post mal den Code, Windows-Programierung ist zwar nicht so mein Ding aber Daten über serielle Schnittstelle zu senden wird wohl nicht so schwierig sein.
Wie geasgt, ich hab davon überhaupt keine Ahnung. Hab das, was ich bisher gemacht hab ins n Worddukoment gepackt. Is dann wohl vollkommen falsch....?
Oh, schlimm.
Dein Code ist wohl sehr C++Bulider spezifisch.Ich kann ihn nicht
compilieren. Wäre besser wenn du einen "normalen" C-Compiler benutzen
würdest und für GUI ein Toolkit oder direkt mit WinApi. Egal.
Also für jemand der überhaupt keine Ahnung ist du zimlich
weitgekommen.
>Ich kann die COM auch öffnen und wieder schließen, aber wenn ich sie
nachm Schließen wieder öffnen will, geht das nicht mehr
Der Fehler liegt höhstwahrscheinlich hier:
1 | void __fastcall TForm1::Button7Click(TObject *Sender) |
2 | {
|
3 | //Schnittstelle wieder schließen
|
4 | Timer1->Enabled=false; |
5 | Timer2->Enabled=false; |
6 | Timer3->Enabled=false; |
7 | //Falsch!!!Damit wird die Schnittstelle NICHT geschlossen.
|
8 | hCom = INVALID_HANDLE_VALUE; |
9 | //Richtig ist...
|
10 | CloseHandle(hCom); |
11 | |
12 | Memo1->Text="COM geschlosen!"; |
13 | }
|
Des Weiteren, du hast geschrieben: >19200Baud >8 Datenbits >1 Stopbit >keine Parität So ist die serielle Schnittstelle des Steuermoduls konfiguriert, und das ist eine Einstellung die das Steuermodul werkab hat, sofern ich das richtig verstanden habe. Die serielle Schnittstelle des Computer muss also identisch konfiguriet sein. In deinem Programm steht aber:
1 | dcb.BaudRate = CBR_9600;//CBR_19200 müsste es sein |
2 | |
3 | dcb.ByteSize = 8; // Richtig |
4 | dcb.Parity = NOPARITY; // Richtig |
5 | dcb.StopBits = ONESTOPBIT; // Richtig |
Die Baudrate ist also falsch, es muss heissen CBR_19200. Das ist alles was ich momentan dazu sagen kann. Und bitte kunftig keine Word,Exel oder sonstige MS-Office Dateien posten, erstens macht sie keinen Sinn für Quellcode und zweitens es ist nicht so einfach sie zu öffnen wenn man kein MS-Office hat.
Oh sorry. ich weiß der builder ist ziemlich doof, aber ich muss damit ja nun ma arbeiten. schule halt. ja,die baud rate stimmt. hab ich auch schon verbessert. muss ich das denn nun senden oder nicht? ich hab das jetzt wieder rausgenommen. Und wie kann ich meine schlitten jetzt bewegen? muss ich dann jetzt einfach die befehle (weiß zwar noch nich welche)so losschicken? oder muss ich da noch mehr schreiben? vielen dank schon ma für die hilfe!!! mfg lisa
>muss ich das denn nun senden oder nicht? Wenn du mit "das" die Konfigurationsdaten meinst (also 19200Baud,8 Datenbits,1 Stopbit,keine Parität) dann nicht. Diese Daten werden nicht gesendet.Bei beiden Geräten die miteinander Komuniezieren müssen diese Parameter gleich sein, sonst kann das eine Gerät die Daten von dem anderen nicht garnicht empfangen. Ich deinem Fall sind die Parameter auf der einen Seite (Steurungsmodul) fest vorgegeben, und dem gemäss werden sie auf der anderen Seite (PC) eingestellt. So bald das geschehen ist, können die Daten Byte für Byte übertragen werden. >Und wie kann ich meine schlitten jetzt bewegen? muss ich dann jetzt >einfach die befehle (weiß zwar noch nich welche)so losschicken? Ja genau. Jetzt sendet man einfach Zeichenketten(Befehle) an das Steurungsmodul:
1 | WriteFile(HANDLE hcom, unsigned char *befehl,int befehl_laenge,int |
2 | *geschribene_zeichen,NULL); |
>weiß zwar noch nich welche Möglicherweise sind das diese Befehle: http://www.schrittmotor.de/produkte/steuer/dnc1.htm Aber ich bin mir nicht sicher, Dokumentation gibt es leider nicht. Wozu brauchst du eigentlich zweite COM-Schnittstelle ?
>ich hab das jetzt wieder rausgenommen.
Wenn du das meinst:
1 | dcb.BaudRate = CBR_9600;//CBR_19200 müsste es sein |
2 | dcb.ByteSize = 8; // Richtig |
3 | dcb.Parity = NOPARITY; // Richtig |
4 | dcb.StopBits = ONESTOPBIT; // Richtig |
Das muss unbedingt zusammen mit SetCommState(Handle hCom,DCB *dcb) im Programm enthalten sein. Das sind Einstelllungen mit den die seriell Schnittstelle des PCs konfiguriert wird.
Also doch,ok, pack ich wieder rein. aber das pack ich dann in FormCreate, also dass das gleich von anfang an da is, oder? ich muss die dannalso in mein Edir-Fenster einfach reinschreiben, oder? Die zweite hab ich nur so drin,wollt die ComboBox ma ausprobieren und mein Lehrer findet son Gedöns immer ganz toll. Wegen den befehlen werd ich ihn ma fragen, wenn er mir das nich ma genauer sagen kann, kann er ja auch nich von mir erwarten dass ich da gleich experte bin. aber echt vielen dank, jetzt bin ich etwas beruhigter;) das problem is ja, dass er das als klausur wertet und mit seinen aussagen so deutlich is (hat selbst kein plan von nichts) und ich schon voll panik bekommen hab. willmir damit nich meine zensur versauen.
>das pack ich dann in >FormCreate, also dass das gleich von anfang an da is, oder? Du kannst es so machen. Hauptsache bevor die Funktion SetComState(...) aufgerufen wird. Diese Funktion setzt nämlich die Einstellungen der seriellen Schnittstelle, so wie sie in der dcb-Struktur stehen, deshalb müssen da schon richtige Werte stehen wenn man SetComState(HANDLE,DCB*) aufruft. >ich muss die dannalso in mein Edir-Fenster einfach reinschreiben Du meinst wohl Edit-Fenster. Naja es muss halt in den Quellcode rein. Wie die IDE von C++Bulider aussieht kann ich nur ahnen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.