Evo dela mog starog projekta gde čitam i šaljem podatke na RS232...
Na RS232 mi je "nakačena" digitalna vaga koja šalje niz podataka i iz tog niza izvlačim ono što mi je potrebno...
Opet kažem, to mi je stari projekat na kome sam u stvari vežbao pa i nije baš najprofesionalnije odrađeno... sample code sam skinuo sa MSDN-a...
sada koristim drugi način ali i ovo će vam biti od pomoći (ako sam ja čitao i slao podatka i vi ćete :) )
PS... pošto nisam na svom računaru, ne mogu vam objasniti kôd u detalje, ali nije se teško snaći...
Code:
Const Xon = &H11
Const Xoff = &H13
Private Sub form_load()
Me.Caption = "V A G A NJ E"
Text1.Text = "" ''// ovo je txt box koji prikazuje primljene podatke
With MSComm1 ''// MSComm je objekat koji morate dodati... preko njega VB komunicira sa portom
.Handshaking = 2 - comRTS ''// ovo su podešavanja MScomm-a
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
End With
End Sub
Private Sub MSComm1_OnComm()
Dim InBuff As String
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement.
' This template is found in the Example
' section of the OnComm event help topic
' in VB help.
' Errors
Case comEventBreak ' A Break was received.
Case comEventCDTO ' CD (RLSD) Timeout.
Case comEventCTSTO ' CTS Timeout.
Case comEventDSRTO ' DSR Timeout.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
' Events (možete pronaći objašnjenja svakog događaja pojedinačno u helpu ili na netu, ja nemam vremena sada svaki pojedinačno da objašnjavam
''// a i oni su ih bolje objasnili u svakom slučaju :)
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of chars.
Label1.Caption = "Vaga - Prijem podataka"
InBuff = MSComm1.Input ''// ovde prima podatke sa RS232
Call ParseChars(InBuff)
Case comEvSend ' There are SThreshold number of
' characters in the transmit
' buffer.
Case comEvEOF ' An EOF character was found in the input stream.
End Select
End Sub
Sub HandleInput(InBuff As String)
' This is where you will process your input. This
' includes trapping characters, parsing strings,
' separating data fields, etc. For this case, you
' are simply going to display the data in the text
' box.
Text1.Text = InBuff & Text1.Text
End Sub
Sub ParseChars(ByVal InString As String)
Dim temp As String
Dim X As Long
Dim OutString As String
For X = 1 To Len(InString)
temp = Mid$(InString, X, 1)
If temp = Chr$(Xoff) Then
Label1.ForeColor = vbRed
Label1.Caption = "Xoff received"
temp = ""
ElseIf temp = Chr$(Xon) Then
Label1.ForeColor = vbGreen
Label1.Caption = "Xon received"
temp = ""
End If
OutString = OutString & temp
temp = ""
Next X
Call HandleInput(OutString)
End Sub
Private Sub Timer1_Timer()
Dim var_R As String
var_R = "R"
MSComm1.Output = var_R & Chr$(Xoff) ''// ovde šalje podatke na RS232
End Sub
Private Sub cmdZero_Click()
Dim var_Z As String
var_Z = "Z"
On Error GoTo greska
MSComm1.Output = var_Z '& Chr$(Xoff) ''// ovde šalje podatke na RS232
Exit Sub
greska: MsgBox "Može se koristiti samo kada je port otvoren!", vbInformation
End Sub
Private Sub cmdTare_Click()
Dim var_T As String
var_T = "T"
On Error GoTo greska
MSComm1.Output = var_T '& Chr$(Xoff) ''// ovde šalje podatke na RS232
Exit Sub
greska: MsgBox "Može se koristiti samo kada je port otvoren!", vbInformation
End Sub
Some people, when confronted with a problem, think: "I know, I'll use regular expressions."
Now they have two problems!
-Jamie Zawinsky