代码修改如下,调试时见实时错误'8018',只有端口打开时,操作有效.
Option Explicit
Private outtemp(5) As Byte '//接收数组
Private chnlcnt As Integer
Private samflag As Boolean
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InBufferSize = 20
MSComm1.OutBufferSize = 20
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 1
MSComm1.SThreshold = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
outtemp(0) = &H1
outtemp(1) = &H2
outtemp(2) = &H30
outtemp(3) = &H30
outtemp(4) = &H3End SubPrivate Sub MSComm1_OnComm()
Dim Buffer As Variant
samflag = False
With MSComm1
Select Case .CommEvent
Case comEvReceive
Buffer = .Input
intemp(1) = Buffer(0)
If intemp(1) = &H2 Then
.RThreshold = 0 '关闭OnComm事件接收
Do
DoEvents
Loop Until .InBufferCount >= 1
Buffer = .Input
intemp(2) = Buffer(0)
If intemp(2) = &H1E Then '//如果是联络帧,五个字节
Label1.Caption = "连接成功"
Do
DoEvents
Loop Until .InBufferCount >= 3 '//一直到接收完数据
commok = True
End If '//联络部分
If intemp(2) = &H6 Then '//要求重发数据
Do
DoEvents
Loop Until .InBufferCount >= 3
End If
If intemp(2) = &H1F Then '是数据 数据帧11字节
Do
DoEvents
Loop Until .InBufferCount >= 8
Buffer = MSComm1.Input
intemp(3) = Buffer(0)
Buffer = MSComm1.Input
intemp(4) = Buffer(0)
Buffer = MSComm1.Input
Buffer = MSComm1.Input
indata(0) = Buffer(0)
Buffer = MSComm1.Input
indata(1) = Buffer(0)
Buffer = MSComm1.Input
indata(2) = Buffer(0)
Buffer = MSComm1.Input
indata(3) = Buffer(0)
Buffer = MSComm1.Input
indata(4) = Buffer(0)
Buffer = MSComm1.Input
samflag = True '//一组数据接受完毕
End If
End If
MSComm1.RThreshold = 1
Case Else
End Select
End With
End Sub
'定时器2s
Private Sub Timer3_Timer()
If chnlcnt >= 8 Then
chnlcnt = 1
Timer3.Enabled = False
samflag = False
Exit Sub
End If
outtemp(3) = chnlcnt
MSComm1.Output = outtemp '//采集命令outtemp(3)为通道号
Do
DoEvents
Loop Until samflag
samflag = False
chnlcnt = chnlcnt + 1
End Sub 3
End If
If intemp(2) = &H1F Then '是数据 数据帧11字节
Do
DoEvents
Loop Until .InBufferCount >= 8
Buffer = .Input
intemp(3) = Buffer(0)
Buffer = .Input
intemp(4) = Buffer(0)
Buffer = .Input
Buffer = .Input
indata(0) = Buffer(0)
Buffer = .Input
indata(1) = Buffer(0)
Buffer = .Input
indata(2) = Buffer(0)
Buffer = .Input
indata(3) = Buffer(0)
Buffer = .Input
indata(4) = Buffer(0)
Buffer = .Input
samflag = True '//一组数据接受完毕
End If
End If
.RThreshold = 1
Case Else
End Select
End With
End Sub
定时器2s
Private Sub Timer3_Timer()
If chnlcnt >= 8 Then
chnlcnt = 1
Timer3.Enabled = False
samflag = False
Exit Sub
End If
outtemp(3) = chnlcnt
MSComm1.Output = outtemp '//采集命令outtemp(3)为通道号
Do
DoEvents
Loop Until samflag
samflag = False
chnlcnt = chnlcnt + 1
End Sub
Option Explicit
Private outtemp(5) As Byte '//接收数组
Private chnlcnt As Integer
Private samflag As Boolean
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InBufferSize = 20
MSComm1.OutBufferSize = 20
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 1
MSComm1.SThreshold = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
outtemp(0) = &H1
outtemp(1) = &H2
outtemp(2) = &H30
outtemp(3) = &H30
outtemp(4) = &H3End SubPrivate Sub MSComm1_OnComm()
Dim Buffer As Variant
samflag = False
With MSComm1
Select Case .CommEvent
Case comEvReceive
Buffer = .Input
intemp(1) = Buffer(0)
If intemp(1) = &H2 Then
.RThreshold = 0 '关闭OnComm事件接收
Do
DoEvents
Loop Until .InBufferCount >= 1
Buffer = .Input
intemp(2) = Buffer(0)
If intemp(2) = &H1E Then '//如果是联络帧,五个字节
Label1.Caption = "连接成功"
Do
DoEvents
Loop Until .InBufferCount >= 3 '//一直到接收完数据
commok = True
End If '//联络部分
If intemp(2) = &H6 Then '//要求重发数据
Do
DoEvents
Loop Until .InBufferCount >= 3
End If
If intemp(2) = &H1F Then '是数据 数据帧11字节
Do
DoEvents
Loop Until .InBufferCount >= 8
Buffer = MSComm1.Input
intemp(3) = Buffer(0)
Buffer = MSComm1.Input
intemp(4) = Buffer(0)
Buffer = MSComm1.Input
Buffer = MSComm1.Input
indata(0) = Buffer(0)
Buffer = MSComm1.Input
indata(1) = Buffer(0)
Buffer = MSComm1.Input
indata(2) = Buffer(0)
Buffer = MSComm1.Input
indata(3) = Buffer(0)
Buffer = MSComm1.Input
indata(4) = Buffer(0)
Buffer = MSComm1.Input
samflag = True '//一组数据接受完毕
End If
End If
MSComm1.RThreshold = 1
Case Else
End Select
End With
End Sub
'定时器2s
Private Sub Timer3_Timer()
If chnlcnt >= 8 Then
chnlcnt = 1
Timer3.Enabled = False
samflag = False
Exit Sub
End If
outtemp(3) = chnlcnt
MSComm1.Output = outtemp '//采集命令outtemp(3)为通道号
Do
DoEvents
Loop Until samflag
samflag = False
chnlcnt = chnlcnt + 1
End Sub 3
End If
If intemp(2) = &H1F Then '是数据 数据帧11字节
Do
DoEvents
Loop Until .InBufferCount >= 8
Buffer = .Input
intemp(3) = Buffer(0)
Buffer = .Input
intemp(4) = Buffer(0)
Buffer = .Input
Buffer = .Input
indata(0) = Buffer(0)
Buffer = .Input
indata(1) = Buffer(0)
Buffer = .Input
indata(2) = Buffer(0)
Buffer = .Input
indata(3) = Buffer(0)
Buffer = .Input
indata(4) = Buffer(0)
Buffer = .Input
samflag = True '//一组数据接受完毕
End If
End If
.RThreshold = 1
Case Else
End Select
End With
End Sub
定时器2s
Private Sub Timer3_Timer()
If chnlcnt >= 8 Then
chnlcnt = 1
Timer3.Enabled = False
samflag = False
Exit Sub
End If
outtemp(3) = chnlcnt
MSComm1.Output = outtemp '//采集命令outtemp(3)为通道号
Do
DoEvents
Loop Until samflag
samflag = False
chnlcnt = chnlcnt + 1
End Sub
解决方案 »
- vb 如何导入.xls文件到 OLE1 excel,并读取相应单元格内容
- 请问怎么在程序里使用ctrl+q这个快捷键?
- 如何禁止修改打开的word文件(50分)
- VB中怎么动态创建access数据库以及数据库表
- 编写的用户控件 出现运行时在任务栏!
- 信使服务跨网络的发送信息是如何实现的?(别说知道对方ip net send就行,行就不再开这帖子了)
- 超级难题!!!关于ActiveX Exe的Thread Model设置问题
- 帮帮忙
- 怎么能够将list列表框里的数据存储在一个外部文件里呢???解决给分30
- 有谁知道vb中adodc与mshflexgrid控件的绑定的速度问题
- 求vb解析xml的资料...
- 很难的题,解答了,高分相送!
为什么只能采三个通道的数,程序就不行了,