-> Hier kostenlos registrieren
Hallo,
derzeit betreibe ich eine Waagesoftware (VB 6.0) mittels MSComm Control (RS232C) zu einer SIWAREX U.
Grobe Darstellung der Kommunikation:
Das funktioniert wunderbar und es sehr schnell.
Nun sollte die Software auf VB.NET 2005 umgestellt werden.
Grobe Darstellung der Kommunikation:
Jetzt treten zwei Probleme auf:
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:
- die fehlende Eigenschaft "InputMode" des Serialport Controls -> Empfangsseitig muss das Format Binär sein.
- die Kommunikation ist extrem langsam. Es dauert sehr lange bis der Inputbuffer gefüllt ist.