<?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=60&amp;t=8819&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-14T17:02:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=60&amp;t=8819&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-10-14T17:02:15+01:00</updated>
<published>2014-10-14T17:02:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8819&amp;p=98945#p98945</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8819&amp;p=98945#p98945"/>
<title type="html"><![CDATA[Re: DevC++; problem z ReadFile()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8819&amp;p=98945#p98945"><![CDATA[
<div class="quotetitle">adriane napisał(a):</div><div class="quotecontent"><br />[syntax=cpp]ReadFile(hCommDev,_bytes,strlen(_bytes),&amp;RS_ile,0);<br />if(ReadFile(hCommDev,_bytes,strlen(_bytes),&amp;RS_ile,0))            //jesli udalo sie odebrac, pokaz co odebrano[/syntax]<br /></div><br />To jest dwukrotne wywołanie funkcji ReadFile.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 14 paź 2014, o 17:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adriane]]></name></author>
<updated>2014-10-14T15:28:33+01:00</updated>
<published>2014-10-14T14:37:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8819&amp;p=98913#p98913</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8819&amp;p=98913#p98913"/>
<title type="html"><![CDATA[DevC++; problem z ReadFile()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8819&amp;p=98913#p98913"><![CDATA[
Witam serdecznie,<br /><br />Komunikacja w jedną stronę działa (PC -&gt; robot), ale trzeba się rozwijać i przydałby się jakiś feedback od podopiecznego. <br /><br />Chciałbym odbierać ramkę danych robot -&gt; PC. Korzystam z modułu ATB-BTM222 (czyli w zasadzie UART). Na PC wykorzystałem WINAPI, ale mam problem z funkcją ReadFile(). Odbiera mi tylko 2 znaki z 8. Z kolei Putty odbiera wszystko prawidłowo. <br /><br />Przykładowa ramka wygląda tak:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">$1010#/r/n</div><br /><br />a ReadFile widzi tylko np. dwa pierwsze bajty albo jakieś w środku, reszta gdzieś leci w kosmos. <br /><br />Funkcja inicjalizująca RS na PC: <br />[syntax=cpp]void RS232Init(void) <br />{ <br />    DCB dcb;                                                        // struktura kontroli portu <br />     <br />     hCommDev = CreateFile(&quot;COM3&quot;, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);    //otwiera port <br />     <br />    if (hCommDev != INVALID_HANDLE_VALUE)                            // sprawdza, czy port jest otwarty prawidłowo, jesli nie, to ma wartosć INVALID_HANDLE_VALUE <br />     { <br />         dcb.DCBlength = sizeof(dcb);                                 // aktualny rozmiar struktury DCB <br />         GetCommState(hCommDev, &amp;dcb);                                 // udostępnienie aktualnych parametrów DCB <br />         dcb.BaudRate = CBR_19200;                                     // prędkość transmisji <br />         dcb.fParity = TRUE;                                         // sprawdzanie parzystości <br />         dcb.Parity = NOPARITY;                                         // ustawienie parzystości <br />         dcb.StopBits = ONESTOPBIT;                                     // bity stopu <br />         dcb.ByteSize = 8;                                             // bity danych <br />         dcb.fDtrControl = DTR_CONTROL_DISABLE; <br />        dcb.fRtsControl = RTS_CONTROL_DISABLE; <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; <br />        <br />        timeouts.ReadIntervalTimeout = 1; <br />          timeouts.ReadTotalTimeoutMultiplier = 1; <br />          timeouts.ReadTotalTimeoutConstant = 1; <br />          timeouts.WriteTotalTimeoutMultiplier = 1; <br />          timeouts.WriteTotalTimeoutConstant = 1; <br />          <br />          SetCommTimeouts(hCommDev, &amp;timeouts); <br />  <br />         SetCommState(hCommDev, &amp;dcb);                                 // reinicjalizacja DCB <br />         if(SetCommState(hCommDev, &amp;dcb)) <br />         { <br />             cout &lt;&lt; &quot;Polaczono&quot; &lt;&lt; endl; <br />         } <br />         else <br />         { <br />             cout &lt;&lt; &quot;Brak polaczenia&quot; &lt;&lt; endl; <br />         } <br />     } <br />     else <br />     { <br />         cout &lt;&lt; &quot;Nie mozna otworzyc portu&quot; &lt;&lt; endl; <br />     } <br />}[/syntax]<br /><br /><br />Fukcja z ReadFile():<br />[syntax=cpp]void RS232(char* _bytes, unsigned char RW) <br />{ <br />    DWORD RS_ile; <br />    <br />     switch(RW) { <br />         <br />         case 'W': { <br />             <br />             WriteFile(hCommDev,_bytes,strlen(_bytes),&amp;RS_ile,0); <br />        <br />            if(WriteFile(hCommDev,_bytes,strlen(_bytes),&amp;RS_ile,0))            //jesli udalo sie wyslac, pokaz co wyslano <br />            { <br />                cout &lt;&lt; &quot;Wyslano: &quot; &lt;&lt; _bytes &lt;&lt; endl; <br />            } <br />            else <br />            { <br />                cout &lt;&lt; &quot;Nie wyslano&quot; &lt;&lt; endl; <br />            } <br />             break; <br />         } <br />         <br />         case 'R': { <br />             <br />             ReadFile(hCommDev,_bytes,strlen(_bytes),&amp;RS_ile,0); <br />             <br />            if(ReadFile(hCommDev,_bytes,strlen(_bytes),&amp;RS_ile,0))            //jesli udalo sie odebrac, pokaz co odebrano <br />            { <br />                cout &lt;&lt; &quot;Odebrano: &quot; &lt;&lt; _bytes &lt;&lt; endl; //Tutaj chcę wyświetlić co odebrano i kiszka, dane gdzieś uciekają <br />            } <br />            else <br />            { <br />                cout &lt;&lt; &quot;Pusto&quot; &lt;&lt; endl; <br />            } <br />             break; <br />         }    <br />     } <br />}[/syntax]<br /><br />Kombinowałem już z różnymi wartościami timeout, ale nic to nie pomogło. Dodam, że wysyłanie danych działa wyśmienicie. Skończyły mi się pomysły co z tym fantem zrobić. Zapewne będzie to jakaś bzdura, ale ja jej nie widzę <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Będę wdzięczny za wszelkie sugestie.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4297">adriane</a> — 14 paź 2014, o 14:37</p><hr />
]]></content>
</entry>
</feed>