| Author |
Message
|
Prymulka Poziom 17

Joined: 10 Sep 2003 Posts: 382 Location: Bydgoszcz
|
#1
08 Apr 2004 19:59 [C++] Sterowanie portem COM. |
|
|
|
czesc
mam pytanie, w ksiazce rs232 praktyczne programowanie jest opisane jak wysylać i odbierać lancuchy tekstowe. a ja potrzebuję wysyłać liczby binarne jak to zrobic za pomoca funkcji WriteFile i ReadFile prosze o odpowiedź
Zamykam. - arnoldziq
|
|
| Back to top |
|
 |
Google

|
#
08 Apr 2004 19:59 |
|
|
|
|
|
| Back to top |
|
 |
Gavian Poziom 12

Joined: 28 Oct 2002 Posts: 85 Location: Bielsko
|
#2
09 Apr 2004 00:32 Re: rs232 w c++ |
|
|
|
Łańcuch tekstowy to podzbiór liczb binarnych. Więc nie ma żadnej róznicy miedzy wysyłaniem łancucha znaków a liczb binarnych. Poprostu przekazujesz do funkcji wskaznik na bufor z danymi które chcesz zapisać i funkcja zapisze to co było w buforze do urządzenia wyjsciowego(plik, com, etc). Oczywiście jak piszesz w C to musisz zrobić konwersje typu :)
Pozdrawiam.
|
|
| Back to top |
|
 |
Prymulka Poziom 17

Joined: 10 Sep 2003 Posts: 382 Location: Bydgoszcz
|
#3
26 May 2004 18:52 Re: rs232 w c++ |
|
|
|
czyli bufor ma być typu char a następnie jak cos odbiore mam przekonwertowac na l. całkowitą? i jeszcze jedno czy jak mam do odebrania dwa bajty które są jedną liczbą najpierw starsza częsć a potem młodsza to będzie jakaś różnica w programie?
|
|
| Back to top |
|
 |
Google

|
#
26 May 2004 18:52 |
|
|
|
|
|
| Back to top |
|
 |
abbadon Poziom 9

Joined: 02 Dec 2003 Posts: 43 Location: Kraków
|
#4
01 Jun 2004 22:22 Re: rs232 w c++ |
|
|
|
w komponencie comm z którego zapewne kozystasz jest polecenie getByte i putByte :) wysyła , odbiera i zapisuje odrazu do zmiennej int.
int = getByte();
ja pisałem w Borland C++ Builderze i działalo. jak bedziesz miał problemy to slij maila to ci jakos pomoge bo teraz troszke sie w głowce kreci :)
|
|
| Back to top |
|
 |
Google

|
#
01 Jun 2004 22:22 |
|
|
|
|
|
| Back to top |
|
 |
Prymulka Poziom 17

Joined: 10 Sep 2003 Posts: 382 Location: Bydgoszcz
|
#5
09 Aug 2004 21:25 Re: rs232 w c++ |
|
|
|
zmieniłem zdanie, nie chce uzywac bufora ale wysylac pojedyncze znaki za pomoca funkcji
TransmittCommChar(HANDLE hCommDev, char chTransmit);
chce wysylac liczby binarne ale nie wiem jak to zapisac. Prosze o napisanie funkcji wysylajacej liczbe binarna np 10101010 ja bym to zrobil tak ale pewnie bedzie zle ;)
TransmittCommChar(hCommDev, (char)10101010b)
jeszcze jedno,
ja tez pisze w borlandzie c++ i troche malo znam ten program. Chcialbym zeby byla wysylana liczna wpisana w polu tekstowym Edit (o ile dobrze pamietam),
z gory dzieki za odpowiedz
|
|
| Back to top |
|
 |
abbadon Poziom 9

Joined: 02 Dec 2003 Posts: 43 Location: Kraków
|
#6
16 Aug 2004 09:44 Re: rs232 w c++ |
|
|
|
Ech jest taka fajna stronka www.borland.nq.pl i tam jest sporo materiałów. Z tamtąd też pochodzi ten komponent. A działa to tak:
na pocz programu gdzies w onCreate() albo cos tędy dajesz inicjalizacje i konfiguracje portu
// Ustawienie portu oraz jego otwarcie
comek.SetBaudRate(115200); // szybkosc transmisji
comek.SetParity(0); // Pazystosc ( zero czyli brak)
comek.SetByteSize(8); // Ilosc wysylanych bitow ( bez bitu stopu )
comek.SetStopBits( ONESTOPBIT );// Ilosc bitow stopu
comek.OpenCommPort(); // Otwoz port Comm1
aha w hederze dajesz: TCommPort comek; ( ale to chyba oczywiste :) )
i dalej w programie jak chcesz cos wysłać to masz dwie opcje:
opcja 1
comek.WriteBuffer("xxx",ilosc znaków); czyli pierwsza pozycja to dane typu AnsiString a druga to ilosc przesyłanych znaków.
zamiast xxx daj Edit1->Text i pamietaj żeby zawsze wysyłać taką samą ilość znaków inaczej clops.
i opcja nr 2
comek.PutByte(StrToInt((AnsiString)Edit1->Text));
tyle ze teraz proponuje wysyłać tylko liczby całkowite typu Int.
Oczywiscie musisz dołączyć do projektu bibliotekę którą zamieszczam poniżej. Jeżeli dalej nie wiesz jak to daj znać :).
Pozdrowionka od Technika roku 2004 :D ech no musiałem sie pochwalić :)
|
|
| Back to top |
|
 |
