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

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

14.06.2024, 20:07. Показов 1449. Ответов 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
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
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
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
20.06.2024, 17:40  [ТС]
Подключил вместо конвертера модуль Arduino и всё заработало.
По всей видимости, проблема в конвертере или драйвере для него.
0
1186 / 468 / 68
Регистрация: 22.09.2023
Сообщений: 1,409
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru