SIEMENS, DF&PD

Предыдущее посещение: Пн июн 27, 2016 0:42 Текущее время: Пн июн 27, 2016 0:42

Часовой пояс: UTC + 3 часа




 [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Системный сообщения о действиях оператора Multi-User проекте
СообщениеДобавлено: Ср ноя 19, 2014 14:00 
Не в сети
Известный Писатель

Зарегистрирован: Чт авг 07, 2014 10:17
Сообщения: 100
Откуда: Вологда
Не получается реализовать требуемый функционал.
Нужно чтоб действия пользователя писались.
Для этого сделал кнопку.
Изображение

При нажатии на кнопку происходит запись в тег значения 1. К этому тегу создана запись в ALArmLogging "Команда на открытие задвижки на входе ГРПБ", но так как я поставил галку "Operator Input Message" сообщение подменяется системным. Стр 995.
Изображение

Как сделать чтоб при нажатии на кнопку текст сообщения не был пустым, а в поля компьютер (Computer NAme) и пользователь (User Name) соответственно были ПК, и пользователь WinCC, откуда был послан сигнал на управление.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 19, 2014 15:33 
Не в сети
Известный Писатель

Зарегистрирован: Чт авг 07, 2014 10:17
Сообщения: 100
Откуда: Вологда
к примеру в I\O Field поставил опцию "Operator input message".
Появляется сообщение. Но текста нет, и что делал пользователь понятно только для меня. По строкам значения процесса: что уставка поменяна -11 на -10. Стр 1000.
Изображение

как сделать сообщения информативней.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 19, 2014 20:03 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 30, 2006 15:53
Сообщения: 265
Откуда: Краснодар
При установленной галочке "Operator input message" для генерации сообщений используется шаблон №1013004 (см. в Alarm Logging).
Не могу вспомнить навскидку, либо в этом шаблоне при генерации сообщения вообще не заполняются поля, отвечающие за показ нужной вам информации, либо информация записывается, но не в те поля, которые потом выводятся в журнале сообщений.
Есть два пути решения этой проблемы, они описаны Владимиром Юрченко и СорокДва в http://iadt.siemens.ru/forum/viewtopic.php?t=12600&highlight=msgcreate

Также можно поискать по форуму и по документации ODK что-то вроде "CreateMsg"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2014 11:05 
Не в сети
Известный Писатель

Зарегистрирован: Чт авг 07, 2014 10:17
Сообщения: 100
Откуда: Вологда
Спасибо, Бронислав! Удалось сделать то что надо!
еще англоязычный пост может кому поможет.
https://support.automation.siemens.com/ ... viewreg=WW


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2014 12:02 
Не в сети
Известный Писатель

Зарегистрирован: Чт авг 07, 2014 10:17
Сообщения: 100
Откуда: Вологда
видно рано я радовался никто не подскажет почему может быть такое.
Создал сообщение в AlarmLogging под номером 48.
Далее на кнопку добавил с-скрипт.
Код:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
long sMsgNr[1] = 48;
char szSource[256] = "TIC4711";
char szArea[256] = "AREA48";
char szEvent[256] = "szEvent";
char szBatch[256] = "szBatch";
char szUnit[256] = "szUnit";

static float  fVal = (float) 0.0;
float  fValOld = fVal;
char szComment[256] = "szComment";


fVal += (float)0.1;
ISALG_OperationLog(sMsgNr,szSource, szArea, szEvent, szBatch, szUnit, fValOld ,fVal , szComment);

SetTagBit("PLC4_auma1_fieldbus_open_310_0",1);   //Return-Type: BOOL
}


Сам код функции
Код:
#pragma code ("kernel32.dll")
void GetLocalTime(  LPSYSTEMTIME lpSystemTime);
BOOL GetComputerNameA(LPSTR Computername, LPDWORD size);
#pragma code()

#ifndef RUN_ON_WEBNAVIGATOR
   #pragma code ("useadmin.dll")
      BOOL PWRTGetCurrentUser (LPTSTR dest, int bufsize );
   #pragma code()
#endif


int ISALG_OperationLog( long* psMsgNumber,
            char* pszSource,
                        char* pszArea,
                        char* pszEvent,
                        char* pszBatch,
                        char* pszUnit,
                        double fOld,
                        double fNew,
                        char* pszComment )
{

MSG_RTDATA_INSTANCECOMMENT_STRUCT    MsgCreateEx;
CMN_ERROR               scError;   
int                  iRet= FALSE;
DWORD                      dwServiceID = 0;
BOOL                   bOK;
SYSTEMTIME               time;
DWORD               dwBufSize   = 256;
BOOL Web;

char szComputerName[256]= "";

char szSource[256]    = "";
char szUnit[256]    = "";
char szEvent[256]    = "";
char szBatch[256]    = "";
char szUser[256]   = "";

char *szNoUser      = ""; // просто пусто было
char *szWebUser   = "";

//======================================
// INIT_MESSAGE_STRUCT
//======================================
memset(&MsgCreateEx,0,sizeof(MsgCreateEx));
memset(&scError,0,sizeof(scError));
GetLocalTime(&time);
MsgCreateEx.stMsgTime = time;
MsgCreateEx.dwMsgNr = *psMsgNumber;      // Message Number; (default=12508141)
MsgCreateEx.wPValueUsed = (WORD)(0x0000 );    // no real process value used
MsgCreateEx.wTextValueUsed   = 0x001F;      // text values 1 .. 5 used for textblocks 1 .. 5
MsgCreateEx.dwFlags = MSG_FLAG_COMMENT | MSG_FLAG_TEXTVALUES;
MsgCreateEx.dwMsgState = MSG_STATE_COME;     

if ( pszComment != NULL) {
   strncpy(MsgCreateEx.szComment, pszComment, sizeof (MsgCreateEx.szComment) - 1);
   }

if(pszUnit != NULL){
     strncpy(szUnit, pszUnit, sizeof (szUnit) - 1);
   }

// replasce username, if not availble (below Web Navigator V7.0)
// Get user-name
#ifdef RUN_ON_WEBNAVIGATOR
                szWebUser = GetTagChar("@local::@CurrentUserName"); //@local::@CurrentUserName  @NOTP::@CurrentUser
                szNoUser                           = "--- unknown web-user ---";
#else
                PWRTGetCurrentUser (szUser, sizeof (szUser));
                szNoUser                           = "--- unknown user ---";
#endif

// replace username, if not availble (below Web Navigator V7.0)
if (strlen(szUser) > 1){
                strncpy (MsgCreateEx.szUser,  szUser,  15 ); // 16 character - Endsign ('\0')
                }
else {
//            strncpy (MsgCreateEx.szUser, szNoUser, strlen(szNoUser));
                strncpy (MsgCreateEx.szUser, szNoUser, 15); // 16 character - Endsign ('\0')
                }

GetComputerNameA(szComputerName, &dwBufSize);
strncpy (MsgCreateEx.szComputerName, szComputerName, 15);


if (pszSource!= NULL) {
     strncpy (szSource, pszSource, sizeof (szSource) - 1);
     strncpy ( MsgCreateEx.szInstance, pszSource, sizeof (MsgCreateEx.szInstance) - 1);
     strncpy ( MsgCreateEx.mtTextValue[0].szText, szSource, sizeof (MsgCreateEx.mtTextValue[0].szText) - 1);      
   }

if (pszArea!= NULL) {
   strncpy ( MsgCreateEx.mtTextValue[1].szText, pszArea, sizeof (MsgCreateEx.mtTextValue[1].szText) - 1);
   }
      
if (pszEvent!= NULL){
     sprintf (szEvent, "%s\\%s: %s   new=%.3f  old=%.3f  [%s]" , szComputerName, MsgCreateEx.szUser, pszEvent, fNew, fOld, szUnit);
     strncpy  (MsgCreateEx.mtTextValue[2].szText, szEvent, sizeof (MsgCreateEx.mtTextValue[2].szText) -1);      
     strncpy  (MsgCreateEx.mtTextValue[4].szText, szEvent, sizeof (MsgCreateEx.mtTextValue[4].szText) -1);      
   }

if (pszBatch != NULL){
     strncpy (szBatch, pszBatch , sizeof (szBatch) - 1);
     strncpy  (MsgCreateEx.mtTextValue[3].szText, szBatch, sizeof (MsgCreateEx.mtTextValue[3].szText) -1);      
   }

   printf ("#I201: ISALG_OperationLog()  - szSource=\"%s\"  szEvent=\"%s\"\r\n", szSource, szEvent);
   printf ("MsgCreateEx.szUser: >%s<\r\n", MsgCreateEx.szUser);
   printf ("MsgCreateEx.szComputerName: >%s<\r\n", MsgCreateEx.szComputerName);

//======================================
// START_MESSAGE_SERVICE
//======================================
bOK= MSRTStartMsgService(   &dwServiceID,   NULL,   NULL, (DWORD)0, NULL, NULL);

if (bOK == FALSE){
     printf("#E101: ISALG_OperationLog() - Unable to start message service!");
     return (-101);
   }

//======================================
// CREATE_MESSAGE_INSTANCE
//======================================
bOK = MSRTCreateMsgInstanceWithComment(dwServiceID, &MsgCreateEx, &scError) ;     //Create Message

if(bOK == FALSE){
  printf ("#E301: ISALG_OperationLog()  - Error at MSRTCreateMsg()  szErrorText=\"%s\"\r\n", scError.szErrorText);
  iRet = -301;
   }

//======================================
// STOP_MESSAGE_SERVICE
//======================================
bOK= MSRTStopMsgService(   dwServiceID, &scError);   

return (iRet);
}


Вопрос вот в чем. Запускаю проект на сервере, подключаюсь с клиента через Interconnect. Логинюсь в WinCC. Запускаю кнопку на открытие и сообщение появляется с записью пользователь и компьютер, но стоит мне залогиниться в WinCC на сервере или с другого клиента. То при нажатии кнопки сообщение создается, но поле пользователь и компьютер становятся пустыми на любом клиенте WinCC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2014 12:36 
Не в сети
Известный Писатель

Зарегистрирован: Чт авг 07, 2014 10:17
Сообщения: 100
Откуда: Вологда
Получается после входа в WinCC вообще сообщение перестает выводится
Изображение

НА скрине сообщение появляется сначала, пока в WinCC не выполнен вход. После этого сообщения вообще нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2014 13:42 
Не в сети
Писатель со стажем

Зарегистрирован: Чт май 29, 2008 15:48
Сообщения: 985
Откуда: Минск
Легких путей не ищете.
Вам нужно разобраться, куда и кто логинится.
Повесьте на кнопку
Код:
printf ("user = %s<\r\n", GetTagChar("@CurrentUser"));
printf ("user = %s<\r\n", GetTagChar("@local::@CurrentUser"));
printf ("user = %s<\r\n", GetTagChar("@NOSP::@CurrentUser"));

Понажимайте ее на сервере. На клиенте. С логином сервера, с логином клиента итд.
И понаблюдайте, что будет выводится в диагностическом окне.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2014 14:25 
Не в сети
Известный Писатель

Зарегистрирован: Чт авг 07, 2014 10:17
Сообщения: 100
Откуда: Вологда
почему то после входа в WinCC сообщение вообще перестает генерироваться.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], YandexBot и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group