Prymulka Poziom 17

Joined: 10 Sep 2003 Posts: 382 Location: Bydgoszcz
|
#7
17 Aug 2004 09:42 Re: rs232 w c++ |
|
|
|
Dzięki za tak wyczerpującą odpowiedź. Musisz jednak wiedzieć że ja nie mam problemu z obsługą RS232 i WinAPI :D . Przedstawię od początku mój problem. Robię pracę dyplomową (bardzo ambitną, więc jest nas trzech). Niestety na mnie padło pisanie programu. Z kompa ma być wysyłany bajt, którego bity beda zawierały informację: lewo, prawo itd. Dlatego chcę w polu Edit wpisać liczbę w postaci zer i jedynek, a nie jako liczbę całkowitą bo mało z tego będzie wynikało.
A teraz co do tych dwóch opcji. W obydwóch jest funkcja WriteFile, a ona wykorzystuje bufor. Czyli dane będą dochodzić do bufora i czekać na swoją kolej aż zostaną wysłane. Co prawda właściwie by mi to nie przeszkadzało bo przy wysyłaniu jednego bajta co jakiś czas bufor bedzie praktycznie cały czas pusty. Mimoto chce to zrobić za pomocą funkcji
BOOL TransmitCommChar(HANDLE hCommDev, char chTransmit);
Wysyła ona tylko jeden znak. Na dodatek ma ona pierwszeństwo przed danymi z bufora.
Dlatego jeszcze raz prosze o to by, wpisac liczbę zerojedynkowo (obojetnie w jakim polu) a nastepnie przekonwertować ją do typu char.
|
|
| Back to top |
|
 |
abbadon Poziom 9

Joined: 02 Dec 2003 Posts: 43 Location: Kraków
|
#8
24 Aug 2004 16:55 Re: rs232 w c++ |
|
|
|
Heh nom moja praca tez była robiona w trzy osoby :) i tez była ambitna :D wysyłałem wiecej niz lewo prawo :). I jeszcze raz
comek.PutByte(StrToInt((AnsiString)Edit1->Text));
wysyła liczbe zapisaną w polu Text jako bajt wiec jak bedziesz dawał int-y o wartosci od 0-256 to nie powinno byc problemu bo przy 8 bitach danych zmiescisz sie w jednym "pakiecie"(czy jak to sie tam zwie :) ) i automatycznie 8 bitow danych to bedzie twoja liczba. A zamiane z sys dziesietnego na binarny to chyba juz sobie zrobisz.Teoretycznie jak bedziesz wysyłał znaki to bedize leciał kod ascii i to pewnie tesh zera i jedynki. Chyba troche utrudniasz sobie zycie. Ja zrobiłem po najprostszej linii oporu i działa gites. Odczytywałem to z bascoma za pomoca Inputbin. Jedna uwaga. Jak uzyjesz przerwania do odczytu danych w uC to uwazaj na jaja jakie sie robia. Na czas odczytywania(trwania przerwania) przestawał sterowac serwomechanizmami niby na pare milisekund a jednak wystarczyło by po przełozeniu tego na mechanike urzadzenie pracowało zle. Mowiac krótko ramie robota zamiast przemieszczac pionki po szachownice je przewracało :|. Nie wiem co tam budujesz ale staraj sie ograniczyc transmisje do min. albo zrezygnuj z przerwań. 256 kombiacji to az za duzo na lewo i prawo :).
|
|
| Back to top |
|
 |
Google

|
#
24 Aug 2004 16:55 |
|
|
|
|
|
| Back to top |
|
 |
Prymulka Poziom 17

Joined: 10 Sep 2003 Posts: 382 Location: Bydgoszcz
|
#9
29 Aug 2004 14:44 Re: rs232 w c++ |
|
|
|
Miałeś rację. Niepotrzebnie sobie wszystko utrudniałem. Komunikacja mi działa świetnie w obie strony :) Mam nadzieję, że to już koniec moich problemów
|
|
| Back to top |
|
 |