Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 26 sty 2025, o 07:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 28 lut 2015, o 23:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

Witam Kolegów,

Temat dotyczy języka C/C++ oraz protokołu RS232C, a konkretnie struktury COMMPROP i struktury DCB. Program piszę pod IDE BCB6 Personal.
Męczę się od jakiegoś czasu nad dopracowaniem takiego szczegółu a mianowicie odczytywanie danych ze struktury COMMPROP danych wynikających bezpośrednio ze struktury DCB (np. ile jest bitów stopu, albo jaka jest parzystość - w obu strukturach te dane są zawarte).
Jeśli chodzi o takie sprawy jak konfiguracja, otwieranie, zamykanie portu to wszystko działa i potrafię to z poziomu C/C++ to obsłużyć.
Problem jest gdy próbuję odczytać wartość ze struktury COMMPROP, np.
Sprawa wygląda tak, że wszystko działa (ustawianie konfiguracji portu, otwieranie portu, zamykanie portu, struktura DCB pokazuje prawidłowe dane)...
Problem pojawia się gdy chcę zobaczyć zaawansowane ustawienia portu używając do tego struktury COMMPROP.

Oryginalny kod którego używam jest trochę skomplikowany, ale załóżmy, że wygląda on tak (bez dyrektyw #include):

Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Reasumując:
Funkcja GetCommProperties(hCommDev, &CommProp) pomimo prawidłowego otwarcia portu nie zaskakuje jak należy, bo zwraca wartość różną od zera.
Aby można było cokolwiek odczytać ze struktury COMMPROP to funkcja GetCommProperties powinna po wywołaniu zwracać zero. Wtedy mam dostęp do zmiennej CommProp...
Natomiast funkcja GetLastError() podaje że to błąd systemowy nr 122, co wg MSDN oznacza:
ERROR_INSUFFICIENT_BUFFER
The data area passed to a system call is too small.

czyli na nasze to oznacza mniej/więcej
BŁĄD NIEDOSTATECZNEJ (PAMIĘCI) BUFORA
Obszar danych przekazany do wywołania systemowego jest za mały.


Czy Ktoś z Kolegów robił już jakieś doświadczenia ze strukturą COMMPROP i miał podobną sytuację?
Bardzo proszę o konkretne odpowiedzi.

Pozdrawiam! j23 Jarek

P.S. Tylko z tą strukturą tak się męczę, pozostałe działają w porządku.

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lut 2015, o 23:23 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Witam, bawiłem się tą strukturą i mi ona działa, tylko że ja inicjalizuję to tak:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wpisuję tyle wartości i mi działa, dla testu wpisałem tylko dcb.parity i dcb.StopBits (tak jak u Ciebie) i też mam błąd.

------------------------ [ Dodano po: 8 minutach ]

Z tego co teraz testuję, zaobserwowałem że bez podania dcb.BaudRate nie działa (wyskakuje ten błąd).


Autor postu otrzymał pochwałę

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2015, o 17:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

leonos2000 napisał(a):
(...)

Kolego Leonos2000 dzięki, ale mi chodzi nie tyle o strukturę dcb, co o strukturę COMMPROP. A związek ze strukturą dcb ma to taki, że w strukturze dcb zapisuję wartości do dcb, które -teoretycznie- powinny odpowiadać tym, które znajdą się w strukturze COMMPROP. To jest inna ze struktur protokołu RS232 (a tych struktur też tam jest trochę, m.in.: COMSTAT, COMMTIMEOUTS, etc.).
W strukturze dcb działa mi wszystko, więc jak w tej strukturze masz jakiś błąd to hmm.. może opisz to przy okazji także go tu spróbujemy rozwiązać. ;)
W strukturze dcb jest tak, że trzeba koniecznie pamiętać, żeby najpierw pobrać wartości z dcb funkcją GetCommState(hCommDev, &dcb) potem ustawić te wartości, które się chce, a potem je zapisać przez funkcję SetCommState(hCommDev, &dcb).
Dobrze jest tu także korzystać ze stałych, które są dość dokładnie przedstawione na stronie MSDN.

Pozdrawiam! j23 Jarek

P.S. Chyba zrezygnuję z używania tej struktury COMMPROP... :/ A tyle się namęczyłem przy interface'ie terminala.. Przyjdzie czas (jak w końcu to skończę) to sami zobaczycie.

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO