none
COM-Port Ausgabe von Bytes größer 127 nicht mehr möglich? RRS feed

  • Frage

  • Wer kann helfen?

    Bei dem folgenden Programm sollen div. HEX-Zahlen über die serielle Schnittstelle ausgegeben werden.

    Jedoch werden nur die HexZahlen 0-127 ausgegeben. Alle höherern Zahlen (128-255) werden durch 0x3F ersetzt.

    Wie bekomme ich das Programm dazu die Ausgabe 1:1 durchzuführen?

     

    Dim ComPort As IO.Ports.SerialPort

     

    Private Sub sendestring(ByVal s As String)

    ComPort.Write(s, 0, len(s))

    End Sub

     

    Private Sub DMCP_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ComPort = My.Computer.Ports.OpenSerialPort("COM1")

    ComPort.BaudRate = 2400

    ComPort.DataBits = 8

    ComPort.StopBits = 1

    ComPort.Parity = Ports.Parity.None

    ComPort.Handshake = Ports.Handshake.None

    ComPort.Encoding = System.Text.Encoding.ASCII

    End Sub

     

    //Der String s besteht aus mehreren Bytes (Alle von 0...255 sollen möglich sein.)

     

     

    Samstag, 22. Dezember 2007 17:36

Antworten

Alle Antworten

  • versuch's mal mit

     

    ComPort.Encoding = System.Text.Encoding.Default

    Sonntag, 27. Januar 2008 11:36
  • Hallo,


    ich grabe diesen alten Thread nochmal aus, weil es sich damit bei mir nicht getan hat.

    Ich habe genau das gleich Problem. Über Com möchte ich ganze Bytes verschicken, also 8 und nicht 7 Bit.

    Konkret ein habe ich zu Testzwecken einen TrackBar auf der Form und dessen Werte (0°-180°) sollen zu uC-Board mit Servo-Motor geschickt werden. Der Schieberegler auf der Form soll den Servo dann steuern.

    Dim OutChar(2) As Byte
    Private Sub ComCon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComCon.Click
            If Not Serial.IsOpen Then
                Serial.PortName = CbCom.SelectedItem
                Try
                    Serial.Open()
                Catch UnauthorizedAccessException As Exception
                    MessageBox.Show("Der Port wird bereits von einer anderen Anwendung verwendet")
                    Exit Sub
                End Try
            Else
                Serial.Close()
            End If
    End Sub

    Soweit so gut, jetzt habe ich eine Com-Port namens "Serial" und ein Byte-Array namens OutCahr, das ich darüber versenden möchte. Dass es CHAR heißt, hat nichts damit zu tun, dass ich etwa Charakters versenden möchte.

    Private Sub TrackBar1_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar1.Scroll
            OutChar(0) = 76     'L für den Servo "HLL"
            OutChar(1) = TrackBar1.Value
            Serial.Write(OutChar, 0, 2)
    End Sub

    Soweit so gut. Von 0 bis 127 kann ich den Servo auf diese Art und weise Steuern. Ab 128 springt der Servo wieder zurück. Es wird offenbar eine 0 übertragen.

    Hat evtl. noch Jemand einen Rat?

    Ich nutze Microsoft Visual Studio 2010.

    Gruß

    Jens


    Dienstag, 2. Oktober 2012 23:58
  • Hallo Jens,

    wenn Du ein Byte-Array überträgst, trifft die Aussage hier nicht auf Dich zu - konvertiert wird nur bei Zeichenfolgen.

    Das Problem dürfte mehr beim Aufbau liegen.
    Zum einen musst der SerialPort auf 8 DataBits eingestellt sein, da sonst das obere Bit fallen gelassen wird,
    was sich in dem beobachteten Verhalten zeigen würde. Und Schnittstelle für den "Servo" muss das unterstützen.

    Gruß Elmar

    P. S.: Anstatt "uralte" Threads auszugraben fange bitte einen neuen an und verweise ggf. auf ältere Beiträge.

    Mittwoch, 3. Oktober 2012 08:19
  • Hallo Elmar,

    Es war ja schon spät gestern Abend^^

    Das Problem lag tatsächlich auf Seite des uC. Danke dir trotzdem viel mals.

    Das einfügen einer Zeile "Serial.DataBits = 8" ist offenbar auch nicht nötig. ...Scheint wohl automatisch erkannt zu werden.

    Gruß

    Jens


    Mittwoch, 3. Oktober 2012 10:37
  • Hallo Jens,

    8 Datenbits sind beim Serialport voreingestellt.
    Der Handshake (Vorgabe none) etc. sollte aber auch passen,
    sonst gibt es bei größeren Datenmengen Überraschungen (Fehler).

    Gruß Elmar

    Mittwoch, 3. Oktober 2012 19:19