Библиотека прикрепленная к первому сообщению системы работает нормально. У меня все получилось.
При работе с модемом ПМ01 на скорости 9600 (я думаю с любым модемом и на всех скоростях, ситуация примерно совпадает) наблюдается следующий эффект.
Я попробовал отправлять сообщения каждую секунду, т.е. подавать передний фронт на вход SendSms функционального блока FB_SMS_SR раз в секунду.
Получателю приходило только каждое восьмое сообщение.
В моем проекте, события о которых нужно уведомлять по СМС могут происходить и чаще раза в 8 секунд, а допустить потерю данных нельзя.
Я разработал функциональный блок QUEUE_STRING, реализующий очередь строк.
Прикрепляю экспорт-файл с ФБ и выкладываю код функционального блока. Если кто-то заинтересуется, посмотрите, может найдутся ошибки которые я упустил.
Код:FUNCTION_BLOCK QUEUE_STRING VAR_INPUT ITEM_IN : STRING; (*Item that you need to enqueue*) ENQUEUE : BOOL; (*On this front ITEM_IN will be enqueued*) DEQUEUE : BOOL; (*On this front next item will be dequeued to ITEM_OUT*) SIZE : BYTE := 10; (*Size of queue*) RESET : BOOL; END_VAR VAR_OUTPUT ITEM_OUT : STRING; ERROR_CODE : WORD; (*0 - OK, 1 - overflow, 2 - queue is empty*) END_VAR VAR data : ARRAY[0..255] OF STRING; head : BYTE; tail : BYTE; count : BYTE; R_TRIG_ENQUEUE : R_TRIG; R_TRIG_DEQUEUE : R_TRIG; R_TRIG_RESET : R_TRIG; END_VARКод:R_TRIG_ENQUEUE(CLK := ENQUEUE); R_TRIG_DEQUEUE(CLK := DEQUEUE); R_TRIG_RESET(CLK := RESET); IF R_TRIG_ENQUEUE.Q THEN IF count < SIZE - 1 THEN data[head] := ITEM_IN; head := head + 1; IF head = SIZE THEN head := 0; END_IF count := count + 1; ERROR_CODE := 0; ELSE ERROR_CODE := 1; END_IF END_IF IF R_TRIG_DEQUEUE.Q THEN IF count > 0 THEN ITEM_OUT := data[tail]; tail := tail + 1; IF tail = SIZE THEN tail := 0; END_IF count := count - 1; ERROR_CODE := 0; ELSE ERROR_CODE := 2; END_IF END_IF IF R_TRIG_RESET.Q THEN head := 0; tail := 0; count := 0; ERROR_CODE := 0; END_IF




Ответить с цитированием
