Merhaba
Aslangeri'nin karşılaştığı problemin aynısı bende de var. Hyper terminal ile portu açıp kapatana kadar benim program veri almıyor. Bu sorunu nasıl çözerim? Test programını da tekrar yüklemeniz mümkün mü?
Seriporttan okunan anlamsız karakterler????
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Seriporttan okunan anlamsız karakterler????
Component içindeki parametre ve getdata result tipini hatta tüm component içindeki "string" tiplerini "ansistring" tipine çevirip component ı tekrar build edip bir dene, Muhtemelen Delphi yeni version larını kullanıyorsundur, bunlarda string tiplerin hepsi unicode tipinde, okuduğu array ler "Char" tipinde. genelde bu eski yazılmış component tiplerinde bu sorunlar olabiliyor.
Kolay gele
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: Seriporttan okunan anlamsız karakterler????
hyper terminal ile portu tetikledikten sonra okumada sorun yok. program normal bilgi alıyor. stringlerle ilgili bir hata olsa bu durumda da çalışmaması lazım değil mi?
tşk
tşk
Re: Seriporttan okunan anlamsız karakterler????
Hocam sizin probleminiz handshake den kaynaklanıyor olabilir.
Hangi componenti kullanıyosunuz bilmiyorum ama, ya cihazdan handshake i kapatın (varsa), yada kenti tarafınızdan iletişim ayarında Flow Control'ü RtsCts yapın...
Hangi componenti kullanıyosunuz bilmiyorum ama, ya cihazdan handshake i kapatın (varsa), yada kenti tarafınızdan iletişim ayarında Flow Control'ü RtsCts yapın...
Re: Seriporttan okunan anlamsız karakterler????
Tarih çok geçmiş ama yine de yazayım. Bu seriport muhabbetiyle çok karşılaşıyorum. Olayın esrpisi şurada. Seri porta yazan cihaz (mesela barkod okuyucu olsun) ve windows birbirinden bağımsız çalışır. Herkes şöyle bir önyargı içinde. Diyelim ki barkod boyu 10 byte. Ya seri portta hiç veri yoktur ya da 10 un katı kadar byte vardır zannediliyor. Bu yanlış. İşin doğrusu, seri portta baktığınız anda herhangibir sayıda byte hazır olabilir. Mesela henüz 6 byte ın transferi tamamlanmış ve kalan 4 byte transfer ediliyor olabilir. Bu anlık (ms civarında) da olsa programınızda bunu yakalama ihtimaliniz yüksektir.
Daima kendi tamponunuzla çalışmalısınız. Yapı şöyle olmalı :
başla
seri portta kaç byte var öğren
o kadar baytı oku ve kendi tamponuma ekle
kendi tamponumda CR var mı ?
varsa veri gelmiş. tampon başından CR ye kadar olan veriyi tampondan çıkar ve kullan ( CR den sonrakiler henüz tamamlanmamış yeni pakete ait, dokunma).
başa dön
Daima kendi tamponunuzla çalışmalısınız. Yapı şöyle olmalı :
başla
seri portta kaç byte var öğren
o kadar baytı oku ve kendi tamponuma ekle
kendi tamponumda CR var mı ?
varsa veri gelmiş. tampon başından CR ye kadar olan veriyi tampondan çıkar ve kullan ( CR den sonrakiler henüz tamamlanmamış yeni pakete ait, dokunma).
başa dön
Ömür Ölmez
Re: Seriporttan okunan anlamsız karakterler????
Çözümü şu şekilde buldum;
Veri sürekli geldiği için CR karakteri sürekli doğru yerde gelmiyor.
TComport, ComDataPocket ve ComTerminal Componetleri ile bilgi alıyorum. TComterminal bilgiyi doğru şekilde (ve çok hızlı) ekranda gösteriyor. Gelen 3 adet paketi sırayla okutuyorum. 3 paketten 2 si birbiriyle aynı (ve sıfırdan farklı) ise doğru kabul edip değeri alıyorum. bir kaç test yaptım hatasız okudu. Sürekli kullanmaya bu hafta başlıyorum, problem çıkarsa haberdar ederim.
Veri sürekli geldiği için CR karakteri sürekli doğru yerde gelmiyor.
TComport, ComDataPocket ve ComTerminal Componetleri ile bilgi alıyorum. TComterminal bilgiyi doğru şekilde (ve çok hızlı) ekranda gösteriyor. Gelen 3 adet paketi sırayla okutuyorum. 3 paketten 2 si birbiriyle aynı (ve sıfırdan farklı) ise doğru kabul edip değeri alıyorum. bir kaç test yaptım hatasız okudu. Sürekli kullanmaya bu hafta başlıyorum, problem çıkarsa haberdar ederim.
Kod: Tümünü seç
procedure TfBarMenu.ComTerminalStrRecieved(Sender: TObject; var Str: string);
var
Sec : Shortint;
begin
Sec:=KGS;
case Sec of
0: begin
KG1 := KgStr(str);
KGS := 1;
end;
1: begin
KG2 := KgStr(str);
KGS := 2;
end;
2: begin
KG3 := KgStr(str);
KGS := 0;
end;
end;
end;
procedure TfBarMenu.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
ComDataPacket1.ResetBuffer;
end;
procedure TfBarMenu.KayitBtnClick(Sender: TObject);
var
BRUTKG : Double;
begin
BRUTKG := 0;
if ((KG1=KG2) and (KG1<>0)) then BRUTKG := KG1 else
if ((KG1=KG3) and (KG1<>0)) then BRUTKG := KG1 else
if ((KG2=KG3) and (KG2<>0)) then BRUTKG := KG2 else exit;
// BRUTKG okundu
end;
function KgStr(TUT:String):Double;
var // sayı haricinde gelen karakterleri almıyor ve decimal karakteri "." ise "," ile değiştiriyor.
I: Integer;
TStr:String;
begin
try
TStr := '';
For I:=1 to length(TUT) do
begin
If (TUT[I] in ['0','1','2','3','4','5','6','7','8','9']) Then TStr:=TStr + TUT[I];
If (TUT[I]='.') Then TStr:=TStr + ',';
end;
Result:= StrToFloat(TStr);
except
Result := 0;
end;
end;