Konwerter RS232<>RS485 - obsługa programowa
Masz problem? Zapytaj na forum elektroda.pl
From: "kg" <krzygo_at_nospam_wp.pl>
Subject: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 10:41:10 +0200
Witam
Pracuję nad programową obsługą konwertera RS232<>RS485. Wykorzystywana
jest linia RTS do zmiany kierunku przesyłania danych po RS485. Program
powinien działać tak, że po wysłaniu kilku danych powinien zmienić stan
linii RTS na 0, dzięki czemu urządzenie podłączone do RS485 będzie mogło
przesłać z powrotem dane.
Wysyłanie danych następuje w następujący sposób:
WriteFile(...)
EscapeCommFunction(..., CLRRTS)
Niestety wywołanie funkcji EscapeCommFunction() najprawdopodobniej następuje
jeszcze w momencie wysyłania danych, przez co nie docierają one do
urządzenia. Zastosowanie funkcji WaitCommEvent(..., EV_TXEMPTY) czy
FlushFileBuffer() również nie pomaga. Może kto¶ zetknął się z tym problemem
i zna jego rozwiązanie.
Pozdrawiam
Krzysztof Gostkowski
From: "SpeedBit" <kula_at_nospam_polbox.com>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 10:50:59 +0200
Softwarowo dowiesz się tylko że znaki wyszły z kolejki windowsowej,
ale pamiętaj że masz jeszcze przynajmniej jeden znak w nadajniku (lub więcej
jak masz fifo - a raczej masz)!
Wstaw odpowiedniego do prędko¶ci delaya coby sobie spokojnie wyszedł(wyszły)
)
Zadziała na 100%
Pozdrowienia
Sławek
From: "Andrzej" <anga_at_nospam_tele2.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 12:57:18 +0200
Użytkownik "kg" <krzygo_at_nospam_wp.pl> napisał w wiadomo¶ci
news:a8u9d9$60n$1_at_nospam_news.tpi.pl...
Witam
Pracuję nad programową obsługą konwertera RS232<>RS485. Wykorzystywana
jest linia RTS do zmiany kierunku przesyłania danych po RS485. Program
powinien działać tak, że po wysłaniu kilku danych powinien zmienić stan
linii RTS na 0, dzięki czemu urządzenie podłączone do RS485 będzie mogło
przesłać z powrotem dane.
Wysyłanie danych następuje w następujący sposób:
WriteFile(...)
EscapeCommFunction(..., CLRRTS)
Niestety wywołanie funkcji EscapeCommFunction() najprawdopodobniej
następuje
jeszcze w momencie wysyłania danych, przez co nie docierają one do
urządzenia. Zastosowanie funkcji WaitCommEvent(..., EV_TXEMPTY) czy
FlushFileBuffer() również nie pomaga. Może kto¶ zetknął się z tym
problemem
i zna jego rozwiązanie.
Witam,
Czy korzystasz z gotowego konwertera, czy też sam zmontowałe¶ taki układ?
Rozwiązanie wykorzystujące linie modemowe do przełączania kierunku
transmisji jest bardzo uciążliwe. Można stosować rozwiązanie, które
zasugerował SpeedBit ale aby zapewnić dużą skuteczno¶ć przełączania należy
bardzo precyzyjnie wyznaczyć opóźnienie i oczywi¶cie jest ono uzależnione od
prędko¶ci transmisji. Przy większych prędko¶ciach transmisji to rozwiązanie
jest bardzo zawodne.
Jeżeli sam zmontowałe¶ konwerter i wykorzystujesz układ kompatybilny z
MAX485 (SN75176), to proponuję rozważyć możliwo¶ć zamiany rolami sygnałów D
i DE. Od wielu lat stosuję takie rozwiązanie i nie zdarzyło się by
jakakolwiek magistrala "odmówiła współpracy". Rozwiązanie ma tę zaletę, że
nie ma potrzeby sterowanie kierunkiem przepływu danych. Linie modemowe
stosuję do zasilania MAX-a, umieszczonego w obudowie RS-owego złącza DB9.
Układ działa bezbłędnie dla wszystkich prędko¶ci transmisji do 115k
włącznie.
Pozdrawiam
Andrzej Galant
From: "SpeedBit" <kula_at_nospam_polbox.com>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 14:54:35 +0200
Andrzejku,
Zaciekawiła mnie Twoja opcja sprzętowa, ale co¶ nie za bardzo ją rozumiem -
możesz rozwinąć (przybliżyć) temat?
Pozdrawiam
Sławek
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Wed, 10 Apr 2002 08:47:13 +0200
Andrzejku,
Zaciekawiła mnie Twoja opcja sprzętowa, ale co¶ nie za bardzo ją
rozumiem -
możesz rozwinąć (przybliżyć) temat?
Jesli dobrze rozumiem:
D->Gnd
/RE ->Gnd
R->Rxd
DE->Zanegowane TxD z procesora
Takie podlaczenie stosuje sie przy realizacji magistrali CAN po RS485.
Wlaczenie nadawania nastepuje tylko gdy na TxD pojawia sie 0.
Gdy niczego nie nadajemy driver jest wiec odlaczony. Realizujemy cos
podobnego do iloczynu na drucie.
--
pozdrawiam, peters
peters_at_nospam_poczta.onet.pl
http://peters.republika.pl (strona Petersa dla elektroników)
From: "Andrzej" <anga_at_nospam_tele2.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Wed, 10 Apr 2002 09:39:26 +0200
Użytkownik "SpeedBit" <kula_at_nospam_polbox.com> napisał w wiadomo¶ci
news:a8uo9k$ga4$1_at_nospam_news.tpi.pl...
Zaciekawiła mnie Twoja opcja sprzętowa, ale co¶ nie za bardzo ją
rozumiem -
możesz rozwinąć (przybliżyć) temat?
Witam,
Proponuję sprawdzić kartę katologową scalaka DS36277 firmy NS (
http://boss.iele.polsl.gliwice.pl/data/national/docs/ds36277.pdf ) oraz opis
standardu SAE J1708.
Konwerter zbudowny jest na bazie popularnego tranceivera MAX485 (ADM485).
Jeżeli w układach tych uaktywnimy odbiornik (/RE=Lo), to scalak podłączony
do magistrali na której nie ma w aktywnego nadajnika, wystawi na wyj¶ciu R
stan Hi (tak samo zachowuje się odbiornik odpięty od magistrali lub ze
zwartymi liniami A, B).
Co się stanie jeżeli uaktywnimy jaki¶ nadajnik (DE=Hi), a na jego wej¶ciu D
będzie panował stan Hi?
Z punktu widzenia odbiornika - nic. Wyj¶cie D nadal będzie w stanie Hi.
Skoro odbiornik w ten sam sposób interpretuje "stan pasywny" magistrali oraz
"nadawanie jedynki", to wniosek jest prosty - jedynki nie musimy nadawać
(wystarczy "odpiąć" się od magistrali).
Aby nadać "zero" w tradycyjnej aplikacji robimy to wysterowując DE=Hi oraz
D=Lo.
Spróbujmy wykorzystać wej¶cia D i DE "niezgodnie z ich przeznaczeniem".
Wej¶cie D na stałe podpinamy do Lo. Na wej¶cie DE podajemy zanegowany sygnał
danych. Efekt jest taki, że transmitter uaktywnia się tylko na czas
wysyłania bitu danych o warto¶ci "zero". Nadajnik staje się nieaktywny
natychmiast po wysłaniu ostatniego zerowego bitu danych. W skarajnym wypadku
gdy transmitujemy bajt 0x00, nadajnik jest włączony tylko w czasie
transmisji bitu startu. Mimo to wszystkie odbiorniki podpięte do magistrali
prawidłowo zdekokodują odbiór nadanego bajtu.
RS422/485 jest symetrycznym, zrównoważonym systemem transmisji danych. Ta
"równowaga" zostaje w pewien sposób zachwiana przez nadajnik pracujący w
proponowanym wyżej trybie ale w najmniejszym stopniu nie zakłóca to
poprawnej pracy magistrali.
Prosty schemat konwertera RS232/RS485 udostępniam na
ftp://213.173.216.74 pub232to485.jpg
Przej¶ciówka ma tę zaletę, że przy odrobinie dobrej woli można ją upchnąć w
obudowie małej wtyczki RS-owej nawet gdy stosujemy elementy w obudowach do
montażu przewlekanego.
Nie wymaga zasilania, pracuje z dowolnym terminalem RS-owym na PC i przy
każdej prędko¶ci transmisji, umożliwia "podsłuch" i nadawanie, może
dekodować kolizje na magistrali...
Idealne rozwiązanie do prac serwisowych.
Osobi¶cie nie przepadam za RS485 wła¶nie ze względu na konieczno¶ć
uaktywniania nadajnika. Prawie zawsze korzystam z SAE J1708. Na "pierwszy
rzut oka" standardy te są nierozróżnialne.
Pozdrawiam miło¶ników RS485 :-)
Andrzej Galant
From: "przemek zyla" <belmotybe_at_nospam_poczta.onet.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 16:42:42 +0200
MAX485 (SN75176), to proponuję rozważyć możliwo¶ć zamiany rolami sygnałów
D
i DE. Od wielu lat stosuję takie rozwiązanie i nie zdarzyło się by
jakakolwiek magistrala "odmówiła współpracy". Rozwiązanie ma tę zaletę, że
nie ma potrzeby sterowanie kierunkiem przepływu danych. Linie modemowe
stosuję do zasilania MAX-a, umieszczonego w obudowie RS-owego złącza DB9.
Układ działa bezbłędnie dla wszystkich prędko¶ci transmisji do 115k
włącznie.
tez jestem zainteresowany twoim rozwiazaniem, mozesz
przyblizyc???
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 23:49:03 +0200
Użytkownik "przemek zyla" <belmotybe_at_nospam_poczta.onet.pl> napisał w wiadomo¶ci
news:a8uul7$9qg$1_at_nospam_news.onet.pl...
MAX485 (SN75176), to proponuję rozważyć możliwo¶ć zamiany rolami
sygnałów
D
i DE. Od wielu lat stosuję takie rozwiązanie i nie zdarzyło się by
jakakolwiek magistrala "odmówiła współpracy". Rozwiązanie ma tę zaletę,
że
nie ma potrzeby sterowanie kierunkiem przepływu danych. Linie modemowe
stosuję do zasilania MAX-a, umieszczonego w obudowie RS-owego złącza
DB9.
Układ działa bezbłędnie dla wszystkich prędko¶ci transmisji do 115k
włącznie.
tez jestem zainteresowany twoim rozwiazaniem, mozesz
przyblizyc???
No to ze swojej strony dorzucę jeszcze atrykuł Jana Axelsona:
http://strony.wp.pl/wp/sp5xal/desgn485.pdf
Patent z 555-ką - sprawdzony - działa w praktyce. Aczkolwiek tylko w
podręcznym (uruchomieniowym) konwerterze 232<->485 do PC-ta. Nie wiem jak
sie zachowa na dłuższych, zakłócanych liniach.
MDz
From: "Paweł" <pawelr_at_nospam_elsat.com.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 20:19:04 +0200
Niestety wywołanie funkcji EscapeCommFunction() najprawdopodobniej
następuje
jeszcze w momencie wysyłania danych, przez co nie docierają one do
urządzenia. Zastosowanie funkcji WaitCommEvent(..., EV_TXEMPTY) czy
FlushFileBuffer() również nie pomaga. Może kto¶ zetknął się z tym
problemem
i zna jego rozwiązanie.
Wczytuj dane, które wysyłasz. Można dzięki temu stwierdzić kiedy wszystko
zostało już wysłane oraz czy z magistrala działa prawidłowo.
Paweł
From: "kg" <krzygo_at_nospam_wp.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Wed, 10 Apr 2002 20:42:37 +0200
Użytkownik "Paweł" <pawelr_at_nospam_elsat.com.pl> napisał w wiadomo¶ci
news:a8van2$brj$1_at_nospam_news.tpi.pl...
Wczytuj dane, które wysyłasz. Można dzięki temu stwierdzić kiedy wszystko
zostało już wysłane oraz czy z magistrala działa prawidłowo.
Paweł
Tak też zrobiłem i to chyba najlepsza metoda, choć wymagała niewielkiej
przeróbki konwertera.
Dzięki.
Pozdrawiam
Krzysiek
From: "Greg S." <greg_sz_at_nospam_dsuper.net>
Subject: Re: Konwerter RS232<>RS485 - =?iso-8859-1?Q?obs=B3uga?= programowa
Date: Tue, 09 Apr 2002 17:13:58 -0400
kg wrote:
Pracuję nad programową obsługą konwertera RS232<>RS485. Wykorzystywana
jest linia RTS do zmiany kierunku przesyłania danych po RS485. Program
powinien działać tak, że po wysłaniu kilku danych powinien zmienić stan
linii RTS na 0, dzięki czemu urządzenie podłączone do RS485 będzie mogło
przesłać z powrotem dane.
...
Moze rozwiazaniem moze byc czytanie tego co wysylasz. Nie wiem jaki masz uklad
ale mozna przeciez czytac z lini odbiorczej to co wlasnie wysylasz jak to
odbierzesz to wiesz ze wszystko jest juz wyslane.
Problem jeszcze moze byc po drugiej stronie tez. Sprawdz czy po przlaczeniu na
nadawanie odczekales dosc czasu zanim zaczniesz transmisje.
Jeszcze jedna mozliwosc. Jakis stan przejsciowy jest dekodowany jako Start i
wtedy wszystko biora diabli. Dlatego na wieksze szybkosci dobra jest transmisja
synchroniczna
Pozdro
Grz..Szy..