Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Prog hängt sich auf

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.04.2004, 20:40 Uhr
~Tomycat
Gast


hi,
ich habe an meinen Comport ein Gerät angeschlossen, es besteht aus einen IC Namens RS232

Er wird ganz normal angesteuert über den Com Port, Aus ausgang hat er 2 led´s

Wenn ich über visual Studio 2003 net eine mfc entwicklung starte, dann einen Buttion erstelle, gibt es ein PRoblem !!

Beim doppelklickt auf den Buttion fügte ich folgenden Quelltext ein. Aber Ich kann es nur einmal starten, Es flackert kurz die LES auf was es soll, beim 2ten mal starten nicht mehr, sowie ein zweitesmal anklicken auf den Buttion.
Es geht erst wieder wenn ich den pc neu starte.

Jetzt WArum?

SChnipp schnipp

C++:
DCB          sDcb;
HANDLE       hFile;
COMMTIMEOUTS sTo;


hFile=CreateFile("\\\\.\\COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)return ;

memset(&sDcb,0,sizeof(sDcb));
sDcb.DCBlength       = sizeof(sDcb);
sDcb.BaudRate        = 9600;    // Baudrate
sDcb.fParity         = FALSE;
sDcb.fBinary         = TRUE;
sDcb.Parity          = NOPARITY;// Kein Paritybit
sDcb.StopBits        = ONESTOPBIT;
sDcb.fOutxCtsFlow    = FALSE;
sDcb.fOutxDsrFlow    = FALSE;
sDcb.fDtrControl     = DTR_CONTROL_ENABLE;
sDcb.fDsrSensitivity = FALSE;
sDcb.fAbortOnError   = FALSE;
sDcb.ByteSize        = 8;       // 8 Datenbits

if(!SetCommState(hFile,&sDcb))
     {
     CloseHandle(hFile);
     return ;
    }

sTo.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout
sTo.ReadTotalTimeoutMultiplier = 0;
sTo.ReadTotalTimeoutConstant   = 0;
sTo.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout
sTo.WriteTotalTimeoutConstant  = 2;

DWORD dwCount;
char  cData[16];


WriteFile(hFile,cData,16,&dwCount,0);



if(!SetCommTimeouts((HANDLE)hFile,&sTo))
     {
     CloseHandle(hFile);
     return ;
    }




Bearbeitung von Pablo:

Bitte cpp tags selber benutzen.


Dieser Post wurde am 27.04.2004 um 00:47 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.04.2004, 21:23 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ich würd lieber versuchen mit mir das dcb nicht selber zu basteln sondern die alten werte zu holen, nur das was ich geändert haben will zu setzen.

zum schluss würd ich auch lieber wieder auf die alten werte zurücksetzen


C++:
DCB dcb,dcb_neu;
COMMTIMEOUTS cto,cto_neu;

HANDLE hFile=CreateFile(......);

GetCommState(h_com, &dcb);
GetCommState(h_com, &dcb_neu);
GetCommTimeouts(h_com,&cto);
GetCommTimeouts(h_com,&cto_neu);

//hier die gewünschten änderungen vornehmen...
dcb_neu.BaudRate=...
.
.        
cto.ReadIntervalTimeout=....

SetCommState(h_com, &dcb_neu);
SetCommTimeouts(h_com,&cto_neu);

//mit dem Spass arbeiten


//am ende wieder zurücksetzen
SetCommState(h_com, &dcb);
SetCommTimeouts(h_com,&cto);


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2004, 13:55 Uhr
~Tomycat
Gast


hi,
also ich habe es geändert, wie verstehe ich das mit h_com?
Ich der Hilfe habe ich nichts mit "h_com" gefunden.
Der Compiler meint es ist nicht definiert?!
Folgende Funktion steht jetzt im Buttion...


C++:
DCB dcb,dcb_neu;
COMMTIMEOUTS cto,cto_neu;


HANDLE hFile=CreateFile("\\\\.\\COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

GetCommState(h_com, &dcb);
GetCommState(h_com, &dcb_neu);
GetCommTimeouts(h_com,&cto);
GetCommTimeouts(h_com,&cto_neu);

dcb_neu.DCBlength       = sizeof(sDcb);
dcb_neu.BaudRate        = 9600;    // Baudrate
dcb_neu.fParity         = FALSE;
dcb_neu.fBinary         = TRUE;
dcb_neu.Parity          = NOPARITY;// Kein Paritybit
dcb_neu.StopBits        = ONESTOPBIT;
dcb_neu.fOutxCtsFlow    = FALSE;
dcb_neu.fOutxDsrFlow    = FALSE;
dcb_neu.fDtrControl     = DTR_CONTROL_ENABLE;
dcb_neu.fDsrSensitivity = FALSE;
dcb_neu.fAbortOnError   = FALSE;
dcb_neu.ByteSize        = 8;       // 8 Datenbits

cto.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout
cto.ReadTotalTimeoutMultiplier = 0;
cto.ReadTotalTimeoutConstant   = 0;
cto.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout
cto.WriteTotalTimeoutConstant  = 2;

SetCommState(h_com, &dcb_neu);
SetCommTimeouts(h_com,&cto_neu);

// lass uns Daten senden

DWORD dwCount;
char  cData[16];

WriteFile(hFile,cData,1600,&dwCount,0);

// wert zurücksetzen

SetCommState(h_com, &dcb);
SetCommTimeouts(h_com,&cto);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.04.2004, 13:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


äh sorry
h_com ist bei mir der handle auf den createFile zeigt.
habs nur schnell aus einem alten code von mir rauskopiert und vergessen hier anzupassen. also in deinem fall dann hFile für h_com einsetzen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 25.04.2004 um 13:58 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.04.2004, 17:37 Uhr
~Tomycat
Gast


hi,
ok erstmal megathx,

Das Prog läuft,
Es ergaben sich neue Progbleme:

Ich weis daß bei der Funktion WriteFile Daten zum Pin 3 (TX) gesendet werden.
Mit ReadFile Pin2 (RX)gelesen werden.
Aber wie empfange ich Daten von pin 1(Decector)? Wie heist die Funktion?

2. Frage: Sehe ich richtig daß der MAX 232 nur ein Spannungswandler ist, der Überhaupt nichts berechnet?

3. und letze Frage.

Wie würde die Funktion "WriteFile" aussehen, wenn ich 10001000111 senden würde?

danke im Voraus.
mfg Tomycat
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.04.2004, 00:03 Uhr
~toxic
Gast


hi, *trollverdacht*
1) an der seriellen schnitstelle (rs232) kann man NUR an RX daten empfangen sowie auf TX daten senden, ansonsten kann man die com auch zu einfachen steuerzwecken "missbrauchen" indem man an den handshakes "rumfummelt" (hab ich selber aber noch nicht gemacht).
2) keine ahnung was du da angeschlossen hast ?! ... schick doch mal ein foto !
3) schwer zu sagen, da muss man sich mit dem protocol an sich beschäftigen... also 1 startbit, dann 8 datenbits und dann 2 stopbits, ich schätze mal du musst eine dez17 senden (0x11), das parity mal ausser 8 gelassen.
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.04.2004, 19:58 Uhr
~Tomycat
Gast


