Gast
#4795115
Hallo Leute, ich hab ein Problem mit dem Com Port. Über den Com wird ein String gesendet und es wird auf eine Antwort gewartet tx_rx. Ist der Trigger char empfangen muss das Com Event ausgelöst werden. WaitCommEvent() sollte verlassen werden. Erster tx_rx Aufruf. Pc senden und meldet die empfangenen Zeichen korrekt. ClearCommError( hCOM, NULL, &m_st_comstat ) gibt die richtige Anzahl an. Es wird ohne Fehler gelesen. Zweiter Aufruf. Da meldet mir ClearCommError( hCOM, NULL, &m_st_comstat ), dass m_st_comstat.cbInQue keine Zeichen vorhanden sind. Deswegen geht er bei READ in die erste if Bedingung und sollte bei WaitCommEvent(..) warten. Das wird aber nicht gemacht. Egal ob der Slave Zeichen schickt oder nicht. Denn zum Testen habe ich mal nach der zweiten Anfrage den Slave mal nicht antworten lassen. WaitCommEvent()genauso wie WaitForSingleObject() werden direkt mit TRUE verlassen. Es scheint so dass diese Events schon gesetzt sind (auf der RX Leitung sind 100%tig keine Daten ankommen). Es werden 0 Zeichen gelesen. Dritter Aufruf. Wenn der Slave beim zweiten Aufruf NICHT geantwortet hat. Ich lasse den Slave wieder normal antworten. Die Kommunikation funktioniert wie erwartet ohne Probleme. In m_st_comstat.cbInQue die Stringlänge des Angeforderten Strings. Wenn der Slave beim zweiten Aufruf geantwortet hat. Steht in m_st_comstat.cbInQue die Stringlänge des bei Aufruf zwei angeforderten string. MSDN half mir auch nicht weiter. https://msdn.microsoft.com/en-us/library/ff802693.aspx Ich hoffe ihr könnt mir helfen, find den Bug einfach nicht.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
Gruß alex