ComPort Veri Alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Okunan değer istediğin uzunlukta değilse işlem yaptırma.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
argetek
Üye
Mesajlar: 27
Kayıt: 15 Kas 2005 01:01

com port okuma

Mesaj gönderen argetek »

Bende bir ikigundur aynı bileşenle pro_imaj arkadaşın bahsettiği sorunla ugrasıyorum gercekten nedir bunun sebebi acaba bilen varsa yardımcı olursa cok sevinirim 3 gundur ugrasıyorum ama bulamadım sorunu bir turlu
-----Aldığım veriler

0
04
047
0470
04701
047010
0470100
04701005
047010050
0470100505
04701005050
047010050500
0470100505000
04701005050000
047010050500001
0470100505000010
04701005050000104
047010050500001047
0
01
010
0100
01005
010050
0100504
01005040
010050400
0100504000
01005040000
010050400001
0100504000010
01005040000104
010050400001047
0100504000010470
01005040000104701
010050400001047010
0
05
050
0503
05030
050300
0503000
05030000
050300001
0503000010
05030000104
050300001047
0503000010470
05030000104701
050300001047010
0503000010470100
05030000104701005
050300001047010050
2
20
200
2000
20000
200001
2000010
20000104
200001047
2000010470
20000104701
200001047010
2000010470100
20000104701005
200001047010050
2000010470100501
20000104701005010
200001047010050100
0
00
001
0010
00104
001047
0010470
00104701
001047010
0010470100
00104701005
001047010050
0010470100500
00104701005000
001047010050000
0010470100500000
00104701005000000
001047010050000001





-----Olması gereken veriler :oops:

047010050500001
047010050400001
047010050300001
047010050200001
047010050100001
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

rsimsek yazdı:Okunan değer istediğin uzunlukta değilse işlem yaptırma.
Merhaba Recep Hocam.
Bahsettiğiniz şekilde düşündüm ve öyle yapmaya çalışıyyordumki şöyle bir sorunla karşılaştım. Barkod numaralarını sizde dikkat ettiyseniz 13 hane bir barkod için her okumada baştan 3 tane sona atıyor yani yabit bişey yok hocam .Keşke sizin bahsettiğiniz şelikde olsaydı verilere ulaşmak gerçekten çok rahat olurdu.

Not:anlamadığım bir nokta heyper terminal ile veri aldığımda böyle bir sorun vermiyor okunan barkodları yanyana atıyor.

Saygılarımla
Teşekkür Ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bileşenin ayarlarından da olabileceği gibi, genelde bilgi gönderen cihazın bilginin bitişini yada başlangıcını belli eden chr(13) yada # gibi bir karakter göndermesi lazım o karakterden sonraki 13 taneyi yakalamaya çalış :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

hocam gerçi recep hocam da bahsetmiş ama bende söyleyeyim normalde bi değişkene at gelen veriyi atıyorum str diye bi değişken daha sonra 2.bi değişken ile 1.değişkene ekle sürekli yani toplam:=toplam+str; ile halledebilirsin.2 adet memo koy memo1.lines.add(str) olsun memo2.lines.add(toplam); bu şekilde dene goreceksinki gelen veri değişecektir yani memo1e yine bahsettiğin şekilde veri gelecek ama memo2 ye sadece barkod numarası gelecek..kolay gelsin
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;
@cuneyt22 sizin belirttiğiniz şekilde bişeyin olması ihtimal değil. Recep abinini belirtiği şekilde bileşen ayarlarıyla vs oynadım değişen bişey olmadı.

Bu işi bu kadar zor olmaması gerek aslında. yani componenet ile yapıldığından dolayı bağlantı ayarları yapıldıktan sonra ilgili veriyi atması gerek diye düşünüyorum.

Saygılarımla
Teşekkür ederim
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
kutal
Üye
Mesajlar: 48
Kayıt: 14 Kas 2005 10:48

Mesaj gönderen kutal »

selam
ekrana yazdırmak için yazdığınız kod satırını yollarsanız sorunu çözebiliriz sanırım..
iyi çalışmalar.
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

hocam denedinizmi.. ben her seferinde 2 adet memo koyuyorum bi.memoya str yi yazdırıyorum 2.memoya sonuc:=sonuc+str yi yani sonucu yazdırıyorum memo1 e bahsettiğin şekilde geliyor ama memo2 ya çok anlaşılır şekilde geliyor bi deneyin

Kod: Tümünü seç


  private

    { Private declarations }
    SonucStr: String;

procedure TGensFrm.Comm1RxChar(Sender: TObject; Count: Integer);
var
  str :String;
begin
  Str:='';
  SetLength(Str, Count);
  Comm1.Read(Str[1], Count);
  SonucStr :=(SonucStr + Str);
Memo1.Text := Memo1.Text + Str;
  memo2.Lines.Add(Sonucstr);
end;

bunu bi deneyin...
kutal
Üye
Mesajlar: 48
Kayıt: 14 Kas 2005 10:48

Mesaj gönderen kutal »

selam
cuneyt22 üstadın çözümü oldukça kısa ve güzel bi çözüm.

ancak;sorunu yaşıyan arkadaşın gelen verilerinin formatı farklı olabilir.
örnek:

memo ya ('cüneyt22'+#13#10+'cüneyt22' ) gibi birstring yazılırsa sonuç altalta olur.

demek istediğim comporta veri gönderen arayüz ya da cihaz, istemediğiniz yerlere #10 koyuyor olabilir.

iyi çalışmalar.

not:
#13:carriage return
#10:newline
subscriber

Mesaj gönderen subscriber »

barkod okuyucular comporta verileri peşpeşe gönderiyor. barkod okuyucuyucaların bir ayar kitapçığı olur. ordan her barkodun sonuna istediğin bir karakteri basması için ayar yaparsın. bu genelde CRLF(#13#10) olur ama bazılarında varsayılan olarak gelmiyor.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

cuneyt22 yazdı:

Kod: Tümünü seç


  private

    { Private declarations }
    SonucStr: String;

procedure TGensFrm.Comm1RxChar(Sender: TObject; Count: Integer);
var
  str :String;
begin
  Str:='';
  SetLength(Str, Count);
  Comm1.Read(Str[1], Count);
  SonucStr :=(SonucStr + Str);
Memo1.Text := Memo1.Text + Str;
  memo2.Lines.Add(Sonucstr);
end;

Merhaba;
SetLength(Str, Count); bu satırdaki count nedir hocam neyin sayısı ?
[Error] Unit1.pas(173): Undeclared identifier: 'Count'
Comm1.Read(Str[1], Count); bu satırdaki Comm1.Read comport 1den
bilgi almayamı yarıyor. bu iki satırda hata oluşuyorda
[Error] Unit1.pas(174): Undeclared identifier: 'Comm1'

Sizin yapmak istdiğiniz işlemi yanlış bir yol galiba hocam tam anlayamadım.

Yani bu işlem ile direk porttan bilgi alıp onuda ilgili işlemden sonra memo2 yemi atıyorsunuz anlayamadım.

Saygılarımla
Teşekkür ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

kutal yazdı:selam
ekrana yazdırmak için yazdığınız kod satırını yollarsanız sorunu çözebiliriz sanırım..
iyi çalışmalar.
Merhaba;
İlgili kod 1. sayfadaki @mege hocamın verdiği koddur.

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@cuneyt22 de bahsetmiş, porttan sürekli bilgi aktığı için okunan bilgiler bayt bazında ise bir string değişkende toplanabilir ve bu değişkende istenen uzunluğa eriştiğinde değişmiyorsa "budur" denebilir.. Daha önce elektronik terazilerden bilgi alış-verişi yapmıştım. Bir de kullanılan bileşenin satır bazında yada bayt bazında okuma durumu olabilir.. Buffer/tampon olayına da dikkat etmek lazım :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
kutal
Üye
Mesajlar: 48
Kayıt: 14 Kas 2005 10:48

Re: com port okuma

Mesaj gönderen kutal »

argetek yazdı:Bende bir ikigundur aynı bileşenle pro_imaj arkadaşın bahsettiği sorunla ugrasıyorum gercekten nedir bunun sebebi acaba bilen varsa yardımcı olursa cok sevinirim 3 gundur ugrasıyorum ama bulamadım sorunu bir turlu
-----Aldığım veriler

.
.
.
0
00
001
0010
00104
001047
0010470
00104701
001047010
0010470100
00104701005
001047010050
0010470100500
00104701005000
001047010050000
0010470100500000
00104701005000000
001047010050000001





-----Olması gereken veriler :oops:

047010050500001
047010050400001
047010050300001
047010050200001
047010050100001
selam

aldığınız verilere bakınca belli bir sırayla gelmekteolduğu görülüyor. yapmanız gereken yazdığınız kodu bu sıraya uydurmak. aslında gönderilenle aldıgınız şey aynı, ancak siz bunu ekrana bastırdığınızda farklıymış gibi görünüyr hepsi bu.

bide olması gerekenlerin içinde gelen verilere bakarak şu 13 byte ında en sonda olması gerekir:
047010050000001
not: veriyi gönderen arayüzün ya da cihazın veri göndermede kulandıgı formatı bilirseniz sorun kalmayacaktır.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;
Konuyla ilgili birsürü msj yazıldı bu yüzden tekrar bişeyler sormaya utanıyorum:oops: Sizlerinde belirttiği şekilde tüm çözüm yollarını denedim.
Şu an barkod bitimine nokta koyduruyorum. ilk başka oldu diye çok sevinmiştim ama olmadı nedeni ise şöyle

6 tane barkod okuttum ve çıkan sonuç.

Kod: Tümünü seç


0
04
047
0470
04701
047010
0470100
04701005
047010050
0470100505
04701005050
047010050500
0470100505000
04701005050000
047010050500001
047010050500001.
047010050500001.0
047010050500001.04
7
70
701
7010
70100
701005
7010050
70100504
701005040
7010050400
70100504000
701005040000
7010050400001
7010050400001.
7010050400001.0
7010050400001.04
7010050400001.047
7010050400001.0470
1
10
100
1005
10050
100503
1005030
10050300
100503000
1005030000
10050300001
10050300001.
10050300001.0
10050300001.04
10050300001.047
10050300001.0470
10050300001.04701
10050300001.047010
0
05
050
0502
05020
050200
0502000
05020000
050200001
050200001.
050200001.0
050200001.04
050200001.047
050200001.0470
050200001.04701
050200001.047010
050200001.0470100
050200001.04701005
0
01
010
0100
01000
010000
0100001
0100001.
0100001.0
0100001.04
0100001.047
0100001.0470
0100001.04701
0100001.047010
0100001.0470100
0100001.04701005
0100001.047010050
0100001.0470100500
0
00
000
0000
00001
00001.
00001.
Olması gereken

Kod: Tümünü seç

047010050500001.047010050400001.047010050300001.047010050200001.047010050100001.
047010050000001.
Yukarıdaki doğru sonucu heyper terminal ile elde ettim. Bu kadar garip bir olay olurmu bişlmiyorum nerede yanlış yapıyorum acaba. bu el terminalinden bilgi almak bu kadar zormu ya. artık ne yapacağımı bilmiyorum...

Saygılarımla
Teşekkürler.[/quote]
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Cevapla