首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

mscomm触发事件有关问题

2012-12-21 
mscomm触发事件问题For i 224 To 225sendcomd Hex(i) & DFCall SendCommand(sendcomd)next i用sendc

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
还是要谢谢各位!

热点排行