Delphi ile RS232 nasıl yaparım

Başlatan murat_alb, 15 Ağustos 2004, 03:21:24

murat_alb

Selamlar arkadaşlar. delphi kullanıyorum ve delphinin içerisinde hazır bir component veya kod yok rs232 bağlantısı için bildiğim kadarıyla. bunun için bi kaç component indirdim ama performanslı bişeyler değil string olarak porta write filan yapıyo. biraz yüzeysel yani componentler. delphi ile pic arasındaki rs232 bağlantısını delphi tarafında nasıl çözebilirim bilgisi olan varmı. teşekkürler.
Dünya her sabah yeniden kurulur. O dünyada yanlızca çevresindekilere yardım edenler yaşar, bencil ve cimriler ise ömür doldurur...

axanc

function TForm1.OpenCom(SerLinka : PChar) : boolean;
var
  fSuccess : boolean;
  dcb : TDCB;
  TimeOuts : COMMTIMEOUTS;
begin
  hCom := CreateFile(SerLinka,GENERIC_READ or GENERIC_WRITE,0,NIL,
  OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

  if(hCom = INVALID_HANDLE_VALUE) then begin
    Application.MessageBox('Uygunluk hatası !' , ApplicationName, MB_OK);
    OpenCom := False;
    exit;
  end;

  fSuccess := GetCommState(hCom, dcb);
  if(not fSuccess ) then begin
    Application.MessageBox('Okuma hatası !', ApplicationName, MB_OK);
    OpenCom := False;
    exit;
  end;

  dcb.BaudRate := 19200;                  //change of parameters
  dcb.ByteSize := 8;
  dcb.Parity := NOPARITY;
  dcb.StopBits := ONESTOPBIT;
  dcb.Flags := $00000001;                 //only fBinary = 1
  fSuccess := SetCommState(hCom, dcb);    //write of parameters back
  if(not fSuccess) then begin
    Application.MessageBox('Yazma hatası !', ApplicationName, MB_OK);
    OpenCom := False;
    exit;
  end;

  TimeOuts.ReadIntervalTimeout := 50;             //set of timeouts
  TimeOuts.ReadTotalTimeoutMultiplier := 50;
  TimeOuts.ReadTotalTimeoutConstant := 100;
  TimeOuts.WriteTotalTimeoutMultiplier := 50;
  TimeOuts.WriteTotalTimeoutConstant := 100;
  fSuccess := SetCommTimeouts(hCom,TimeOuts);
  if(not fSuccess) then begin
    Application.MessageBox('Zaman aşımı !', ApplicationName, MB_OK);
    OpenCom := False;
    exit;
  end;
                                              //clear of buffers
  fSuccess := PurgeComm(hCom,PURGE_TXABORT+PURGE_RXABORT+PURGE_TXCLEAR+PURGE_RXCLEAR);
  if(not fSuccess) then begin
    Application.MessageBox('Buffer hatası !', ApplicationName, MB_OK);
    OpenCom := False;
    exit;
  end;
  OpenCom := True;
end;


mail adresimden bağlantı kurarsan daha ayrıntılı bir delphi programı gönderebilirim...
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

z

Axanc

Bu windowsun kendi sistem kaynaklarını mı kullanıyor? W2000 ve XP de de çalışıyormu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

axanc

tabiki kendisi direk erişim istediği için NT tabanlılarda çalışma olasılığı düşük, daha denemedim..
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

ise

http://sourceforge.net/projects/tpapro/
async pro gayet maharetli işletim sistemi sorunuda bulunmamaktadır
Com1->PutChar(deger);

birumher

Ben TComPort diye bir component kullanıyorum. XP de de çalışıyor hiç bir sorununu şimdiye kadar görmedim
Birkan.Herguner

diot


ByTEK

Alıntı yapılan: birumher - 16 Ağustos 2004, 14:48:12
Ben TComPort diye bir component kullanıyorum. XP de de çalışıyor hiç bir sorununu şimdiye kadar görmedim

Selam acaba delphiden pice nasıl değer gönderiyorsunuz.. ve picde nasıl o değeri alıp karşılaştırma yapıyorsunuz.. örnek verebilirmisiniz..


kolay gelsin..

justice_for_all

com portu actiktan sonra

Com1->PutChar(deger);

yukaridaki komutla gonderme yaparsin bilgisayardan

asagidakide ccs c dilinde yazilmis program ornegi kesme ile bilgiler kac bayt gonderiyosaniz okadar baytlik dizinin icine getc() komutuyla kaydediliyor..

asagidaki ornekte 12 baytlik veri kaydedilir...

#int_rda
void kesme(void)
{
     char sayac=0;

     gelenveri[sayac]=getc();

     if(++sayac==12)
         sayac=0;

}
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

ByTEK

Alıntı yapılan: justice_for_all - 26 Ekim 2010, 22:09:47
com portu actiktan sonra

Com1->PutChar(deger);

yukaridaki komutla gonderme yaparsin bilgisayardan

asagidakide ccs c dilinde yazilmis program ornegi kesme ile bilgiler kac bayt gonderiyosaniz okadar baytlik dizinin icine getc() komutuyla kaydediliyor..

asagidaki ornekte 12 baytlik veri kaydedilir...

#int_rda
void kesme(void)
{
     char sayac=0;

     gelenveri[sayac]=getc();

     if(++sayac==12)
         sayac=0;

}


Selam Teşekkür ederim.. arada usb ro rs232 kullandığım için sorun yaşıyordum.. picten bilgisayara veri aktarabiliyordum.. ama pc den pice aktaramıyordum.. sonradan masaüstü bilgisayarımdaki COM portu kullandığımda sorun olmadığını fark ettim.. bütün sorun aradaki usb çeviricide imiş.. JALv2 ve Delphi kullanarak gayet güzel bir iletişim sağladım.. ileride bir makale yazmayı düşünüyorum..

Kolay gelsin...

M_B

Alıntı yapılan: 3L3CTRO - 27 Ekim 2010, 00:20:54
Alıntı yapılan: justice_for_all - 26 Ekim 2010, 22:09:47
com portu actiktan sonra

Com1->PutChar(deger);

yukaridaki komutla gonderme yaparsin bilgisayardan

asagidakide ccs c dilinde yazilmis program ornegi kesme ile bilgiler kac bayt gonderiyosaniz okadar baytlik dizinin icine getc() komutuyla kaydediliyor..

asagidaki ornekte 12 baytlik veri kaydedilir...

#int_rda
void kesme(void)
{
     char sayac=0;

     gelenveri[sayac]=getc();

     if(++sayac==12)
         sayac=0;

}


Selam Teşekkür ederim.. arada usb ro rs232 kullandığım için sorun yaşıyordum.. picten bilgisayara veri aktarabiliyordum.. ama pc den pice aktaramıyordum.. sonradan masaüstü bilgisayarımdaki COM portu kullandığımda sorun olmadığını fark ettim.. bütün sorun aradaki usb çeviricide imiş.. JALv2 ve Delphi kullanarak gayet güzel bir iletişim sağladım.. ileride bir makale yazmayı düşünüyorum..

Kolay gelsin...
merhaba 3L3CTRO hocam;
acaba makalenizi yazdınız mı ?
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet