В контроллере имеется ТЭГ, который хранит номер шага программы.
Требуется эти шаги сохранять в журнал в порядке их поступления с текстовой расшифровкой.
???Как это можно реализовать?
На данный момент создан глобальный скрипт, который выполняется по изменению ТЭГА с номером шага программы.
В скрипте оператор SWITCH CASE определяет соответствие номера шага программы текстовой строке.
Затем вызывается сообщение, куда подкидывается текстовая строка.
???При этом сообщения приходят с задержкой. Т.е. в журнал всегда пишется не текущий, а предыдущий номер шага программы. (Не могу понять почему)
???И в журнал пишется по 3 сообщения (потом нашел как одно убрать). Теперь пишется по два.
Это все было отработано на эмуляторе, боюсь что в реальных условиях скрипт не будет справляться, т.к. номер шага программы
менятся иногда очень быстро.
???Как будет вести себя скрипт, если номер шага программы поменяется во время его исполнения.???
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Как реализовать запись тэга в журнал сообщений??
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 4
- Зарегистрирован: 21 ноя 2016, 06:52
- Имя: Александр Александрович
- Страна: Россия
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 03 окт 2016, 11:50
- Имя: Ковалев Игорь
- Страна: Украина
- город/регион: Северодонецк
- Поблагодарили: 9 раз
Как реализовать запись тэга в журнал сообщений??
Добрый день.
На сколько я понял, значение тега формируется в контроллере (какой контроллер?), затем его передают на верхний уровень (WinCC? или что другое?) и там уже обрабатывают (формируют аларм). Вас не устраивает скорость передачи на верх и обработки (естественно, в контроллере его значение может меняться быстрее чем отрабатывает верх).
Скорее всего Вам нужно перенести формирование аларма в контроллер. Для этого существуют SFB36("NOTIFY"), SFB31("NOTIFY_8P"), SFB33("ALARM"), SFB34("ALARM_8"), SFB35("ALARM_8P"). Они формируют сообщения, которые попадут систему сообщений WinCC, с привязкой к времени контроллера и с циклом контроллера (т.е. точно ничего не потеряется). Только учтите, что в зависимости от контроллера (300/400/1200/1500) они могут не все поддерживаться. Информация есть и в Help-е и в "Системные и стандартные функции для S7-300 и S7-400 (6ES7810-4CA08-8BW1)"
На сколько я понял, значение тега формируется в контроллере (какой контроллер?), затем его передают на верхний уровень (WinCC? или что другое?) и там уже обрабатывают (формируют аларм). Вас не устраивает скорость передачи на верх и обработки (естественно, в контроллере его значение может меняться быстрее чем отрабатывает верх).
Скорее всего Вам нужно перенести формирование аларма в контроллер. Для этого существуют SFB36("NOTIFY"), SFB31("NOTIFY_8P"), SFB33("ALARM"), SFB34("ALARM_8"), SFB35("ALARM_8P"). Они формируют сообщения, которые попадут систему сообщений WinCC, с привязкой к времени контроллера и с циклом контроллера (т.е. точно ничего не потеряется). Только учтите, что в зависимости от контроллера (300/400/1200/1500) они могут не все поддерживаться. Информация есть и в Help-е и в "Системные и стандартные функции для S7-300 и S7-400 (6ES7810-4CA08-8BW1)"
-
- здесь недавно
- Сообщения: 4
- Зарегистрирован: 21 ноя 2016, 06:52
- Имя: Александр Александрович
- Страна: Россия
Как реализовать запись тэга в журнал сообщений??
Забудем написанное выше, Объясните, пожалуйста, непонятку.
Имеем скрипт, который вызывается по тегу Prog_Step (Upon change)
Так вот, после изменения Prog_Step, вызывается скрипт, переписывается Text_Tag на новое значение, а в журнале записывается не новое, а предыдущее значение. не понимаю механизма работы скрипта.
Имеем скрипт, который вызывается по тегу Prog_Step (Upon change)
В Alarm logging добавил сообщение, где Msg_Init - Message tag, а Text_Tag - Process value....
switch (GetTagDWord(Prog_Step))
{
case 1: sprintf(Tmp_Str, "Step_1"); break;
case 2: sprintf(Tmp_Str, "Step_2"); break;
case 3: sprintf(Tmp_Str, "Step_3"); break;
case 4: sprintf(Tmp_Str, "Step_4"); break;
case 5: sprintf(Tmp_Str, "Step_5"); break;
case 6: sprintf(Tmp_Str, "Step_6"); break;
case 7: sprintf(Tmp_Str,"Step_7"); break;
case 8: sprintf(Tmp_Str,"Step_8"); break;
case 9: sprintf(Tmp_Str,"Step_9"); break;
case 10: sprintf(Tmp_Str,"Step_10"); break;
default: sprintf(Tmp_Str, "Unknown>more than 10"); break;
}
SetTagChar(Text_Tag, Tmp_Str);
SetTagBit(Msg_Init, 0);
SetTagBit(Msg_Init, 1);
Так вот, после изменения Prog_Step, вызывается скрипт, переписывается Text_Tag на новое значение, а в журнале записывается не новое, а предыдущее значение. не понимаю механизма работы скрипта.
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Как реализовать запись тэга в журнал сообщений??
1. Видимо, в Alarm Logging сообщение находится в классе сообщений, которое необходимо квитировать, поэтому и статуса у него 2 (пришло, ушло не квитированным).
Вообще, сообщение может иметь до четырех состояний (статус) :
– Пришло;
– Пришло, квитировано;
– Пришло, ушло, не квитировано;
– Пришло, ушло, квитировано.
Хронометраж:
1. Ваше сообщение пришло и записалось в базу с Text_Tag = "text1"
2. Обнулили "Message Tag" и сообщение поменяло статус (по факту - это новое сообщение), но Text_Tag = "text1" берется из первого пункта из базы.
Я так понимаю, Вам нужен что-то типа журнал событий: сообщение пришло и записалось в базу (но его не надо ни квитировать, ни чего либо еще с ним делать). Поэтому сообщение должно быть в классе сообщений "без квитирования" и "без состояния "Ушло"" (см. картинку - выделены красным те самые позиции).
А насчет скрипта: рекомендую делать так по изменению тега. Хотя вариант взведения "Message Tag", а потом его обнуления тоже имеет право на жизнь (но система тревог AlarmLogging может не успеть "схватить" его взведение)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 4
- Зарегистрирован: 21 ноя 2016, 06:52
- Имя: Александр Александрович
- Страна: Россия
Как реализовать запись тэга в журнал сообщений??
Попробуем заново. Озвучу задачу, подтолкните кто нибудь в нужном направлении.
Имеется связка S7-300 + Win CC. Требуется вести лог одного тэга (DINT - Около 150 разных значений) в журнал сообщений + для каждого числового значения в соответствующее сообщение журнала дописывать определенную текстовую строчку. Как реализовать с минимальным колдовством, и желательно без перепрошивки контроллера.
LexSL
Почему вот так тот же эффект. Приходит, например, сперва Prog_Step =1, потом Prog_Step =2. В журнале будет сообщение Step_1.
Изменяем Prog_Step на 3, в журнале Step_2.
Имеется связка S7-300 + Win CC. Требуется вести лог одного тэга (DINT - Около 150 разных значений) в журнал сообщений + для каждого числового значения в соответствующее сообщение журнала дописывать определенную текстовую строчку. Как реализовать с минимальным колдовством, и желательно без перепрошивки контроллера.
LexSL
Почему вот так тот же эффект. Приходит, например, сперва Prog_Step =1, потом Prog_Step =2. В журнале будет сообщение Step_1.
Изменяем Prog_Step на 3, в журнале Step_2.
Aleksky писал(а): ...
SetTagBit(Msg_Init, 0);
switch (GetTagDWord(Prog_Step))
{
case 1: sprintf(Tmp_Str, "Step_1"); break;
case 2: sprintf(Tmp_Str, "Step_2"); break;
case 3: sprintf(Tmp_Str, "Step_3"); break;
case 4: sprintf(Tmp_Str, "Step_4"); break;
case 5: sprintf(Tmp_Str, "Step_5"); break;
case 6: sprintf(Tmp_Str, "Step_6"); break;
case 7: sprintf(Tmp_Str,"Step_7"); break;
case 8: sprintf(Tmp_Str,"Step_8"); break;
case 9: sprintf(Tmp_Str,"Step_9"); break;
case 10: sprintf(Tmp_Str,"Step_10"); break;
default: sprintf(Tmp_Str, "Unknown>more than 10"); break;
}
SetTagChar(Text_Tag, Tmp_Str);
SetTagBit(Msg_Init, 1);
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 01 фев 2017, 12:06
- Имя: Бакшаев Евгений Игоревич
- Поблагодарили: 1 раз
Как реализовать запись тэга в журнал сообщений??
Вместо активации сообщения по Msg_Init воспользуйтесь стандартной функцией GCreateMyOperationMsg, ее описание есть в справке по WinCC. Либо можете реализовать ее аналог, воспользовавшись функциями ODK.