Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
6 / 5 / 1
Регистрация: 10.07.2021
Сообщений: 80

Прием и передача данных по Модбас

05.02.2022, 20:44. Показов 1845. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех, друзья!
Прошу помощи разобраться. Я посылаю команду по Модбас на включение прибора, затем я отправляю запрос чтобы получить результат измерения, но получаю ответ на первую команду.
Что не так в моем коде?

C++
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
case startMeasurementColdWindingResistance: // сообщение "была нажата кнопка "начать измерения"
            UINT8 data[4] = { 0 }; //буфер для запроса
            uint16_t  crc; //контрольная сумма
            DWORD dwSize = sizeof(data);   // размер буфера
            DWORD dwBytesWritten;    // количество переданных байт
            
            UINT8 sReceivedChar[14] = { 0 }; //буфер для ответа
            DWORD dwSizex = sizeof(sReceivedChar); // размер буфера
            DWORD iSize; // количество принятых байт
 
                        
                /*формируем и отправляем команду включения в МИКО-9*/
                data[0] = 0x55; //адрес устройства
                data[1] = 0x41; //код команды
                crc = CRC16(&data[0], 2); //считаем сумму crc
                data[2] = (crc >> 8) & 0xFF; //старший байт crc
                data[3] = crc & 0xFF; //младший байт crc
                WriteFile(hSerial, data, dwSize, &dwBytesWritten, NULL); // пишем в порт
                
                /*формируем и отправляем команду Получение параметров измерения*/
                Sleep(3000); // ждать ... секунд
                data[0] = 0x55; //адрес устройства
                data[1] = 0x44; //код команды
                crc = CRC16(&data[0], 2); //считаем сумму crc
                data[2] = (crc >> 8) & 0xFF; //старший байт crc
                data[3] = crc & 0xFF; //младший байт crc
                WriteFile(hSerial, data, dwSize, &dwBytesWritten, NULL); // пишем в порт
                
            
            
            if (ReadFile(hSerial, sReceivedChar, dwSizex, &iSize, NULL)) {  // получаем 1 пакет (читаем из порта)
                
                TCHAR buffer[100];
                swprintf(buffer, 100, L"%x, %x, %x, %x, %x, %x, %x, %x, %x, %x, %x, %x", 
                    sReceivedChar[0], sReceivedChar[1], 
                    sReceivedChar[2], sReceivedChar[3], 
                    sReceivedChar[4], sReceivedChar[5], // сопротивление
                    sReceivedChar[6], sReceivedChar[7], // сопротивление
                    sReceivedChar[8], sReceivedChar[9], 
                    sReceivedChar[10], sReceivedChar[11]);
                
                SetWindowText(WindingUV, (LPCWSTR)buffer);
        
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2022, 20:44
Ответы с готовыми решениями:

RS-232. Передача и прием данных
Подскажите пожалуйста. не опытному программисту в чем может быть проблема с этим кодом: вставляю в форму не сохраняется((( буду очень...

(tcp) прием-передача данных
Представим, что клиент и сервер случайным образом отправляют друг другу данные и принимают их. Если сокет в режиме приема, то пока не...

COM-USB приём, передача данных
Добрый день! Такая проблема: данные с микроконтроллера ATMEGA 128 идут по RS232C после чего попадают в переходник COM-USB, хотелось бы...

1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
10.02.2022, 16:55
ну, а почему ты не читаешь ответ на первую команду после первой команды?
Все ответы в порт буферизуются, ты там не сигнал на проводах начинаешь измерять во время вызова ReadFile.
Вообще, по-хорошему, ReadFile должен крутиться в отдельном потоке всегда, реагировать на старты и стопы, парсить посылки и кидать распаршенные в очередь.
Но раз уж ты не хочешь настолько усложнять, то хотя бы читай те ответы, которые ожидаются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2022, 16:55
Помогаю со студенческими работами здесь

Одновременная передача и прием данных
Здравствуйте! При попытки передать и получить данные одновременно, возникает проблема, т.е. при получении часть данных теряется string s...

Не идёт приём и передача данных по 3G модему
во многом в компе не разбираюсь (да это мне и не надо). просто хочу норм. пользоваться им, но всё время что ниб. да не работает......сейчас...

прием-передача данных на порт tcp40000
как передать запрос службе, которая стоит на другом компе? Запрос состоит из пути к каталогу, типа (каталог или файл) и имени каталог/файл....

передача и приём данных по SPI на STM32
Здравствуйте, уважаемые форумчане. Пытаюсь наладить общение STM32f723IE, что на плате DISCOVERY и STM32F407VG на дешевой китайской...

Передача и приём данных через COM-порт
Добрый день! Передо мной поставили задачу написать программу для работы с адаптером OBD2 Elm327 через виртуальный COM-порт. Пробую пока...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru