Всем привет!
Есть железка работающая через COM порт, обмен данными происходит в режиме запрос ответ, так вот при отправке какой-либо команды, ответ приходит такой же длинны т.е. отправил команду 6 байт и получил ответ 6 байт.
Но есть исключение...есть команда 6 байт...но в ответ на нее должно прийти 7 байт.
В атаче схема, вариант 1 - работает, но возникает вопрос "Правильно ли так делать?"
Вариант 2 - работает не правильно (сначало приходит 6 байт, затем еще 1 байт отдельно)
Как еще можно реализовать схему?
code_30128.txt
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
| ||
файлы: 1 | code_30128.txt [1.4KB] [205] |
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Gunnman писал(а): 1 - работает, но возникает вопросДля неасинхронного порта, который у нас -- да, так можно делать, но нужно поставить еще условие -- пропускать на чтение только, если нет 0. ------------ Дoбавленo в 17.52: Как еще можно реализовать схему? Постоянно читать нужное количество байтов в другом потоке (асинхронное чтение) и не пропускать на выход пустую строку, по ней же и синхронизироваться. И не забыть поставить накопитель потока Как-тот так -- пример побайтового чтения
|
|||
карма: 22 |
|
Ответов: 655
Рейтинг: 18
|
|||
nesco, Спасибо, буду разбираться.
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
карма: 25 |
| ||
файлы: 1 | code_30129.txt [343B] [126] |
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Tad, а как же вот это
Gunnman писал(а): Но есть исключение...есть команда 6 байт...но в ответ на нее должно прийти 7 байт.В твоей схеме примется только 6 байт, 7-й байт уничтожится очисткой буфера |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco, какой длины прийдет ответ столько и считает. И при чем здесь длинна команды ? Не надо путать буфер передачи с буфером приема.
|
|||
карма: 25 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Tad писал(а): какой длины прийдет ответ столько и считаетЭто ты откуда такую чушь взял У нас ни в одном компоненте COM не реализована функция определения действительной длины принятого буфера, это нормально можно реализовать только в асинхронном режиме. А в твоей схеме тупо длину переданной команды с onWrite, ты отправляешь на чтение этого же количества байт через компонент If_Else на doRead, а остальное тупо стирашь по doRXClear. Или для тебя новость, что запросив 6-ть байт на чтение в одной итерации, ты и получишь только эти 6-ть байт Откуда ты взял, что запросив 6-ть байт, ты получишь весь буфер чтения ------------ Дoбавленo в 20.43: Tad, если тебе действительно интересно, как осуществляется асинхронное чтение всего буфера чтения, то завтра тебе могу выложить экспериментальный компонент асинхронного обмена по COM-порту, он у меня на работе просто. Он пока находится в стадии тестирования, но можете потестировать его, если хотите, может еще кто потестирует. Но, увы, он не работает под FPC из-за наличия мультипоточности |
|||
карма: 22 |
|
Ответов: 655
Рейтинг: 18
|
|||
Очень ждемс экспериментальный компонент от nesco, !!
|
|||
карма: 0 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Gunnman писал(а): Очень ждемс экспериментальный компонент от nesco, !!Предупреждение сразу -- перед работой с этим компонентом желательно ознакомиться с ограничениями при работе с потоками. Это чтобы потом вопросов не было -- а почему он у меня вылетает |
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2025-01-09 04:26:01 |
|||
карма: 0 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
host-109-235-189-9.bisv.r писал(а): Это есть в F1?Да, есть, по элементу Thread |
|||
карма: 22 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Вот, как и обещал -- асинхронный COM-порт, новая редакция. Работает под FPC Из-под FPC категорически не рекомендуется использовать асинхронный выход onRead совместно с интерфейсными элементами, этот выход служит для буферизированного чтения.
Для проверки примера можно использовать виртуальные COM-порты |
|||
карма: 22 |
| ||
файлы: 1 | comex_001.zip [5.7KB] [289] |
Ответов: 655
Рейтинг: 18
|
|||
Ок бум тестить! Спасибо!
|
|||
карма: 0 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Ну и че, кто-нибудь потестил
А то скачать -- скачали (уже 11 чел на текущий момент), а как работает -- молчат. Или до кучи качали, а шобы було |
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2025-01-09 04:26:01 |
|||
карма: 0 |
|