Форум: "Начинающим";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
ВнизЗарпет обработки события Найти похожие ветки
← →
olega © (2008-02-13 14:15) [0]Добрый день! Для работы с GSM-модемом я использую компонент TBComPort 2.10 (http://www.delphisources.ru/pages/sources/system/2005_year/bcom_port.html). В случае если на модем приходит СМС, он выдает в СОМ-порт строку "+CMTI: "MT",1". В компоненте есть прерывние OnRxChar, которое вызывается в случае появления во входном буфере СОМ-порта данных. Его обработчик - это функция синхронного чтения порта. Таким образом, когда приходит СМС, программа автоматом улавливает этот момент и считывает указанную выше строку.
Для дальнейшей работы мне необходимо считать СМС. Для этого я посылаю команду "AT+CMGR=1". Для контроля правильности ее выполнения необходимо проверять ответы от модема. НО с прерыванием это делать не удобно. Как можно его временно запретить, чтобы считывать ответы от модема "вручную", а когда обработаю пришедшую СМС, востановить прерывание и ожидать новой СМС?
← →
Семеныч (2008-02-13 14:35) [1]procedure TForm1.BComPort1RxChar(...); // Обработчик OnRxChar
begin
BComPort1.OnRxChar := nil;
try
... // Обработка
finally
BComPort1.OnRxChar := BComPort1RxChar;
end;
end;
← →
DiamondShark © (2008-02-13 14:50) [2]
> НО с прерыванием это делать не удобно.
Это почему же?
Дубовую state-machine трудно организовать?
...
FState: integer;
procedure TBComPort1.OnRxChar;
begin
case FState of
...
17: begin // состояние "ждать уведомления от модема"
ЧитатьКомандуОтМодкма();
if команда = "+CMTI: "MT",1" then
begin
ПослатьКомандуМодему("AT+CMGR=1");
FState := 18;
end;
...
end;
18: begin // состояние "ждать ответа на "AT+CMGR=1""
// читать и чего-то делать с ответом
FState := 38;
end
...
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.053 c