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

Вниз

Прием символов по СОМ   Найти похожие ветки 

 
COMMODORE-128   (2012-07-01 02:09) [0]

Привет всем! Как правильно организовать прием символов по СОМу.
Открываю порт и засылаю по одному символу (WriteFile) сколько угодно символов(), на конце в любой момент может прийдти ответ (тоже один символ). Вопрос как его поймать? или после каждой отправки символа вызывать ReadFile и смотреть, если количество принятых символов=0, то ничего не получили? Хотелось бы простоту как в WM_MESSAGE ставим хук,
и если передало - то читаем меняем глобальные переменные итд...


 
Германн ©   (2012-07-01 02:32) [1]

Вот тебе пока что сюда http://delphimaster.net/view/4-1336987124/


 
Дмитрий С ©   (2012-07-01 04:35) [2]

Читай в отдельном потоке.


 
COMMODORE-128   (2012-07-01 11:19) [3]

спасибо!


 
COMMODORE-128   (2012-07-01 13:25) [4]

пока не очень получается
с ассинхронной
видимо на конце тоже должно быть открыт порт как ассинхронный


 
MBo ©   (2012-07-01 14:20) [5]

>открыт порт как ассинхронный
такого понятия нет. Синхронным или асинхронным может быть способ приёма.

Используй TComPort Dejan Crnila http://sourceforge.net/projects/comport/files/


 
COMMODORE-128   (2012-07-01 23:12) [6]

неохота компоненты использовать...
решилось - сделал протокол железный
прием и отправка байта на устройстве
в проге - отсылка и прием байта (WriteFile+ReadFile)
пока тестовом методе работает четко


 
Дмитрий С ©   (2012-07-02 00:12) [7]

А если устройство отвалится, прога твоя зависнет чтоли?)


 
COMMODORE-128   (2012-07-02 01:07) [8]

не должно отвалится, контроллер надежный
и вроде как как если не приняло байт прога, значит отвал-
там отзыв несколько определенный байтов передает


 
Германн ©   (2012-07-02 01:11) [9]


> Дмитрий С ©   (02.07.12 00:12) [7]
>
> А если устройство отвалится, прога твоя зависнет чтоли?

Если грамотно выставить таймауты не зависнет. А вот то, что будет "замораживаться" интерфейс программы при достаточно частом общении с железякой - это факт! А перенос работы с СОМ-портом в отдельный поток запросто может привести к очень неприятным глюкам.


 
Дмитрий С ©   (2012-07-02 01:53) [10]


> А перенос работы с СОМ-портом в отдельный поток запросто
> может привести к очень неприятным глюкам.

А точнее?


 
COMMODORE-128   (2012-07-02 01:54) [11]

application.ProcessMessages;
не поможет?
скорость будет ориентировочно, 1-100 символов в секунду,
и соотвественно обратных (ответов)


 
Германн ©   (2012-07-02 02:06) [12]


> application.ProcessMessages;
> не поможет?

А чему он должен помочь?


 
Германн ©   (2012-07-02 02:13) [13]


> Дмитрий С ©   (02.07.12 01:53) [10]
>
>
> > А перенос работы с СОМ-портом в отдельный поток запросто
> > может привести к очень неприятным глюкам.
>
> А точнее?

Точнее сложно. Но у меня весьма стойкое предубеждение об исключениях в доппотоках. Возможно потому, что я не знаю сам как их возбуждать и как они возбуждаются где-то ещё. Но в тех случаях, с которыми сталкивался был просто "ужас летящий на крыльях ночи"!
:)


 
Дмитрий С ©   (2012-07-02 03:17) [14]


> Германн ©   (02.07.12 02:13) [13]

try except на весь Execute  а там передавай ошибку как тебе угодно. Видимо это личный опыт сказыватся?)


 
COMMODORE-128   (2012-07-02 07:28) [15]

Германн
обновлению формы (Form1)


 
tesseract ©   (2012-07-02 09:04) [16]


> Точнее сложно. Но у меня весьма стойкое предубеждение об
> исключениях в доппотоках.


Обработку исключения необходимо проводить в основном потоке. С потоком требуется работать крайне аккуратно - отладка там весьма затруднена.


 
Вариант   (2012-07-02 09:07) [17]


> COMMODORE-128   (01.07.12 13:25) [4]
> пока не очень получается
> с ассинхронной
> видимо на конце тоже должно быть открыт порт как ассинхронный
>

Расшифруй конец фразы - "видимо на конце тоже должно быть открыт порт как асинхронный"


 
COMMODORE-128   (2012-07-02 12:24) [18]

устройство открывает порт как обычно,
а прога на делфи может как атрибуты ассинхронно FILE_FLAG_OVERLAPPED


 
tesseract ©   (2012-07-02 12:34) [19]


> COMMODORE-128   (02.07.12 12:24) [18]
> устройство открывает порт как обычно,
> а прога на делфи может как атрибуты ассинхронно FILE_FLAG_OVERLAPPED


