logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program w Delphi 7 do sterowania przekaźnikami przez RS 232?

wesol 19 Kwi 2005 16:53 13012 31
  • #1 1419356
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    Chciałbym napisać program w Delphi 7 sterujący dwoma przekaźnikami podpiętymi pod port RS 232. Proszę o jakieś materiały, www, porady, etc.

    Dzięki za wszelką pomoc.
  • #2 1421216
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Hi !

    Od strony programowej to nie jest skomplikowane zadanie. Napisz tylko jak chcesz rozwiązać część sprzętową: sterownik, zasilanie itp.

    Pozdrawiam...
  • #3 1421257
    Vinnic
    Poziom 16  
    Posty: 158
    Pomógł: 18
    Ocena: 20
    Jest pełno komponentów obsługujących RS232 pod Delphi np Torry's Delphi Pages.
  • #4 1421864
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    Ogólnie chce napisać program, który będzie sterował dwoma przekaźnikami (napięcie zależy od tego jakie przekaźniki kupię, myślę że na 5V), przekaźniki mają działać jako wyłączniki chwilowe, a to będzie wykorzystane w ukłądzie sterownika silnika krokowego.
    Sam układ jest zasilany napięciem 12V, natężenie 0,15A (tyle pobiera sam silnik), nie wiem czy cały układ mógłby być zasilany poprzez RS 232?
    Więc tak to wygląda w skrócie.
    Mam już komponent do Delphi, ComPort.
  • #5 1422825
    Vinnic
    Poziom 16  
    Posty: 158
    Pomógł: 18
    Ocena: 20
    Obawiam się, że bezpośrednio z portu nie będzie można bezpośrednio sterować układem. Trzeba będzie zastosować układ typu MAX232 lub coś podobnego.
  • #6 1422978
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    Bezpośrednio to ja nie chce sterować układem, tylko przekaźnikami.
    Co to jest MAX232?
  • #7 1424383
    kult
    Poziom 16  
    Posty: 180
    Pomógł: 17
    Ocena: 5
    wesol napisał:
    Bezpośrednio to ja nie chce sterować układem, tylko przekaźnikami.
    Co to jest MAX232?


    zamienia poziomy rs232-TTL

    bez max232 trzeba sie troche pobawic bo chyba wiesz jakie sa zakresy napiec na tym porcie? :> -12 - 12V :)
  • #8 1425314
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    Ale czy ty stanowi jakiś problem w sterowaniu przekaźnikami na 5V, jak nawet to nie ma problemu kupić przekaźniki na 12V.
  • #9 1426840
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    niepolecam pobierania 12V z rs232 do bezpośredniego sterowania przekaźnikiem:
    1. mała wydolność prądowa wyjść - 40mA max
    2. można przepalić płytę główną lub karte rozszeżeń
    3. przekaźniki indukują spory prąd
    do tego trzeba zastosować zewnętrzne źródło zasilania oraz tranzystory lub tym podobne.. gdy stosuje sie tranzystory można pominąć konwersje z rs232 na TTL.. jeśli ktoś używa buforów typu L298N (tak jak ja) lub inne to wtedy powinno sie przekształcić sygnał na TTL.
  • #10 1427352
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    BoskiDialer użyłeś pełno nie zrozumiałych dla mnie pojęć.
    Od strony programowej już sobie poradzę.
    Martwi mnie jedynie budowa samego układu wykonawczego, nie mam pojęcia jak to zrobić. Możecie mi wyjaśnić jak to najlepiej zrobić z tymi przekaźnikami? Przypominam chcę sterować dwoma przekaźnikami poprzez RS 232. Dzięki za wszelkie rady, pomysły, rozwiązania.
  • #11 1427402
    Kuba_eM
    Poziom 24  
    Posty: 654
    Pomógł: 36
    Ocena: 77
    Heja!
    Wesol - może to będzie pomocne:
    {Komponent TRsPin służy do kontroli pinów portu szeregowego.
    Zastosowanie - elektronika amatorska : sterowania, programatory itp.
    Autor : Jerzy Szczesiul jerzy.szczesiul(_at_)ep.com.pl
    Kod Open Source do swobodnego wykorzystywania }
    Pozdrawiam,
    Kuba
    Załączniki:
    • RsPin_sterowanie_liniami_RS232.zip (3.25 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #13 1427848
    Bielsky
    Poziom 21  
    Posty: 333
    Pomógł: 30
    Ocena: 19
    Tak, można. (Ale....)
    Na podanej stronie masz opis układu wykonawczego włączającego przekaźnik na podstawie stanu logicznego (to, co na obu schematach zaczyna się od końcówki 12 mikrokontrolera PIC). Możesz takie same układy podpiąć do pozostałych wolnych portów mikrokontrolera.
    Tak, jak pisali to przedmówcy - potrzebny Ci będzie oprócz tego max232, aby procek mógł rzomawiać z komputerem.
    Jeżeli wystarczy Ci sterowanie ośmioma urządzeniami - podobne układy możesz sterować bezpośrednio z linii portu LPT.
  • #14 1427950
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    OK,
    myślę że wykorzystam układ opisany na stronie podanej przez mnie wcześniej i tego max232, tylko co to jest właściwie???

    Mam jeszcze takie pytanie, w układzie sterownika silnika krokowego znajduję się potencjometr odpowiedzialny z prędkość silnika, czy można zastąpić ten potencjometr czymś czym mógłbym również sterować za pośrednictwem rs 232? Chodzi o to żebym mógł sterować w pełni całym układem kompem a nie manulanie, przyciskająć wyłącznik chwilowy lub kręcąc potencjometrem.
  • #15 1427997
    Bielsky
    Poziom 21  
    Posty: 333
    Pomógł: 30
    Ocena: 19
    IMHO nie da się bezpośrednio sterować silnikiem, przekaźnikiem itp za pomocą rs232. lepiej się nadaje do tego port LPT. zobacz temat "tworzymy faq..."

    W wypadku rs232:
    Urządzeniem steruje program mikrokontrolera, (w tym przypadku PIC) a rs 232 jest wykorzystywany do przesyłania komunikatów. Aby mikrokontroler mógł odebrać sygnał z rs232, przydaje się układ max232, o czym już ktoś pisał w tym wątku.

    Z tego, co widzę na stronie, której adres podałeś:
    http://www.mikroelektronika.co.yu/english/product/books/PICbook/7_10chapter.htm
    pic16f84 nie ma sprzętowego interfejsu rs. Trzeba go realizować programowo.
  • #16 1428363
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    Jestem amatorem i nie znam się na tym.
    W sumie mówicie mi więcej niż na początku chciałem, za co Wam dziękuję.
    Teraz chciałbym podsumować to wszystko, bo powiem szczerze trochę się pogubiłem. Podsuneliście kilka rozwiązań. Mniej więcej wiem już jak to zrobić, jak mówiliście wykorzystam układ max232 (poszukałem trochę i już wiem co to jest) i schemat ze stronki. Szukałem na avt takiego układu, mają tam 3 rodzaje http://sklep.avt.com.pl/go/_search/full_searc...cae6&search_query_words=max232&search_by=name nie wiem teraz który powinienem wziąść. Jakie są wyprowadzenia w tym układzie? Może ktoś narysował by mi schemat jak to podłączyć. Czy układ pic16f84 trzeba prorgamować? Ile ja mam jeszcze pytań:]
  • #17 1428402
    Bielsky
    Poziom 21  
    Posty: 333
    Pomógł: 30
    Ocena: 19
    obudowa dip16 to taka "klasyczna", sop16 to smd.

    Tak, pic trzeba programować. Więcej się dowiesz na forum "mikrokontrolery".

    Nie chcę robić antyreklamy, ale sklep avt nie ma zbyt solidenj opinii. Osobiście najczęściej korzystam z www.seguro.pl.
  • #18 1428666
    wesol
    Poziom 15  
    Posty: 207
    Pomógł: 1
    Ocena: 9
    No to takie rozwiązanie chyba odpada, bo nie mam jak zaprogramować układu.
    Co tu teraz robić?
  • #19 1436580
    Kano15x
    Poziom 11  
    Posty: 5
    Siema!!
    Mam Delphi 7 i komponent ComPort. Nie wiem jak uruchomic piny (tzn. Chcem zrobić program w który po naciścięciu Button1 będzie sie załączałą lampka) nie wiem do jakich pinów podłączyć coś. POMOCY!!!
  • #20 1440577
    Remx
    Poziom 11  
    Posty: 70
    Ocena: 3
    Ja mam inne pytanie ale nawiazujace do rs232 i delphi

    Jak wiadomo z Rs232 potrzba nam GND RxD i TxD
    (+max232)
    I naprzyklad uklad do ktorego chcemy sie podlaczyc jest zasilany 5V
    wiec trzeba uzywac owego maxa i brac zasilanie skads...

    A czy da sie zamiast RS232 uzyc USB ??
    Jak wiemy mamy tam 5V czyli zasilanie juz mamy i sa tez tam dwie linie do przesylania danych.
    Tylko czy tak mozna ?? czy moze te dwie linie dzialaja na innej zasadzie ??

    Dziekuje
  • #21 1440994
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    Hej...
    --> Kano15x
    Co do wypowiedzi to żeby ustawiać stany na pinach rs232 nie używam komponetów bo łatwiutko można to zrobiś za pomocą funkcji EscapeCommFunction(hCommDev, YYYY); gdzie YYYY to:
    CLRDTR
    CLRRTS
    SETDTR
    SETRTS
    SETXOFF
    SETXON
    SETBREAK
    CLRBREAK

    przed tym jednak trzeba uzyskać uchwyt do danego portu np:

    hCommDev := CreateFile
    ('COM1',GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0 );

    --> Remx

    Ja ustawiam na pinach stan wysoki i mogę wtedy z nich pobierać zasilanie ale trzeba się liczyć z tym, że obciążalność tego portu jest mała (ok.10mA na pin) i zależna od typu układu UART czyli od komputera. Napięcie też jest różne ok.8-13V dla stanu wysokiego ale wystardzy dać diodę zenera 5V2 i można zasilać układy cyfrowe.

    Jeśli nie trzeba jednoczesnej transmisji w obu kierunkach (Half-Duplex) to wystarczy poniższy prosty układ na jednym tranzystorku/jedną stronę zamiast MAX232...
    UKŁAD jest sprawdzony i działa napewno....

    Pozdrawiam.
    PROKOPCIO
    Załączniki:
    • rs2ttl.gif (6.12 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #22 1446060
    Kano15x
    Poziom 11  
    Posty: 5
    Sorry że pytam(jestem troche ciemny w programowaniu) ale co to za funkcja "EscapeCommFunction"... Mógł byś mi troche więcej wytłumaczyć na ten temat...
  • #23 1447219
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    Więc tak...

    hCommDev - jest to zmienna typu THandle:
    var
    hCommDevice : THandle;


    Najpierw tworzymy uchwyt do danego portu np:
    hCommDev := CreateFile('com1', GENERIC_READ or GENERIC_WRITE, 0,NIL, OPEN_EXISTING, 0, 0);

    jak już mamy uchwyt to możemy sterować poszczególne piny i tak np.
    EscapeCommFunction(hCommDev,SETRTS);
    ustawi stan wysoki na pinie wyjściowym RTS.

    jak jeszcze będziesz miał jakieś pytania to pisz.

    Dodano po 2 [minuty]:

    Acha przed zakończeniem programu należy zwolnić port:
    CloseHandle(hCommDev);
  • #24 1448787
    Kano15x
    Poziom 11  
    Posty: 5
    Ok
    Udało mi się, skompilowałem i działa... ale :/ ... do którego pinu i jak podłączyć przekaźnik czy tesh diode... (to będzie ten schemat u góry?)
  • #25 1453096
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Kano15x napisał:
    Ok
    Udało mi się, skompilowałem i działa... ale :/ ... do którego pinu i jak podłączyć przekaźnik czy też diode... (to będzie ten schemat u góry?)


    RTS w złączu DB9 to pin numer 7

    Oczywiście przekaźnika tam bezpośrednio nie dołączaj, bo po pierwsze może nie starczyć prądu, a po drugie jak pójdzie przepięcie przy rozłączaniu, możesz spalić nie tylko RSa, ale coś więcej.

    Diodę między ten pin i masę (jakiś oporniczek ograniczający np. 1k).

    W przypadku przekaźnika proponuję tranzystor (tak jak w tym układzie z PICem), albo lepiej - najpierw transoptorek np. 4N25 (strona pierwotna tak, jak ta dioda, emiter tranzystora wyjściowego transoptora na bazę tranzystora sterującego przekaźnikiem, kolektor do plusa). PECET kosztuje znacznie więcej od przekaźnika, więc szkoda go zniszczyć. W ostateczności na bazie tranzystora transil zabezpieczający (do masy).
    No i jeszcze zasilanie, oczywiście niezależne od PC.
  • #26 1575822
    Kano15x
    Poziom 11  
    Posty: 5
    Ja mam jeszcze takie pytanie co do tego zaprogramowania programu:P
    na xp chodzi bez zarzutow(wyłącza sie, włącza się:D) a pod 98 .... tylko załącza nie da sie wyłączyć, dopiero jak wyłącze i z powrotem włącze Port Com1 w Menadrzerze urządzeń. Jak mam to naprawic? Może ktoś zna skrypt ktoty wyącza urządzenia i je załącza w Delphi 7. Pomocy...
  • #27 1577201
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    U mnie działa - w Windows 98 se - '?w?
  • #28 1687489
    xPatryk
    Poziom 15  
    Posty: 208
    Ocena: 7
    Już nie mogę patrzeć na Wasze skomplikowane rozwiązania układowe !

    Po co komu qr... max232 (konwerter poziomów stanów logicznych) do sterowania 2 przekaźnikami?

    Poza TXD i RXD masz jeszcze linie sterujące pracą modemu - mozesz je wykorzystac bgez kombinowania...

    Tutaj jest opis wraz z przykładowym kodem źródłowym dla 2 diód LED - zamień diody na tranzystorki BC337 połączone przez rezystory ~10k, do tego diody BAT albo coś w tym stylu przy przekaźnnikach (zwróć uwagę na polaryzację) i masz po problemie...

    http://kudlaty-website.kom.pl/podstrony/kursy/serial/porty_delphi.pdf

    Możesz zrobić to też na rejestrach przesównych...

    btw. pytanie zadałeś po prostu w złym dziale, trzeba było to zrobić w "Mikrokontrolery...

    Pozdrawiam
    Patryk

    Dodano po 15 [minuty]:

    ps. jeśli bardzo zależy Ci na bezpieczeństwie swojego kompa, możesz zastosować optoizolację na optotriakach pomiędzy portami a tranzystorami, wtedy nawet jak będziesz miał przebicie na cewce przekaźnika i popłynie przez układ 230V, to najwyzej stracisz przekaznik, diodę rezystor i optotriak - jakieś 2.5 zł, taniej niż PC'et - prawda?
  • #29 1687846
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    Nikt nie pisał o tym żeby sterować Rx/Tx -> przecież przykład (program) steruje linią RTX...
    co do układu ze schematu - to tylko jest idea przejącia ze stanów RS232 na TTL i może być zastosowany dla każdej linii portu - poza tym nie uważam żeby układ był skomplikowany jak pisał xPatryk (cytuję):
    "Już nie mogę patrzeć na Wasze skomplikowane rozwiązania układowe ! "
  • #30 1688251
    xPatryk
    Poziom 15  
    Posty: 208
    Ocena: 7
    Hmm... zakładam, że użycie MAX232 wymagać będzie od wesol'a:

    - wykonania płytki
    - wlutowania podstawki (domyślam się, że nie wlutuje od razu max232 bez jego spalenia)
    - umieszczenia max'a,
    - umieszczenia 5 kondensatorków
    i dopiero potem reszta układy w tym stylu, co pisałem...

    Ponadto proponowałbym zastosować układ opisywany w CHIP'ie (również na forum Download), on ma 8 wyjść i daje większe możliwości - koszt do 8-10 zł z przekaźnikami...

    Pozdrawiam
    Patryk

Podsumowanie tematu

✨ Dyskusja dotyczy stworzenia programu w Delphi 7 do sterowania dwoma przekaźnikami podłączonymi do portu RS232. Kluczowym problemem jest odpowiednie zbudowanie układu wykonawczego, gdyż port RS232 nie może bezpośrednio zasilać ani sterować przekaźnikami ze względu na różne poziomy napięć i ograniczoną wydolność prądową. Zalecane jest zastosowanie konwertera poziomów sygnału, np. układu MAX232, który zamienia sygnały RS232 na TTL, umożliwiając komunikację mikrokontrolera (np. PIC16F84) z komputerem. Mikrokontroler steruje przekaźnikami poprzez tranzystory, a do zabezpieczenia cewki przekaźnika stosuje się diody zabezpieczające (np. diody BAT). Alternatywnie można wykorzystać linie sterujące portu RS232 (RTS, DTR) do bezpośredniego sterowania tranzystorami, jednak z uwzględnieniem ograniczeń prądowych i koniecznością stosowania elementów ochronnych, takich jak diody Zenera i optoizolatory (np. optotriak 4N25). Programowo w Delphi 7 można sterować pinami portu szeregowego za pomocą funkcji Windows API, np. CreateFile i EscapeCommFunction, ustawiając stany linii RTS lub DTR. Wskazano również, że do pełnej kontroli układu, np. zastąpienia potencjometru sterującego prędkością silnika krokowego, potrzebny jest mikrokontroler z odpowiednim oprogramowaniem. W dyskusji pojawiły się przykładowe schematy i materiały, m.in. z mikroelektronika.co.yu oraz kursy dotyczące portów szeregowych w Delphi. Poruszono także kwestie zasilania układu zewnętrznego, konieczności programowania mikrokontrolera oraz alternatywę w postaci portu LPT do sterowania większą liczbą urządzeń. Wskazano na ryzyko uszkodzenia komputera przy bezpośrednim podłączaniu przekaźników do portu RS232 bez odpowiednich zabezpieczeń i układów pośredniczących.
REKLAMA