Привет!
Я для считывания информации с внешних устройств через СОМ порт широко использую RSMINI.dll имеющую API:
Public Declare Function OPENCOM Lib "rsmini" (ByVal A$) As Integer
Public Declare Function READBYTE Lib "rsmini" () As Integer
Public Declare Sub CLOSECOM Lib "rsmini" ()
Public Declare Sub SENDBYTE Lib "rsmini" (ByVal b%)
Public Declare Sub RTS Lib "rsmini" (ByVal b%)
Public Declare Sub DTR Lib "rsmini" (ByVal onoff%)
Public Declare Sub TIMEOUT Lib "rsmini" (ByVal ms%)
При работе под Windows98 все работает без проблем. А при запуске макросов под Win2000 или WinXP возникают проблемы: Excel macros спустя несколько минут после запуска теряет связь по RS232 с внешним устройством. Контроль обмена по RS232 с помощью Portmon показал что по каким то причинам спустя несколько минут после запуска приложение формирует запросы :
IRP_MJ_CLEANUP
IRP_MJ_CLOSE.
Т. е. СОМ порт почему то закрывается. Это не зависит от того ведется ли обмен по последовательному каналу или он простаивает. Тот же эффект наблюдается даже для простейшего примера:
Private Sub CommandButton1_Click()
If ComOpen(Ports(COMPORT) + ":" + Rates(BAUDRATE) + ",N,8,1") > 0 Then
MsgBox ("COM port opened!")
TIMEOUT 2000
Else: MsgBox ("COULD NOT OPEN COM PORT!")
End If
End Sub
Private Sub CommandButton2_Click()
CLOSECOM
End Sub
В Win98 порт после открытия может находиться в этом состоянии сколь угодно долго, а в Win2000 и WinXP через 3-5 минут закрывается.
В чем тут может быть проблема???