FAQ | Points | Add... | Recent posts | Search | Register | Log in


Rs232 /COM jak go sterować z poziomu Delphi


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Rs232 /COM jak go sterować z poziomu Delphi
Author
Message
rafiks
Poziom 17
Poziom 17


Joined: 22 Feb 2003
Posts: 389
Location: Poznań

Post#1 Post from the author of the topic 22 Feb 2003 18:23   

Rs232 /COM jak go sterować z poziomu Delphi


Jak sterować portm rs232/com w komputerze z poziomu delphi. Napewno będzie trzeba dać wstawkę assemblerową, ale jaką. Może ktoś wie jak się steruje tym portem w komputerze.

Wielkie dzięki
Back to top
   
elektryk
Poziom 26
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#2 22 Feb 2003 23:56   


Wstawki sobie odpuść bo będą one działać tylko pod 95/98, pod XP podobno tak jeśli się zainstaluje specjalny driver. Pod windowsami otwierasz plik "com2:" i robisz zapis/odczyta tak jak do/z pliku. Jeśli chcesz więcej szczegółów to sprecyzuj bardziej swoje pytanie.
PS do delphi są też jakieś gotowe komponenty ale ja osobiście z nich nie korzystam.Jeden się chyba nazywa "Asynch".
Back to top
   
rafiks
Poziom 17
Poziom 17


Joined: 22 Feb 2003
Posts: 389
Location: Poznań

Post#3 Post from the author of the topic 23 Feb 2003 11:31   

rs232


Jak wysłać i odczytać stany na tym porcie? Poco się go otwiera? Czym różni się od LPT, myślałem że to działa na tej samej zasadzie tylko ma mniej wyprowadzeń!
Back to top
   
elektryk
Poziom 26
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#4 23 Feb 2003 12:14   


Port szeregowy działa na całkiem innej zasadzie. Podaje się mu liczbe iluś-bitową (to można skonfigurować) a on przekształci ją w ciąg binarny rozpoczynający się bitem startu a zakończony bitem stopu. Układ sterownika zbudowany jest z rejestru przesuwnego do którego wpisuje się wartość do wysłania a w czasie wysyłania kolejne bity są przesuwane tak aby opróżnić cały rejestr. Odbiór polega na wykryciu bitu startu a następnie zdekodowaniu kolejnych bitów. Stanu logicznego na liniach transmisyjnych nie da się dowolnie zmieniać, można jedynie wybierać wartość danych do przesłania, Dodatkowo dostępne są linie RTS (Request To Send) DTR (Data Terminal Ready) których stan może być stały, związany z transmisją (handshaking). Dodatkowo dostępna jest odpowiadająca im para sygnałow DSR i CTS których stan może być sprawdzony programowo jak i sprzętowo. Uzupełniem tych lini jest linia RI (Ring Indicator) która jest w standardzie ale nie jest zawsze implementowana, jej zadaniem jest generowanie przerwania przy nadejściu sygnału dzwonka do modemu.
Back to top
   
Google

Google Adsense


Post# 23 Feb 2003 12:14   





Back to top
   
Kuba_eM
Poziom 18
Poziom 18


Joined: 26 Sep 2002
Posts: 560
Location: Mińsk Maz.

Post#5 24 Feb 2003 09:13   

RS232- Delphi


Heja!
Temat już był poruszany nie raz. "Delphiarzom" jak zawsze polecam stronę www.torry.net. Jest tam pełno komponentów m.i. do komunikacji za pomocą RSa. Ja od kilku lat używam komponenetu ze strony xcomdrv.host.sk (projekt już nie rozwijany). Od prawie półtora roku działam na XP i programiki z Delphi z tym komponentem działają bez najmniejszych problemów. To samo jest w robocie z innymi Windami.
Pozdrawiam,
Back to top
   
Kuba_eM
Poziom 18
Poziom 18


Joined: 26 Sep 2002
Posts: 560
Location: Mińsk Maz.

Post#6 24 Feb 2003 09:17   


A jak nie chcesz komponentów, to w książce "RS232 - praktyczne programowanie" (lub tytuł zbliżony - jest już drugie wydanie), jest bardzo dobry opis jak się dostać do RSa za pimocą WIN API, z przykładami. Warto się zapoznać.
Pozdrawiam,
Back to top
   
elektryk
Poziom 26
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#7 24 Feb 2003 12:18   


Ta książka ostatnio pojawiła się na elektrodzie w formie skanu, wczoraj ją akurat przejrzałem i wnioskuje że posiada kilka niedociągnięć, nie ma opisanej żadnej metody kontroli i ustawiania lini sterujących transmisją.
Back to top
   
jasiekz
Poziom 13
Poziom 13


