mscomm触发事件问题
For i = 224 To 225
sendcomd = Hex(i) & "DF"
Call SendCommand(sendcomd)
next i
用sendcommand函数来发送指令,从E0DF到FFDF,希望每发送一次指令就触发一次ComEvSend事件,其他都写好了,手动每发一次指令都能正确的触发ComEvSend事件,一旦用这个for循环就一次也没法触发了,我试着用了sleep,仍然不能触发,哪位高人能教教在下,能使用这个for循环每发一次指令就触发一次comevsend事件
以下是sendcommand函数:
Public Sub SendCommand(sendcomd As String) 'sendcommand函数,用于发送指令'采集输入的指令数据
Dim vChar() As String
Dim outbte() As Byte
Dim q As Integer
Dim p As Integer
p = Len(sendcomd) / 2 - 1
With XL2118.MSComm0
If Not .PortOpen Then '先打开串口,并初始化
.CommPort = intPort
.Settings = strSet
.PortOpen = True
End If
If p >= 0 Then
ReDim outbte(p) '采用2进制发送
ReDim vChar(p)
For q = 0 To p
vChar(q) = Mid(sendcomd, 2 * q + 1, 2)
outbte(q) = Val("&h" + vChar(q))
Next q
.OutBufferCount = 0
.Output = outbte
End If
End With
End Sub
以下是XL2118.MSComm0的oncomm事件:
Private Sub Form_Load()
'接收初始化
intReceiveLen = 0 '接收到的字节数为0
XL2118.MSComm0.SThreshold = 5
End Sub
Private Sub MSComm0_OnComm()
Dim bytInput() As Byte '接收数据的数组
Dim intInputLen As Integer '记录数据的长度
With XL2118.MSComm0
If .CommEvent = 2 Then
.RThreshold = 0
Select Case .CommEvent
Case comEvReceive
If Not .PortOpen Then
.CommPort = intPort
.Settings = strSet
.PortOpen = True
End If
'此处添加处理接收的代码
.InputMode = comInputModeBinary '采用二进制方式comInputModeBinary
intInputLen = .InBufferCount '接受数据字符数的来源
ReDim bytInput(intInputLen) '重新定义这个接受数据数组的明确大小
bytInput = .Input '开始接受数据
Call InputManage(bytInput, intInputLen) '处理接收到的字节流,并保存在全局变量
Call GetDisplayText 'bytReceiveRyte()相当于把零散的数据汇合在大数组中
end select
End If
End With
End Sub
[解决办法]
1、用Timer代替For发送
2、用Doevents延时代替sleep
[解决办法]
最好用1方案,
2、Doevents可能引起不确定问题
[解决办法]
该回复于2010-04-15 09:00:38被版主删除
[解决办法]
http://download.csdn.net/source/1262066
[解决办法]
该回复于2010-04-15 13:41:26被版主删除
[解决办法]
该回复于2010-04-15 13:40:07被版主删除
[解决办法]
最后我自己解决了,
public mindex as integer '定义mindex为全局变量
Private Sub Form_Load()
mindex=244 '设定一个初始值
end sub
Private Sub MSComm0_OnComm()
If intReceiveLen < >0 Then '判断是否有接收值,没有接着发送指令
mindex = mindex + 1
If mindex <= 255 Then
Call SendCommand(Hex(mindex) & "DF") '没有接收时调用sendcommand来触发下一次ComEvSend事件,如此就能循环触发ComEvSend事件了
End If
End If
end sub
最后写一个函数,触发第一次ComEvSend事件,以后只要接收长度小于等于255就能循环了
private sub xxx()
call sendcommand(mindex)
end sub
还是要谢谢各位!