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

程序崩溃,哪位高手能帮小弟我修改一下 !

2012-02-17 
程序崩溃,谁能帮我修改一下 !!!OptionExplicitDimiAsIntegerDimiRecordAsIntegerDimiagainAsIntegerDimpic

程序崩溃,谁能帮我修改一下 !!!
Option   Explicit

Dim   i   As   Integer
Dim   iRecord   As   Integer
Dim   iagain   As   Integer
Dim   pic(0   To   31)   As   String
Const   m_cardNO   =   1
Const   m_chCount   As   Long   =   32

    Private   Sub   Command1_Click()
'清零
        Dim   i   As   Integer
        Call   ZT8403_DOAll(m_cardNO,   &H0)
                For   i   =   0   To   m_chCount   -   1
                        ledDO(i).Value   =   0
                Next   i
End   Sub

Private   Sub   Command2_Click()
Call   ZT8403_CloseDevice(m_cardNO)
        Unload   Me
End   Sub

Private   Sub   Form_Load()
        Me.Left   =   (Screen.Width   -   Me.Width)   /   2
        Me.Top   =   (Screen.Height   -   Me.Height)   /   3
        If   ZT8403_GetCardCount()   <=   0   Then
                MsgBox   "打开设备失败,找不到此类板卡。 "   &   vbCrLf   &   _
                              "可能是未插卡或未安装驱动 "
        End
        End   If
        Call   doloop
'初始化开关量
        Call   ZT8403_OpenDevice(m_cardNO)
                If   ZT8403_OpenDevice(m_cardNO)   <>   0   Then
                MsgBox   "打开设备失败,找不到指定的板卡。 "
                Exit   Sub
        End   If
        ZT8403_DOAll   m_cardNO,   &H0
        pic(0)   =   App.Path   &   "\pic\1.gif ":   pic(1)   =   App.Path   &   "\pic\2.gif ":   _
        pic(2)   =   App.Path   &   "\pic\3.gif ":   pic(3)   =   App.Path   &   "\pic\4.gif ":   _
        pic(4)   =   App.Path   &   "\pic\5.gif ":   pic(5)   =   App.Path   &   "\pic\6.gif ":   _
        pic(6)   =   App.Path   &   "\pic\7.gif ":   pic(7)   =   App.Path   &   "\pic\8.gif ":   _
        pic(8)   =   App.Path   &   "\pic\9.gif ":   pic(9)   =   App.Path   &   "\pic\10.gif "
End   Sub

Public   Sub   doloop()
        Call   collect
        iRecord   =   i
    Do   While   True
        Sleep   1000
        Call   collect
        iagain   =   i


        If   iagain   =   iRecord   Then
                ledDI(iagain).Value   =   1
                ledDO(iagain).Value   =   1
                Exit   Do
        Else
                iRecord   =   iagain
        End   If
    Loop
End   Sub

  Public   Sub   collect()
        i   =   0
        Do   Until   ZT8403_DIBit(m_cardNO,   i   +   1)   =   1
                i   =   i   +   1
                If   i   =   m_chCount   Then   i   =   0
        Loop

End   Sub

Public   Sub   review()
       
        Do   Until   ZT8403_DIBit(m_cardNO,   iagain   +   1)   =   0
        Loop
        Call   doloop
       
End   Sub


[解决办法]
加断点看看
[解决办法]
非必要情况下不要用api,
个人非常不喜欢sleep,会导致程序挂起。。。
[解决办法]
单步调试,加断点呀,F9断点,根据楼主所说的情况来看,可能是在加载的时候出错了
Call ZT8403_OpenDevice(m_cardNO)___________________!可能在这两处出错了,使程序一直在打开板卡中
If ZT8403_OpenDevice(m_cardNO) <> 0 Then_______!
MsgBox "打开设备失败,找不到指定的板卡。 "
Exit Sub
End If
ZT8403_DOAll m_cardNO, &H0
pic(0) = App.Path & "\pic\1.gif ": pic(1) = App.Path & "\pic\2.gif ": _
pic(2) = App.Path & "\pic\3.gif ": pic(3) = App.Path & "\pic\4.gif ": _
pic(4) = App.Path & "\pic\5.gif ": pic(5) = App.Path & "\pic\6.gif ": _
pic(6) = App.Path & "\pic\7.gif ": pic(7) = App.Path & "\pic\8.gif ": _
pic(8) = App.Path & "\pic\9.gif ": pic(9) = App.Path & "\pic\10.gif "
[解决办法]
对于以下几个函数调用严重怀疑:

Public Sub collect()
i = 0
Do Until ZT8403_DIBit(m_cardNO, i + 1) = 1
i = i + 1
If i = m_chCount Then i = 0
Loop

End Sub

Public Sub review()

Do Until ZT8403_DIBit(m_cardNO, iagain + 1) = 0
Loop
Call doloop

End Sub

这里的ZT8403_DIBit()调用的返回值是否有问题?

硬件相关API的设计,一般很少做成阻塞式的.

PS:

下断点,按F9键.
[解决办法]
你的程序效率太低,使用资源巨大,建议重新设计代码!
[解决办法]
板卡的API一般都有回调式的提供,你找找.

自己写一个回调函数,传入口地址给API,那样就非常好了.

有事件时API会通知你.
[解决办法]
看了附带的API函数,没有发现叫回调的东东。
[解决办法]


如果通道有信号能够触发事件用事件,一般都有的。
极个别的没有。用循环扫描几次还可以,一直扫描用Timer定时检查可以的。

不断循环扫描直到某一通道开关量为1,这时根据通道号做相应的动作。(要不然还有什么方法知道哪个通道有信号啊)

热点排行