Я разрабатываю в VB6 программу для работы с устройством обменивающимся с ПЭВМ данными через СОМ порт. Для управления СОМ портом использую rsmini.dll с API:
- Код: Выделить всё
Declare Function OPENCOM Lib "rsmini" (ByVal A$) As Integer
Declare Function READBYTE Lib "rsmini" () As Integer
Declare Sub CLOSECOM Lib "rsmini" ()
Declare Sub SENDBYTE Lib "rsmini" (ByVal b%)
Declare Sub RTS Lib "rsmini" (ByVal b%)
Declare Sub DTR Lib "rsmini" (ByVal onoff%)
Declare Sub TIMEOUT Lib "rsmini" (ByVal ms%)
Начальная функция приложения производит проверку наличия устройства путем запроса посылаемого в СОМ порт с 1 по 4 и при обнаружении его открывает окно программы. Если прибор не обнаружен программа информирует об этом и завершает работу. Текст начальной функции:
- Код: Выделить всё
Sub Main()
Dim A$
Dim e As Integer
Dim tmp As Integer
COMPORT = 1
BAUDRATE = 1
Rates(1) = "38400"
Rates(2) = "38400"
Ports(1) = "COM1"
Ports(2) = "COM2"
Ports(3) = "COM3"
Ports(4) = "COM4"
'Initialise COM port and search Impedance Meter board
Do While COMPORT < 5
If ComOpen(Ports(COMPORT) + ":" + Rates(BAUDRATE) + ",N,8,1") > 0 Then
TIMEOUT 500
PutString ("T")
A$ = ""
Do
e = READBYTE
If e >= 32 Then A$ = A$ + Chr$(e)
If e = -1 Then
' CLOSECOM
' COMPORT = COMPORT + 1
' tmp = MsgBox("Impedance Meter Board not responding. Check next COM port?", vbOKCancel)
' If tmp = 1 Then
Exit Do
' ElseIf tmp = 2 Then
' End
' End If
End If
Loop Until e = 10
If A$ = "Impedance Meter, v 1.0" Then
MsgBox ("Impedance Meter Board detected on COM" + CStr(COMPORT) + " port!")
Exit Do
Else:
CLOSECOM
' tmp = MsgBox("Impedance Meter Board not detected on COM" + CStr(COMPORT) + " port!. Check next COM port?", vbOKCancel)
' If tmp = 1 Then
COMPORT = COMPORT + 1
' Exit Do
' ElseIf tmp = 2 Then
' End
' End If
End If
Else:
COMPORT = COMPORT + 1
' MsgBox ("COULD NOT OPEN COM PORT!")
' End
End If
Loop
If COMPORT = 5 Then
MsgBox ("Impedance Meter Board not detected!")
End
Else:
Form1.Show
End If
'Load Form1
End Sub
Проблема заключается в том что в отладочном режиме все работает как надо, а после компиляции exe файла программа после обнаружения устройства теряет связь с ним. Portmon показывает что, в отличие от отладочного режима, в ехе файле после обнаружения прибора и выдачи сообщения об этом (MsgBox ("Impedance Meter Board detected on COM" + CStr(COMPORT) + " port!")) почему то формируются запросы VCOMM_Escape_CommFunction и VCOMM_CloseComm. Т.е. СОМ порт закрывается и естественно дальнейшая работа с прибором становится невозможна.
В чем может быть причина такого поведения программы??