Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23

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

14.06.2024, 20:07. Показов 1585. Ответов 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
1393 / 850 / 92
Регистрация: 08.02.2017
Сообщений: 3,628
Записей в блоге: 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
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
20.06.2024, 17:40  [ТС]
Подключил вместо конвертера модуль Arduino и всё заработало.
По всей видимости, проблема в конвертере или драйвере для него.
0
1487 / 504 / 74
Регистрация: 22.09.2023
Сообщений: 1,582
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru