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

Delphi – jak ustawić stan logiczny 0/1 na porcie COM po kliknięciu przycisku?

matmic 17 Maj 2006 19:30 3941 6
REKLAMA
  • #1 2635618
    matmic
    Poziom 14  
    Posty: 167
    Pomógł: 4
    Ocena: 12
    Witam.
    Chciałbym napisać programik w Delphi, który posiadałby tylko jeden przycisk.
    Po jego naciśnięciu na porcie COM pojawiałaby się "1" logiczna. Po ponownym naciśnięciu przycisku pojawiałoby się "0" logiczne na porcie COM.
    Program byłby dla mnie prosty, ale problemem jest z obsługą portu COM, nie wiem jak ją zrealizować.
    Prosiłbym o jakieś gotowe projekty, linki i sugestie.
  • REKLAMA
  • REKLAMA
  • #3 2637586
    pawl_s
    Poziom 2  
    Posty: 4
    POlecam rowniez: http://www.turbopower.com/ i Async Professional. Firma padla i rozdaja swoj soft za darmo. Dziala na pewno pod C++Builderem, pod Delphi tez powinno.

    Pozdrawiam,
    Pawel
  • #4 2638292
    matmic
    Poziom 14  
    Posty: 167
    Pomógł: 4
    Ocena: 12
    Ściągnąłem to http://www.torry.net/vcl/system/portaccess/smport.zip
    Zainstalowałem go w Delphi i użyłem funkcji:
    SmallPort1.OpenDriver; // ładuje sterownik
    SmallPort1.Port[$278]:=1; // wypisuje 1 na com1

    Skompilował się ładnie, bez żadnych błędów.
    Podłączyłem miernik, odpaliłem program i mierze. Z pomiarów wynika, że nie działa. Nic się nie zmienia na poszczególnych pinach. Masa jest na 5, sprzwdziłem też pozostałe piny, na trzech pojawia się wartość ujemna -10,50 V, na pozostałych 0,14V. Bez różnicy czy "niby" wyślę "1" jedynkę przez program czy też nie. Nie działa.
    W czym tkwi problem?
    Bardzo proszę o pomoc
  • REKLAMA
  • #5 2653714
    PiRoman2
    Poziom 20  
    Posty: 337
    Pomógł: 22
    Ocena: 15
    Działa tak jak powinien (a nie tak jak chciałeś).
    Po wpisaniu "1" pod adres 278 (bufor nadajnika) zostanie ona wysłana szeregowo (8 bitów + parzystość). Aby zmieniać stan musisz wykorzystać linie modemowe.
  • REKLAMA
  • #6 2655135
    recordd
    Poziom 11  
    Posty: 5
    A czy na comie '1' nie jest reprezentowana napieciem ujemnym????
  • #7 2686162
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    Radze poczytać:
    https://www.elektroda.pl/rtvforum/topic118948.html

    w twoim przypadku "base = $2F8" a "port" należy zamienić na "SmallPort1.Port"
    1 na TxD port[base+3]:=port[base+3] and not $40;
    0 na TxD port[base+3]:=port[base+3] or $40;
    1 na DTR port[base+4]:=port[base+4] or $01;
    0 na DTR port[base+4]:=port[base+4] and not $01;
    1 na RTS port[base+4]:=port[base+4] or $02;
    0 na RTS port[base+4]:=port[base+4] and not $02;

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy realizacji w Delphi prostego programu z jednym przyciskiem, który po kliknięciu ustawia stan logiczny 0 lub 1 na porcie COM. Problemem jest obsługa portu COM i prawidłowe sterowanie liniami sygnałowymi. Zaproponowano poszukiwanie pod hasłem ComPort oraz wykorzystanie bibliotek takich jak Async Professional dostępnych na TurboPower, które działają pod Delphi i C++Builder. Próba bezpośredniego zapisu wartości na adres portu (np. SmallPort1.Port[$278]:=1) nie przynosi oczekiwanych efektów, ponieważ wpisanie "1" do bufora nadajnika wysyła dane szeregowo, a nie zmienia stanu linii. Aby zmieniać stan logiczny na porcie COM, należy sterować liniami modemowymi (np. DTR, RTS). Wskazano, że sygnał "1" na porcie COM może być reprezentowany napięciem ujemnym. Podano przykładowe operacje bitowe na portach, np. ustawianie i zerowanie linii TxD, DTR, RTS za pomocą maskowania bitów w rejestrach portu (adres bazowy $2F8). Zalecane jest korzystanie z gotowych bibliotek i dokładne sterowanie liniami modemowymi, a nie bezpośrednie wysyłanie wartości do bufora nadajnika.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA