Никак не могу найти где собака зарыта в этой схеме, может у кого есть идеи, помогите пожалуйста
С интервалом в 50мс идет поочередная запись в Com порт Hex кода длиной 5 байт, кодов всего два, нужна поочередная запись этих Hex кодов и получение на них ответа.
Устройство подключенное к Com порту после получения одного Hex кода выдает на него ответ длиной также 5 байт, в зависимости от того какой был записан код в соответствующее положение становится компонент Commutator.
Так вот вся проблемма в том что периодически commutator не успевает переключится и на выходе 1 коммутатора я вижу кусок ответа на Hex код 1 и кусок ответа на Hex код 2.
Может быть можно заменить Commutator на другие компоненты ?
Как можно осуществить разделение выходного сигнала с Com порта без компонента коммутатор?
Или же возможно причина в таймере который в какойто момент подвисает и идет ошибка выбора потоков в коммутаторе, тогда как еще можно вести запись в Com порт с определенным интервалом времени без таймера ?
Написал много но уже с месяц не могу сам решить никак эту проблему, помогите пожалуйста.
code_20319.txt
Ссылка на компонент Commutator
http://hiasm.com/forum_serv.php?q=56&id=1728
Этот топик читают: Гость
|
Ответов: 65
Рейтинг: 1
|
|||
| карма: 1 |
| ||
| файлы: 1 | code_20319.txt [2.5KB] [179] |
|
Ответов: 200
Рейтинг: 5
|
|||
|
Если ответа всего два и они заранее известны, можно воспользоваться StrMask
|
|||
| карма: 0 |
| ||
| Голосовали: | Radio |
|
Ответов: 65
Рейтинг: 1
|
|||
|
Evgen818
Ответы всегда разные и заранее не известны, они только по длине всегда одинаковые длиной 5 байт. |
|||
| карма: 1 |
|
|
Ответов: 200
Рейтинг: 5
|
|||
|
Radio, тогда скажи где взять компонент Commutator
------------ Дoбавленo в 10.03: Попробуй вот так использовать чтение из порта |
|||
| карма: 0 |
| ||
| Голосовали: | Radio |
|
Ответов: 65
Рейтинг: 1
|
|||
|
тогда скажи где взять компонент Commutator
добавил ссылку в первом посте на Commutator Попробуй вот так использовать чтение из порта так не пойдет, мне нужно както разделять по разным направлениям ответы с com порта, т.е прошла запись Hex кода 1, сразу же идет на него ответ, этот ответ направить в одну сторону, пошла запись второго Hex когда, ответ на него должен пойти в другое направление. |
|||
| карма: 1 |
|
|
Ответов: 200
Рейтинг: 5
|
|||
| карма: 0 |
| ||
| файлы: 1 | code_20320.txt [1.8KB] [198] | ||
| Голосовали: | Radio |
|
Ответов: 65
Рейтинг: 1
|
|||
|
Evgen818
Спасибо за возможный вариант, устройство к сожалению дома а я на работе, вечером буду пробовать. |
|||
| карма: 1 |
|
|
Ответов: 200
Рейтинг: 5
|
|||
|
Отпишись как проверишь
|
|||
| карма: 0 |
|
|
Ответов: 65
Рейтинг: 1
|
|||
|
Отпишись как проверишь
Обязательно ------------ Дoбавленo в 22.09: работает так же как и с элементом коммутатор, т.е периодически смешиваются выходные каналы вот в таком виде: изменено на первоначальное чтение из порта, но в итоге ситуация первоначальная. Hужно как-то заставить IndextoChanel не переключать выходные каналы пока полностью не будет считана строка для Hex кода 1 или Hex кода 2 и пока не пройдет чтение ответа до конца 5 байт не производить запись следующего запроса, а сейчас получается если за указанное время чтение не успело пройти по каким либо причинам, что-то где-то подвисло то все равно канал переключается на второй и я уже на выходе вижу смесь куска ответа на оба кода. |
|||
| карма: 1 |
|
|
Ответов: 3851
Рейтинг: 159
|
|||
|
1. отослать данные в порт, 2. дождаться ответа, 3. переключить канал вывода, 4. дождаться начала периода, 5. перейти к п.1. |
|||
| карма: 0 |
| ||
| Голосовали: | Radio |
|
Ответов: 65
Рейтинг: 1
|
|||
|
В общем итоге проблема в следующем, как в схеме в этом посте добиться следующего:
При записи в Com порт первого Hex кода нужно полностью дождаться на него ответ т.е считать все 5 байт, только после этого посылать на запись второй Hex код. ------------ Дoбавленo в 22.27: Andrey Вот я примерно к тому же пришел, но как реализовать это, не представляю. |
|||
| карма: 1 |
|
|
Ответов: 241
Рейтинг: 45
|
|||
|
Основная задача компонента ComAsync - это работа с портом в асинхронном режиме. Если не используется чтение данных по событию прихода этих самых данных, почему не использовать стандартный компонент COM, включенный в дистрибутив? Глядишь, и советов было бы больше
|
|||
| карма: 0 |
|
|
Ответов: 65
Рейтинг: 1
|
|||
|
Wolfik
Да вот на дополнительные точки слишком скуп стандартный com, а они так необходимы. Вы как разработчик ComAsync не могли бы показать на примере как производить простую запись/чтение в асинхронном режиме ? |
|||
| карма: 1 |
|
|
Ответов: 200
Рейтинг: 5
|
|||
|
Radio, на сколько мне известно, порт выдает информацию по байтно, попробуй поставить на выход ком порта связку из счетчика и условия и проверяй количество принятых байт по условию.
К сожалению это только теория так как я немогу проверить, нет такого устройства. |
|||
| карма: 0 |
|
|
Ответов: 14
Рейтинг: 2
|
|||
|
Radio, попробуй так.
1. Читаеш порт постоянноcode_20359.txt 2.Останавливаеш только на время передачи 3.Oбрати внимание на Delay=50 , моя железка нормально заработала только при 800 |
|||
| карма: 0 |
| ||
| файлы: 1 | code_20359.txt [302B] [113] |
15



Поиск
Друзья
Администрация