На CFC можно что-то типа такого
Вложение 15962
Вид для печати
На CFC можно что-то типа такого
Вложение 15962
На ST на самом деле намного компактнее :) Особенно если много вариантов сообщений и событий нужно обрабатывать...
Ну у меня база с университета сохранилась, а так по поиску можно найти информацию. Насколько помню, st очень похож на pascal, соответственно, литература по нему тоже пригодится.
Что за режим PDU? Где включается? В эксперементах с отправкой пользовался русскими буквами и всё работало, но можно переписать и английскими. Мой то вариант как? А так может подскажете как лучше это сделать? Так-то одновременно может сообщений (в самом худшем случае) быть штук 5.
energvk, схема простая и рабочая. Спасибо Вам.
Я его попробовал немного доработать, но у меня не вышло (см. аттач) - ошибка в OR.
Что я не так сделал и можно ли впринципе как-то два разных сообщения от одного входа получить, сократив тем-самым количество физических входов при этом повысив информативность схемы?
И второй актуальный вопрос: как суммировать две разные переменные типа STRING, чтобы можно было получить не короткое сообщение, а короткий отчет о состоянии нескольких входов по событию?
А как Вы представляете должна работать булева операция OR с символьными строками http://www.owen.ru/forum/attachment....2&d=1392751544
Вы должны в своем примере просто на выходе каждого MOVE указать одну и ту же переменную "SMS_text_out" и все:rolleyes:
ОК. Именно так я и делал. И все работало. Суть моего вопроса немного в другом - "...можно ли впринципе как-то два разных сообщения от одного входа получить...". Поясню.
Что я могу сделать - увеличить количество реле сделав как в примере energvk:
- одно реле - один вход - один MOVE - одно сообщение в переменную SMS_text_out;
- второе реле - второй вход - второй MOVE - второе сообщение в переменную SMS_text_out;
А могу ли я не "раздувая" аппаратную часть от одного реле получить в итоге два разных сообщения, задействовав один вход?
PS Извините если спутанно объясняю.
Так в вашем примере так и сделано, вроде
1 на in1- сообщение "Шкаф учета обесточен"
0 на in1- сообщение "Шкаф учета под напряжением"
В итоге от одного реле два сообщения. Что не так?
Прямо в этом примере нужно выбросить OR и на выходе каждого MOVE указать одну и ту же переменную "SMS_text_out" и все будет так, как Вы хотите.
ЗЫ. можно еще как вариант вместо двух MOVE использовать использовать SEL
Вложение 16111
Kirillio,
И не забывайте делать выравнивание порядка блоков (ПКМ->Порядок->В соответствии с потоком данных), иначе могут возникать непонятные глюки в в выполнении программы
1. Судя по всему в блоках 0-1 формируется текст сообщения в зависимости от срабатывания входов, а остальные это непосредственно команда отправки смс с условиями старта /сброса/временными интервалами
2.Можно и такЦитата:
VAR_INPUT
...
sms1: STRING :='текст_смс';
...
Так что-ли?
В блоке MUX_16_0 происходит выборка какая авария, такое и смс. С выхода "SendAlarmPulse" этого блока однократно подаётся сигнал на отправку смс который задерживается ФБ "TON2", чтобы успели, мало ли, собраться все аварии. Блоком 14-MOVE происходит запирание на время отправки. При наличии аварий на выходе "SendAlarm" всегда висит "1" и блоки 2,4,5,6,7,8,9 отвечают за отправку смс через определённый промежуток времени (может эту часть как то упростить, всем советам буду рад).Через вход "SmsSend" приходит сигнал об окончании передачи СМС.
Тексты СМСок можно задавать и через VAR_INPUT и через массив.
Посоветуйте как сделать универсальный блок что бы выделить только цифры (сумму баланса) из СМС-ки при запросе баланса. У операторов всё время что-то меняется и от чего отталкиваться, что бы это постоянно работало, не знаешь. И подходило для всех операторов.
Можно найти позицию символов р., и выводить необходимое количество символов левее этой позиции
У меня привязка по точке или запятой, смотря какая придёт. Но это тоже не панацея, завтра они чего ни будь опять поменяют и исправляй блок по новой. Что-то не хочется.
Тоже верно. Похоже тут не получиться сделать что-то универсальное
Так я совета и прошу у спецов.
Лучше пример сделайте и выложите его или подскажите какой блок.Цитата:
в оскат бибке помоему есть определение цифр, чтоб понятнее было нагуглите ключевое слово регулярные выражения
В OSCAT это функция FIND_NUM -возвращает позицию первого символа, являющегося номером,поиск ведется с указанной позиции(FIND_NUM('wej34',1)=4)
а так же FINDB_NUM -возвращает позицию последнего символа, являющегося цифрой
http://www.prolog-plc.ru/art10
ЗЫ. Сначала FIND_NUM найти позицию первой цифры, затем FINDB_NUM, начиная с найденной позиции, найти позицию последней цифры и вырезать подстроку в этом диапазоне вот и будет сумма баланса на счете.
Где взять эту OSCAT бибку?
Бибку нашёл, но не могу указанный блок добавить в алгоритм.
Как функцию FIND_NUM добавить в проект ?
Вопрос снят.
Приветствую всех!
Вопрос такой: в мануале по части отправки смс группе указано STRING(10) : " listNum :ARRAY [0..2] OF STRING(10):=3('79012345678'); (*массив номеров....." а с семеркой номер одиннадцатизначный...
1. Т.е. должен быть STRING(11) или я чего-то неправильно понял?
2. Что означает цифра 3 в строке " STRING(10):=3('79012345678') " ?
3. Значение NumCount в блоке FB_SMS_SL должно соответствовать количеству номеров рассылки?
4. У меня контроллер ПЛК 100... это значит что FB_SMS_SL работать не будет?
Заполнение массива 3 раза по '79012345678'Цитата:
2. Что означает цифра 3 в строке " STRING(10):=3('79012345678') " ?
А для ПЛК323 есть библиотеки для работы с смс? А то из этой ветки не работает:(
Добрый день.
Не ругайтесь, я новичок.
Есть ПЛК-100 и модем ПМ-01.
Соединены по RS-485.
В модеме отключено эхо.
Все делаю по описанию библиотеки и беру программу с примера, но после запуска "cfg_ok" остается "False".
Что я могу делать не так?
ГУРУ!!! Помогите, горит проект, форум перерыл.
Минимальное время цикла ПЛК ставил 10, 20... мс, не помогает
И постоянно висит флаг BUSY блока FB_SMS_SR
Приложил скрины:
Вложение 17051 Вложение 17052 Вложение 17053 Вложение 17054
Скачал предоставленные Вами архивы библиотеки Owen Sms.lib. После извлечения и попытки открыть с помощью CoDeSys появляется окошко с предложением ввести Password. Объясните пожалуйста, что мне нужно сделать , чтобы библиотека открылась и могла быть присоединеной к проекту?
Друзья, подскажите пожалуйста к первому посту темы прикреплена актуальная версия библиотеки?
Или нужно пробежаться по всем 60 страницам в поисках последней версии?
Библиотека прикрепленная к первому сообщению системы работает нормально. У меня все получилось.
При работе с модемом ПМ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
Возник вопрос. Использую библиотеку SmsOwenLib и модуль Modem для GPRS связи. Соответственно, когда мне необходимо отправить сообщения, на модем подается команда стоп и при ModemLine=0 уже начинается работа библиотеки. При этом при попытки открыть порт через OpenCom из библиотеки SmsOwenLib порт открыть не получается. Решил удалить OpenCom и, о чудо, отправка сообщений заработала. Соответственно хотел уточнить правильно ли я понимаю, что при наличии подмодуля Modem в конфигурации, порт всегда открыт, даже если на модем приходит команда остановки и из программы можно исключать блоки OpenCom и FB_SMS_CFG?
хочу связать ваш модем с другим плк на codesys 2. Можно использовать вашу библиотеку? Если нет есть ли свободные?
ошибку дает - ошибка адреса %qb ...
codesys 2 плк abb ac500