我用MSCOMM控件读串口数据
Dim Rdata() as byte
.......
Rdata = MSComm1.Input
....
就是读不出数据来
'单步执行时读到MSComm1.InBufferCount = 25 然后执行Rdata = MSComm1.Input 后,UBound(RData) 就等于 0了
郁闷 其他定义都没有问题
到底那出问题了??
Dim Rdata() as byte
.......
Rdata = MSComm1.Input
....
就是读不出数据来
'单步执行时读到MSComm1.InBufferCount = 25 然后执行Rdata = MSComm1.Input 后,UBound(RData) 就等于 0了
郁闷 其他定义都没有问题
到底那出问题了??
'读取返回信息,直到读到"OK","ERROR"
Dim s() As Byte
Dim SS As String
Static SSS As String
If MSComm1.InBufferCount > 0 Then
s = MSComm1.Input
SS = s
SSS = SSS + SS
If InStr(UCase(RetString), "OK") Or InStr(UCase(RetString), "ERROR") Then '读到OK或ERROR表明完全读入
MsgBox SSS
End If
End If
End Sub
你看看
'读取返回信息,直到读到"OK","ERROR"
Dim s() As Byte
Dim SS As String
Static SSS As String
If MSComm1.InBufferCount > 0 Then
s = MSComm1.Input
SS = s
SSS = SSS + SS
If InStr(UCase(SSS ), "OK") Or InStr(UCase(SSS ), "ERROR") Then '读到OK或ERROR表明完全读入
MsgBox SSS
End If
End If
End Sub不好意思:)
MSComm1.PortOpen = True
MSComm1.Handshaking = comRTS
MSComm1.RTSEnable = True
MSComm1.InputMode = comInputModeText ' :)
估计OK或ERROR读不到
我的代码
dim RData() as byte
Private Sub Timer1_Timer()
MSComm1.Output = SVale '发命令
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 25
Call ReceiveDataFromCom
MSComm1.InBufferCount = 0
End Sub
Private Sub ReceiveDataFromCom()
Dim i As Integer
Rtxt.Text = ""
RData = MSComm1.InputFor i = 0 To UBound(RData)
Rtxt.Text = Rtxt.Text & CStr(RData(i)) & vbTab
Next
End Sub
'读取返回信息,直到读到"OK","ERROR"
Dim s() As Byte
Dim SS As String
Static SSS As String
If MSComm1.InBufferCount > 0 Then
s = MSComm1.Input
SS = s
SSS = SSS + SS
if len(sss)>100 then
MsgBox SSS
End If
End If
End Sub
MSComm1.InputMode = comInputModeText ' :)看看读到什么东西了
你的代码运行时要把MSComm1.InpputMode = comInputModeText,而我现在要读的是:4C 57 01 30 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 0D我在运行时用其他串口软件在另一个COM看数据都正确的,
但现在的问题是我用上面的代码读出来的不对
照你的做了,在运行到s = MSComm1.Input时要等5-6秒,输出结果是******(看不懂的)
:)
Private Sub Timer1_Timer()
'读取返回信息,直到读到"OK","ERROR"
Dim s() As Byte
dim i as long
If MSComm1.InBufferCount > 0 Then
s = MSComm1.Input
FOR I=0 to ubound(s)
debug.print s(i)
next i
End If
End Sub
看看打出什么 :)
我的代码是这样写的。
Dim RData as byte
Private Sub Timer1_Timer()
MSComm1.Output = SVale
DelayTime
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 25
Call ReceiveDataFromCom
MSComm1.InBufferCount = 0
End Sub
Private Sub ReceiveDataFromCom()
Dim i As Integer
Rtxt.Text = ""
RData = MSComm1.Input
For i = 0 To UBound(RData)
Rtxt.Text = Rtxt.Text & CStr(RData(i)) & vbTab
Next
End Sub
:::::::::::::::::::
COM接的是EDA9033,关于改设备的介绍可以查看www.lwlckj.com
我在的数据引出条线,看发和收的数据(接在其他电脑上看),都是正确的。流控制是什么概念?
今晚12点前有效。
不会是在YU我吧??
Dim Rdata() as byte,mTemp as Variant
.......
mTemp = MSComm1.Input
Rdata = mTemp
.......
结果是一样的
[email protected] 先谢谢了!
你发的只能接受MSComm1.InpputMode = comInputModeText时的量,我现在的接受对象是数据量,没用的。根本接受不到数据
:)
===========================================
不会啊,你可以在它的源程序中把inputmode改掉试试。我把它改为comInputModeBinary,工作很正常应该不会一点显示都没有吧
如果真的不行,推荐另一款检测软件:
http://www.cstsoft.com.cn/china/product/comprobe.exe
这款检测软件是基于驱动的,比一般的串口测试软件优先
你先运行它,在运行你的串口接收程序,做一些传送接收的动作,然后你会看到comprobe会对串口收发的数据都有记录(都是串口收到的最原始数据),分析一下这些数据是不是你想要的吧