Joined: 26 Feb 2003
Posts: 128
Location: Lubliniec

Post#8 26 Feb 2003 16:57   

do rs


Ja używam RS już od dawna w delphi. wcześniej korzystałem z komponentu comport (dejana). jest to bardzo dobry komponent do portu szeregowego. Ale ostatnio musiałem z niego zrezygnować z powodu sterowania RTS.(musiałem napisać swojego dll akurat na podstawie tej książki i nie narzekam) Doszedłem do tego że w windzie jest poważny błąd (serial.vxd)i nie potrafi ona poprawnie sterować RTS sprzętowym. podobno działa to w 2000 ale w 95,98 nie. Jak jest w Xp nie wiem. musiałem więc programowo sterować tą linią. ale winda jak zwykle się nie słucha i często nie załączy w odpowiednim czasie i nie zdąży wracać z powrotem mimo stosowania przerw czasowych. Jak chcesz to napisz czy chcesz ten komponent to go wyślę z jakimś prostym opisem.(jest darmowy i dobry dla początkujących)
Back to top
   
krzysztof1
Poziom 12
Poziom 12


Joined: 27 Jun 2002
Posts: 82
Location: Gdynia

Post#9 07 Mar 2003 13:40   


->elektryk
Gdybyś mógł podać link do skanu "RS232- Praktyczne Programowanie".
Nie mogę tego zanleźć :)
Back to top
   
Google

Google Adsense


Post# 07 Mar 2003 13:40   





Back to top
   
elektryk
Poziom 26
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#10 07 Mar 2003 13:45   


http://www.elektroda.pl/rtvforum/teoria.php?subdir=ksiazki&sortby=name
Back to top
   
painkiller
Poziom 10
Poziom 10


Joined: 22 Feb 2003
Posts: 50

Post#11 09 Mar 2003 00:48   


tu jest moja procedura od inicjalizacii jak troche pisz4esz w delphi to niebedziesz mial problemow

HCOM := CreateFile(comn{pchar np 'COM1'},
GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or File_Flag_Overlapped,0);

fillchar( dcb, sizeof(dcb), 0 );
dcb.DCBLength := sizeof(dcb);
dcb.BaudRate:=speed;
dcb.Flags := 1;
dcb.ByteSize := 8;
dcb.Parity := NOPARITY;
dcb.StopBits := ONESTOPBIT;
SetCommState( HCOM, dcb )
SetupComm(HCOM, 4, 4)

//odczyt
readfile(HCOM,r , 4, nread, nil);

//zapis
writefile( HCOM,d[0], 4, nsent, nil );


cos takiego
Back to top
   
elektryk
Poziom 26
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#12 09 Mar 2003 00:56   


Polecam
zamiast ręcznej inicjacji DCB :
GetCommState(HCOM,dcb);
<zmienić wybrane parametry>
SetCommState(HCOM,dcb);
Pozatym lepiej sobie ustawić timeouty żeby trasnsmisja nie zawieszała w przypadku jeśli nic nie nadaje.
Back to top
   
Rysiek_W
Poziom 8
Poziom 8


Joined: 22 Jan 2003
Posts: 27

Post#13 10 Mar 2003 13:06   


Proponuje opis obsługi portu szeregowego pod WIN98 na stronie Elektroniki praktycznej (strefa download->dokumentacje). Porty są obsługiwane funkcjami API, sam wykonałem parę prostych aplikacji z wykorzystaniem opisanych tam funkcji - wszystko działa OK. 8)
Back to top
   
firedrake
Poziom 6
Poziom 6


Joined: 04 Oct 2004
Posts: 19

Post#14 15 Mar 2005 23:12   

Re: Rs232 /COM jak go sterować z poziomu Delphi


Witam!
Mam maly problem z odczytem stanu linii CTS DSR ktore sa ustawiane przez drugie urzadzenie. Nie chce korzystac z handshakingu tylko samemu odczytywac stan tych lini i wyswietlac to w postaci diody w mojej app. Przykladem moze byc terminal.exe. W tym programie autor zrobil takie zielone diody do pokazywania stanu linii i tam wszystko dziala a ja nie moge sie dobrac to tych linii. RTS i DTR ustawiam i odczytuje ale nie moge tego uzyskac co do CTS i DSR.
Prosze o pomoc bo juz przeszukalem wiekszosc stron na necie i nie moge znalezc zadnej funkcji API do tego odczytywania.
Pozdrawiam!
Back to top
   
Smoczy
Poziom 16
Poziom 16


Joined: 27 Aug 2003
Posts: 348
Location: Kraków

Post#15 19 Mar 2005 21:16   

Re: Rs232 /COM jak go sterować z poziomu Delphi


Jest książka na temat obsługi RS232 w delphi, i do tej książki jest dołączona płyta z przykładami. Nie wiem jednak czy ja. posiadając taką płyte moze te przykłady zamieścić na forum (prawa autorskie). Prosze o odpowiedź, czy jest to możliwe i dopuszczalne. Jeżeli tak to bez problemu całą zawartość wystawie.
Back to top
   
marek_Łódź
Poziom 23
Poziom 23


Joined: 23 Dec 2004
Posts: 3131
Location: Łódź

Post#16 30 Mar 2005 10:05   

Re: Rs232 /COM jak go sterować z poziomu Delphi


Dziwne zjawisko

czy ktoś mi potrafi wyjaśnić obecność pól o nazwach zaczynających się literką f w helpie DELPHI5 dcb

fbinary,fOutxCtsFlow,fOutX,fOutxDsrFlow,fDsrSensitivity itp.

pola te prawdopodobnie nie występują w DCB, gdy kompiluję program odwołujący się do tych pól, stwierdza niezidentyfikowaną zmienną.

W związku z tym nie bardzo wiem, jak z poziomu programu wyłączyć XON/XOFF lub zmienić obsługę sygnałów modemu.

Dopisano po około xxx godz

Quote:
Literka f oznacza, że dane pole to flaga (w notacji jakiegoś węgra bodajrze).


Jak się odwołuję do tych pól to Delphi 5 sygnalizuje mi niezdefiniowaną zmienną. W helpie wszystkie te pola są opisane. Czy ktoś wie o co chodzi i jak włączyć/wyłączyć XON/XOFF.

Code:
typedef struct _DCB { // dcb 
    DWORD DCBlength;           // sizeof(DCB)
    DWORD BaudRate;            // current baud rate
    DWORD fBinary: 1;          // binary mode, no EOF check
    DWORD fParity: 1;          // enable parity checking
    DWORD fOutxCtsFlow:1;      // CTS output flow control
    DWORD fOutxDsrFlow:1;      // DSR output flow control
    DWORD fDtrControl:2;       // DTR flow control type
    DWORD fDsrSensitivity:1;   // DSR sensitivity

    DWORD fTXContinueOnXoff:1; // XOFF continues Tx
    DWORD fOutX: 1;            // XON/XOFF out flow control
    DWORD fInX: 1;             // XON/XOFF in flow control
    DWORD fErrorChar: 1;       // enable error replacement
    DWORD fNull: 1;            // enable null stripping
    DWORD fRtsControl:2;       // RTS flow control
    DWORD fAbortOnError:1;     // abort reads/writes on error
    DWORD fDummy2:17;          // reserved
    WORD wReserved;            // not currently used

    WORD XonLim;               // transmit XON threshold
    WORD XoffLim;              // transmit XOFF threshold
    BYTE ByteSize;             // number of bits/byte, 4-8
    BYTE Parity;               // 0-4=no,odd,even,mark,space
    BYTE StopBits;             // 0,1,2 = 1, 1.5, 2
    char XonChar;              // Tx and Rx XON character
    char XoffChar;             // Tx and Rx XOFF character
    char ErrorChar;            // error replacement character

    char EofChar;              // end of input character
    char EvtChar;              // received event character
    WORD wReserved1;           // reserved; do not use
} DCB;

  with dcb do
    begin
    BaudRate:=cbr_38400;   //OK
    StopBits:=ONESTOPBIT; //OK
    fbinary:=1;                   //Undeclared identifier "fbinary"
    end;

 


Sorry, nie chciałem mnożyć postów.
Back to top
   
Smoczy
Poziom 16
Poziom 16


Joined: 27 Aug 2003
Posts: 348
Location: Kraków

Post#17 31 Mar 2005 07:05   

Re: Rs232 /COM jak go sterować z poziomu Delphi


Literka f oznacza, że dane pole to flaga (w notacji jakiegoś węgra bodajrze).
Back to top
   
KanGu
Poziom 11
Poziom 11


Joined: 07 May 2005
Posts: 76
Location: Suwałki / Gdynia

Post#18 10 May 2006 23:46   

Re: Rs232 /COM jak go sterować z poziomu Delphi


czytam czytam i nie moge nic znaleść o tych zapytaniach :cry:

Code:

  query : PChar = 'CDAT?'+#13+#10;  // przykładowe zapytanie
                                  // zakończone parą znaków CR LF


Czy ktoś pomógłby mi to zrozumieć (dodam że sam się tego ucze i nie mam z nikąd pomocy). Sama ksiązka sporo mi dała "Praktyczne programowanie rs232" sporo objaśnień odnośnie całej komunikacji ale nigdzie tam nie ma wyjaśnień jakie zapytanie wysyłaja inne urządzenia np mikrokontrolery czy należy w nich coś ustawiać przed wysłaniem itp.

