|
Вопрос # 2 103/ вопрос открыт / |
|
Здравствуйте, эксперты!
Приведите пожалуйста пример открытия Com порта запись AT команды и чтения ответа (AT).
 |
Вопрос задал: 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 (статус: Посетитель), 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 (статус: Посетитель), 24 ноября 2008, 12:09 [#3]:
Я новичок в этих делах. Можешь написать программу с кнопкой посылки at команды и окошком в котором будет виден ответ.
|
|
Вадим К (статус: Академик), 24 ноября 2008, 12:21 [#4]:
Грамматику исправляем, Zlodey!
Будет вечером время - напишу, кода то немного.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
ANBsoft (статус: Студент), 24 ноября 2008, 12:38 [#5]:
Zlodey, а Вы разобрались с примером, приведенным в статье, которую я указал?
Там полностью готовый код по работе с портом (даже с двумя), и не важно что туда посылать и отвечать (АТ комманды или просто текст).
|
|
Zlodey (статус: Посетитель), 24 ноября 2008, 13:57 [#6]:
Сложноватый пример. Очень много лишнего.
|
|
ANBsoft (статус: Студент), 24 ноября 2008, 14:45 [#7]:
Этот пример нужно рассматривать в контексте статьи, тоесть читать статью и смотреть реализацию в примере и наоборот, тогда все становится на свои места, иначе и пример запутанный, и статья обобщенная. Но постарайтесь разобраться - не пожалеете.
P.S.Мне потребовался день чтобы разобраться в нем.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|