apro ile port okuma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

apro ile port okuma

Mesaj gönderen cfyasar »

port a gelen bilgiyi okumaya çalışıyorum. triggeravail olayına eklediğim bu kodla okuma yapıyorum. ApdComport1.GetBlock(rxbuffer^,count); (rxbuffer için de 128 bayt yer ayırıyorum)
port1 8 bayttan fazla bilgi (test için com1 den com2 ye bilgiyi ben gönderiyorum) gelmesine rağmen benim okuduğum değer hep 8 bayt oluyor. okuma ve yazma için kullandığım iki apro bileşeni için de insize ve outsize değerleri 128 bayt. maksimum 8 bayt okumamın sebebi ne olabilir?
öğrenmek, zorlukları yenmektir.
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

Kod: Tümünü seç

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); 
begin 
form1.Edit2.Text:=form1.ApdComPort1.GetChar; 
form1.Edit2.Text:=form1.Edit2.Text+form1.ApdComPort1.GetChar; 
.
.
.
form1.Edit2.Refresh; 
end; 
yada kaç bayt okuyacaaksan döngüye sok....
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var LastCount,I : integer;
begin

LastCount:= Count;

for I := 1 to LastCount do
 begin
  cRcvBuffer[CharCntReceived]:= ApdComPort1.GetChar;
  inc(CharCntReceived);
 end;

end;
8 bayt bir seferde alınan karakter sayısıdır(fonksiyondaki count) muhtemelen sizin bunları toparlayıp bi packet check işlemi yapmanız lazım.

örneğin bi timerda alınan paketi kontrol eder

Kod: Tümünü seç

PacketOK := ((CharCntReceived = 71 ) and (cRcvBuffer[0] = '@') and (cRcvBuffer[69] = '*'));
if PacketOK then PacketOK := CheckCRC(@cRcvBuffer[0],67);

 if PacketOK or (iErrorCount > 5 ) then
  begin
    //Eğer packet sağlam ise stringi parse et..
      if PacketOK then
      begin
        for y:=0 to 14 do myReadOnlyDMArea[y] := hexToInt(Uppercase(copy(cRcvBuffer,8+(y*4),4)));
..............
.-.-.-.-.-.-.-. ^_^
Cevapla