Member 13396059 Ответов: 1

Доступность Com-порта


я хочу выбрать компорт из списка портов, используя combobox с помощью vb6.я не могу написать код на этом, поэтому, пожалуйста, помогите мне.

Что я уже пробовал:

Private Sub form_load()

    Dim i As Long
    For i = 1 To 16
        If COMAvailable(i) Then
            Combo1.AddItem "COM" & i & ""
        Else
            Combo1.AddItem "COM" & i & ""
        End If
    Next
    
End Sub

Private Sub Command1_Click()
    
    If COMAvailable(i) = True Then
        
        Label1.Caption = "READY FOR COMMUNICATION"
    Else
        Label1.Caption = "PORT NOT OPEN PLEASE CONFIGURE"
    End If
    
End Sub

Richard MacCutchan

Где находится код для этого COMAvailable метод?

Member 13396059

Публичная функция COMAvailable(ByVal iPortNum As Integer) Как Логическое

Тусклый hCOM как долго
Дим рет как долго
Дим сек как в разделе security_attributes

- попробуйте открыть порт связи

hCOM = CreateFile("COM" &iportnum & "", 0, FILE_SHARE_READ + FILE_SHARE_WRITE, _
sec, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
Если hCOM = -1, то
COMAvailable = False
Еще
COMAvailable = True
- закройте порт связи
ret = CloseHandle(hCOM)
Конец, Если

Конечная Функция

Richard MacCutchan

Ладно, так ты расскажешь нам, в чем проблема?

Member 13396059

я прошу о помощи

Richard MacCutchan

Тогда скажи нам, в чем проблема. Мы не можем читать твои мысли.

Member 13396059

я хочу, чтобы выбрать порт из списка и откройте COM-порт, который доступен

Richard MacCutchan

И что же? Что мешает вам сделать это?

Member 13396059

каждый раз когда я запускаю программу когда я выбираю com порт который доступен также показывает что порт не открыт pls configure

CPallini

Почему вы недовольны таким кодом?

Member 13396059

я хочу выбрать компорт и открыть его для отправки и получения данных из поля со списком

Richard MacCutchan

Пожалуйста, перестаньте публиковать не объяснения, а говорите нам, что вы хотите. Объясню в надлежащее подробно, что именно не работает.

Richard MacCutchan

Я подозреваю, что это обычная причина.

Member 13396059

я не могу открыть порт

[no name]

a.) вы также добавляете COM-порт в поле со списком, если он не обнаружен COMAvailable
б.) что я думаю запомнить, так это то, что для COM-портов >= 10 вам нужно использовать это имя файла: "\\.\COM10"

Member 13396059

я уже добавил com-порт в поле со списком, но он не работает

[no name]

То есть у вас проблема я думаю, вы ее добавляете в любом случае, даже она недоступна. Ваш код:

If COMAvailable(i) Then
Combo1.AddItem "COM" & i & ""
Else
Combo1.AddItem "COM" & i & ""
End If

Richard Deeming

Где находится переменная i в вашем Command1_Click метод? Единственное место, где он, по-видимому, объявлен, - это локальная переменная с form_load метод, и это не будет доступно вне этого метода.

Вы компилируете свой код без настройки Option Explicit дальше?

1 Ответов

Рейтинг:
0

Jochen Arndt

Если вам действительно нужно сделать это с помощью VB6, найдите в интернете решения, используя в качестве поискового термина что-то вроде "vb6 перечисляет последовательные порты".

Не пытайтесь сделать это сами. Есть много вещей, чтобы наблюдать, как именование портов с номерами выше 9 и что CreateFile сбой происходит не только для несуществующих портов, но и для существующих портов, которые фактически открыты (используются).

Единственный надежный метод помимо .NET SerialPort.GetPortNames метод заключается в использовании API установки Windows. Но я не знаю, использовал ли кто-то это с VB6.

[Правка: примечания к коду, опубликованному в качестве комментария]

Цитата:
каждый раз когда я запускаю программу когда я выбираю com порт который доступен также показывает что порт не открыт pls configure
Это происходит потому, что это всегда терпит неудачу из-за неправильного режима совместного использования:
hCOM = CreateFile("COM" & iPortNum & "", 0, FILE_SHARE_READ + FILE_SHARE_WRITE, _
sec, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
Для коммуникационных ресурсов, параметр dwCreationDisposition должен быть параметра open_existing, параметр dwShareMode должно быть равно нулю (эксклюзивный доступ), и hTemplateFile параметр должен иметь значение null. Можно указать доступ на чтение, запись или чтение/запись, а также открыть дескриптор для перекрывающегося ввода-вывода.

Чтобы указать номер COM-порта больше 9, используйте следующий синтаксис: "\\.\COM10". Этот синтаксис работает для всех номеров портов и оборудования, которое позволяет указывать номера COM-портов.
Так и должно быть:
hCOM = CreateFile("\\.\COM" & iPortNum, GENERIC_READ + GENERIC_WRITE, 0, _
ByVal 0&, OPEN_EXISTING, 0, 0&)
[/РЕДАКТИРОВАТЬ]