Leider klappt das Senden nicht.
Mit den Einstellungen, die ich in Putty vorgenommen habe, klappt es. Die
Einstellungen in Putty habe ich per jpg-Datei beigefügt.
Wo liegt der Fehler?
Vielen Dank im Voraus.
Grüße
datatom
ingo schrieb:> Versuche mal die HW-Flusskontrolle auszuschalten:> dcbSerialParams.fOutxCtsFlow=0;> dcbSerialParams.fOutxDsrFlow=0;>> mfG ingo
Die beiden Parameter stehen, beim WriteFile auf 0.
Peter II schrieb:> woher weisst du das nichts gesendet wird? eventuell sendest du ja das> falsche?
Wenn etwas gesendet wird, blinkt das LED auf dem Controller. So passiert
es auch bei Putty und beim Bascom-Terminal.
dann zeig doch mal die stellen vom senden, es ist eigentlich egal welche
Paremter eingestellt sind, senden muss immer gehen. (ausser wenn die
hardwareflusskontrolle eingeschaltet ist)
Ich habe noch mal nachgeforscht. Der Fehler liegt bei den Stopbits. Egal
ob ich eine 1 oder ONE5STOPBITS, ich bekomme bei SetCommState immer
einen Fehler:
1
if(!SetCommState(hSerial, &dcbSerialParams))
2
{
3
//error setting serial port state
4
printf("Fehler bei GetCommState beim Parameter belegen!\n");
5
}
6
else
7
{
8
printf("Kein Fehler bei GetCommState beim Parameter belegen!\n");
9
}
Die Stopbits sind bei WinBase.h folgendermaßen deklariert:
Letzten Beitrag bitte komplett vergessen. Die Stopbits würden auf 1,5
stehen, da gibts natürlich einen Fehler.
Allerdings klappt das Senden und Empfangen trotzdem noch nicht.
Irgendein Parameter scheint noch falsch gesetzt zu sein.
Thomas Holländer schrieb:> Irgendein Parameter scheint noch falsch gesetzt zu sein.
glaube ich nicht! Auch mit falschen Parmeter sendet die Schnittstelle.
Prüfe bitte erstmal deine Sende routine und schau mal nach wann die LED
leuchten müssste. (also erst bei einem epmfangen byte oder hängt sie
direkt an der sende leitung)
Hier mal eine DCB-Initialisierung, die bei mir zuverlässig funktioniert:
// BuildCommDCB("baud=9600 parity=N data=8 stop=1",&MyDcb);
// sscanf(Dialog1.baudrate,"%ld",&a);
MyDcb.BaudRate=a; /* oder was Anders */
MyDcb.DCBlength=sizeof(DCB); /* !!! */
MyDcb.fBinary=1;
MyDcb.fOutxCtsFlow=0;
MyDcb.fOutxDsrFlow=0;
MyDcb.fDtrControl=DTR_CONTROL_ENABLE;
MyDcb.fDsrSensitivity=0;
MyDcb.fRtsControl=RTS_CONTROL_ENABLE;
SetCommState(ComHandle,&MyDcb);
Evtl fehlt dir die DCBlength!
mfG ingo
Thomas Holländer schrieb:> i = i + 1000;> _itoa_s(i,szBuff1,10);> if(!WriteFile(hSerial, &szBuff1, n, &dwBytesWrite, NULL))
das sieht merkwürdig aus. du Sendest hier 8byte (n=8) aber in szBuff1
sind nur 4byte + 0byte. Dann sendest du auch keine \n - kann sein das
deine Hardware auf ein \n wartet?
ingo schrieb:> Hier mal eine DCB-Initialisierung, die bei mir zuverlässig funktioniert:>> // BuildCommDCB("baud=9600 parity=N data=8 stop=1",&MyDcb);> // sscanf(Dialog1.baudrate,"%ld",&a);>> MyDcb.BaudRate=a; /* oder was Anders */> MyDcb.DCBlength=sizeof(DCB); /* !!! */> MyDcb.fBinary=1;> MyDcb.fOutxCtsFlow=0;> MyDcb.fOutxDsrFlow=0;> MyDcb.fDtrControl=DTR_CONTROL_ENABLE;> MyDcb.fDsrSensitivity=0;> MyDcb.fRtsControl=RTS_CONTROL_ENABLE;> SetCommState(ComHandle,&MyDcb);>>> Evtl fehlt dir die DCBlength!> mfG ingo
Hab ich übernommen klappt leider nicht:-(
Peter II schrieb:> Thomas Holländer schrieb:>> i = i + 1000;>> _itoa_s(i,szBuff1,10);>> if(!WriteFile(hSerial, &szBuff1, n, &dwBytesWrite, NULL))>> das sieht merkwürdig aus. du Sendest hier 8byte (n=8) aber in szBuff1> sind nur 4byte + 0byte. Dann sendest du auch keine \n - kann sein das> deine Hardware auf ein \n wartet?
Hab auch mal den Wert 12345678 mitgegeben, klappt trotzdem nicht.
Thomas Holländer schrieb:> Hab auch mal den Wert 12345678 mitgegeben, klappt trotzdem nicht.
du senderst aber immer noch kein Zeilenende - woher soll deine Hardware
wissen das nicht noch ein Zeilchen kommt?
Thomas Holländer schrieb:> Wie geht das denn mit dem Zeilenende?
also noch deutlicher kann man es kaum sagen du must ein \r oder \n
senden - keine ahnung was deine Hardware erwartet!
Thomas schrieb:> Peter II schrieb:>> woher weisst du das nichts gesendet wird? eventuell sendest du ja das>> falsche?>> Wenn etwas gesendet wird, blinkt das LED auf dem Controller.
Wann genau blinkt diese LED?
Wenn der Controller ein gültiges Kommando erhalten hat oder bei jedem
Zeichen, dass der Controller bekommt?
Wenn du noch eine LED + Vorwiderstand hast. Häng die mal direkt an die
Rx Leitung vom Controller. Deren blinken zeigt dir zuverlässig an, ob da
was über die Schnittstelle kommt oder nicht. Egal ob das was da
daherkommt, Sinn macht oder ob es richtig ist. Sobald der PC an der
Leitung wackelt (und das muss er, wenn er sendet), dann blinkt die LED
auch.
häng da mal an die Gerätebezeichnung einen : hinten drann. "COM4:" wenn
ich mich recht erinnere, dann ist der : der Auslöser für das
Betriebssystem, dass es sich hierbei um ein Gerät handelt und nicht etwa
um eine Datei namens "COM4".
Karl Heinz Buchegger schrieb:> häng da mal an die Gerätebezeichnung einen : hinten drann. "COM4:" wenn> ich mich recht erinnere, dann ist der : der Auslöser für das> Betriebssystem, dass es sich hierbei um ein Gerät handelt und nicht etwa> um eine Datei namens "COM4".
NEIN - com4 ist schon richtig.
man kann auch auf PC Seite erst mal Send und Recieve verbinden um zu
sehen ob etwas gesendet wird. Klar muss man das PC seitig dann auch
lesen, aber die Lesefunktion braucht man in der Regel sowiso.
Auch klar, falsch gesetzte parameter erkenne ich so nicht aber es ging
ja darum ob überhaupt gesendet wird.
Peter II schrieb:> also noch deutlicher kann man es kaum sagen du must ein \r oder \n> senden - keine ahnung was deine Hardware erwartet!
Klappt jetzt. Ich habe am Ende \r angefügt und nun werden Daten
gesendet.
Danke an alle die mit Rat und Tat zur Seite waren.
Grüße
datatom