<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=24&amp;t=10868&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-01T17:24:04+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=24&amp;t=10868&amp;mode</id>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-03-01T17:24:04+01:00</updated>
<published>2015-03-01T17:24:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121481#p121481</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121481#p121481"/>
<title type="html"><![CDATA[Re: Protokół RS232,struktury: COMMPROP &lt;-&gt; DCB,jak pobrać da]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121481#p121481"><![CDATA[
<div class="quotetitle">leonos2000 napisał(a):</div><div class="quotecontent"><br />(...)<br /></div><br />Kolego Leonos2000 dzięki, ale mi chodzi nie tyle o strukturę dcb, co o strukturę <span style="text-decoration: underline">COMMPROP</span>. 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.).<br />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ć. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />W strukturze dcb jest tak, że trzeba koniecznie pamiętać, żeby najpierw pobrać wartości z dcb funkcją GetCommState(hCommDev, &amp;dcb) potem ustawić te wartości, które się chce, a potem je zapisać przez funkcję SetCommState(hCommDev, &amp;dcb).<br />Dobrze jest tu także korzystać ze stałych, które są dość dokładnie przedstawione na stronie MSDN.<br /> <br />Pozdrawiam! j23 Jarek<br /><br />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.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 1 mar 2015, o 17:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[leonos2000]]></name></author>
<updated>2015-02-28T23:23:35+01:00</updated>
<published>2015-02-28T23:23:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121414#p121414</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121414#p121414"/>
<title type="html"><![CDATA[Re: Protokół RS232,struktury: COMMPROP &lt;-&gt; DCB,jak pobrać da]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121414#p121414"><![CDATA[
Witam, bawiłem się tą strukturą i mi ona działa, tylko że ja inicjalizuję to tak:<br />[syntax=cpp]dcb.DCBlength = sizeof(dcb);<br /><br />    dcb.BaudRate = 9600;<br />    dcb.fParity = NOPARITY;<br />    dcb.Parity = false;<br />    dcb.StopBits = ONESTOPBIT;<br />    dcb.ByteSize = 8;<br /><br />    dcb.fDtrControl = DTR_CONTROL_ENABLE;<br />    dcb.fRtsControl = RTS_CONTROL_ENABLE;<br /><br />    dcb.fOutxCtsFlow = FALSE;<br />    dcb.fOutxDsrFlow = FALSE;<br />    dcb.fDsrSensitivity = FALSE;<br />    dcb.fAbortOnError = FALSE;<br />    dcb.fOutX = FALSE;<br />    dcb.fInX = FALSE;<br />    dcb.fErrorChar = FALSE;<br />    dcb.fNull = FALSE;[/syntax]<br />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.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />Z tego co teraz testuję, zaobserwowałem że bez podania dcb.BaudRate nie działa (wyskakuje ten błąd).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4851">leonos2000</a> — 28 lut 2015, o 23:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-02-28T23:12:50+01:00</updated>
<published>2015-02-28T23:12:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121412#p121412</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121412#p121412"/>
<title type="html"><![CDATA[Protokół RS232,struktury: COMMPROP &lt;-&gt; DCB,jak pobrać dane?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10868&amp;p=121412#p121412"><![CDATA[
Witam Kolegów,<br /><br />Temat dotyczy języka C/C++ oraz protokołu RS232C, a konkretnie struktury COMMPROP i struktury DCB. Program piszę pod IDE BCB6 Personal.<br />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).<br />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ć.<br />Problem jest gdy próbuję odczytać wartość ze struktury COMMPROP, np. <br />Sprawa wygląda tak, że wszystko działa (ustawianie konfiguracji portu, otwieranie portu, zamykanie portu, struktura DCB pokazuje prawidłowe dane)...<br />Problem pojawia się gdy chcę zobaczyć zaawansowane ustawienia portu używając do tego struktury COMMPROP.<br /><br />Oryginalny kod którego używam jest trochę skomplikowany, ale załóżmy, że wygląda on tak (bez dyrektyw #include):<br /><br />[syntax=cpp]HANDLE hCommDev;      // uchwyt do portu<br />LPCTSTR nr_portu_COM; // wybrany port COM<br />DCB dcb;                      // Data Control Block - struktura kontroli portu szer.<br />COMMPROP CommProp;  // struktura COMMPROP<br /><br />nr_portu_COM=&quot;COM1&quot;;  // u mnie akurat tylko ten jeden w systemie jest aktywny, więc tylko na tym próbuję<br />// zainicjowanie portu = próba otwarcia portu<br />hCommDev = CreateFile(nr_portu_COM, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);<br /><br />// sprawdzenie poprawności inicjalizacji<br />if (hCommDev != INVALID_HANDLE_VALUE)<br />   {<br />   dcb.DCBlength = sizeof(dcb);<br />   GetCommState(hCommDev, &amp;dcb); // pobieram dane ze struktury dcb<br /><br />   // przykładowe ustawienia konfiguracji<br />   dcb.StopBits=ONESTOPBIT;   // ustawiam jeden bit stopu...<br />   dcb.Parity=ODDPARITY;        // ...i nieparzystość<br /><br />   SetCommState(hCommDev, &amp;dcb); // zapisuję dane do struktury dcb<br /><br />   // konfiguracja COMMPROP<br />   CommProp.dwServiceMask=SP_SERIALCOMM<br />   CommProp.dwProvSpec1=COMMPROP_INITIALIZED;<br /><br />   // TUTAJ zaczynają się problemy<br />   if (GetCommProperties(hCommDev, &amp;CommProp)!=0)<br />      {<br />      ShowMessage(&quot;GetLastError = &quot;+IntToStr(GetLastError())); // nr błędu to: 122<br />      // błąd 122 to wg MSDN:<br />      // ERROR_INSUFFICIENT_BUFFER<br />      // The data area passed to a system call is too small.<br />      }<br /><br />   // tutaj mogłyby być dalsze operacje, ale funkcja GetCommProperties zwraca błąd (wynik funkcji różny od zera)<br />   }[/syntax]<br /><br /><span style="text-decoration: underline">Reasumując:</span><br />Funkcja GetCommProperties(hCommDev, &amp;CommProp) <strong><span style="text-decoration: underline">pomimo prawidłowego otwarcia portu</span></strong> nie zaskakuje jak należy, bo zwraca wartość różną od zera. <br />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...<br />Natomiast funkcja GetLastError() podaje że to błąd systemowy nr 122, co wg MSDN oznacza:<br /><span style="color: #8000FF">ERROR_INSUFFICIENT_BUFFER<br />The data area passed to a system call is too small.</span><br />czyli na nasze to oznacza mniej/więcej<br /><span style="color: #8000FF">BŁĄD NIEDOSTATECZNEJ (PAMIĘCI) BUFORA<br />Obszar danych przekazany do wywołania systemowego jest za mały.</span><br /><br />Czy Ktoś z Kolegów robił już jakieś doświadczenia ze strukturą COMMPROP i miał podobną sytuację?<br />Bardzo proszę o konkretne odpowiedzi.<br /><br />Pozdrawiam! j23 Jarek<br /><br />P.S. Tylko z tą strukturą tak się męczę, pozostałe działają w porządku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 28 lut 2015, o 23:12</p><hr />
]]></content>
</entry>
</feed>