|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.05.2017, 20:40 | #1 |
Регистрация: 13.05.2017
Сообщений: 3
|
Циклическое чтение информации через RS232 с использованием goto - Qt&C++, COM PORT
Всем доброго времени суток!
Перейду сразу к делу, есть два фотоприемника (ФП), которые считывают данные при засветки их лазером. Оба ФП подключены к блоку управления, тот в свою очередь подключается к ПК по Com порту. Задача импульсно в течении определенного времени считывать данные с ФП и передавать через Com порт и записывать в массив данных. Сам процесс считывания уже реализован, но по всей видимости неверно. Есть так же уже реализованное ПО для той же самой задачи но на Cи, нужно переписать функцию для С++ либо написать свою. Я попробовал написать свою и столкнулся с проблемой использования так называемых "меток" и оператора goto. Зачем, собственно, использовать те самые метки. Отвечаю - обмен данными через ком порт идет следующим образом: с ПК отсылается байт из 9 битов, в ответ приходит такой же байт но с измененными (если это нужно) данными. А оператор goto нужен для того чтобы постоянно отправлять байты, до тех пор пока блок не откликнется прислав в ответном байте измененный бит (8 бит), это даст нам понять что он готов передать данные, потом отправляем ему пустой байт по определенному адресу (0xdb) и в ответ прилетает такой же байт, но с нужными данными, затем работа устройства повторяется указанное пользователем время и количество замера данных. Основная проблема в том, что я, как новичек, не совсем понимаю как работать с goto, а обычный цикл здесь не воспринимается устройством (мы зависим от его быстродействия), ну и в уже работающей программе на Си как раз используются эти "метки". Прошу помощи в выявлении ошибок в коде, на основании логов (во вложенных файлах - логи обмена данными по RS232 во время проведения эксперимента) Write и Read логов записанных в порт и считанных с него соответственно. А так же прилагаю код правильной и рабочей реализации этой задачи на Си и неправильно работающий код на С++. Рабочий код на Си(вложением потому что не хватило символов): Код функции эксперимента на С.txt Не рабочий код на плюсах с указанием до какого момента работает, а с какой строки уже нет(см. комментарий): Код:
Функция на C++.txt Логи: Логи write C++ и С.docx Логи read C++ и С.docx Последний раз редактировалось Krounis; 13.05.2017 в 20:48. |
13.05.2017, 21:07 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Все ваши издевательства с метками заменяются на цикл do{} while() с выкидыванием меток и гоуту.
|
13.05.2017, 21:17 | #3 |
Регистрация: 13.05.2017
Сообщений: 3
|
можно слегка подробнее? где именно применять этот цикл?
Забыл прикрепить протокол обмена:http://hdd.tomsk.ru/file/llnfpzoz |
14.05.2017, 05:41 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Вот этот код:
Код:
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Com port (rs232) асинхронные чтение. Использование таймаута во время ожидания события прихода данных из порта | Mefil | Win Api | 0 | 20.02.2017 08:41 |
Нужно написать программу на циклическое открытие внешней программы и завершение через некоторое время | Megawolk | Помощь студентам | 7 | 30.04.2015 17:48 |
Com port (RS232) | Pavlov_yu | C++ Builder | 14 | 18.06.2014 19:12 |
c# + банальное чтение com port | alexandrusankov | C# (си шарп) | 28 | 05.12.2013 08:47 |
com port чтение запись delphi | SonicBob | Помощь студентам | 5 | 15.11.2011 10:20 |