plcforum.uz.ua

International PLC Forum
It is currently Sun Sep 23, 2018 7:33 pm

All times are UTC + 3 hours


Forum rules


Please click here to view the forum rules



Post new topic Reply to topic  [ 52 posts ]  Go to page Previous  1, 2
Author Message
PostPosted: Wed May 30, 2018 7:03 pm 

Joined: Wed Oct 13, 2010 11:44 am
Posts: 228
Location: Russian Federation
Любой скрипт есть пользовательская функция... Из любого скрипта можно вызвать любую объявленную функцию... А уж какие теги подвешены на входные параметры, и на какой тег подвешено возвращаемое значение - дело вашей фантазии.

Я по-прежнему не понимаю, зачем необходимо огромное кол-во скриптов, и тем более общий сигнал "ручной/автомат". У каждого механизма это должен быть свой сигнал.
Пару лет назад довелось писать блок-иконки и фейсплейты для аналогового канала и ПИД-регулятора. Скриптов внутри практически не было, а те что были - работали по событиям, в основном от пользователя (нажал на кнопку, поставил галочку, выбрал значение из списка и т.п.), поэтому систему вообще не нагружали. Вся остальная динамика работала через прямую привязку тегов к свойствам объектов.


Top
 Profile  
 
PostPosted: Tue Sep 11, 2018 1:29 pm 

Joined: Sat Oct 31, 2015 11:09 am
Posts: 3
Здравствуйте. У меня вопрос схожий с автором, правда я занялся wincc после wanderware intouch и часть функционала wincc мне не до конца понятна. Версия wincc классическая 7.4.
Например как сделать объект который состоит из пиктограммы, которая включает в себя ряд свойств. При нажатии на этот объект открывается вспылвающее окно с дополнительными параметрами. При этом на вход объекта я только подствляю начальный tagprefix.
Допустим объект датчик температуры, состоящий из IO field для отображения текущей величины, Circle который меняет цвет от комбинации двух тегов statusword и alarmword.
1) Я сделал faceplate type (.fpt) с параметрами, но при его вызове всеровно приходится на каждое событие писать либо скрипт либо подставлять прямой тег.
2) Делал через customizedObject там тоже самое выставляем параметры какие используются, но в итоге всеровно под каждый параметр необходимо вручную прописывать теги.
И в чем координальное различие между customizedObject и faceplate type?

Я имею ввиду есть ли функционал для объекта как для открываюшего окна с tagprefix, чтобы я вставил пикторграмму, прописал перед ним префикс DT1 и все остальные теги сами подгрузились как с тагпрефиксом.

Еще один вопрос про открывающееся окно с параметрами (faceplate) теги подргружаются через tagprefix все хорошо работает, но как я понял faceplate необходимо прогружать в заранее размещенное окно на странице. И если имеется 10 одинаковых объектов, то при открытии второго окно окажется тоже самое, просто информация подгрузится с другим tagprefix. Для решения этого я разместил 10 окон, создал внутренний тег с номером окна и сделал скрипт, который проверяет тег с номером окна и определяет в какое окно разметсить faceplate. При открытии окна скриптом увеличиваю номер окна. Этим я добился, что можно открыть 10 одинаковых faceplate для различных объектов. Но есть в этом и большой минус, что можно открыть один и тот же объект 10 раз да и выглядит это всё как мой костыль, как я понял если использовать wincc в составе PCS7, то там есть дополнительные возможности. Есть ли возможность не заморачиваться с количеством окон и дописывании своих скриптов для открытия большого количества окон-faceplate.

Image
Image
Image

Вот прилагаю скриншот с проекта, который изучаю. Как видно при вставке fpt вручную прописывали для параметров скрипты, для изменения свойств.Внутри скриптов теги прописаны прямые.Хотя для данного экземпляра все теги начинаются FLT/A25/Pump422.

Так же в проекте который изучаю для открытия faceplate используется следующий скрипт. Имеется 10 окон TOP_WND1-TOP_WND10.
Т.е. они пошли тем же путем, что и я, просто написав более мощный скрипт.

Code:
// Fonction:         La fonction ouvre la vue type de l'équipement selon les paramètres lpszBlocType
#include "apdefap.h"
char *MInterface_OpenBlockPicture(char *lpszPictureName, char *lpszObjectName)
{
#define FCT_NAME "MInterface_OpenBlockPicture"
#define MAX_WINDOW_OPENED 10

long screen = 0;
char szBasePicture[256] = "";
char *psz = NULL;
long i = 0;
char szPictureWindowName[256] = "";
char *pszBlocType = NULL;
char *pszWindowTitle = NULL;
char *pszComment = NULL;
char *pszTagPrefix = NULL;
char szPicturePath[256] = "";
BOOL bWindowOK = FALSE;
char szWindowTagPrefix[256] = "";
char szTagPrfx[256] = "";
long StarterType = 0;
BOOL bHasStarterType = FALSE;
char StarterTypeObjects[21][256] = {"M_Motor", "M_Motor_State",  "M_Motor_Pump", "M_PumpC", "M_PUMP1","M_PumpCNew", "M_MagnSep",
      "M_Pump", "M_BlowerX3", "M_FCELL", "M_BlowerX1", "M_PUMP0", "M_Pump5",
      "M_Deslimer", "M_AGITATOR", "M_FCELL","M_FEEDER_STATE1","M_SCREEN","M_Fan_State","M_ROUGHER","M_FAN"};
int k = 0;
static char szRetValue[256] = "";


char *pszObjectType = GetPropChar(lpszPictureName, lpszObjectName, "FaceplateType");
//printf("\r\n%s: Object Type = %s", FCT_NAME, pszObjectType);
//screen = MInterface_GetScreen(lpszPictureName);   //Return-Type: long int
pszBlocType = GetPropChar(lpszPictureName, lpszObjectName, "BlocTypeText");
strcpy(szRetValue, "");

strncpy(szBasePicture, lpszPictureName, sizeof(szBasePicture)-1);
psz = strstr(szBasePicture, "MINT_WORK");
if (psz)
   {
   psz += strlen("MINT_WORK");
   *(psz) = '\0';
   //printf("\r\n%s:: szBasePicture = %s", FCT_NAME, szBasePicture);
   
   for (i = 1; i<MAX_WINDOW_OPENED; i++)
      {
      sprintf(szPictureWindowName, "TOP_WND%d", i);
      //printf("\r\n%s:: szPictureWindowName (%d)= %s", FCT_NAME, i,szPictureWindowName);
   
      if (FALSE == GetVisible (szBasePicture, szPictureWindowName))
         {
         //printf("\r\n%s:: Window available = %s", FCT_NAME, szPictureWindowName);
         // SetTagPrefix(szBasePicture, szPictureWindowName, "");
         SetPictureName ( szBasePicture, szPictureWindowName, pszBlocType);
         SetVisible (szBasePicture, szPictureWindowName, TRUE);
      
         // Positionner les propriétés intrinsèques à la fenêtre

         // Récupération du chemin complet de la vue affichée dans la fenêtre de vue
         strncpy(szPicturePath, szBasePicture, sizeof(szPicturePath)-1);
         strncat(szPicturePath, ".", sizeof(szPicturePath)-1);
         strncat(szPicturePath, szPictureWindowName, sizeof(szPicturePath)-1);
         strncat(szPicturePath, ":", sizeof(szPicturePath)-1);
         strncat(szPicturePath, pszBlocType, sizeof(szPicturePath)-1);
         strncpy(szRetValue, szPicturePath, sizeof(szRetValue)-1);

         //printf("\r\n%s:: szPicturePath= %s", FCT_NAME, szPicturePath);

         // Tag Prefix
         if (1==GetPropBOOL(lpszPictureName, lpszObjectName, "FullTagPrefix"))
            {
            // TAG Prefix: Cas standard
            pszTagPrefix = GetPropChar(lpszPictureName, lpszObjectName, "TagPrefix");
            if (!StringIsNullOrEmpty(pszTagPrefix))
               strncpy(szTagPrfx, pszTagPrefix , sizeof(szTagPrfx)-1);

            if (0 == strncmp(szTagPrfx, "NOTP", 4))
               szTagPrfx[0] = '\0';
            }
         else
            {
            // TAG Prefix: Cas ou on est dans une fenetre de vue:
            STD_GetPictureTagPrefix(lpszPictureName,szWindowTagPrefix,sizeof(szWindowTagPrefix)-1);   //Return-Type: BOOL
            if (!StringIsNullOrEmpty(szWindowTagPrefix))
               {
               char *pszObjectPrfx = GetTagPrefix(lpszPictureName, lpszObjectName);
            
               strncpy(szTagPrfx, szWindowTagPrefix, sizeof(szTagPrfx)-1);

               if (!StringIsNullOrEmpty(pszObjectPrfx))
                  strncat(szTagPrfx, pszObjectPrfx, sizeof (szTagPrfx)-1);
               }
            }

         // Starting Mode for Motor Objects
         for (k=0;k<21;k++)
            {
            //printf("\r\n StarterTypeObjects[%d] = %s", k, StarterTypeObjects[k]);
            if (strstr(pszBlocType, StarterTypeObjects[k]))
               {
               bHasStarterType = TRUE;
               break;
               }
            }
         if (bHasStarterType)   StarterType = (long)GetPropDouble (lpszPictureName, lpszObjectName,"StarterType");   

         //printf("\r\n%s: TagPrefix = %s", FCT_NAME, szTagPrfx);
//printf("\r\n%s: has starter type = %d", FCT_NAME, bHasStarterType);
//      printf("\r\n%s: ObjectFound (k-1=%d) = %s", FCT_NAME, k, StarterTypeObjects[k-1]);

         // Window Title
         //pszWindowTitle = GetPropChar(   lpszPictureName, lpszObjectName, "Tag");
         pszWindowTitle = szTagPrfx;
         if (pszWindowTitle)
            {
            SetPropChar(szBasePicture, szPictureWindowName, "CaptionText", pszWindowTitle);
            }
         else
            {
            SetPropChar(szBasePicture, szPictureWindowName, "CaptionText", "Error while getting tag");
            }

         // Value comment
         //pszComment = GetPropChar(lpszPictureName, lpszObjectName, "Comment");
         pszComment = szTagPrfx;
         if (pszComment == NULL)
            {
            SetPropChar(szPicturePath, "txtComment",  "Text", " - ");
            }
         else
            {
            SetPropChar(szPicturePath, "txtComment",  "Text", pszComment);
            }

         // Starting Mode for Motor Objects
         if (bHasStarterType)   SetOutputValueDouble(szPicturePath, "txtListStarterType",  StarterType);
//
         SetText(szPicturePath, "txtTagPrefix",  szTagPrfx);

         //printf("\r\n%s: pszBlocType = %s", FCT_NAME, pszBlocType);
         if (strstr(pszBlocType, "M_Analog") || strstr(pszBlocType, "M_AO"))
            {
            LINKINFO Info;
            SetText(szPicturePath, "txtUnit", GetPropChar(lpszPictureName, lpszObjectName, "Unit"));
         
            if (!GetLink(lpszPictureName, lpszObjectName, "OutputValue", &Info))
               printf("\r\n%s: Error with GetLink Function", FCT_NAME);
            else
               {
               printf("\r\n%s: LinkName = %s", FCT_NAME, Info.szLinkName);
               SetText(szPicturePath, "txtTag",  Info.szLinkName);
               }
            }

            
         SetVisible(szPicturePath, "WIN_STD",  FALSE);
         SetPropChar(szPicturePath, "WIN_STD",  "TagPrefix", szTagPrfx);
         SetVisible(szPicturePath, "WIN_STD",  TRUE);

         bWindowOK = TRUE;
         }

      if (bWindowOK)
         break;
      }
   
   }
//printf("\r\n%s: End___", FCT_NAME);
return szRetValue;
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 52 posts ]  Go to page Previous  1, 2

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by International PLCforum® Forum Software © PLCforum
Mobile version