Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 103

/ вопрос открыт /

Здравствуйте, эксперты!

Приведите пожалуйста пример открытия Com порта запись AT команды и чтения ответа (AT).

Zlodey Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Zlodey (статус: Посетитель)
Вопрос отправлен: 19 ноября 2008, 21:19
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, Zlodey!
Почитайте Ссылка
разберитесь с примером и вопросы должны отпасть.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 20 ноября 2008, 08:24

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Zlodey!
Смотрите вопрос #2048. Там похожий вопрос с несколькими примерами и компонентом для работы с портами. А еще можете пошарить поиском на сайте, т.к. похожие темы уже обсуждались.

P.S. Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 20 ноября 2008, 09:35

Ответ #3. Отвечает эксперт: DNK

Здравствуйте, Zlodey!
Когда-то использовал для работы библиотеку Asinc Pro. В библиотеке были компоненты для работы как напрямую с портами, так и для работы на более высоком уровне - с модемами(факсами) и подключениями к Интернету.

Ответ отправил: DNK (статус: Студент)
Время отправки: 21 ноября 2008, 00:32


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 24 ноября 2008, 14:45; участников в обсуждении: 3.
Zlodey

Zlodey (статус: Посетитель), 23 ноября 2008, 10:56 [#1]:

С созданием порта и с записью в порт разобрался . а вто чтение глючит. при вызове процедуры программа зависает.

var
Read :string;

procedure ATRead; //Чтение AT команд
var
MyBuff: array[0..1023] of Char; //буфер для чтения данных
ByteReaded: cardinal; //количество считанных байт

begin //читаем буфер из Com-порта
FillChar(MyBuff, SizeOf(MyBuff), #0);
ReadFile(hPort, MyBuff, SizeOf(MyBuff), ByteReaded, nil);

if ByteReaded >0 then

begin
Read := ansistring(MyBuff); //преобразуем массив в строку
end;
end;
Вадим К

Вадим К (статус: Академик), 23 ноября 2008, 18:18 [#2]:

Ну оно и правильно зависает. Это нормальное поведение. Функция пытается вычитать с буфера сколько может.
Так как сом порт устройство не реактивное, то читать оттудова будет долго.
Что же делать.
Костыль номер 1) читать ровно столько, сколько должно прийти.
Костыль номер 2) юзать асинхронное чтение. Иногда приходиться в таком случае переделывать всю программу под новую логику.
Хорошее решение - перейти на использование потоков и всю работу с портами вынести в поток. Работает отлично. Проверено неоднократно.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 24 ноября 2008, 12:09 [#3]:

Я новичок в этих делах. Можешь написать программу с кнопкой посылки at команды и окошком в котором будет виден ответ.
Вадим К

Вадим К (статус: Академик), 24 ноября 2008, 12:21 [#4]:

Грамматику исправляем, Zlodey!
Будет вечером время - напишу, кода то немного.
Галочка "подтверждения прочтения" - вселенское зло.
ANBsoft

ANBsoft (статус: Студент), 24 ноября 2008, 12:38 [#5]:

Zlodey, а Вы разобрались с примером, приведенным в статье, которую я указал?
Там полностью готовый код по работе с портом (даже с двумя), и не важно что туда посылать и отвечать (АТ комманды или просто текст).
Zlodey

Zlodey (статус: Посетитель), 24 ноября 2008, 13:57 [#6]:

Сложноватый пример. Очень много лишнего.
ANBsoft

ANBsoft (статус: Студент), 24 ноября 2008, 14:45 [#7]:

Этот пример нужно рассматривать в контексте статьи, тоесть читать статью и смотреть реализацию в примере и наоборот, тогда все становится на свои места, иначе и пример запутанный, и статья обобщенная. Но постарайтесь разобраться - не пожалеете.
P.S.Мне потребовался день чтобы разобраться в нем.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.02 сек.