Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.039 c
10-1125677440
NikNet
2005-09-02 20:10
2006.11.12
Doc2Rtf convertor. как перевести групу файлов?


15-1160652002
dRake
2006-10-12 15:20
2006.11.12
Нужна компонента для визуализации графов...


15-1161778894
Juice
2006-10-25 16:21
2006.11.12
Install в dcc32


2-1161891213
Andrey.Ru
2006-10-26 23:33
2006.11.12
Как запустить цикл и не дожидаться его завершения?


2-1161831481
viper03
2006-10-26 06:58
2006.11.12
вывод картинки в DBCtrlGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский