Page 1 of 1

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

Posted: Sat Jun 03, 2017 7:07 pm
by Vexx
Приветствую.

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

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

Posted: Mon Jun 05, 2017 8:06 am
by Usver
Оно описано в документации по 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@".