ComPort Received

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

ComPort Received

Mesaj gönderen onclick_lik »

S.a arkadaslar Comport ile ilgili bir sorum olacaktı! Programımda Comportla haberleşiyorum comportun OnRxchar event olayında gelen verileri dinliyorum.Fakat bana 24 bitlik bir veri geldiğinde program bunu tek seferde almıyor :? Mesela 503042369875000000102011020100000005040807060604 gibi uzunlukta deger almam gerekiyor ama program ilk başta --5030423698750000 -- bu parcayı daha sonra kalan veriyi alıyor...Comportun hangi özelliği bu veri alımını değiştiriyo? Verileri okurken kullandığım örnek kodu gönderiyorum...

Kod: Tümünü seç

procedure TForm1.CportRxChar(Sender: TObject; Count: Integer);

var
   Xhex,Msg: String;
   deger: Integer;

begin
     Msg:='';
     Cport.ReadStr(Msg,count);
    for deger:= 1 to length(msg) do
     begin
       Xhex:=Xhex+IntToHex(byte(msg[deger]),2); // ASCII  karakteri Hex 'e cevir 
     end;
     ShowMessage(Xhex);
end;
Kolay Gelsin...Saygılarımla_
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: ComPort Received

Mesaj gönderen bulutsuzluk_35 »

donanım yöneticisinden kullandığın portun receive buffer ve transmit buffer olaylarından bunu ayarlayabilirsin ama bildiğim kadarıyla anakart üzerindekilerde genelde 14 e 16 ama harici kartlarda bunu 28 ve 32 ye çekebiliyorsun.ama gene sorun oluyosa veriyi iki parça halinde alıyorsan ve bu sana bir sorun oluyorsa kullandığın komponentin afterreceive olayının altında sadece gelen veriyi global bir değişkene al ve formun üzerinde senin yöneteceğin timer la global değişkeninin boyutunu kontrol et eğer misal beklediğin ddata 100 byte sa
if lenght(global)=100 dersen verin tamamlandığında işlem yapabilirsin...

aynı sorunu yaşadım ve ben böyle yaptım...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Re: ComPort Received

Mesaj gönderen onclick_lik »

Teşekkürler arkadasım cevabın için yalnız şöle bir sorum daha olacak...Karsıdan gelen veriyi Comportun OnRxchar ve Timer ile aynı anda okuyabilirmiyiz? Kısaca gelen veriyi iki yerden okuma imkanımız varmı?

Kolay Gelsin...Saygılarımla_
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: ComPort Received

Mesaj gönderen bulutsuzluk_35 »

dostum cport kullanmadım bilmiyorum...

nrcomm qcport gibi componentler var direk veriyi karakter olarak veriyor sana ve sen ordlama işlemi sonunda sana sayısal olarak ne gelmiş anlayabilirsin.senin yönteminden daha iyi olduğunu düşünüyorum...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: ComPort Received

Mesaj gönderen adelphiforumz »

Merhaba
kullandığın componenti degistirme ihtimalin varsa benim birçok projemde kullandığım bir komponenti sana tavsiye ederim.
anlatmış oldugun tüm işlemleri componenet kendisi yapıyor.
Turbopower'ın Async Professional bildigim kadarı ile artık ücretsiz.
hatta delphi forum turkiye içinde aratırsan bulabilirsin
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
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Re: ComPort Received

Mesaj gönderen onclick_lik »

Arkadaşım ilgin için tesekkürler...
Cport kullanmak zorundayım bu yuzden cport üzerinden bi cozume ulasabilirsem cok ii olur...
Kolay gelsin Saygılarımla...
ilkeryesiloglu
Üye
Mesajlar: 18
Kayıt: 07 Haz 2004 09:04
Konum: Mersin
İletişim:

Re: ComPort Received

Mesaj gönderen ilkeryesiloglu »

Aynı sorunu bende yaşıyorum. Bazen aynı uzunlukta veriyi farklı farklı uzunlukta parçalara bölünmüş olarak alıyorum. Fakat bunun böyle olmaması gerektiğini düşünüyorum. Cport güzel bir bileşen. Aynı olayı Async Pro 4.07 ile denedim. hiç fark yok. Yani ondada parça parça geliyor bilgi. Buradan anlaşılan bileşenlerin comportu ile ilgili ayarlarını yaparken birşeyi atladığımı düşünüyorum. Yani gelen mesaj kaç bye uzunlukta olursa olsun bir seferde gelmesi gerekiyor. Bunu yapabildiyseniz yardımlarınızı bekliyorum. İyi çalışmalar.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: ComPort Received

Mesaj gönderen Battosai »

Veriyi 8bit gönderen bir sisteme ne yaparsan yap 64 bit veriyi tek pakette gönderemezsin o vakit 64 bitlik sistemdir zaten o...iletişim standartları vardır aygıtlara göre dolayısıyla veriyi birleştirmek sana kalıyor....
Kullanıcı avatarı
Search
Üye
Mesajlar: 74
Kayıt: 01 Oca 2008 01:03
Konum: Konya

Re: ComPort Received

Mesaj gönderen Search »

Arkadasım veriler parca parca geliyor bunu engelleyemedim ben galiba sistemler belirli bir byte den sonra stop biti gonderiyor bu yuzden parca parca geliyor veya xp den kaynaklanan engelleme ...

eger sana gelen datada gelen datanın uzunlugunu veren bir yer varsa protokolune baglı olarak yeri sabittir sen burdan bu gelen data uzunlugunu bulur ona gore dataları toplar yazdırırsın....

birde protokollerde mesaj sonu datası olur sen bu datayı buluncaya kadar gelen dataları toplar mesaj sonu datası gelince bütün topladıgın verileri tek bir data olarak yazdırabilirsin.

bununda şu şekilde bir sakıncası var mesaj sonu datası mesaj ortasında baska bir data degerine denk gelirse ne olur?

protokolunu bilmeden de fazla bişey diyemiyorum..

kolay gelsin;
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ComPort Received

Mesaj gönderen forumsad »

arkadaşlar bu sorun benimde başımda çözüm bulan oldumu...

ben gelen bilğileri
ComPort1.ReadStr(Str, Count);
gelenveri.Text := gelenveri.Text + Str;
ile edit içine atıyorum sonra editi analiz ederek dogru veri gelmişmi anlamaya çalışıyorum ama çok gıcık bir durum

çözüm bulan varsa yazarsa çok iyi olur

teşekkürler
Cevapla