RS232'ye veriler byte olarak nasıl işlenir?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
RS232'ye veriler byte olarak nasıl işlenir?
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?
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?
Re: RS232'ye veriler byte olarak nasıl işlenir?
değerlerden örnek verirseniz dahada kolay olur işimiz. byte tpine çevrimde bir sıkıntı yok aslında.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?
ö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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: RS232'ye veriler byte olarak nasıl işlenir?
Ö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.
Koddan kastın nedir tam anlayamadım, veriyi gönderdiğim komutları kastediyorsan, Comport.WriteStr(Value); şeklinde kabaca. Tekrar teşekkürler.
Re: RS232'ye veriler byte olarak nasıl işlenir?
Soruyu pek anlayamadım ama umarım yardımcı olur
Kolay gelsin...
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);
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: RS232'ye veriler byte olarak nasıl işlenir?
İ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ı...
Re: RS232'ye veriler byte olarak nasıl işlenir?
üstad bu cihazın veriyi kabul ettiği format yada protocol ne ise onu yaz buraya. örneğin şöyle:
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.
Kod: Tümünü seç
ilk iki karakter string tipi kod
3 karakter integer id
gibi
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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: RS232'ye veriler byte olarak nasıl işlenir?
Ü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.
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.
Re: RS232'ye veriler byte olarak nasıl işlenir?
Merhaba
Verileri göndermek için aklıma gelen bir yöntemi öneriyorum
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;
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: RS232'ye veriler byte olarak nasıl işlenir?
@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.
Ö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.