hi,
-wie ist das gemeint Trollverdacht?

zu 1)
hat sich erledigt, ich brauche nur RX und TX
zu 2)
hat sich auch erledigt, es ist nur ein Spannungswandler, mehr nicht.
zu 3)
verstehe nur Bahnhof, wie dez17 ?
wie bekomme ich das in eine Funktion?
ein link auf eine Seite, wie die WriteFile aussehen würde, wäre voll cool.
mfg Tomycat
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.04.2004, 22:51 Uhr
~Tomycat
Gast


hi,
zu 3)
Nachdem ich stunden lang das internet stuidert habe. *loolo*
Kam ich auf folgendes Ergebnis, und bitte sagt mir, wenn ich Müll irgendwo gelabert habe:

WriteFile(h_com, &Buffer, sizeof ( Buffer ),&dwBytesWorte, Null);
h_com: ist für den verbindung
&Buffer: wenn ich 10011001 übertragen möchte, dann weise ich Buffer 153 zu
sizeof (Buffer): sagt wie groß der maximale Buffer ist
&dwByteWorte: irgendwas in Assembler, kein Plan
lpOverlapped: Bracht man nicht, also egal :-))

Wenn ich jetzt mehrmals 153 senden würde, müßte ich dann mehrmals writefile aufrufen?
Wenn ich eine Pause zwischen den Datenblöcke setzen würde, gibts da ein Befehl? Braucht man da eine Pause?

danke im voraus.
mfg Tomycat
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.04.2004, 22:54 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wie wärs mit einem einfach sleep und dann wieder writefile aufrufen.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.04.2004, 23:33 Uhr
~Tomycat
Gast


hi,
thx,
kein Witz:
Genau das werde ich jetzt tun, die Leser/probiererei, macht sehr müde,
ich leg mich jetzt ins Bett.

mfg Tomycat
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: