ComPortda veri yazma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
levbay
Üye
Mesajlar: 11
Kayıt: 04 Oca 2008 05:19

ComPortda veri yazma

Mesaj gönderen levbay »

öncelikle selamlar.

benim sorunum şu ben bir devreyi seri porttan kontrol etmek istiyorum. kartta mikroişlemci var. Ben bilgisayardan 160 - 162 - 164 - 166 gibi değerler göndererek mikro işlemci vasıtası ile elektronik devrede bulunan röleleri kontrol etmem gerekiyor.

Comport bileşenin içindeki örneği kullanarak bir deneyeyim dedim ama başarılı olamadım kendim bir şeyler yazdım ama yine olmadı. comporttun bütün ayarlarını doğru halde yaptım (bana uygun halde). Ama bir türlü komutlar iletilmiyor.

comport bileşinin porta yazma komutu olan ComPort.WriteStr(....); burada .... ola yerlere 160ı girekt yazdığımda iletmesi gerekiyor bence. acaba .... yere direkt değilde başkabir türdemi yazacam veriyi.

bu sorunu nasıl halledebilirim. yardımlarınız için şimdiden teşekkür ederim.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: ComPortda veri yazma

Mesaj gönderen adelphiforumz »

Çok emin olmamakla birlikte comporta chr(160) gibi göndermeyi bir dene
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
Search
Üye
Mesajlar: 74
Kayıt: 01 Oca 2008 01:03
Konum: Konya

Re: ComPortda veri yazma

Mesaj gönderen Search »

Arkadasım aktarım rolu onemli bu konuda hex olarak mı yoksa ascii olarakmı iletim yapcaksın...

comport ayarlarını ayarlaman gerekiyor...

örnegin; baudrate,parity,databits vs..

Kod: Tümünü seç

comport1.port:='COM1'; // burda hangi portu kullanıyorsan onu yaz
comport1.open;
comport1.writestr('160');
bu sekilde karsıya bu degeri gonderebilirsin...

kolay gelsin...
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
levbay
Üye
Mesajlar: 11
Kayıt: 04 Oca 2008 05:19

Re: ComPortda veri yazma

Mesaj gönderen levbay »

yine olmadı. acaba bu eventlar ile ilgili olabilirmi. okumak için rxchar kullanıyoruz peki comporta komut gönderirken hangi eventtı kullanacaz? her hangi bir butondan göndersek olurmu? yoksa eventmı kullanacaz?
Kullanıcı avatarı
Search
Üye
Mesajlar: 74
Kayıt: 01 Oca 2008 01:03
Konum: Konya

Re: ComPortda veri yazma

Mesaj gönderen Search »

arkadasım sorun nedir komutlar mı iletilmiyor yoksa komuta karsılık istediğin olaylar mı gerceklesmiyor?

Butonla gonderebilirsin mesajları,baglantıyı yapar writestr komutu ile gonderebilirsin

Yalnız karsı cihaz mesajları nasıl okuyor veya sana nasıl bi mesaj yolluyor onun formatını bilmen lazım sen '160' olarak yazarsan string olarak gonderirsin belki ascii veya hex e cevirip gondermen gereklidir...

kolay gelsin...
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: ComPortda veri yazma

Mesaj gönderen adelphiforumz »

Kullandığın comport bileşeni nedir söylersen belki bir örnek kod gönderebiliriz.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
levbay
Üye
Mesajlar: 11
Kayıt: 04 Oca 2008 05:19

Re: ComPortda veri yazma

Mesaj gönderen levbay »

kullandığım bileşen comport. basit bir örnek var ise hem yazma hemde okuma için çok iyi olur. elimde kodlar var işlemceyi göndereceğin. comport bileşenin ayarlarını yaptım ama yinede yok olmuyo. elimde 161,171 ... falan diye kodları göndermem lazım string olarak writestryi kullandım ama işe yaramıyor.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: ComPortda veri yazma

Mesaj gönderen adelphiforumz »

Arkadaşım kusura bakma fakat senin yazdıklarından çok birşey anlıyamadım.
Comport diyip duruyorsun bu bilesen neyin bileseni uses olarak ne ekliyorsun
yada soruyu birazdaha açayım sen delphi kaç kullanıyorsun ve kullandığın bileşen hangi firmanın bileşeni
Mesela TurboPower, ActivexCom, ActiveComport, Cport, Omron vb. bu objeyi nereden yükledin.
Anladığım kadarı ile comportlar konusunda biraz yenisin eğer öyleyse
Delphi forumlarında TurboPower bileşenlerini arat orada AsynPro olarak bir bileşen grubu var
bunun içindeki comport bileşenlerini kullan oldukça basittir.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: ComPortda veri yazma

Mesaj gönderen akdatilla »

Com porta bilgi yazmak veya okumak için önce portu belirli ayarlara göre kullanıma açman gerekir.
Ayarlamalar:
Bağlantının sağlanacağı com portun numarasını girebileceğin bir parametre bulunur (PortNo,ComPort vb).
Bu parametreye hangi comporttan iletişim kuracaksan onun adını veya numarasını gireceksin (Com1,Com2 veya 1,2 gibi).
BaudRate: 9600(default),19200,115000 vb.Bu özellik genellikle 9600 olarak ayarlanır.
Bazı donanımlar daha düşük hızda,bazıları daha yüksek hızda iletişim kurabilir.
StopBits:sb1BITS(default), sb1HALFBITS, sb2BITS vb. Bu özellik genellikle 1 bit olarak ayarlanır.
DataBits: db5BITS, db6BITS, db7BITS, db8BITS(default) . Bu özellik genellikle 8bit olarak ayarlanır.
Parity: ptNONE(default), ptODD, ptEVEN, ptMARK, ptSPACE vb
Donanım ve yazılım akış denetimi özelliklerini hfNone,sfNone gibi ayarlayarak kapatman veya donanıma göre açman gerekebilir.

Bilgiyi göndermek için:
Bilgi string, byte, integer, stream vb birçok şekilde gönderilip alınabilmektedir. Bu kullanılan bileşene göre değişebilir ancak bilginin string olarak
gönderilip alınması daha kolay olacaktır.

161,171 gibi 1 byte'lık bilgileri string olarak göndermek için:

Kod: Tümünü seç

writestring(#161#171);
Gelen bilgileri okumak için:
Bileşende büyük bir ihtimalle RXCount gibi bir özellik bulunur. Bu özellik comportta anlık olarak tampon bellekte birikmiş bilgi uzunluğunu gösterir.
RXCount özelliği kullanarak porttaki veri string değişkene alınabilir.

Kod: Tümünü seç

if Comport1.RXCount>0 then
s:=ComPort1.readstring;
Ancak okuma ve yazma işlemleri rasgele zamanlarda yapılması kesinlikle doğru olmayacaktır.
Donanım ile haberleşme mutlaka daha önce belirlenmiş zaman dilimlerde düzenli bir şekilde yapılır.
Makinadan bilgi okuma yazma işleminde mutlaka bir master(yönetici/iş akışını başlatan) ve
bir veya daha fazla slave(hizmetçi) bulunur. Master genellikle bilgisayardır.
Özellikle windows işletim sistemi kullanılan makinelerde bilgisayarın slave olarak kullanılması hatalı
olacaktır. Master bir komut ile iletişimi başlatır. İletişim daha önce belirlenmiş bir plana göre
karşılıklı paslaşma şeklinde yapılır. Makine ile bilgisayar ne zaman konuşup ne zaman dinleyeceğini
iyi bilmelidir. Aksi takdirde çakışma oluşur ve iletişim hatalı bir şekilde son bulur.
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: ComPortda veri yazma

Mesaj gönderen bulutsuzluk_35 »

birde bana kalırsa port monitor kullan.Portu açıp açamadığını ne gönderdiğini yada gönderemediğini ordan mutlaka takip etmek lazım yoksa hayali bir iş yapıyormuşuz gibi oluyo.
Free Serial Port Monitor benim kullandığım bir program gayet güzel ama dikkat etmek lazım.Bzen makinayı kitliyor resetlemek zorunda kalıyorsun onun için deneme yapmadan önce save olayı kesinlikle önem kazanıyor yoksa yazarsın yazarsın deneme esnasında kitlendimi hiçbirşey işlemiyor bilgisayarını parmaklamak zorunda kalıyorsun..

Kolaygelsin...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
levbay
Üye
Mesajlar: 11
Kayıt: 04 Oca 2008 05:19

Re: ComPortda veri yazma

Mesaj gönderen levbay »

arkadaşlar çok teşekkür ederim. Allah razı olsun. sorunumu hallettim. :):):):)




Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: ComPortda veri yazma

Mesaj gönderen conari »

@akdatilla, makale gibi yazmışsın tebrikler.
@levbay, millet o kadar dil dökmüş yazmış sende hallettim deyip çıkıyorsun. Nasıl hallettiğini belirtsen çok daha iyi olur. :!: :!:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
levbay
Üye
Mesajlar: 11
Kayıt: 04 Oca 2008 05:19

Re: ComPortda veri yazma

Mesaj gönderen levbay »

writestring(#161#171); aradığım kod buymuş :):) ben string ifade gönderiyormuşum ondan kaynaklanıyormuş problemim.

Writestr('161') şeklinde değilde writestr(#161) şeklinde yapmam gerekiyormuş.
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: ComPortda veri yazma

Mesaj gönderen bulutsuzluk_35 »

yada writestr('í') de olabilirdi aslında yani yazacağın sayının karakter karşılığı.Ek bilgi...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Cevapla