RS232'ye veriler byte olarak nasıl işlenir?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen aLonE CoDeR »

Selamlar.

Bir cihaza gönderdiğim verilerin byte olması gerekiyor. TComPort nesnesini kullanıyorum, WriteStr metoduyla string ifadeleri gönderebiliyorum. Esasen karmaşık bir veri yapısı var, bazı değerler ascii olarak gidiyor, bazıları binary. Bir de bu değerlerin başına # karakteri ekleyerek yine string olarak gönderdim. Cihaz veriyi kabul ediyor ancak tutarlı bir gönderim mümkün olmuyor, İlgili firmayla olan görüşmelerimizde verileri byte olarak göndermeniz gerekli şeklinde yorumladılar. Nedir bu işin esprisi?
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen ikutluay »

aLonE CoDeR yazdı:Selamlar.

Bir cihaza gönderdiğim verilerin byte olması gerekiyor. TComPort nesnesini kullanıyorum, WriteStr metoduyla string ifadeleri gönderebiliyorum. Esasen karmaşık bir veri yapısı var, bazı değerler ascii olarak gidiyor, bazıları binary. Bir de bu değerlerin başına # karakteri ekleyerek yine string olarak gönderdim. Cihaz veriyi kabul ediyor ancak tutarlı bir gönderim mümkün olmuyor, İlgili firmayla olan görüşmelerimizde verileri byte olarak göndermeniz gerekli şeklinde yorumladılar. Nedir bu işin esprisi?
değerlerden örnek verirseniz dahada kolay olur işimiz. byte tpine çevrimde bir sıkıntı yok aslında.

örneğin string (20) bir ifadeyi

20 elemanlı byte tipinde bir dizi ilede temzil edebiliriz. yaılması gereken karakterlerin asccii karşılığını byte dizine bir döngüle doldurmak... bu üstünkörü bir yorum oldu. değerler ve kodu gördükten yorum yapmak daha doğru olacak
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen aLonE CoDeR »

Öncelikle ilgin için teşekkürler. Sorun değerlerin çevrimi değil, bileşenin hangi metoduna nasıl monte edileceği. Örneğin değer 161, bunu #161 olarak gönderdiğimde cihaza işleniyor ancak tüm değerleri bir değişkende toplayıp gönderdiğimde hatalı sonuçlar alıyorum. Hatadan kastım örneğin binary ya da hex gitmesi gereken kodlar String olarak gönderildiğinde gitmesi gereken değer yerine direkt ascii değerini kaydediyor. Write metodunda const olarak tanımlı Buffer parametresini kullanarak çözülebileceğini düşündüm ve değeri önce PChar'a dönüştürdüm akabinden gönderdim. Giden değeri incelemek için debug yaptığımda herhangi bir değerin parametreyle ilgili metoda ulaşmadığını gözlemledim. Belki de yeteri kadar açıklayamadım durumu.

Koddan kastın nedir tam anlayamadım, veriyi gönderdiğim komutları kastediyorsan, Comport.WriteStr(Value); şeklinde kabaca. Tekrar teşekkürler.
Kullanıcı avatarı
Search
Üye
Mesajlar: 74
Kayıt: 01 Oca 2008 01:03
Konum: Konya

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen Search »

Soruyu pek anlayamadım ama umarım yardımcı olur

Kod: Tümünü seç

msg:='';
k=1; 
while k < Length(value) do
     begin
         msg:= msg + chr(strtoint('$'+copy(value,k,2)));
         inc(k,2);
     end;
Comport1.writestr(msg);
Kolay gelsin...
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen aLonE CoDeR »

İlgin için teşekkürler. Sorun verinin Delphi'de çevrimi değil, porta Integer olarak yazılması. WriteStr dediğimizde örneğin 65 gönderdiysek String olarak 65 gidiyor, oysa byte göndermem gerekli ve giden değer böylece A olmalı...
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen ikutluay »

üstad bu cihazın veriyi kabul ettiği format yada protocol ne ise onu yaz buraya. örneğin şöyle:

Kod: Tümünü seç

ilk iki karakter           string tipi               kod
3 karakter                  integer                   id

gibi  
cihazın kullandığı bir DLL varsa filan mutlaka CPP header dosyasıda verilmiştir. orda çözmek daha basit olur. Aslında barkodlar hakkında benimde buna benzer sorulmuş eski bir örneğim var forumda. onu okursan aradaki farkları daha net görebilirsin. genede en sağlıklı sen cihazın istediği veri tiplerini listele ona göre bakalım.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen aLonE CoDeR »

Üstadım sorun da burada zaten. Dokümantasyonda bahsettiğim şekilde bir yorum yok bunu telefon görüşmelerinde öğrendik. Aşağıya birkaç bilginin dokümanda geçen kısmını ve onların yorumundan sonra gönderilmesi gereken değeri yazıyorum.

Header : %UI
Cihaz Kodu : (Digit ASCII Cihaz No (00-99 arası cihaz numarası))
Personel Numarası : 4 digit hexadecimal ASCII Personel Numarası
‘0000’ – ‘07D0’ arası değişen hexadecimal sayı
(0-2000 arası seçilen personelin numarasına tekabül eder)
Kart ID : 4 Byte Kart ID. Her bir byte 2 digit hexadecimal olarak gönderiliyor

Bu bilgilerin cihaza gönderilmesi gereken değerleri de şu şekilde olmalıymış ;

Header : 378573
Cihaz Kodu : 4849
Personel Numarası (27 nolu personel için) : Önce Hexadecimal karşılığını buluyoruz ve 001B değerine ulaşıyoruz. Gönderilen değer : 48484966
Kart ID : Örneğin 115269 için, Hexadecimal olarak 1C245 çıkıyor ve bunu 4 byte ve 2 digit olması hasebiyle 8 e tamamlamak adına başına 3 tane 0 ekliyoruz, böylece değer 0001C245 oluyor. Bu değeri 2 şer karakter olarak parçaladıktan sonra;

00 : Bunun decimal karşılığı binary olarak 0
01 : || 1
C2 : || 194
45 : || 45

şeklinde. Bu noktadan hareketle cihaza WriteStr ile gönderdiğimizde örneğin header için 378573, %UI olarak değil direkt 378573 şeklinde gidiyor ve cihaz headeri tanımadığı için işlem yapmıyor. Bunu %UI şeklinde gönderdiğimizde işlem yapıyor fakat örneğin personel numarası gibi hexadecimal ya da binary giden değerler String olarak gittiği için gönderdiğimiz değeri direkt olarak kaydediyor ve gerçekte olması gereken değer olmuyor. İyice karıştırdık sanırım :)

Visual Basic'le yazılmış örnek bir projeleri var, debug ettiğimizde de bu değerleri görebiliyoruz. Bir de kendileri bir Com arabirimi yazmışlar ocx olarak. Bunu install ettiğimde hazır fonksiyonlara da ulaştım ancak işi o noktaya götürmek istemiyorum açıkçası. Bu cihazla entegrasyonu Delphi'yle birçok firmanın yazdığını da belirttiler. Tekrar teşekkürler.

Not : Code tagını kullanmadım zira kullanmayı gerektirecek bir yapı oluşmadı kanaatimce.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen akdatilla »

Merhaba
Verileri göndermek için aklıma gelen bir yöntemi öneriyorum

Kod: Tümünü seç

procedure TForm1.Gonder(sender:tobject);
Var
    CihazKodu,PerNo, s:string;
    KartId:integer;
begin
       CihazKodu:='01';
       PerNo:='01';
       Kartid:=1;
        s:='%UI'+cihazkodu+perno;   
        s:=s+chr(kartid and $ff);//kart id 1.byte
        s:=s+chr((kartid and $ff00) shr 8);//kart id 2.byte
        s:=s+chr((kartid and $ff0000) shr 16);//kart id 3.byte
        s:=s+chr((kartid and $ff000000) shr 24);//kart id 4.byte
        Comport1.writestr(s);
end;
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: RS232'ye veriler byte olarak nasıl işlenir?

Mesaj gönderen aLonE CoDeR »

@akdatilla;

Öncelikle ilgin için teşekkürler. Cihazı göndermek durumunda olmamız hasebiyle şu an önerini deneyebilme imkanım yok maalesef. Ancak örneği not aldım, önümüzdeki dönemde cihaz tekrar elimize geçtiğinde deneyeceğim, umarım bu kez doğru sonuca ulaşırım. Çok teşekkür ediyorum ilginiz için. İyi çalışmalar.
Cevapla