Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/104: Рейтинг темы: голосов - 104, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 7

Чтение данных через COM порт

21.03.2012, 22:33. Показов 20488. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется устройство, панель кнопок, связанная с компом через RS-232 т.е. COM порт.
Хочу сделать прогу, которая отображала бы нажатие кнопок на этой панели кнопок, т.е. например, нажал Клавиша_1 - изменились бы данные в Label1
Устройство работает на определенной скорости - 115200 бод, 8 бит, 1стоп бит, без контроля четности.

Это устройство постоянно, с интервалом 100 мс, выдает 2 байта информации.
Первый байт (байт посылки)
B7 - 1b
B6 - Клавиша_1
B5 - Клавиша_2
B4 - Клавиша_3
B3 - Клавиша_4
B2 - Клавиша_5
B1 - Клавиша_6
B0 - Клавиша_7

второй байт
B7 - 0b
B6 - N/A
B5 - Количество неустановленных битов в первом байте(B6-B0)
B4 - Количество неустановленных битов в первом байте(B6-B0)
B3 - Количество неустановленных битов в первом байте(B6-B0)
B2 - Количество установленных битов в первом байте(B6-B0)
B1 - Количество установленных битов в первом байте(B6-B0)
B0 - Количество установленных битов в первом байте(B6-B0)

Установленный старший бит указывает, что это первый байт посылки. Остальные биты в первом байте принимают значения 0b - если соответствующая кнопка нажата, или 1b - если кнопка не нажата.

ТО что нужно юзать MScomm понятно, но как работать с 2 байтами, ведь MScomm работает со строковыми значениями.
У кого нить есть похожие наработки или идеи от чего оттолкнуться?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2012, 22:33
Ответы с готовыми решениями:

Можно ли через VB организовать связь (через паралельный порт) с отдельным устройством?
Вот хотелось бы узнать можно ли через VB организовать связь (через паралельный порт) с отделным устройством кто знает подскажите пожалуйста...

Чтение/передача данных через USB порт
Задача такова: есть внешний микроконтроллер (Arduino) который связан с ПК ч/з USB (некоторый COM-порт) и вот нужно принимать инфу или её...

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

8
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
21.03.2012, 23:56
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

ТО что нужно юзать MScomm понятно
Работа с СОМ портом в VB6 с помощью API функций

1. Открытие порта
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, n byte.
    BaudRate As Long        'Speed of data exchangeб, bps
    fBitFields As Long      'Bit field for setting of port
    wReserved As Integer    'Reserved
    XonLim As Integer       'minimum number of bytes in the buffer to send Xon
    XoffLim  = False Then
            MsgBox ("Error Setting port:" & GetLastError)
        End If
        MsgBox ("The port is opened")
       
    End If
    
End Function
2. Закрытие порта
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
'Function of closing the port
Function Com_Close() As Boolean
    Dim Retval As Long
    
    Retval = CloseHandle(Com_Handle)
    If Retval = 0 Then
        MsgBox ("Error while closing the port")
    Else
        MsgBox ("Port closed")
    End If
End Function
3. Запись в порт
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Boolean
 
Declare Function GetLastError Lib "kernel32" () As Long
 
'Recording function to the port
Function Com_Write(n As Long)
    Dim Len_Buf As Long
    Dim Retval As Boolean
  
    Retval = WriteFile(Com_Handle, Buf(0), n, Len_Buf, 0)
    If Retval = False Then
        MsgBox ("Error Write port:" & GetLastError)
    End If
   
End Function
вызов из формы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'Write port
Sub Command4_Click()
    Dim s As String
    Dim n As Long
    Dim a As Integer
    Dim Retval As Long
    
    s = Text2.Text
    n = Len(s)
    For a = 1 To n
        Buf(a - 1) = Asc(Mid(s, a, 1))
    Next a
    Com_Write (n)
End Sub
4. Чтение данных из порта
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Boolean
 
Declare Function GetLastError Lib "kernel32" () As Long
 
Global Com_Handle As Long 'Descriptor of port
Global Buf(1024) As Byte 'The buffer of port
Global Com_Byte_Read As Long 'количество принятых байт
 
 
'function of reading from the port
Function Com_Read()
    Dim Retval As Boolean
    
    Retval = ReadFile(Com_Handle, Buf(0), 1024, Com_Byte_Read, 0)
    If Retval = False Then
        MsgBox ("Error Read port:" & GetLastError)
    End If
  
End Function
Вызов из формы (ваши байты в исходном виде и перевод):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
'Read port
Private Sub Command3_Click()
   Dim s As String
    Dim a As Long
    
   Com_Read
   For a = 1 To Com_Byte_Read
        s = s & Chr(Buf(a - 1))
   Next a
   Text1.Text = s
End Sub
4
0 / 0 / 0
Регистрация: 10.12.2019
Сообщений: 3
10.12.2019, 16:46
Всем привет!
Прошу прощения, что поднимаю старую тему, но в ответе в разделе "Открытие порта" часть кода отсутствует.
Сам не могу дописать, так как только учусь.
Может у кого остался оригинал этого поста с функцией целиком?
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
10.12.2019, 17:13
А что не получается, вижу что функция у raxp, объявленна криво может в этом дело ? )

Добавлено через 8 минут
любая процедура в начале названия имеет либо sub либо function
в вашем случае пропущена строчка, конечно легко можно догадаться что там должно быть, )) автора можно не реанимировать
0
0 / 0 / 0
Регистрация: 10.12.2019
Сообщений: 3
10.12.2019, 17:13
Так нет куска кода между
Цитата Сообщение от raxp Посмотреть сообщение
lpSecurityAttributes As Long
и этим
Цитата Сообщение от raxp Посмотреть сообщение
n byte.
Также отсутствует кусок кода между
Цитата Сообщение от raxp Посмотреть сообщение
XoffLim
и этим
Цитата Сообщение от raxp Посмотреть сообщение
= False Then
MsgBox ("Error
Также может еще чего нет.
Функцию я объявил стандартно
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Цитата Сообщение от fever brain Посмотреть сообщение
конечно легко можно догадаться что там должно быть
Кому то может и легко, а мне тяжело, пока еще обучаюсь по примерам
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
10.12.2019, 17:25
я так понимаю некоторой из пропущенных переменных должно присвоится значение из CreateFile тоесть если в аргументах есть префикс byRef значит она присвояемая

пример xxx(byVal a, byref b, byVal c)

в модуле файла все эти переменные в аргументах тоесть: a, b, c не будут видны, зато переменная b может передовать свои данные в других процедурах если ее тип будет корректен тоесть числовой должен быть равен числовому и т.д
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,528
Записей в блоге: 22
10.12.2019, 17:54
Нет декларации DCB. Почитайте Дэна Эпплмана "Win32 API и Visual Basic_Для профессионалов". На прилагаемом CD есть пример.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
10.12.2019, 17:59
этих динозавров откапывать не потребуется., гдето есть на этом форуме нормальная реализация то что написанно в этой теме.. здесь по-просту перепост
0
0 / 0 / 0
Регистрация: 10.12.2019
Сообщений: 3
10.12.2019, 18:18
Спасибо! Нашел ответ здесь в приложении 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2019, 18:18
Помогаю со студенческими работами здесь

Что чтение данных через COM-порт делает с 2байтными значениями?
Я принимаю через СОМ-порт 8-байтные слова с определенного устройства. Делается это при помощи драйвера этого устройства, который пишет эти...

Подключение/чтение/отправка данных на сторонние устройства через usb COM порт
сабж: как подключить к андроид устройству сторонние девайсы по COM порту и впоследствии отправлять/читать данные с них. Желательно...

Чтение информации с весов через COM порт
Здравствуйте. Недавно начал изучать C++ и стоит такая задача. У меня есть программка, которая должна считывать вес через COM порт и...

Передача данных через Com порт
Добрый день форумчане! Мне с помощью программы "free-serial-port-monitor" удалось считал данные, которыми через com порт обменивались...

Передача данных через ИК порт
Нужно организовать систему передачи данных через инфракрасный на ассемблере. ИК должен подключаться к ком порту. Подскажите пожалуйста,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru