Текущий архив: 2009.12.13;
Скачать: CL | DM;
ВнизРабота с 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;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.006 c