1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Как реализовать запись тэга в журнал сообщений??

Ответить

Автор темы
Aleksky
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 21 ноя 2016, 06:52
Имя: Александр Александрович
Страна: Россия

Как реализовать запись тэга в журнал сообщений??

Сообщение Aleksky »

В контроллере имеется ТЭГ, который хранит номер шага программы.
Требуется эти шаги сохранять в журнал в порядке их поступления с текстовой расшифровкой.
???Как это можно реализовать?

На данный момент создан глобальный скрипт, который выполняется по изменению ТЭГА с номером шага программы.
В скрипте оператор SWITCH CASE определяет соответствие номера шага программы текстовой строке.
Затем вызывается сообщение, куда подкидывается текстовая строка.

???При этом сообщения приходят с задержкой. Т.е. в журнал всегда пишется не текущий, а предыдущий номер шага программы. (Не могу понять почему)
???И в журнал пишется по 3 сообщения (потом нашел как одно убрать). Теперь пишется по два.

Это все было отработано на эмуляторе, боюсь что в реальных условиях скрипт не будет справляться, т.к. номер шага программы
менятся иногда очень быстро.
???Как будет вести себя скрипт, если номер шага программы поменяется во время его исполнения.???

KIgor
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 03 окт 2016, 11:50
Имя: Ковалев Игорь
Страна: Украина
город/регион: Северодонецк
Поблагодарили: 9 раз

Как реализовать запись тэга в журнал сообщений??

Сообщение KIgor »

Добрый день.
На сколько я понял, значение тега формируется в контроллере (какой контроллер?), затем его передают на верхний уровень (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)"

Автор темы
Aleksky
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 21 ноя 2016, 06:52
Имя: Александр Александрович
Страна: Россия

Как реализовать запись тэга в журнал сообщений??

Сообщение Aleksky »

Забудем написанное выше, Объясните, пожалуйста, непонятку.
Имеем скрипт, который вызывается по тегу Prog_Step (Upon change)
...
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);
В Alarm logging добавил сообщение, где Msg_Init - Message tag, а Text_Tag - Process value.
Так вот, после изменения Prog_Step, вызывается скрипт, переписывается Text_Tag на новое значение, а в журнале записывается не новое, а предыдущее значение. не понимаю механизма работы скрипта.

LexSL
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 59 раз
Поблагодарили: 44 раза

Как реализовать запись тэга в журнал сообщений??

Сообщение LexSL »

Aleksky писал(а): ???И в журнал пишется по 3 сообщения (потом нашел как одно убрать). Теперь пишется по два.
Aleksky писал(а): В Alarm logging добавил сообщение, где Msg_Init - Message tag, а Text_Tag - Process value.
1. Видимо, в Alarm Logging сообщение находится в классе сообщений, которое необходимо квитировать, поэтому и статуса у него 2 (пришло, ушло не квитированным).
Вообще, сообщение может иметь до четырех состояний (статус) :
– Пришло;
– Пришло, квитировано;
– Пришло, ушло, не квитировано;
– Пришло, ушло, квитировано.

Хронометраж:
1. Ваше сообщение пришло и записалось в базу с Text_Tag = "text1"
2. Обнулили "Message Tag" и сообщение поменяло статус (по факту - это новое сообщение), но Text_Tag = "text1" берется из первого пункта из базы.

Я так понимаю, Вам нужен что-то типа журнал событий: сообщение пришло и записалось в базу (но его не надо ни квитировать, ни чего либо еще с ним делать). Поэтому сообщение должно быть в классе сообщений "без квитирования" и "без состояния "Ушло"" (см. картинку - выделены красным те самые позиции).
classMessage.png
А насчет скрипта: рекомендую делать так по изменению тега. Хотя вариант взведения "Message Tag", а потом его обнуления тоже имеет право на жизнь (но система тревог AlarmLogging может не успеть "схватить" его взведение)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
Aleksky
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 21 ноя 2016, 06:52
Имя: Александр Александрович
Страна: Россия

Как реализовать запись тэга в журнал сообщений??

Сообщение Aleksky »

Попробуем заново. Озвучу задачу, подтолкните кто нибудь в нужном направлении.

Имеется связка 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);

bei
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 01 фев 2017, 12:06
Имя: Бакшаев Евгений Игоревич
Поблагодарили: 1 раз

Как реализовать запись тэга в журнал сообщений??

Сообщение bei »

Вместо активации сообщения по Msg_Init воспользуйтесь стандартной функцией GCreateMyOperationMsg, ее описание есть в справке по WinCC. Либо можете реализовать ее аналог, воспользовавшись функциями ODK.
Ответить

Вернуться в «WinCC»