Простой вопрос по Alarm Logging

Панели оператора PP/OP/TP/TD/MP.
Программные пакеты ProTool/WinCC flexible, SCADA система WinCC
Post Reply
Vexx
Posts: 47
Joined: Thu Oct 13, 2005 12:45 pm
Location: Kazahstan

Простой вопрос по Alarm Logging

Post by Vexx » Sat Jun 03, 2017 7:07 pm

Приветствую.

Может мой вопрос простой и тупой но чтото в мануалах не нашел.
Задача простая при изменении значения в поле ввода, надо выдать сообщение в журнал. Я понимаю что надо просто повесить C-скрипт. Но как в нем вызавать сообщение номером 3 из Alarm Logging?

Usver
Posts: 143
Joined: Fri Feb 24, 2012 8:28 am

Re: Простой вопрос по Alarm Logging

Post by Usver » Mon Jun 05, 2017 8:06 am

Оно описано в документации по ODK6. (У меня работает на WinCC 7.0, 6.2)
Примерно так:

Code: Select all

#pragma code("kernel32.dll")
BOOL GetLocalTime(SYSTEMTIME* sysTime);
#pragma code()

#include "m_global.h"
#include "msrtapi.h"
...
...
...
  CMN_ERROR Error;
  SYSTEMTIME sysTime;
  MSG_RTCREATE_STRUCT msg;
  DWORD dwConnID = 0;
  BOOL ret = FALSE;

  GetLocalTime(&sysTime);

  msg.dwMsgNr = 1774; //номер сообщения в аларм логине (у Вас 3)
  msg.stMsgTime = sysTime;
  msg.dwMsgState = MSG_STATE_COME;
  msg.dwFlags = MSG_FLAG_TEXTVALUES;
  msg.wTextValueUsed = 0x07; // номера 0,1,2
  strncpy(msg.mtTextValue[0].szText, "Текст 1", MSG_MAX_TEXTVALUE);//У меня это сообщение
  strncpy(msg.mtTextValue[1].szText, "Текст 2", MSG_MAX_TEXTVALUE);
  strncpy(msg.mtTextValue[2].szText, "Текст 3", MSG_MAX_TEXTVALUE);

  if (MSRTStartMsgService(&dwConnID, NULL, NULL, 0, NULL, &Error))
  {
    ret = MSRTCreateMsg(dwConnID, &msg, &Error);
    ret = MSRTStopMsgService(dwConnID, &Error);
  } 
А в Alarm Logging в полях "User text block -2" например, у меня записано @2%s@, в третьем @3%s@, а в первом - "Изменение задания оператором @1%s@".

Post Reply