visual basic seriporttan nasil veri alınır

Başlatan ilhan_mkp, 10 Mayıs 2014, 20:33:10

ilhan_mkp

visual basic express 2010 kurdum amacım seri porttan veri almak biraz örnek buldum ama pek anlayamadım port ayarları seri port nesnesini koyunca kenarda pencere üzerinde yapılıyo ama forma neler eklemeliyim birde bufferi byteler halinde okuma ve bütün bufferi okumak farklı yollarla oluyor sanırım

tanımlama yapmam gerekiyormu
portu nasıl acıcam
gelen byte textbox içini nasıl yazıcam

asıl amacım lrc hesaplaması yapmak verileri dürüst bütün almayı öğrenmeden başlamayayım dedim.

muhittin_kaplan

ilhan yaptığın çalışma ile ilgili kodlarını koyarsan dahada yardımcı oluruz. gayet basit aslında

ilhan_mkp

hocam daha kod yok ortada asıl sorun bu zaten  :-\

predator

vb6 için biliyoum, burdaki kritik nokta mscomm1.rthreshold=1 yapmak, gerisi mscomm1.input, belki 2010da da böyle bişey vardır

ilhan_mkp

hocam bir örnek var aslında ama ben bu kadar seçenek istemiyorum
http://tiktakx.wordpress.com/2010/11/21/serial-port-interfacing-with-vb-net

daha basit bişi yapmaya çalışıyorum adam butonların isimleri falan değiştirmiş bişi anlamıyom hani buton1 buton1 olarak kalsa kodmu butonun adımı anlıyacam formda 1 kutuda gönderdiğim tek bir byte görülsün istiyorum

bunlar ne için eklendi mesela hiç bir fikrim yok
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports

muhittin_kaplan


kudretuzuner

Merhaba,
Seriport1  "SerialPort1_DataReceived"eventına aşağıdaki kod ile PIC PC'ye klavye sıfır yolladığı zaman formdaki
picturebox1'in rengi kırmızı olur.
   Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

        Dim gelen As Byte = SerialPort1.ReadByte
        '--------------------------------------------------------
        If gelen = 48 Then '      "0"  hex(30)    PIC'in PC'ye yolladığı bir byte lık data
            PictureBox1.BackColor = Color.Red
        End If
        '--------------------------------------------------------
    End Sub
Amatör

ilhan_mkp


Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel


Public Class Form1
    '------------------------------------------------
    Dim myPort As Array
    Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data
    '------------------------------------------------
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        myPort = IO.Ports.SerialPort.GetPortNames()
        ComboBox1.Items.AddRange(myPort)



    End Sub
    '------------------------------------------------
    Private Sub ComboBox1_Click(sender As System.Object, e As System.EventArgs) Handles ComboBox1.Click
    End Sub
    '------------------------------------------------
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        SerialPort1.PortName = ComboBox1.Text
        SerialPort1.BaudRate = ComboBox2.Text
        SerialPort1.Open()
        Button1.Enabled = False

        Button4.Enabled = True

    End Sub



    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        SerialPort1.Close()
        Button1.Enabled = True

        Button4.Enabled = False
    End Sub

    Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        ReceivedText(SerialPort1.ReadExisting())
    End Sub

    Private Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
        If Me.RichTextBox2.InvokeRequired Then
            Dim x As New SetTextCallback(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})
        Else
            Me.RichTextBox2.Text &= [text] 'append text
        End If
    End Sub

    Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    End Sub

    Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox2.TextChanged

    End Sub
End Class


muhittin hocam sizin koda bakaraktan bulduğum daha basit bir örneği sadeleştirdim gelen bytelar yazılıyo ama ben bu gelen dataları işlemek istiyorum bunları bir array içine nasıl alırım

muhittin_kaplan

ilhan gönderdiğiniz bilgi nasıl bir formatta ?

ilhan_mkp

unsigned char temp[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x0d,0x0a};

hocam ascii olarak gönderdim  yukarıdaki diziyi gönderdim denemek için

muhittin_kaplan

benim genelde uyguladığım yöntem şu bunların hepsini sprintf ile bir string e alıyorum sonuna \r\n kuyuyorum ve gönderiyorum.

pc tarafınnda readline ile alıyorum. bu \r\yi görene kadar alıp bir değişkenin içerisine atıyor.
sonra istediğin gibi böl parçala


mesaj birleştirme:: 11 Mayıs 2014, 16:04:31

sana verdiğim örnek öyle olması lazım

ilhan_mkp

hocam veriyi read line ile aldım mesaj boyu her veri paketi geldiğinde uzuyor.
bufferi her veri paketi alımında temizlememmi gerikiyor