Синтаксис
procedure GetSMS(const ADelete: Boolean = True; const AUCS: Boolean = False);
Описание
Процедура доступна в версиях PROFESSIONAL и DEMO-TIME. Для работы с SMS-сообщениями необходимо предварительно настроить параметры модема через "Options.exe" -> раздел "Simple-Scada Server" -> "Отправка SMS сообщений".
Вызывает чтение SMS-сообщений из памяти SIM-карты. Параметр ADelete задает, нужно ли удалить SMS из памяти SIM-карты после получения. Установите параметр AUCS в True, если в сообщении есть символы кириллицы. Обработать полученные собщения можно в скрипте с типом события "Получено SMS-сообщение".
Пример кода
1. Чтение SMS-сообщений
begin
{ считать SMS-сообщения без кириллицы и
удалить их из памяти SIM-карты после получения }
GetSMS;
{ считать SMS-сообщения с кириллицей, не удаляя их }
GetSMS(False, True);
end.
|
2. Чтение SMS-сообщений через заданный интервал
Допустим, раз в 60 сек. требуется читать SMS-сообщения и выводить их в объект "Текст". Для этого, создадим скрипт с типом события "Таймер" - в параметре скрипта "Интервал" укажем значение 60 секунд. Напишем код скрипта:
begin
GetSMS(TRUE, FALSE); // запрос на чтение и удаление SMS сообщений из памяти SIM-карты
end.
Теперь каждые 60 секунд будет происходить отправка запроса на чтение и удаление SMS сообщений из памяти SIM-карты. Не рекомендуем читать SMS чаще чем каждые 5 секунд, так как модем отвечает не мгновенно. Для обработки полученных SMS-сообщений создадим новый скрипт с типом события "Получено SMS-сообщение" . Он будет вызван при получении SMS процедурой GetSMS и имеет три параметра:
•smsPhone - номер телефона отправителя;
•smsMsg - текст sms-сообщения;
•smsTime - время получения сообщения;
Допустим, в проекте имеется объект "Text1", в который требуется выводить сообщения (каждое сообщение с новой строки). Тогда код будет таким:
begin
Text1.Text := Text1.Text + smsTime + ' | ' + smsPhone + ' | ' + smsMsg + Chr(10);
end.
, где Chr(10) - символ переноса строки.
|
3. Извлечение параметров из сообщения содержащего разделители
Если SMS-сообщение, к примеру содержит три параметра разделенных точкой и необходимо при получении сообщения извлечь их в три разных объекта "Text", то можно использовать такой скрипт с типом события "Получено SMS-сообщение" :
var
aWord: string;
I, aNumber, aLength: Integer;
procedure OnWord;
begin
case aNumber of
1: Text1.Text := aWord; // первое слово записываем в Text1
2: Text2.Text := aWord; // второе слово записываем в Text2
3: Text3.Text := aWord; // третье слово записываем в Text3
end;
end;
begin
aWord := '';
aNumber := 1;
aLength := Length(smsMsg); // получаем длину текста сообщения
if aLength > 0 then
for I := 1 to aLength do // проходим по символам сообщения
begin
if smsMsg[I] <> '.' then
aWord := aWord + smsMsg[I];
if (smsMsg[I] = '.') or (I = aLength) then
begin
OnWord;
aWord := '';
Inc(aNumber);
end;
end;
end.
|