Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Логика программы. 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.032 c
2-1161691199
m-kirill-2003
2006-10-24 15:59
2006.11.12
Округление real ных чисел


15-1161508815
Cyrax
2006-10-22 13:20
2006.11.12
Патч для Promt XT Family от лицензионного соглашения


1-1156791213
fs_more
2006-08-28 22:53
2006.11.12
Организация межпотокового взаимодействия


2-1162042509
Благодарный слушатель
2006-10-28 17:35
2006.11.12
Импорт таблиц из Word a


2-1162122043
~Aid~
2006-10-29 14:40
2006.11.12
размер