Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с COM портом. [D7, XP]


Страницы:   1 2

Lamer6666 ©   (2009-10-24 18:10:00) 

Доброго времени суток уважаемые.
В очередной раз сталкиваюсь с областью мало мне знакомой, отправкой и получением AT команд GSM модему.

Прочитал статьи по работе с COM портами, решил работать с портом не по средствам компонентов а по средствам API функций.
Разобрался с тем как открывать и закрывать порт, устанавливать его параметры. Стоит вопрос об:
1. отправке команд в порт
2. получения ответов с порта.

Знаю что прием и передача осуществляются функциями ReadFile() и WriteFile().

Проблема №1:
WriteFile(CommHandle, WriteBytes, SizeOf(WriteBytes), dwWrite, @OverWrite)
здесь WriteBytes массив а команды отправляемые имеют тип String, как осуществить перевод типа String в массив Byte?

Проблема №2:
НЕ могу понять, как после отправки команды получить ответ с порта (например отправил команду AT+... получил Error или Ok)
Почитав статьи выяснил что чтение с порта реализовывают в отдельном потоке но логику понять пока не могу, может поможете понять?

Спасибо огромное, спасибо.С уважением Lamer6666


Lamer6666   (2009-10-25 01:15:00) [1]


> Германн


Благодарю...


Германн   (2009-10-25 01:11:00) [2]


> В описании APRO_DevGuide.pdf про коды ошибок ничего нет
> ((
>

Файл AdExcept.inc
 { TApdGSMPhone error codes }
 secSMSBusy                        {8100} = 'Busy with another command';


Lamer6666   (2009-10-25 00:59:00) [3]

Установил,  очень удобная, соединение с портом происходит, а вот отправка СМС не идет, ошибка 8100. (В настройках выбираю ApdGSMPhone1 выбираю gmPDU)
В описании APRO_DevGuide.pdf про коды ошибок ничего нет ((


Германн   (2009-10-25 00:20:00) [4]


> как установить данную компоненту?

Не компоненту, а библиотеку компонент.


Loginov Dmitry   (2009-10-25 00:08:00) [5]

Обычная установка компонентов. Прочитайте readme. Все необходимое там должно быть.
В крайнем случае можете спросить у поисковых машин.


Lamer6666   (2009-10-24 23:59:00) [6]

Простите за возможно глупый вопрос Loginov Dmitry, как установить данную компоненту?


Loginov Dmitry   (2009-10-24 23:59:00) [7]

Кстати практически у всех компонентов работы с com-портом
чтение реализовано в дополнительном потоке. Компонентов
таких довольно-таки много:
- TBComPort
- Comm32
- http://comport.sf.net/ 

вспомнилось еще, у TApdComPort все принятые байты зачем-то
перегоняются через основной поток. Для работы с модемом -
без разницы, но при интенсивной работе с различными
устройствами могут ощущаться тормоза. Так что выходит, что
компонент отличный не во всех отношениях :)


Loginov Dmitry   (2009-10-24 22:58:00) [8]

Сорри, перекрывать следует метод TriggerAvail


Loginov Dmitry   (2009-10-24 22:41:00) [9]

> Почитав статьи выяснил что чтение с порта реализовывают
> в отдельном потоке но логику понять пока не могу, может
> поможете понять?

В случае асинхронного обмена чтение и запись могут выполняться
одновременно, в этом случаем чтение следует организовывать в
отдельном потоке.

Ну а если обмен не асинхронный, т.е. реализуется протокол
запрос/ответ, то не принципиально (чтение можно организовать
в том же потоке, разницы как правило нет).

Особенностью TApdComPort является чтение в отдельном потоке.
Кстати удобно использовать для работы со сканерами штрих-кодов.
Там только чтение, нет никакой записи в порт. Достаточно
перекрыть метод ReceiveData(), в нем реализовать проверку
принятых байтов, и просто вызывать некоторую callback-функцию,
если пришли все байты штрих-кода.


Lamer6666   (2009-10-24 20:27:00) [10]


> Рекомендую компоненты AsyncPro
> http://sourceforge.net/projects/tpapro
>
> во-первых в них реализована работа с модемом (компонент
> TApdModem), предусмотрены
> обработчики для большинства возможных событих и ошибок,
> приходящих
> от модема.
>
> во-вторых, в них есть компонент TApdComPort. Отличный компонент,
>  надо
> сказать. И чтение из порта в нем реализовано в дополнительном
> потоке,
> и возможностей предостаточно.
>
> Таким образом можно работать с модемом либо через компонент
> TApdModem, либо использовать
> только лишь TApdComPort.


Качаю пробую..... ))
Спасибо, все же блок схему реализации на основе API


Loginov Dmitry   (2009-10-24 19:48:00) [11]

> НЕ могу понять, как после отправки команды получить ответ
> с порта (например отправил команду AT+... получил Error
> или Ok)
> Почитав статьи выяснил что чтение с порта реализовывают
> в отдельном потоке но логику понять пока не могу, может
> поможете понять?


Рекомендую компоненты AsyncPro
http://sourceforge.net/projects/tpapro

во-первых в них реализована работа с модемом (компонент TApdModem), предусмотрены
обработчики для большинства возможных событих и ошибок, приходящих
от модема.

во-вторых, в них есть компонент TApdComPort. Отличный компонент, надо
сказать. И чтение из порта в нем реализовано в дополнительном потоке,
и возможностей предостаточно.

Таким образом можно работать с модемом либо через компонент TApdModem, либо использовать
только лишь TApdComPort.


Lamer6666   (2009-10-24 19:11:00) [12]

Спасибо Германнкнига что надо....


> начала скажи, чем не угодили готовые компоненты для работы
> с СОМ-портом ..


Может глупо, но хочу разобраться...поэтому мнение опытных людей очень интересно.


Сергей М.   (2009-10-24 18:50:00) [13]

Сначала скажи, чем не угодили готовые компоненты для работы с СОМ-портом ..


Lamer6666   (2009-10-24 18:47:00) [14]

Видимо мне стоит обрисовать задачу:
Отсылать СМС и параллельно проверять входящие смс сообщения.
Не сочтите за наглость, не могли бы вы в вкратце блок схему изложить, так сказать "правильный вектор задать" если не трудно )


Сергей М.   (2009-10-24 18:41:00) [15]


> лучше ли использовать отдельный поток для чтения?


Доп.поток в процессе нужен для организации параллельных вычислений.
Лучше или хуже - решать тебе.


Германн   (2009-10-24 18:41:00) [16]


> И все же скажите лучше ли использовать отдельный поток для
> чтения?

Не для чтения, а для работы с портом. Но для твоей задачи отдельный поток не лучше. Но проще для новичка.


Lamer6666   (2009-10-24 18:31:00) [17]


> Можно.

Спасибо.


> Германн ©

Получил, разбираюсь.

И все же скажите лучше ли использовать отдельный поток для чтения?


Германн   (2009-10-24 18:27:00) [18]


> Lamer6666   (24.10.09 18:17) [3]
>
> lamer6666@kdmaster.ru
>

Кажись отправил. Но почта сегодня что-то глючит.


Сергей М.   (2009-10-24 18:24:00) [19]


> Можно PChar?


Можно.

WriteFile(CommHandle, PChar(AnsiStringVar)^, Length(AnsiStringVar), dwWrite, @OverWrite)


Lamer6666   (2009-10-24 18:22:00) [20]

Прошу прощения Сергей М., машинальные ошибки.


> Зачем массив-то ?


Можно PChar?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо