发表于:2005-07-01 09:46:00
楼主
通讯协议是:rs232,9针、主动发送、通信方式:全双工,异步传输格式、形式:EIA-RS-232C波特率:600bps-19200bps、8位数据位,1位停止位,无奇偶校验位、编码:ASCII 码
数据格式,22位
| | |,| | |,| | |,|数据位8位| | C| M|CR|LF|
根据这个我用vb做了通讯程序,但是数据读出后的不太会处理,还望高手指教!程序:
Option Explicit
Private strRecbuf As String ' Double
Private Sub Command1_Click()
On Error Resume Next
With MSComm1
.CommPort = 1 '你可以选择你的端口号
.Settings = "9600,n,8,1" '这个可以根据你的要求来改成4800,19200等
.InputLen = 0
.RThreshold = 1
.InputMode = comInputModeText
.InBufferSize = 40
.InputLen = 1
End With
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
'Text1.Text = strRecbuf
Command4.Visible = True
Command1.Visible = False
End Sub
Private Sub Command4_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MSComm1.RThreshold = 0
MSComm1.InBufferCount = 0
Close #1
End If
Command1.Visible = True
Command4.Visible = False
End Sub
Private Sub MSComm1_OnComm()
On Error Resume Next
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 1
strRecbuf = strRecbuf + MSComm1.Input
If strRecbuf <> strRecbuf Then
MSComm1.RThreshold = 0
txtRec.SelText = ""
End If
'加上这个
txtRec.Text = Mid(strRecbuf, 7, 9)
Case comEvSend
End Select
'If InStr(strRecbuf, Chr(9)) Then '就是你的LF字符,也许不是chr(10),你自己定就可以了
'strRecbuf = ""
'txtRec.SelText = Chr(9)
'Exit Sub
'End If
If InStr(strRecbuf, Chr(21)) Then
txtRec.Text = CDbl(Mid(strRecbuf, 7, 9)) '这里处理你的数据,你自己看看,那个Mid里面的参数试着改变一下。
strRecbuf = ""
Exit Sub
End If
End Sub
++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++
主要问题:1、数据位总是取不对,读出的数值,每次运行都不同,周期变化5-7次一遍,我用log记录的格式为:
8.23 cm
ust gst 8.23 cm
ust gst 8.23 cm
8.23 cm
ust gst 8.23 cm
ust gst 8.23 cm
。。。。。。
主要问题: 2、只能读取当时点击时得到的数值,发连续工作,就是只能度一次!!!
还望高手多指点!!!!!!