Hallo,

derzeit betreibe ich eine Waagesoftware (VB 6.0) mittels MSComm Control (RS232C) zu einer SIWAREX U.

Grobe Darstellung der Kommunikation:
Code:
Dim Nulloffset As Single
Dim Eichfaktor As Single
Dim GewichtRohdaten  As Single

Private Sub Form_Load()

Nulloffset = -3.693239
Eichfaktor = 0.1009082

With MSComm1
    .CommPort = "COM1"
    .DTREnable = False
    .EOFEnable = False
    .Handshaking = comNone
    .InBufferSize = 1024
    .InputLen = 17
    .InputMode = comInputModeBinary
    .OutBufferSize = 512
    .RThreshold = 17
    .RTSEnable = False
    .Settings = "9600,e,8,1"
    .PortOpen = True
    'Anforderung für Gewichtsdatenbaustein
    .Output = Chr(0) + Chr(255) + Chr(100) + Chr(8) + Chr(31) + Chr(140) + Chr(16) + Chr(3)
End With

End Sub

Private Sub MSComm1_OnComm()
Dim retval As String


If MSComm1.InBufferCount Then      'Wenn Eingangspuffer gefüllt

    GewichtRohdaten  = AscW(Mid(Trim$(MSComm1.Input), 3, 1))
    
End If


'Empfangs- und Sendepuffer löschen
With MSComm1
    .InBufferCount = 0
    .OutBufferCount = 0
End With

End Sub
Das funktioniert wunderbar und es sehr schnell.

Nun sollte die Software auf VB.NET 2005 umgestellt werden.

Grobe Darstellung der Kommunikation:
Code:
Dim Nulloffset As Single
Dim Eichfaktor As Single
Dim GewichtRohdaten  As Single

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

Nulloffset = -3.693239
Eichfaktor = 0.1009082

        With SerialPort
            .PortName = "COM1"
            .BaudRate = 9600
            .DataBits = 8
            .DtrEnable = False
            .Encoding = System.Text.Encoding.Default
            .Parity = IO.Ports.Parity.Even
            .ReadBufferSize = 1025
            .WriteBufferSize = 512
            .ReceivedBytesThreshold = 17
            .Open()
            .Write(Chr(0) + Chr(255) + Chr(100) + Chr(8) + Chr(31) + Chr(140) + Chr(16) + Chr(3))
        End With

    End Sub

    Private Sub SerialPort_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived

        GewichtRohdaten = AscW(Mid(Trim(Me.SerialPort.ReadLine), 3, 1))

        With SerialPort
            .DiscardInBuffer()
            .DiscardOutBuffer()
        End With


    End Sub

    Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        With SerialPort
            .Close()
            .Dispose()
        End With
    End Sub
Jetzt treten zwei Probleme auf:

  1. die fehlende Eigenschaft "InputMode" des Serialport Controls -> Empfangsseitig muss das Format Binär sein.
  2. die Kommunikation ist extrem langsam. Es dauert sehr lange bis der Inputbuffer gefüllt ist.
Hat jemand eine Idee?