VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.

Başlatan kudretuzuner, 25 Mart 2021, 22:53:34

kudretuzuner

Merhaba,
        Dim gelen As String = SerialPort1.ReadByte

        If gelen = 121 Then '  hex'79'            "y"---------ASM YAZILIM BAŞI
                    PictureBox1.BackColor = Color.Red
                    Label1.ForeColor = Color.Red
        End If
Bu kod parçası ile PIC'ten PC'ye giden hex'79' u okuyabiliyorum.
Dim gelen As String = SerialPort1.ReadByte yerine
Dim gelen As String = SerialPort1.ReadLine ile hex'52'-Hex'30'-hex'30' üç hex kodunu okumak için kodu ayarlayamadım.
Özetle SerialPort1.ReadLine komutunu ile bu akan dataları 3 adetli BYTE olarak nasıl ayırabilirim. Gelen dataların tamamını ben dizayn ettim, gelecek BYTE ların tamamını biliyorum. Sadece 3lü guruplar halinde okuyup eylem yaptırmak istiyorum. Teşekkürler.


Amatör

erdcan

Hocam picten gödnerdiğiniz kodun sonunda yeni satır ve satır başı karakterleri mevcut mudur? //r//n

kudretuzuner

#2
Merhaba,
Yeni satır ve satır sonu yok.Datalar  PIC'ten şu sıra ile devamlı akmaktadır.
Hex'79'---------y
Hex'52'---------R
Hex'30'---------0
Hex'30'---------0
Hex'7A'---------z
Hex'79'---------y
Hex'4C'---------L
Hex'30'---------0
Hex'30'---------0
Hex'7A'---------z
böyle devamlı datalar gelmektedir. Ben sadece
Hex'52'---------R
Hex'30'---------0
Hex'30'---------0 bu bloğu ve de
Hex'4C'---------L
Hex'30'---------0
Hex'30'---------0
bloğu ayırmak ve ona göre eylem yaptırmak istiyorum.Bu bloklar arasına nereye ve hangi başlangıç ve de bitiş hex kodunu koymam gerekir. Zira PIC kodunu da ben yazıyorum.Not: r ve n return ve newline mı? ASCII hex kodları nedir? Teşekkürler.
Amatör

dumansiz

@kudretuzuner
Eğer PIC içerisindeki yazılıma müdahale edemiyorsanız,
Visual Basic kodundaki "if" koşulunun içerisinde,
3 defa daha "SerialPort1.ReadByte" fonksiyonunu çağırmanız gerekiyor.
Okuduğunuz 3 byte'ı diziye veya değişkenlere aktarmanız gerekiyor.

mufitsozen

#4
@kudretuzuner

iki taraftaki programida siz kontrol ediyorsaniz "byte framing metodu" kullanmaniz lazim.

 Bunun icin "byte stuffing" konusunuda inceleyin.

ascii tablosu ve de printable yada control kodlari icin ise "extended ascii table" diye internette arastirabilirsiniz.

https://bournetocode.com/projects/GCSE_Computing_Fundamentals/pages/3-3-5-ascii.html


https://theasciicode.com.ar/



Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

kudretuzuner

Alıntı yapılan: dumansiz - 26 Mart 2021, 14:22:57@kudretuzuner
Eğer PIC içerisindeki yazılıma müdahale edemiyorsanız,
Visual Basic kodundaki "if" koşulunun içerisinde,
3 defa daha "SerialPort1.ReadByte" fonksiyonunu çağırmanız gerekiyor.
Okuduğunuz 3 byte'ı diziye veya değişkenlere aktarmanız gerekiyor.
Merhaba,
PIC içindeki yazılım bana ait istediğim gibi dizayn edebiliyorum.İlk denememi 3 if içine koydum lâkin çalışmadı.Tek BYTE olarak sorunsuz alabiliyorum.
Amatör

kudretuzuner

Alıntı yapılan: mufitsozen - 26 Mart 2021, 14:41:56@kudretuzuner

iki taraftaki programida siz kontrol ediyorsaniz "byte framing metodu" kullanmaniz lazim.

 Bunun icin byte stuffing konusunuda inceleyin.

ascii tablosu ve de printable yada control kodlari icin ise "extended ascii table" diye internette arastirabilirsiniz.
Merhaba,
Teşekkür ederim bilmiyordum bir araştırayım. sağ olun.




Amatör

dumansiz

Alıntı yapılan: kudretuzuner - 26 Mart 2021, 14:55:44Merhaba,
PIC içindeki yazılım bana ait istediğim gibi dizayn edebiliyorum.İlk denememi 3 if içine koydum lâkin çalışmadı.Tek BYTE olarak sorunsuz alabiliyorum.

3 tane if içerisine koymayın. "y" karakterini aldıktan sonra, 3 defa SerialPort1.ReadByte yapın.
Basic dilini tam hatırlayamıyorum ama şöyle birşey olması lazım:
        If gelen = 121 Then 
           byte1=SerialPort1.ReadByte 
           byte2=SerialPort1.ReadByte
           byte3=SerialPort1.ReadByte
        End If
Ya da dizi kullanabilirsiniz.
PIC koduna müdahele edebiliyorsanız, @erdcan 'ın da dediği gibi, paketinizin sonuna satır sonu karakterleri koyarak yapabilirsiniz.

Hex'79'---------y
Hex'52'---------R
Hex'30'---------0
Hex'30'---------0
Hex'7A'---------z
Hex'79'---------y
Hex'4C'---------L
Hex'30'---------0
Hex'30'---------0
Hex'7A'---------z
Bu serinin sonuna
Hex'0A'
Hex'0D'
eklerseniz, Visual Basic yazılımınızdaki "SerialPort1.ReadLine" fonksiyonu doğru çalışacaktır.
Hex'0A' ve Hex'0D' nin her ikisini de yazdım ama belki sadece bir tanesi de yeterli olabilir. Veya gönderme sırası farklı olabilir.
Ancak @mufitsozen 'in de belirttiği gibi bir paket yapısı kullanmanız sizin yararınıza olacaktır.


kudretuzuner

Teşekkür ederim. Bu kodu bilmiyordum. Hemen deneyeyim.
Amatör