https://cloud.mail.ru/public/C9Yc/Se5dJF2sY
Вид для печати
Благодарю.
Буду пробовать, но это усложняет задачу на написание буфера для очереди сообщений. Пока вообще не понимаю с какой стороны к нему подходить и на чём основывать. SQL базу прикручивать, как это делается в вебе? Но он точно нужен, на случай массового отвала датчиков)
Если все страдания из-за гипотезы о том, что "в string можно затолкать всего 255 символов" - то она неверна.
https://owen.ru/forum/showthread.php...l=1#post289762
https://owen.ru/forum/showthread.php...l=1#post361101
Я делал примерно так:
1. Структура - описание элемента очереди. У неё была строка сообщения, номер адресата (для СМСок) и флаг "активно" (Active).
Этот флаг был нужен алгоритму перебора очереди, чтобы понимать что этот элемент ещё не отправлен.
2. Массив этих структур - сама очередь. Выбрал его жёсткие границы и сделал их в виде константы с названием типа MAX_QUEUE_SIZE для того, чтобы во всех циклах и проверках её использовать, и не было жёстко заданных магических чисел из-за которых циклы выйдут за границы массива.
Это объявляется примерно так:
VAR CONSTANT
MAX_QUEUE_SIZE : WORD := 64;
END_VAR
VAR
arrQueue : ARRAY [1..MAX_QUEUE_SIZE] OF SMSItem;
END_VAR
3. Функция "Добавить в очередь". Она в цикле перебирает весь этот массив и ищет элемент, в котором Active = FALSE, заполняет его нужными данными и ставит Active = TRUE.
Это простой цикл с условием: как только нашли Active = FALSE, делаем нужное действие и по EXIT; выходим из цикла.
4. Функция "Обработка очереди". Там тоже цикл. Но он ищет первый элемент с Active = TRUE и закидывает данные из него в модем, а сам элемент помечает как Active = FALSE. Выход - тоже по EXIT;.
Её мы и вызываем по таймеру не чаще, чем нужно.
Во! =)
Вы зачем-то этому параметру 100 задали.
Задайте 0 - и все станет нормально.
Вложение 72556
beatitas Пожалуйста!