RS232->RS485 a sygnał RTS

Jun 15, 2005 16 Replies

Witam!



Dłubie po google i nie bardzo mogę znaleźć jasne stwierdzenie, czy można:



Mianowicie zastanawiam się, czy w przypadku obsługi UARTu z poziomu Windowsa i Linuxa można uzyskac efekt taki, że przed rozpoczęciem bloku danych linia RTS jest aktywna, a po zakończeniu deaktywuje się.



Robie mały konwerter RS485 i chciałbym, alby kierunek działania drivera wyjściowego był w miare możliwości sterowny sprzetowo. Jesli miałbym samoczynnie zmieniać stan lini RTS to mógłbym nie zdążyć. Chciałbym aby system operacyjny zadbał o odpowienio szybkie wyłączenie RTS po zakończeniu transmisji.



Czy ktoś z grupowiczów może mi potwierdzić, czy to jest standardowa funkcjia systemu operacyjnego ?



PS. Interesuje mnie powrót lini RTS do stanu niekatywnego natychmiast po wysłaniu ostatniego znaku w bloku.


Użytkownik "Sebastian Bialy" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:d8p00s$b4s$ snipped-for-privacy@nemesis.news.tpi.pl...

Może lepiej zrobić lub kupić taki konwerter, który nie wymaga sterowania nadawaniem

Pozdrawiam Sławek

Użytkownik "SlawekS" snipped-for-privacy@vp.pl napisał w wiadomości news:d8p1oj$alk$ snipped-for-privacy@opal.futuro.pl...

Lecz wymaga odpowiednio długich przerwa miedzy nadawaniem a odbiorem. Lepiej zrobic na 4 kavelkach i po kłopocie.

Użytkownik "Kamil K." <kmail@fuck_op.pl> napisał w wiadomości news:d8p2jt$r9u$ snipped-for-privacy@nemesis.news.tpi.pl...

odbiorem.

Jak konwerter zna prędkość transmisji to nie koniecznie. P.G.

Sebastian Bialy napisał(a):

Można. Popatrz chociażby na FLIPa Atmela. Transmisja bez kontroli przepływu + 2 linie RTS i DTR stosowane do resetowania i wprowadzenia procka w stan programowania. Nie jestem programistą ale z tego co widziałem w Delphi wygląda to mniej więcej tak: Comm1.SetDTR(False); itp.

Chodzi mi o coś zupełnie odwrotnego - ja nie chce sterować linią RTS, tylko chcę aby sprzęt nią sterował samoczynnie - sam mogę nie zdązyć po bloku danych jej wyłaczyc i zgubie bajty przychodzące.

W pewnym sensie wolałbym mieć to zabudowane w urządzenie, bo modulik przy okazji rozprowadza zasilanie do reszty końcówek. Więc i tak musze to samodzielnie wydłubać.

Użytkownik "Sebastian Bialy" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:d8p00s$b4s$ snipped-for-privacy@nemesis.news.tpi.pl

Prosty układ z "555" ?

formatting link
str.23

Widzialem taki "przemyslowy" (cena) firmy Advantech - w srodku generator kwarcowy, jakas Altera i DIP-switch do ustawiania predkosci. Analogowo to najprosciej na jakims 555 lub 4538 (lepiej, bo wyzwalany zboczem wiec awaria polegajaca na ciaglym nadawaniu zera nie blokuje magistrali).

A mam tani firmy Moxa sterowany RTS i dziala to tak sobie - trzeba odpytywac czy to juz koniec nadawania (UART nie potrafi z tej okazji wygenerowac przerwania), pod Linuksem - ioctl TIOCSERGETLSR.

Jesli nie zdazymy wylaczyc RTS w pore - tracimy poczatek odpowiedzi. Protokol transmisji powinien byc odporny na bledy (np. MODBUS RTU).

Marek

O ile sie orientuje to jest maly problem - oryginalny 8250 nie zglasza przerwania po zakonczeniu transmisji. Przerwanie sie pojawia jak zwolni sie miejsce w fifo nadajnika, jesli nie mamy nic wiecej do wyslania to je gasimy, a kostka kontynuuje nadawanie nie sygnalizujac juz ze bedzie konczyc. Niby mozna poczekac az sie zapali odpowiedni bit w rejestrze .. ale w systemie wielozadaniowym to zbrodnia :-(

Nie wiem czy obecnie uzywane kostki nie umozliwiaja obejscia tego.

Cos w tym jest, ale czy ten tranceiver jest wystarczajaco szybki ? No i jesli przypadkiem bedzie wiecej takich ukladow na linii to sie zrobi klopot..

J.

U¿ytkownik "Marek Michalkiewicz" snipped-for-privacy@amelek.gda.pl.invalid>

napisa³ w wiadomo¶ci news:d8p6rd$k84$ snipped-for-privacy@alf.lan.amelek.gda.pl...

generator

Analogowo

Pisz±c, ¿e zna prêdko¶æ rozumia³em, ¿e odmierza czas od bitu startu do bitu stopu ignoruj±c bity danych. P.G.

Witam,

Pod Windowsem da się to zrobić. Przy otwieraniu portu COM należy ustawić flagę RTS_CONTROL_TOGGLE w DCB.Flags dla funkcji "SetCommState". RTS będzie przechodził w stan wysoki w czasie wysyłania danych.

Sławek

Ale numer, faktycznie działa. Korzystałem z opisu, gdzie nawet nie wspomnieli to takim polu jak fRtsControl. Dzieki.

Przy okazji, czy ktoś jest zainteresowany klasą w C++ do obsługi portu szeregowego ? Pytam z ciekawości, bo lubie sobie robić takie małe klasy załatwiające chore pomysły WinAPI. Gdyby było pare osób zainteresowanych ,to bym to gdzies (po skończeniu) wystawił. Docelowo ma byc taka sama dla Win i Linux (o ile w linuxie tez jest toggle, ale powinno byc).

A jakie jest opoznienie od zakonczenia przesylu danych to wylaczenia RTS ?

J.

Tego jeszcze nie wiem, i nie wiem tez, czy bede miał czym sprawdzić (analizator by się przydał albo choć oscyloskop z pamięcią :/). Od biedy mozna by zrobic tak, że bit stopu zerował by licznik, a zanik RTS blokował licznik - po wysłaniu ciągu bajtów powinien dac rade zmierzyć (czy zalezy od ilości bajtów). Ale to troche szycia i pewno nieprędko to zrobie.

On Thu, 16 Jun 2005 12:19:00 +0200, Sebastian Bialy snipped-for-privacy@poczta.onet.pl> wrote: [.....]

Zanim zaczniesz coś pisać, poszukaj w Sieci darmowej klasy CSerialPort. Windows only. Jeśli chodzi o wieloplatformową klasę do seriala, to chyba tak łatwo nie będzie. Niby obsługa seriali jest podobna pod Windows i Linuksem, ale gdy zaczniesz się zagłebiać w szczegóły, ty wyjdzie na to że tylko interfejs klasy będzie wspólny dla obu systemów.

Regards, /J.D.

O to własnie chodzi.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required