Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

Работа с COM портом.   Найти похожие ветки 

 
Lamer6666   (2009-10-24 18:10) [0]

Доброго времени суток уважаемые.
В очередной раз сталкиваюсь с областью мало мне знакомой, отправкой и получением 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


 
Германн ©   (2009-10-24 18:13) [1]

Дашь мыло, получишь книжку.


 
Сергей М. ©   (2009-10-24 18:17) [2]


> здесь WriteBytes массив


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


> выяснил что чтение с порта реализовывают в отдельном потоке


Кому как надо, тот так и реализовывает.
Никто не заставляет тебя это делать.


> по средствам


Глаз режет.

Посредством - слитно пишется.


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

lamer6666@kdmaster.ru


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

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


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


Можно PChar?


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


> Можно PChar?


Можно.

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


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


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

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


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


> Можно.

Спасибо.


> Германн ©

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

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


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


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

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


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


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


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


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

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


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

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


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

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


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


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


 
Loginov Dmitry ©   (2009-10-24 19:48) [13]

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


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

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

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

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


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


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


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


 
Loginov Dmitry ©   (2009-10-24 22:41) [15]

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

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

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

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


 
Loginov Dmitry ©   (2009-10-24 22:58) [16]

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


 
Loginov Dmitry ©   (2009-10-24 23:59) [17]

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

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


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

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


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

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


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


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

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


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

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


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


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

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


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


> Германн


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



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

Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
2-1256244709
Drowsy
2009-10-23 00:51
2009.12.13
BDE Administrator.


2-1256283306
grav
2009-10-23 11:35
2009.12.13
Выгрузка сообщений об ошибках в текстовый файл


15-1255465807
Юрий
2009-10-14 00:30
2009.12.13
С днем рождения ! 14 октября 2009 среда


2-1256189426
AndrewG
2009-10-22 09:30
2009.12.13
Hint


15-1255549690
Petr V. Abramov
2009-10-14 23:48
2009.12.13
что за директория???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский