Forum: PC-Programmierung xyz-Steuerung mit MC System über serielle Schnittstelle


von Lisa (Gast)


Lesenswert?

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

von Tobi H. (tobi-) Benutzerseite


Lesenswert?


von Martin #. (martin-)


Lesenswert?

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.

von Lisa (Gast)


Lesenswert?

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

von Martin #. (martin-)


Lesenswert?

>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.

von Lisa (Gast)


Angehängte Dateien:

Lesenswert?

Wie geasgt, ich  hab davon überhaupt keine Ahnung.
Hab das, was ich bisher gemacht hab ins n Worddukoment gepackt.
Is dann wohl vollkommen falsch....?

von Martin #. (martin-)


Lesenswert?

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.

von Lisa (Gast)


Lesenswert?

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

von Martin #. (martin-)


Lesenswert?

>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 ?

von Martin #. (martin-)


Lesenswert?

>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.

von Lisa (Gast)


Lesenswert?

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.

von Martin #. (martin-)


Lesenswert?

>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
Noch kein Account? Hier anmelden.