Mam dwa DS'y w ktorych obliczam wynik w następujący sposób:

Code:

Dim Name As String * 10
Dim Bd(9) As Byte
Dim Tmp As Integer
Dim Wynik As Single
dim temp1 as integer (albo string * 10)
dim temp2 as integer (albo string * 10)
'---------------------procedóra odczytu dla 2 taka sama
Config 1wire = Portd.4
1wreset
If Err = 1 Then
Locate 1 , 21
Lcd "ERR   "
Else
1wwrite Skip_rom
1wwrite Convert
Waitms 800
1wreset
1wwrite Skip_rom
1wwrite Read_sp
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(2) * 256
Tmp = Tmp + Bd(1)
Wynik = Tmp
Wynik = Wynik / 16


i wysyłam

Code:

print temp1
print temp2


To jak to poźniej wyłapać w komputerze przy pomocy delphi. Z poziomu delphi nie mam problemów z wysyłaniem zapytań i znaków, a w Hyperterminalu wyświetla mi dobrze te dwie temperatury jedna pod drugą w pewnych krótkich odstępach czasu. Nie wiem jak je odczytac i wpisac do dwóch elemntach RichEdit

Dodam tu jeszcze procedóry z Delphi jakich urzywam

Code:

var

  query : PChar = 'CDAT?'+#13+#10;  // przykładowe zapytanie
                                  // zakończone parą znaków CR LF
  Buffer_O : ARRAY[0..cbOutQueue] of Char; // bufor wyjściowy
  Buffer_I : ARRAY[0..cbInQueue] of Char;  // bufor wejściowy
//----------------------------------------------------------------------------------
function TForm1.Read_Comm(hCommDev: THANDLE;
                           Buf_Size: DWORD): Integer;
  var
     nNumberOfBytesToRead: DWORD;
begin
   ClearCommError(hCommDev, Errors, @Stat);
   if (Stat.cbInQue > 0) then
     begin
        if (Stat.cbInQue > Buf_Size) then
          nNumberOfBytesToRead := Buf_Size
          else
             nNumberOfBytesToRead := Stat.cbInQue;
         ReadFile(hCommDev, Buffer_I, nNumberOfBytesToRead,
                  Number_Bytes_Read, NIL);
         Read_Comm := 1;
     end
       else
          begin
            Number_Bytes_Read := 0;
            Read_Comm := 0;
          end;
end;
//-----------------------------
  FlushFileBuffers(hCommDev);
  Until (Write_Comm(hCommDev, StrLen(Buffer_O)) <> 0);

  if (Read_Comm(hCommDev, SizeOf(Buffer_I)) > 0) then // odbiór
                                                       // danych
  RichEdit1.Text := Buffer_I
  else
  RichEdit1.Text := 'Brak danych';

Przy urzyciu powyzszego kodu w elemencie RichEdit wyświetlaja mi sie dziwne znaki nie widze w nich nieczego co mogło by mi pomóc zrozumieć cały ten proces.

Będe bardzo wdzięczny za wszelką pomoc zwłaszcza jeśli ktoś by miał chwile i mi to potłumaczył na gg czy przez mail'e :|:
Back to top
   
Google

Google Adsense


Post# 10 May 2006 23:46   





Back to top
   
Fakiros
Poziom 12
Poziom 12


Joined: 25 Jan 2004
Posts: 90

Post#19 14 May 2006 11:30   

Re: Rs232 /COM jak go sterować z poziomu Delphi


Proponuje komponent o nazwie "ComPort" , do sciagniecia w sieci, darmowy, znalazlem kiedys taki w google. Komponent jest z przykladami i moze b yc zainstalowany w delphi lub Builderze C++, bardzo prosty w obsłudze - polecam.
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Rs232 /COM jak go sterować z poziomu Delphi
Page 1 of 1
Similar topics
Delphi, jak wysłać kody starujące na COM do fiskalnej? (14)
Port gier i Delphi. Jak sterować portem gier? (10)
Transmisja RS232 pod Delphi - jak? (2)
Delphi i RS232 jak odebrać text? (3)
[Delphi] Jak rozpoznać urządzenie na COM? (2)
Jak z poziomu Delphi wysłać SMSa do sieci PLUS? (2)
Jak sterować innym programem z poziomu programu w Delphi7? (10)
Dopasowanie łączy. Magistrala can. RS232. Port COM, Delphi. (4)
Delphi/Pascal -jak z poziomu kodu delphi, pascala kompilować (9)
Odbiór danych z rs232 w delphi, jak to zrobić żeby? (2)

Page generation time: 0.164 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed