Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27

Как правильно настроить СОМ-порт?

14.06.2024, 20:07. Показов 1912. Ответов 22

Студворк — интернет-сервис помощи студентам
В теме:
Приложение VBA Excel: обращение к Slave-устройству по протоколу Modbus RTU через порт RS485
ТС задал интересный вопрос:
"Прошу оказать консультативную помощь в создании приложения Master-устройства для общения со Slave-устройством по протоколу Madbus RTU, через порт RS485, с помощью Vba Excel."
Это показалось интересным, т.к. для VBA не требуется установка среды разработки и есть возможность сразу заполнять таблицу Excel.
В связи с тем, что VBA по сути урезанный VB, решил сделать с использованием функций Win 32 API.
При подключении ковертера USB-RS232, порт открывается и закрывается, но при попытке передать что-либо в него, появляется ошибка #31: "Устройство, подключенное к системе, не работает." При повторной отправке программно успешно, но данные не передаются. Подозреваю, дело в не правильном заполнении структуры DCB.
В прикреплённом файле пока не всё благополучно. Пока не пойму в чём ошибка.
Вложения
Тип файла: zip Книга1.zip (27.5 Кб, 17 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2024, 20:07
Ответы с готовыми решениями:

Как подать АТ команду в созданый сом порт
как подать АТ команду в созданый сом порт, с помощю макроса?

Как отправить запрос и получить правильно СОМ-порт
Всем доброго времени суток... Начал разбираться с COM портом, и возникла проблема. На ком порту висит железка. Мы ей запрос, она ответ......

Не могу настроить сканер штрих-кодов на СОМ-порт (+)
Добрый день! Помогите, пожалуйста, одной проблеме. Не могу настроить сканер штрих-кодов IDZOR 2200 2D (проводной) / ID220-2D/СОМ (RS-232)...

22
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.06.2024, 15:38
Студворк — интернет-сервис помощи студентам
Вот так можно поставить трамплин на функцию BuildCommDCB, может конечно это и не совсем нужно для данной функции, но для примера. Кстати если декларацию BuildCommDCB переделать на w-версию, то в трамплинную функцию первый аргумент приходит не правильный, хоть что делай, меняй byval/byref/string/long, хотя по логике наоборот с ним не должно быть проблемм, происходит просто какая-то дичь с первым параметром фигня все нормально и с w-функциями, это у меня где-то ошибка была
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Option Explicit
Type DCB
        DCBlength As Long
        BaudRate As Long
        fBinary As Long
        fParity As Long
        fOutxCtsFlow As Long
        fOutxDsrFlow As Long
        fDtrControl As Long
        fDsrSensitivity As Long
        fTXContinueOnXoff As Long
        fOutX As Long
        fInX As Long
        fErrorChar As Long
        fNull As Long
        fRtsControl As Long
        fAbortOnError As Long
        fDummy2 As Long
        wReserved As Integer
        XonLim As Integer
        XoffLim As Integer
        ByteSize As Byte
        Parity As Byte
        StopBits As Byte
        XonChar As Byte
        XoffChar As Byte
        ErrorChar As Byte
        EofChar As Byte
        EvtChar As Byte
End Type
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function GetModuleHandleW Lib "kernel32" (ByVal lpModuleName As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesRead As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long
 
Private lpLibFnc As Long, baOrig(5) As Byte
 
Sub TestHookBuildCommВСB()
    Dim Ret&, Comsettings As String, BarDCB As DCB
    
    Comsettings = "9600,n,8,1"
    InstallTramp "kernel32", "BuildCommDCBA", AddressOf Hooked_BuildCommDCB
    
    Ret = BuildCommDCB(Comsettings, BarDCB)
    Debug.Print BarDCB.BaudRate
End Sub
 
Private Sub InstallTramp(sLib$, sFnc$, ByVal lpVbFnc As LongPtr)
    Dim baTrmp(5) As Byte
    lpLibFnc = GetProcAddress(GetModuleHandleW(StrPtr(sLib)), sFnc) ' Get the address of the "DialogBoxParamA" function
    If lpLibFnc Then
        ReadProcessMemory -1, lpLibFnc, baOrig(0), 6, 0             ' Save the first 6 bytes (the size of the trampoline) to be restored later
        baTrmp(0) = &H68                                            ' push
        CopyMemory baTrmp(1), lpVbFnc, 4
        baTrmp(5) = &HC3                                            ' ret
        WriteProcessMemory -1, lpLibFnc, baTrmp(0), 6, 0            ' Now the InputBox function will call our custom "HookedDialogBoxParamA" function instead
    End If
End Sub
 
Private Function Hooked_BuildCommDCB(ByVal pSettings As Long, BarDCB As DCB) As Long
    Dim Comsettings As String
    WriteProcessMemory -1, lpLibFnc, baOrig(0), 6, 0    'убираем трамплин
    
    CopyMemory ByVal VarPtr(Comsettings), pSettings, 4
    Debug.Print "Com settings: "; StrConv(Comsettings, vbUnicode)
    CopyMemory ByVal VarPtr(Comsettings), 0&, 4
    BarDCB.BaudRate = 123
End Function
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
20.06.2024, 17:40  [ТС]
Подключил вместо конвертера модуль Arduino и всё заработало.
По всей видимости, проблема в конвертере или драйвере для него.
0
1522 / 537 / 79
Регистрация: 22.09.2023
Сообщений: 1,721
20.06.2024, 22:43
Цитата Сообщение от Argus19 Посмотреть сообщение
В чём и дело.
Ну так не заполняйте пустую структуру. Сначала вычитайте в нее текущие настройки, потом меняйте нужные и пишите обратно измененную структуру.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2024, 22:43

Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт)
Здравствуйте! Скажите пожалуйста есть пример где используют Async Free (СОМ-порт) или Async Pro (СОМ-порт)? почему то не могу найти и...

COM-порт, как правильно настроить
Доброго времени суток. Прошу помощи в решении следующей проблемы: на COM порте висит железка, которая постоянно посылает данные в порт....

Как распараллелить Сом порт?
Не нашел в какой раздел написать. Вопрос вот какой, есть живой МК Tibbo 1206 http://www.tibbo.ru/products/item/6/20/ , у него 4 Сом порта....

СОМ порт - как передать код
Как в с++ передать код на com порт? К примеру на (* basic по моему) out(%.....), 4 на порт (%.....) выводим (out) число (4) в десятичном,...

Как программно разблокировать зависший СОМ порт?
есть ком порт (СОМ1, не виртуальный), на котором принимаются данные и вдруг данные не поступают, программа (не моя, редактировать не могу)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru