178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
1 | ||||||
Как организовать непрерывный опрос Com-порта?30.09.2016, 12:47. Показов 5858. Ответов 39
Метки нет (Все метки)
Всем здравствуйте.
Приведенный ниже код работает так: кликнули по кнопке - отправили в порт набор байт, кликнули по другой - получили ответ. Нужно чтобы каждую секунду запрос в порт посылался, и ответ возвращался с отображением на форме. Пример взят из книги Архангельского (Delphi). На всякий случай прикрепляю проект.
0
|
30.09.2016, 12:47 | |
Ответы с готовыми решениями:
39
ATtiny13, непрерывный опрос АЦП, прерывание Как организовать непрерывный обмен между сокетами без переподключения? Как настроить опрос COM-порта по прерыванию int 14h? Как организовать цикличный опрос устройства |
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
30.09.2016, 16:49 [ТС] | 3 | |||||
Rius, нашёл пример с классом и потоками:
Код передрал со статьи один к одному. Что не так?
0
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|||||||||||
30.09.2016, 17:07 [ТС] | 5 | ||||||||||
Rius, понял сработало
А приведенный пример - это асинхронная работа с портом или нет? Добавлено через 3 минуты наверное API вообще не стоит трогать раз такая халява есть. или здесь ещё что-то всплывёт непонятное? а если у меня возвращаемый массив сотни байт и за 1 раз весь не вернётся, кто это обрабатывает класс или я?
0
|
30.09.2016, 17:19 | 6 |
Сообщение было отмечено jkrnd как решение
Решение
Я бы сказал, что это на основе событий (DataReceived). Может быть оно и асинхронное в основе своей.
Не такая уж и халява. Класс не всегда удобен. Если сотни байт, событие может вылететь... как повезёт. И вообще через событие получается криво, IMHO. Посмотрите другие варианты https://www.cyberforum.ru/blog... g4357.html.
1
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 17:29 [ТС] | 7 |
Rius, а на VB примера нет?
0
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 18:24 [ТС] | 9 |
Rius, у меня VS2010, пересобрал ваш проект SerialStreamTest (архив прилагается)
формы нет. Перед тем как конвертировать хотелось бы попробовать. Хотелось бы видеть нечто похожее на пример в посте#1. Как всё это запустить?
0
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 19:12 [ТС] | 11 |
Rius, а какой применяете? я собрал проект на основе контрола SerialPort, похоже это тот же класс SerialPort. Я там тоже использовал DataReceived. У меня за 8-10 часов непрерывной работы (опрос текущих данных) на несколько минут вместо данных возвращаются нули, затем всё само собой восстанавливается. Прибор (счётчик газа) в это время фиксирует нештатную ситуацию. а это штраф. Я не знаю почему это происходит, но это никуда не годится. Поэтому и взялся за API.
Не могли бы Вы выложить проект WindowsForm стабильно работающий: Отправляем в порт массив байт - получаем массив байт.
0
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 19:27 [ТС] | 13 |
и у меня нет. Я RxD замкнул на TxD - что отправил, то и получил.
там куча ссылок, нельзя ли поконкретнее, а лучше пересобрать под VS2010 и с выводом работы на форму.
0
|
1047 / 898 / 211
Регистрация: 29.09.2015
Сообщений: 1,004
|
|
30.09.2016, 19:48 | 14 |
jkrnd, вопрос. Сколько байт должен возвращать порт за цикл?
1
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 21:03 [ТС] | 16 |
37 байт (это ответ на запрос текущих данных), другие запросы чуть больше но не намного.
Добавлено через 1 минуту это всё вместе, включая два байта контрольной суммы
0
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 21:11 [ТС] | 17 |
Sklifosofsky, на всякий случай выложу проект. он реально работает, но как я уже говорил, что то в моей программе влияет на работу прибора и он периодически возвращает вместо реальных данных нули. А газ то расходуется. Это считается нештатной ситуацией, фиксируется внутри прибора и инфа передаётся в Межрегионгаз.
0
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 21:14 [ТС] | 18 |
протокол
0
|
01.10.2016, 11:04 | 19 |
У вас по одному таймеру посылается запрос, по другому читается ответ. Эти события вполне могут рассинхронизироваться.
Если modbus в приборе работает совместно с аппаратным управлением потоком, то рассинхронизация чтения и записи может как-то повлиять. Запись и чтение должны происходить в одной функции последовательно.
1
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
01.10.2016, 13:08 [ТС] | 20 |
Rius, то есть работа моей программы повлияла на правильность работы прибора. Я немного в этом сомневался, но факты упрямая вещь, да и Вы подтвердили. В документации к прибору есть целый раздел про modbus.
Вопрос: контрол SerialPort здесь не причём? Или это и его глюки.
0
|
01.10.2016, 13:08 | |
01.10.2016, 13:08 | |
Помогаю со студенческими работами здесь
20
Как организовать опрос матричной клавиатуры + DS18B20? Опрос COM-порта Опрос LPT порта Опрос состояния порта принтера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |