PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aus Computerprogramm Nachrichten per RS 232 senden/empfangen



shahri
24.03.2006, 15:02
Hi,

weiß jemand wie man aus einem C++ (Computer-)Programm heraus Nachrichten über RS 232 senden/empfangen kann? Also mir geht es jetzt darum, wie man das programmiert, ich weiß selbst das es Terminalprogramme gibt.
Aber zum Beispiel könnte man ein Programm schreiben, von dem aus man seinen Roboter fernsteuern kann, ohne extra eine Fernsteuerung zu bauen.
Wie gesagt ein (normales) Terminalprogramm ist da ungeeignet,
stellt euch mal vor der Roboter wäre so programmiert, dass er solange er die Nachricht "V" empfängt nach vorne fährt.
Mit einem normalen Terminalprogramm müsste man die ganze Zeit "V"
eingeben, alles wäre ziemlich umständlich.


Gruß
Shahri

ogni42
24.03.2006, 15:05
Hier findest Du wahrscheinlich Code für Windows und Linux:

http://www.lvr.com/serport.htm

shahri
24.03.2006, 15:41
Danke, aber leider kann ich noch nicht so gut Englisch, dass ich schon wissenschaftliches Zeug verstehen würde, kennt jemand vielleicht auch eine deutsche Seite?

shahri
09.05.2006, 19:13
Wie siehts aus, kennt keiner eine deutsche Seite?


Gruß
Shahri

tobimc
09.05.2006, 19:34
Hi

Um Englisch wirst du wohl nicht herumkommen.
Aber wenns dir hilft, das macht man in C (wird in C++ wohl auch so sein) mit der comm.h .

VLG Tobi

shahri
09.05.2006, 19:41
Ja, das mit dem Englisch hatte ich mir fast schon gedacht. 8-[
Ich habe mal im Programmordner von Dev-Cpp nachgesehen, doch da finde ich keine comm.h.
Wo bekomme ich sie?


Gruß
Shahri

tobimc
09.05.2006, 20:33
Hi!

OHJE ein schrecklicher Irrtum...
Die Lib heißt nicht comm.h sondern
conio.h (evtl. in Verbindung mit windows.h)

SORRY!

VLG Tobi

shahri
10.05.2006, 13:01
Hi,

@Tobi: Ist nicht schlimm. Die Datei habe ich im Programmordner gefunden.

@Alle, die hier noch etwas schreiben wollen: Jetzt müsste ich nur noch wissen, wie man Daten sendet und empfängt / welche Funktionen benötigt werden und wie man diese benutzt.

Gruß
Shahri

shahri
10.05.2006, 13:52
Okay, ihr braucht euch keine Mühe mehr geben, ich glaube ich habe genau das richtige gefunden: http://msmvps.com/blogs/coad/archive/2005/03/23/39466.aspx
Da steht so ziemlich alles drin und ich denke mit dem Englisch komm ich schon klar.

Danke für die Hilfe!

Gruß
Shahri

tobimc
10.05.2006, 13:57
Übung macht den Meister

VLG Tobi

shaun
10.05.2006, 14:00
Sorry, aber darf ich das anzweifeln? Gleich im ersten Code-Snippet grinst mich was von "new namespace in dotnet 2" an - und Du schriebst irgendwas von Dev-GCC, das passt ja nicht so recht zusammen. Also entweder brauchst Du nun das Visual Studio .Net, oder einen Hinweis, wie Du mit dem GCC weiter kommst. Ich habe neulich gerade einen Daemon für einen Linux-Server geschrieben, der die Serielle für sich reklamiert, entsprechend konfiguriert und dann allerdings nur auf bestimmte Pegel auf den Steuerleitungen reagiert. Das Senden und Empfangen von Daten ist dann aber auch kein grosser Schritt, da die Initialisierung der Schnittstelle den grössten Aufwand erfordert. Allerdings habe ich wenn mich jetzt nicht alles täuscht auch die comm.h benutzt, oder ich bin gerade völlig verwirrt.

tobimc
10.05.2006, 14:10
Hi

Du meinst die conio.h?

Ja, es gibt mehrere Möglichkeiten die serielle anzusteuern. Meines Wissens ist die über conio.h die bequemste.
Zumindest in C. In C++ ist das warscheinlich wieder eh ganz anders.

Es ist auch bei Windows so, dass man die Serielle zuerst reservieren, und später wieder frei geben muss.
Dann kann man Zeichen empfangen und senden.

Allerdings muss ich zugeben, dass die conio.h, als ich da mal mit zu tun hatte (bald wieder hehe), nicht so ganz toll dokumentiert war.

VLG Tobi

shahri
10.05.2006, 14:16
@shaun:
Ähmm,
ich schrieb DEV-CPP.
GCC ist meines Wissens nach für uCs und DEV-CPP ist für Computerprogramme...
(Also Dev-CPP ist so wie Visual Studio.NET, nur schlechter :cheesy: )
Kann sein das du recht hast und die Codes nicht funktionieren, aber ich lese mir jetzt erst mal die Seite durch, was wohl ein wenig dauern wird...
(siehe oben zum Thema Englisch)

@tobi:

In C++ ist das warscheinlich wieder eh ganz anders.
Kann man nicht in C++ einfach ohne weiteres C einbinden?
In dem Buch, mit dem ich C++ gelernt habe war das so beschrieben...

Gruß
Shahri

tobimc
10.05.2006, 21:41
Hi

Falsch geglaubt, ein GCC ist lediglich ein freier compiler, der meistens open source ist. Aber GCCs gibts sowohl für uCs als auch für PCs. (z.B. Mn GW)

Ja, es sollte kein Problem sein, in C++ C einzubinden.

VLG Tobi

Radian
27.05.2006, 00:01
Hi

Falsch geglaubt, ein GCC ist lediglich ein freier compiler, der meistens open source ist. Aber GCCs gibts sowohl für uCs als auch für PCs. (z.B. Mn GW)
VLG Tobi

ähm.... noch mal falsch geglaubt:)

GCC steht für "GNU Compiler Collection", früher hieß das mal "GNU C Compiler". Heute ist das aber ein Sammelbegriff für Compiler die den Bestimmungen der GPL folgen. Darunter eben auch einer für c/c++ uvm.
D.h. _nicht_ meißtens open source sondern immer ;)

shahri
01.06.2006, 16:35
Hi Leute,

Okay...das Ganze funktioniert jetzt doch nicht so ganz wie es soll...
Hat niemand schon einmal so etwas gemacht und kann mir funktionierenden Code posten?

Gruß
Shahri

Radian
01.06.2006, 17:07
Ich kann dir diese Seite http://www.codeproject.com/system/serial.asp
ans Herz legen. Es ist ein Wrapper rund um die Windows RS232 API.
Auf der Seite findest du ein paar Beispiele.
(die Serial.cpp musst du vor dem eigentlichen Projekt bauen, sonst gibts probleme ;) )

So könntest du erst mal vorgehen:

1.Lade dir das demo Projekt von oben genannter Seite runter.
2. Öffne das .rar Archiv. Darin findest du einen Ordner mit namen Serial. Darin befindet sich die datei Serial.cpp und Serial.h Die kopierst du dir in dein Projekt.
3. Um den Wrapper nun nutzen zu können,musst du die Serial.h mittels #include in dein Programm einfuegen
4. Jetzt kannst du z.B. folgendes machen : (als namespace wird CSerial verwendet)

CSerial serial; //neues serial Objekt anlegen
serial.Open(_T("COM1")); //com1 oeffnen

//baudrate etc. einstellen
serial.Setup(CSerial::EBaud9600,CSerial::EData8,CS erial::EParNone,CSerial::EStop1);

unsigned char test = 0x10;

serial.Write(&test,sizeof(test)); // test verschicken


Das wärs eigetnlich schon um was zu senden.

5. Etwas empfangen: Hier gibts die Methode Read. Du kannst sie z.B. so benutzen :
unsigned char recieve; //in der praxis dann eher unsigned char recieve [groesse]
int anzahlGelesen;
serial.WaitEvent();//warte bis was auf com1 ankommt
serial.Read(recieve,sizeof(recieve),&anzahlGelesen);

Dass wars dazu.

Schau dir mal an was auf der Seite so alles steht. Du kannst noch zig sachen einstellen. Z.B. dass solange gelesen werden soll bis der lesepuffer gefuellt ist etc.


Viel Spass damit

shahri
01.06.2006, 17:40
Danke!!!

Gruß Shahri

shahri
16.08.2006, 12:49
Es ist zwar schon Ewigkeiten her, seit ich die letzte Antwort auf den Thread geschrieben habe, aber ich hab noch was gutes zum Thema gefunden:
http://www.winapi.net/index.php?inhalt=t3
Alles auf Deutsch und gut dokumentiert.

Gruß
Shahri

marvin42x
16.08.2006, 15:33
Wir habe auch in unserer Wiki was dazu:
https://www.roboternetz.de/wissen/index.php/Network_Controller/PC_RS232_mit_Windows

Netter Gruß