Это всё программная реализация. Скорее всего у тебя таймауты не выдерживаются.


 
Вариант   (2012-07-02 13:03) [20]


> COMMODORE-128   (02.07.12 12:24) [18]


И каким образом асинхронная работа с портом в твоей программе на дельфи связана с работой какого-то устройства на другом конце провода? Никаким. Как ты написал программу, так она и будет работать. Если ты открыл порт с
FILE_FLAG_OVERLAPPED, то соответственно и используешь OVERLAPPED структуру при вызовах ReadFile и WriteFile и других функций, которые требуют указатель на эту структуру. В этой структуре указывается Event, который будет взводится при завершении операции ввода вывода. Так же рекомендую почитать о WaitCommEvent. Хотя данная функция и не является обязательной, но довольно удобна. Организовать работу с портом можно как с использованием доп. потоков, так и без них и без зависания интерфейса, если используется асинхронный режим.  

MBo ©   (01.07.12 14:20) [5]  дал ссылку на компонент, который можно просто использовать для работы с портом, так и изучить его  исходные тексты. Основа в CPort.pas


 
VICTOR_   (2012-07-02 13:24) [21]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1126


 
Германн ©   (2012-07-03 01:39) [22]


> COMMODORE-128   (02.07.12 01:54) [11]
>
> application.ProcessMessages;
> не поможет?


> COMMODORE-128   (02.07.12 07:28) [15]
>
> Германн
> обновлению формы (Form1)
>

Теоретически поможет. Примерно так как помогают костыли инвалиду. Ходить то он сможет, но...
ProcessMessages хорошо помогает тогда, когда можно наперёд рассчитать времена цикла. А как их наперёд рассчитать в случае, когда в цикле выполняется общение с внешним железом? В случае синхронного общения с железом по СОМ-порту придётся опытным путём подбирать таймауты. И не факт, что результат такого подбора будем всегда удачным.


 
Германн ©   (2012-07-03 01:43) [23]


> COMMODORE-128   (01.07.12 23:12) [6]
>
> неохота компоненты использовать


> MBo ©   (01.07.12 14:20) [5]  дал ссылку на компонент, который
> можно просто использовать для работы с портом, так и изучить
> его  исходные тексты.

Прислушайся к этому совету.
P.S. Я правда с этим компонентом мало знаком, но он вроде значительно проще, чем мой любимый TApdComPort.


 
Германн ©   (2012-07-03 01:48) [24]


> VICTOR_   (02.07.12 13:24) [21]

В книге Павла Агурова тоже самое описано гораздо лучше.
P.S.
Чем-то стиль этой статьи напомнил мне опусы Флёнова. Наверно тем, что слишком часто звучат утверждения типа "Не знаю почему, но именно так работает". :)


 
tesseract ©   (2012-07-03 10:01) [25]


> В случае синхронного общения с железом по СОМ-порту придётся
> опытным путём подбирать таймауты.


В инструкции к девайсу можно посмотреть предельное время ожидания синхро/ответа.


 
VICTOR_   (2012-07-03 10:51) [26]


>
> В книге Павла Агурова тоже самое описано гораздо лучше.
> P.S.
> Чем-то стиль этой статьи напомнил мне опусы Флёнова. Наверно
> тем, что слишком часто звучат утверждения типа "Не знаю
> почему, но именно так работает". :)

У меня на основе данного кода безперебойно работает ~ 5 различных по типу девайсов. Некоторые круглосуточно и годами. Правда нагрузка как правило периодическая и не очень высокая. Напр. считывание радиокарточки 1-2 раза в минуту.
Но тем не менее - "Не знаю почему, но именно так работает" :)
А за книжку спасибо - действительно там более капитально описаны базовые понятия


 
Германн ©   (2012-07-04 01:35) [27]


> tesseract ©   (03.07.12 10:01) [25]
>
>
> > В случае синхронного общения с железом по СОМ-порту придётся
> > опытным путём подбирать таймауты.
>
>
> В инструкции к девайсу можно посмотреть предельное время
> ожидания синхро/ответа.

Можно я не спорю. Но знаешь ли предельное время может быть довольно большим. Например стирание достаточно большой флеш-памяти займёт достаточно много времени, чтобы заморозить интерфейс.


 
COMMODORE-128   (2012-07-06 16:30) [28]

инструкции к девайсу нету, так контроллер программирую сам,
там обрезанный сишный язык, проблем там нету.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.061 c
15-1341592927
alexdn
2012-07-06 20:42
2013.03.22
Вот такая реклама


15-1347987411
sniknik
2012-09-18 20:56
2013.03.22
openssl rsa –in enc.key -out dec.key в CriptoAPI Delphi


15-1343680202
Юрий
2012-07-31 00:30
2013.03.22
С днем рождения ! 31 июля 2012 вторник


8-1226815309
CodeMaster
2008-11-16 09:01
2013.03.22
Fade


15-1352291019
Inovet
2012-11-07 16:23
2013.03.22
Скончаося Кругляков Эдуард Павлович