Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизЛогика программы. Com-порт. Найти похожие ветки
← →
Unknowing © (2006-10-29 11:28) [0]Доброго времени суток! Вопрос такой: есть устройство подключенное с СОМ-порту ком-а. Утройство передаёт бинарное сообщение типа
ID_length_[message_struct] с частотой 10 Гц. Как правильно составить логику опроса порта для вывода информации на экран и одновременно в файл(второй поток) без потери данных...Конкретизируя, как правильно создать буфер и как с ним работать? :)
← →
Anatoly Podgoretsky © (2006-10-29 11:37) [1]> Ответ на сообщение [0]
С такой частотой сложно потерять и на IBM PC
Буфер например можно создать с помощью GetMem или выделить его статически на
этапе компиляции, что проще и надежнее
← →
Unknowing © (2006-10-29 11:43) [2]
> Anatoly Podgoretsky © (29.10.06 11:37) [1]
А по какому событию его (буфер) разбирать в голове не укладывается... По событию прихода байта я его сразу передаю в буфер... А дальше что?! Ступор...
← →
Ketmar © (2006-10-29 12:09) [3]а дальше -- формат пакета известен? вот и всё. собрал все байты, да отдал разборщику. можно в цикле байты собирать, можно FSA сделать.
← →
Unknowing © (2006-10-29 12:12) [4]
> Ketmar © (29.10.06 12:09) [3]
> собрал все байты, да отдал разборщику.
Вот тут-то я и торможу! Как быть с частотой приема и когда всё это разбощику передавать... Ну, не пойму!!! А Fsa что такое?
← →
Ketmar © (2006-10-29 12:16) [5]как приходят -- так и принимать. кто лучше тебя знает, как дивайс передаёт?
а передавать -- когда весь пакет приехал. а чтобы это определить, как раз можно использовать FSA.
FSA -- это "finite state automate".
← →
Ketmar © (2006-10-29 12:17) [6]оно же называется иногда FSM -- "finite state machine".
← →
Джо © (2006-10-29 12:21) [7]
> FSA -- это "finite state automate".
automata :)
← →
Unknowing © (2006-10-29 12:21) [8]
> Ketmar © (29.10.06 12:16) [5]
Конечный автомат...С этим ясно. Т.е. в процедуре приема накапливать байты сообщения от ID до конца сообщения и сразу передать в буфер? Если у Вас есть кусок рабочего кода буду весьма признателен! ;) (прошу прощения за нескромность, но не программисту сложновато сегодня)
← →
Ketmar © (2006-10-29 12:25) [9]>[7] Джо(c) 29-Oct-2006, 12:21
>automata :)
гугль находит и моё написание. %-)
>[8] Unknowing(c) 29-Oct-2006, 12:21
>накапливать байты сообщения от ID до конца сообщения и
>сразу передать в буфер?
угу. можно и так. %-)
>Если у Вас есть кусок рабочего кода буду весьма признателен!
неа. нету. чукча не писатель, чукча читатель-советчик.
← →
Unknowing © (2006-10-29 12:31) [10]
> Ketmar © (29.10.06 12:25) [9]
Ну чучки сегодня!! И челсями всякими владеют и советы ценные раздают! :) Спасибо!
>Всем откликнувшимся
Всё же если есть код, буду очень благодарен!! :)
← →
Anatoly Podgoretsky © (2006-10-29 12:31) [11]> Ответ на сообщение [2]
Программирование ком портов не простая штука.
Можешь и по приходу байта, а можно по приходу группы байтов, а можно по
приходу чего либо еще, например ограничителя.
Важно выстроить правильную диаграмму действий и выбрать правильный метод
чтения.
← →
Anatoly Podgoretsky © (2006-10-29 12:32) [12]> Ответ на сообщение [4]
10 герц (100 миллисекунд) это не частота, а горе, даже на IBM PC за это
время успеет выполниться порядка 1 миллиона команд, а на современном
процессоре десятки миллиардов.
Ком порт это одно из самых медленных устройств, кроме того у него есть свой
собственный буфер.
Может тебе почитать статьи по программированию сом портов, вроде и на этом
сайте есть или вообще не ломать голову, а взять какой либо готовый
компонент, которых многие десятки на файловых архивах.
Поскольку самому делать это на уровне АПИ и не владея предметом очень
тяжело.
И посоветовать тоже ничего не возможно, кода не видать, описания не видать,
что не получается неизвестно.
Но если хочешь на уровне АПИ, то в справке все хорошо документировано, но
много и сложно.
← →
Anatoly Podgoretsky © (2006-10-29 12:35) [13]> Ответ на сообщение [10]
> Ну чучки сегодня!! И челсями всякими владеют
Ну он такой же чукча, как я Блин Клинтон
← →
Unknowing © (2006-10-29 12:38) [14]
> Anatoly Podgoretsky © (29.10.06 12:31) [11]
Дело в том, что с вопросом работы самого COM-порта все ясно. А вот с "правильной диаграммой действий трудно, блин" :( В общем-то, хотелось бы увидь ответ вроде такого: Правильная циклограмма следующая: 1.Принял байт. 2. Если ID положил его в буфер. 3. Передал в разборщик..
← →
Unknowing © (2006-10-29 12:39) [15]А еще лучше и прикрепленным кодом... :)
← →
Джо © (2006-10-29 12:51) [16]"А может, тебе еще полы помыть? А что, я могу..." (c) Бузыкин из "ОМ".
← →
Anatoly Podgoretsky © (2006-10-29 12:56) [17]> Ответ на сообщение [14]
Ну чтоже правильная циклограмма, только очень, очень упрощенная, вот с нее
и начни, укрупняй каждый пункт постепенно.
SDK поставляется с Дельфи
← →
Ketmar © (2006-10-29 13:08) [18]>[14] Unknowing(c) 29-Oct-2006, 12:38
ну, по-сути верно. теперь -- [17]. детализируй. опять же -- нарисуй автомат. почему автомат? а его проще всего потом закодировать. и можно без особого труда доказать его работоспособность (я полагаю, список состояний и переходов небольшой получится).
а уж как ты будешь кормить автомат байтами -- это детали реализации. возьми, например, тот же AsyncPro. бесплатно, в исходниках. и работает, что любопытно. или synserial (искать по словам "synapse library"). или сам сделай (уже сделал, вроде?).
отвлечённое рассуждение: я вообще удивляюсь, почему FSA так мало используют. очень удобная штука, на самом деле.
← →
Unknowing © (2006-10-29 13:50) [19]Всем большое спасибо!! Будем трудиться!
← →
MikePetrichenko © (2006-10-29 13:54) [20]Правильно пользоваться Overlapped IO.
Тогда будет меньше вопросов про опрос порта и буфер.
P.S. Блин. Народ! Готов всем бесплатно рассылать MSDN, только читайте пожалуйста, что там пишу!!!
← →
Anatoly Podgoretsky © (2006-10-29 14:01) [21]> Ответ на сообщение [20]
> Правильно пользоваться Overlapped IO.
Он сложнее в програмировании, как правило не для начинающих.
← →
MikePetrichenko © (2006-10-29 14:03) [22]
> Он сложнее в програмировании, как правило не для начинающих.
Зато для него пример есть в готовм к использованию виде (в справке). Да и что там сложно, если человек все равно с потоками мучается? Добавляется только один параметр и две функции...
← →
Ketmar © (2006-10-29 14:04) [23]>[20] MikePetrichenko(c) 29-Oct-2006, 13:54
>Правильно пользоваться Overlapped IO.
правильно пользоваться тем, что удобно. %-)
← →
MikePetrichenko © (2006-10-29 14:06) [24]
> правильно пользоваться тем, что удобно. %-)
Будем спорить что в ЕГО КОНКРЕТНОЙ задаче удобнее? :)
← →
Ketmar © (2006-10-29 14:11) [25]>[24] MikePetrichenko(c) 29-Oct-2006, 14:06
>Будем спорить что в ЕГО КОНКРЕТНОЙ задаче удобнее? :)
то, с чем он уже умеет работать. %-)
← →
MikePetrichenko © (2006-10-29 14:15) [26]
> Как правильно составить логику опроса порта для вывода информации
> на экран и одновременно в файл(второй поток) без потери
> данных...Конкретизируя, как правильно создать буфер и как
> с ним работать? :)
Overlapped
> то, с чем он уже умеет работать. %-)
Я не умею (не знаю) как использовать IMAPI (это тот который для записи дисков в XP). Мне долбать форум или учится?
← →
Ketmar © (2006-10-29 14:32) [27]>[26] MikePetrichenko(c) 29-Oct-2006, 14:15
>Я не умею (не знаю) как использовать IMAPI (это тот
>который для записи дисков в XP). Мне долбать форум или
>учится?
использовать API от Nero. %-)
← →
MikePetrichenko © (2006-10-29 14:40) [28]
> использовать API от Nero. %-)
Аналогично. Его тоже не знаю. :) Расскажешь?
← →
Ketmar © (2006-10-29 14:48) [29]>[28] MikePetrichenko(c) 29-Oct-2006, 14:40
>Аналогично. Его тоже не знаю. :) Расскажешь?
саурсфорж спасёт. там есть трансляция на Delphi. %-)
(по секрету: я тоже не знаю. у меня даже Nero не работает -- потому что я его изуродовал, и больше не использую %-)
← →
MikePetrichenko © (2006-10-29 16:06) [30]
> саурсфорж спасёт. там есть трансляция на Delphi. %-)
> (по секрету: я тоже не знаю. у меня даже Nero не работает
> -- потому что я его изуродовал, и больше не использую %-
> )
+1 LOL
← →
Боб (2006-10-30 07:45) [31]> Unknowing
Есть отличный компонент : VSSComm32
При проектировании задаешь размер буфера, кот. передает железка
(ну и все параметры порта).
И процедуру обработки. Опрашивать порт не надо.
Как только буфер заполнится - попадаешь в эту процедуру, получаешь свой буфер - "и делай с ним что хошь".
Можно еще Thread организовать и семафорить ему о том, что буфер принят,
или послать Message какой-то своей процедуре обработки и все делать уже там...
Вариантов много...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.047 c