Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual Basic .NET => Konuyu başlatan: kudretuzuner - 25 Mart 2021, 22:53:34

Başlık: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: kudretuzuner - 25 Mart 2021, 22:53:34
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.


Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: erdcan - 25 Mart 2021, 23:41:51
Hocam picten gödnerdiğiniz kodun sonunda yeni satır ve satır başı karakterleri mevcut mudur? //r//n
Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: kudretuzuner - 26 Mart 2021, 12:31:26
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.
Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: 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.
Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: 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.

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


https://theasciicode.com.ar/



Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: kudretuzuner - 26 Mart 2021, 14:55:44
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.
Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: kudretuzuner - 26 Mart 2021, 14:57:39
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.




Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: dumansiz - 26 Mart 2021, 15:17:27
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.

Başlık: Ynt: VB.Net 2010 ReadLine() komutunu çalıştıramıyorum.
Gönderen: kudretuzuner - 26 Mart 2021, 16:09:51
Teşekkür ederim. Bu kodu bilmiyordum. Hemen deneyeyim.