InTouch 7.0 - Opis funkcji, pól i zmiennych systemowych
Transkrypt
InTouch 7.0 - Opis funkcji, pól i zmiennych systemowych
Wonderware FactorySuite Opis funkcji, pól i zmiennych systemowych Podręcznik Użytkownika Wersja A Grudzień 1997 Wonderware Corporation Wszystkie prawa zastrzeżone. Żaden fragment niniejszej publikacji nie może być kopiowany, przechowywany w systemie do wyszukiwania informacji, przesyłany za pomocą jakichkolwiek metod, elektronicznych, mechanicznych, fotokopiowania, nagrywania, lub też w jakikolwiek inny sposób, bez uprzedniego otrzymania pisemnej zgody Wonderware Corporation. Nie jest przejmowana żadna odpowiedzialność prawna za naruszenie praw autorskich lub patentowych, w związku z korzystaniem z zawartych w niniejszej publikacji informacji. Dołożono wszelkich starań, aby informacje zawarte w tej publikacji były kompletne i rzetelne, jednakże ani wydawca ani autor nie przejmują odpowiedzialności za błędy i omyłkowe pominięcia. Nie przejmowana jest również jakakolwiek odpowiedzialność za szkody wynikłe z korzystania z zawartych tu informacji. Zawarte w niniejszym dokumencie informacje mogą ulec zmianie bez uprzedzenia, i nie są zobowiązujące dla Wonderware Corporation. Oprogramowanie opisane w niniejszej dokumentacji jest dostarczane wraz z licencją, oraz nie ujawnianą publicznie umową. Oprogramowanie może być wykorzystywane i kopiowane wyłącznie przy zachowaniu zgodności z tymi dokumentami. 1997 Wonderware Corporation. Wszystkie prawa zastrzeżone. 100 Technology Drive Irvine, CA 92618 U.S.A (714) 727-3200 http://www.wonderware.com Znaki handlowe Wszystkie terminy używane w niniejszej książce, co do których było wiadomo, że są znakami firmowymi lub oznaczeniami usług, zostały odpowiednio wyróżnione. Wonderware Corporation nie może zaświadczyć o pełnej kompletności tych informacji. Korzystanie z tych terminów w niniejszej książce nie może być traktowane jako naruszanie ważności tych znaków handlowych lub oznaczeń usług. Wonderware jest zastrzeżonym znakiem handlowym Wonderware Corporation. Wonderware FactorySuite, InTouch, WindowMaker, WindowViewer, SQL Access Manager, Recipe Manager, SPC Pro, DBDump, DBLoad, HDMerge, HistData, Wonderware Logger, InControl, InTrack, InBatch, IndustrialSQL, FactoryOffice, Scout, SuiteLink i NetDDE są zastrzeżonymi znakami towarowymi Wonderware Corporation. Wydawca: ASTOR sp. z o.o. ul. Smoleńsk 29, 31-112 Kraków, tel. (012) 428-63-00, fax (012) 428-63-01 e-mail: [email protected].; http://www.astor.com.pl. ISBN 83-910632-1-6 iii Spis treści Wprowadzenie Rozdział 1 - Zmienne systemowe xi 1-1 $AccessLevel ........................................................................................................................................................ 1-2 $AlarmLogging...................................................................................................................................................... 1-3 $AlarmPrinterError................................................................................................................................................ 1-3 $AlarmPrinterNoPaper .......................................................................................................................................... 1-4 $AlarmPrinterOffline............................................................................................................................................. 1-4 $AlarmPrinterOverflow......................................................................................................................................... 1-5 $ApplicationChanged ........................................................................................................................................... 1-5 $ApplicationVersion ............................................................................................................................................. 1-6 $ChangePassword ................................................................................................................................................. 1-6 $ConfigureUsers ................................................................................................................................................... 1-7 $Date .................................................................................................................................................................... 1-7 $DateString ........................................................................................................................................................... 1-8 $DateTime ............................................................................................................................................................ 1-8 $Day ..................................................................................................................................................................... 1-8 $HistoricalLogging ............................................................................................................................................... 1-9 $Hour .................................................................................................................................................................... 1-9 $InactivityTimeout ............................................................................................................................................. 1-10 $InactivityWarning ............................................................................................................................................. 1-10 $LogicRunning ................................................................................................................................................... 1-11 $Minute .............................................................................................................................................................. 1-11 $Month ............................................................................................................................................................... 1-11 $Msec ................................................................................................................................................................. 1-12 $NewAlarm ......................................................................................................................................................... 1-12 $ObjHor .............................................................................................................................................................. 1-12 $ObjVer .............................................................................................................................................................. 1-13 $Operator ............................................................................................................................................................ 1-13 $OperatorEntered ............................................................................................................................................... 1-14 $PasswordEntered .............................................................................................................................................. 1-14 $Second .............................................................................................................................................................. 1-15 $StartDdeConversations ...................................................................................................................................... 1-15 $System ............................................................................................................................................................... 1-15 $Time ................................................................................................................................................................. 1-16 $TimeString ........................................................................................................................................................ 1-16 $Year .................................................................................................................................................................. 1-16 iv Spis treści Rozdział 2 - Pola 2-1 Typy zmiennych..................................................................................................................................................... 2-2 Zmienne typu pamięciowego (Memory) ..................................................................... 2-2 Zmienne typu I/O ........................................................................................................ 2-3 Zmienne typu pośredniego(Indirect): dyskretne, analogowe, tekstowe ...................... 2-3 Pozostałe typy zmiennych........................................................................................... 2-4 Zestawienie typów pól zmiennych ......................................................................................................................... 2-4 .Ack ....................................................................................................................................................................... 2-6 .Alarm.................................................................................................................................................................... 2-7 .AlarmDevDeadband ............................................................................................................................................. 2-8 .AlarmEnabled ....................................................................................................................................................... 2-9 .AlarmValDeadband ............................................................................................................................................ 2-10 .ChartLength ....................................................................................................................................................... 2-11 .ChartStart ........................................................................................................................................................... 2-12 .Comment ............................................................................................................................................................ 2-12 .DevTarget ........................................................................................................................................................... 2-13 .DisplayMode ..................................................................................................................................................... 2-13 .EngUnits ............................................................................................................................................................ 2-14 .HiHiLimit ........................................................................................................................................................... 2-14 .HiHiStatus .......................................................................................................................................................... 2-15 .HiLimit ............................................................................................................................................................... 2-16 .HiStatus .............................................................................................................................................................. 2-16 .LoLimit............................................................................................................................................................... 2-17 .LoLoLimit........................................................................................................................................................... 2-17 .LoLoStatus.......................................................................................................................................................... 2-18 .LoStatus .............................................................................................................................................................. 2-19 .MajorDevPct....................................................................................................................................................... 2-19 .MajorDevStatus .................................................................................................................................................. 2-20 .MaxEU .............................................................................................................................................................. 2-21 .MaxRange .......................................................................................................................................................... 2-22 .MaxRaw ............................................................................................................................................................. 2-23 .MinEU ............................................................................................................................................................... 2-24 .MinorDevPct ...................................................................................................................................................... 2-25 .MinorDevStatus.................................................................................................................................................. 2-26 .MinRange .......................................................................................................................................................... 2-27 .MinRaw ............................................................................................................................................................. 2-28 .Name .................................................................................................................................................................. 2-29 .Normal................................................................................................................................................................ 2-30 .OffMsg ............................................................................................................................................................... 2-31 .OnMsg ............................................................................................................................................................... 2-31 .Pen1 - .Pen8 ....................................................................................................................................................... 2-32 .Quality ............................................................................................................................................................... 2-34 .QualityLimit ....................................................................................................................................................... 2-36 .QualityLimitString ............................................................................................................................................. 2-36 .QualityStatus ...................................................................................................................................................... 2-37 .QualityStatusString ............................................................................................................................................ 2-37 .QualitySubstatus ................................................................................................................................................ 2-38 .QualitySubstatusString ...................................................................................................................................... 2-38 .RawValue .......................................................................................................................................................... 2-39 v .Reference ........................................................................................................................................................... 2-40 .ReferenceComplete ........................................................................................................................................... 2-40 .ROCPct............................................................................................................................................................... 2-41 .ROCStatus .......................................................................................................................................................... 2-42 .ScooterLockLeft ................................................................................................................................................ 2-43 .ScooterLockRight .............................................................................................................................................. 2-44 .ScooterPosLeft .................................................................................................................................................. 2-45 .ScooterPosRight ................................................................................................................................................ 2-46 .SPCStatus ........................................................................................................................................................... 2-47 .TagID ................................................................................................................................................................ 2-47 .TimeDate ........................................................................................................................................................... 2-48 .TimeDateString ................................................................................................................................................. 2-48 .TimeDateTime ................................................................................................................................................... 2-48 .TimeDay ............................................................................................................................................................ 2-49 .TimeHour .......................................................................................................................................................... 2-49 .TimeMinute ....................................................................................................................................................... 2-49 .TimeMonth ........................................................................................................................................................ 2-50 .TimeMsec .......................................................................................................................................................... 2-50 .TimeSecond ....................................................................................................................................................... 2-50 .TimeTime .......................................................................................................................................................... 2-51 .TimeTimeString ................................................................................................................................................. 2-51 .TimeYear ........................................................................................................................................................... 2-51 .Unack.................................................................................................................................................................. 2-52 .UpdateCount ...................................................................................................................................................... 2-53 .UpdateInProgress .............................................................................................................................................. 2-54 .UpdateTrend ...................................................................................................................................................... 2-55 .Value ................................................................................................................................................................. 2-56 .AlarmGroup ....................................................................................................................................................... 2-57 .NextPage ........................................................................................................................................................... 2-57 .NumAlarms ....................................................................................................................................................... 2-58 .PageNum ........................................................................................................................................................... 2-58 .PrevPage ............................................................................................................................................................ 2-59 .PriFrom .............................................................................................................................................................. 2-59 .PriTo .................................................................................................................................................................. 2-60 .ProviderReq ....................................................................................................................................................... 2-60 .ProviderRet ........................................................................................................................................................ 2-61 .QueryState ......................................................................................................................................................... 2-62 .QueryType ......................................................................................................................................................... 2-63 .Successful .......................................................................................................................................................... 2-64 .TotalPages ......................................................................................................................................................... 2-64 .Caption ............................................................................................................................................................... 2-65 .Enabled............................................................................................................................................................... 2-66 .ListCount ............................................................................................................................................................ 2-67 .ListIndex............................................................................................................................................................. 2-68 .NewIndex ........................................................................................................................................................... 2-69 .ReadOnly............................................................................................................................................................ 2-70 .TopIndex ............................................................................................................................................................ 2-71 .Value .................................................................................................................................................................. 2-72 .Visible ................................................................................................................................................................ 2-73 vi Spis treści Rozdział 3 - Funkcje skryptowe 3-1 Abs() ..................................................................................................................................................................... 3-2 Ack()...................................................................................................................................................................... 3-2 ActivateAPP() ....................................................................................................................................................... 3-3 almAckAll() .......................................................................................................................................................... 3-3 almAckDisplay() ................................................................................................................................................... 3-4 almAckRecent() .................................................................................................................................................... 3-4 almAckSelect() ..................................................................................................................................................... 3-5 almDefQuery() ...................................................................................................................................................... 3-5 almMoveWindow() ............................................................................................................................................... 3-6 almQuery() ............................................................................................................................................................ 3-7 almSelectAll() ....................................................................................................................................................... 3-7 almSelectItem() ..................................................................................................................................................... 3-8 almShowStats() ..................................................................................................................................................... 3-8 ArcCos() ............................................................................................................................................................... 3-8 ArcSin() ................................................................................................................................................................ 3-9 ArcTan() ............................................................................................................................................................... 3-9 ChangePassword() .............................................................................................................................................. 3-10 Cos() ................................................................................................................................................................... 3-10 DialogStringEntry() ............................................................................................................................................ 3-11 DialogValueEntry() ............................................................................................................................................ 3-12 DText() ................................................................................................................................................................ 3-13 Exp() ................................................................................................................................................................... 3-14 FileCopy() ........................................................................................................................................................... 3-14 FileDelete() ......................................................................................................................................................... 3-15 FileMove() .......................................................................................................................................................... 3-16 FileReadFields() ................................................................................................................................................. 3-17 FileReadMessage() ............................................................................................................................................. 3-18 FileWriteFields() ................................................................................................................................................ 3-19 FileWriteMessage() ............................................................................................................................................ 3-20 GetNodeName() .................................................................................................................................................. 3-20 GetPropertyD() ................................................................................................................................................... 3-21 GetPropertyI() ..................................................................................................................................................... 3-21 GetPropertyM() .................................................................................................................................................. 3-22 Hide .................................................................................................................................................................... 3-22 HideSelf .............................................................................................................................................................. 3-22 HTGetLastError() ............................................................................................................................................... 3-23 HTGetPenName() ............................................................................................................................................... 3-24 HTGetTimeAtScooter() ...................................................................................................................................... 3-24 HTGetTimeStringAtScooter() ............................................................................................................................ 3-25 HTGetValue() ..................................................................................................................................................... 3-26 HTGetValueAtScooter() ..................................................................................................................................... 3-27 HTGetValueAtZone() ......................................................................................................................................... 3-28 HTScrollLeft() .................................................................................................................................................... 3-29 HTScrollRight() .................................................................................................................................................. 3-29 HTSetPenName() ................................................................................................................................................ 3-30 HTSetPenName() ................................................................................................................................................ 3-30 HTUpdateToCurrentTime() ................................................................................................................................ 3-31 HTZoomIn() ....................................................................................................................................................... 3-31 vii HTZoomOut() ..................................................................................................................................................... 3-32 InfoAppActive() ................................................................................................................................................. 3-32 InfoAppTitle() .................................................................................................................................................... 3-33 InfoDisk() ........................................................................................................................................................... 3-34 InfoFile() ............................................................................................................................................................ 3-35 InfoInTouchAppDir() ......................................................................................................................................... 3-35 InfoResources() .................................................................................................................................................. 3-36 Int() ..................................................................................................................................................................... 3-37 IOSetAccessName() ........................................................................................................................................... 3-38 IOSetItem() ......................................................................................................................................................... 3-39 IsAnyAsyncFunctionBusy() ................................................................................................................................ 3-40 Log() ................................................................................................................................................................... 3-41 LogMessage ........................................................................................................................................................ 3-41 LogN() ................................................................................................................................................................ 3-42 Pi() ...................................................................................................................................................................... 3-42 PlaySound() ........................................................................................................................................................ 3-43 PrintHT() ............................................................................................................................................................ 3-43 PrintWindow() .................................................................................................................................................... 3-44 RecipeDelete() .................................................................................................................................................... 3-46 RecipeGetMessage() ........................................................................................................................................... 3-46 RecipeLoad() ...................................................................................................................................................... 3-47 RecipeSave() ...................................................................................................................................................... 3-48 RecipeSelectNextRecipe() .................................................................................................................................. 3-49 RecipeSelectPreviousRecipe() ............................................................................................................................ 3-50 RecipeSelectRecipe() ......................................................................................................................................... 3-51 RecipeSelectUnit() ............................................................................................................................................. 3-52 RestartWindowViewer ....................................................................................................................................... 3-53 Round() ............................................................................................................................................................... 3-53 SendKeys ............................................................................................................................................................ 3-54 SetDDEAppTopic() ............................................................................................................................................ 3-55 SetDDEItem() ..................................................................................................................................................... 3-55 SetPropertyD() .................................................................................................................................................... 3-56 SetPropertyI() ..................................................................................................................................................... 3-56 SetPropertyM() ................................................................................................................................................... 3-57 Sgn() ................................................................................................................................................................... 3-57 Show ................................................................................................................................................................... 3-58 ShowAt() ............................................................................................................................................................ 3-58 ShowHome ......................................................................................................................................................... 3-59 ShowTopLeftAt() ............................................................................................................................................... 3-59 Sin() .................................................................................................................................................................... 3-59 SPCConnect() ...................................................................................................................................................... 3-60 SPCDisconnect() ................................................................................................................................................. 3-60 SPCDisplayData() ............................................................................................................................................... 3-61 SPCLocateScooter() ............................................................................................................................................ 3-61 SPCMoveScooter().............................................................................................................................................. 3-61 SPCSaveSample()................................................................................................................................................ 3-62 SPCSelectDataset().............................................................................................................................................. 3-62 SPCSelectProduct() ............................................................................................................................................. 3-62 SPCSetControlLimits()........................................................................................................................................ 3-63 viii Spis treści SPCSetMeasurement()......................................................................................................................................... 3-63 SPCSetProductCollected()................................................................................................................................... 3-64 SPCSetProductDislpayed().................................................................................................................................. 3-64 SPCSetRangeLimits() .......................................................................................................................................... 3-64 SPCSetSpecLimits() ............................................................................................................................................ 3-65 SQLAppendStatement()....................................................................................................................................... 3-65 SQLClearParam() ................................................................................................................................................ 3-65 SQLClearStatement()........................................................................................................................................... 3-66 SQLClearTable() ................................................................................................................................................. 3-66 SQLCommit() ...................................................................................................................................................... 3-67 SQLConnect()...................................................................................................................................................... 3-68 SQLCreateTable() ............................................................................................................................................... 3-69 SQLDelete()......................................................................................................................................................... 3-70 SQLDisconnect() ................................................................................................................................................. 3-71 SQLDropTable().................................................................................................................................................. 3-71 SQLEnd() ............................................................................................................................................................ 3-71 SQLErrorMsg() ................................................................................................................................................... 3-72 SQLExecute() ...................................................................................................................................................... 3-72 SQLFirst()............................................................................................................................................................ 3-73 SQLGetRecord().................................................................................................................................................. 3-73 SQLInsert().......................................................................................................................................................... 3-74 SQLInsertEnd() ................................................................................................................................................... 3-74 SQLInsertExecute() ............................................................................................................................................. 3-75 SQLInsertPrepare().............................................................................................................................................. 3-75 SQLLast() ............................................................................................................................................................ 3-76 SQLLoadStatement() ........................................................................................................................................... 3-76 SQLManageDSN() .............................................................................................................................................. 3-77 SQLNext() ........................................................................................................................................................... 3-77 SQLNumRows() .................................................................................................................................................. 3-77 SQLPrepareStatement() ....................................................................................................................................... 3-78 SQLPrev()............................................................................................................................................................ 3-78 SQLRollback()..................................................................................................................................................... 3-79 SQLSelect() ......................................................................................................................................................... 3-80 SQLSetParamChar() ............................................................................................................................................ 3-82 SQLSetParamDate() ............................................................................................................................................ 3-82 SQLSetParamDateTime() .................................................................................................................................... 3-83 SQLSetParamDecimal() ...................................................................................................................................... 3-83 SQLSetParamFloat()............................................................................................................................................ 3-84 SQLSetParamInt() ............................................................................................................................................... 3-84 SQLSetParamLong() ........................................................................................................................................... 3-84 SQLSetParamNull()............................................................................................................................................. 3-85 SQLSetParamTime() ........................................................................................................................................... 3-85 SQLSetStatement() .............................................................................................................................................. 3-86 SQLTransact() ..................................................................................................................................................... 3-86 SQLUpdate() ....................................................................................................................................................... 3-87 SQLUpdateCurrent() ........................................................................................................................................... 3-88 Sqrt() ................................................................................................................................................................... 3-88 StartApp .............................................................................................................................................................. 3-89 StringASCII() ...................................................................................................................................................... 3-89 ix StringChar()......................................................................................................................................................... 3-90 StringFromIntg().................................................................................................................................................. 3-90 StringFromReal()................................................................................................................................................. 3-91 StringFromTime()................................................................................................................................................ 3-92 StringInString().................................................................................................................................................... 3-93 StringLeft() .......................................................................................................................................................... 3-93 StringLen() .......................................................................................................................................................... 3-94 StringLower() ...................................................................................................................................................... 3-94 StringMid() .......................................................................................................................................................... 3-95 StringReplace().................................................................................................................................................... 3-96 StringRight()........................................................................................................................................................ 3-97 StringSpace() ....................................................................................................................................................... 3-97 StringTest().......................................................................................................................................................... 3-98 StringToIntg()...................................................................................................................................................... 3-98 StringToReal()..................................................................................................................................................... 3-99 StringTrim()......................................................................................................................................................... 3-99 StringUpper()..................................................................................................................................................... 3-100 Tan() ................................................................................................................................................................. 3-100 Text()................................................................................................................................................................. 3-101 Trunc() .............................................................................................................................................................. 3-101 wcAddItem()...................................................................................................................................................... 3-102 wcClear() ........................................................................................................................................................... 3-102 wcDeleteItem() .................................................................................................................................................. 3-103 wcDeleteSelection()........................................................................................................................................... 3-103 wcErrorMessage() ............................................................................................................................................. 3-104 wcFindItem() ..................................................................................................................................................... 3-105 wcGetItem()....................................................................................................................................................... 3-106 wcGetItemData() ............................................................................................................................................... 3-107 wcInsertItem() ................................................................................................................................................... 3-108 wcLoadList() ..................................................................................................................................................... 3-108 wcLoadText() .................................................................................................................................................... 3-109 wcSaveList()...................................................................................................................................................... 3-110 wcSaveText()..................................................................................................................................................... 3-111 wcSetItemData() ................................................................................................................................................ 3-112 WWControl() .................................................................................................................................................... 3-113 WWExecute() .................................................................................................................................................... 3-114 WWPoke()......................................................................................................................................................... 3-115 WWRequest() .................................................................................................................................................... 3-116 x Spis treści Załącznik A Usuwanie zakłóceń przy korzystaniu z funkcji skryptowych A-1 Komunikaty o błędach dla obiektów sterujących okien i alarmów rozproszonych.............................................. A-2 Usuwanie zakłóceń przy korzystaniu z funkcji do obsługi receptur ..................................................................... A-3 Wyświetlanie komunikatów dla kodów błędów.................................................................................................... A-4 Nazwy pozycji DDE SPC ..................................................................................................................................... A-5 Pozycje DDE SPC sterowania i wyświetlanie............................................................ A-5 Pozycje DDE SPC bieżącej próbki............................................................................ A-7 Pozycje DDE SPC ręcznego wprowadzania ............................................................ A-10 Pozycje DDE SPC do zaznaczania .......................................................................... A-12 Usuwanie zakłóceń przy korzystaniu z funkcji skryptowych.............................................................................. A-15 Komunikaty o błędach ............................................................................................. A-15 Kody błędów dla poszczególnych baz danych.................................................................................................... A-17 Index I-1 xi Wprowadzenie W podręczniku InTouch - opis funkcji, pól i zmiennych systemowych zamieszczono wyczerpujący opis pól zmiennych, właściwości obiektów sterujących okien, właściwości obiektów alarmowych, zmiennych systemowych, oraz funkcji skryptowych. Przedstawiono również charakterystykę dodatkowych modułów: Recipe Manager, SPC Pro i SQL Access Manager. Poszczególne rozdziały zawierają: Rozdział 1 - "Zmienne systemowe" zawiera opis wszystkich predefiniowanych zmiennych systemowych. Rozdział 2 - "Pola" zawiera opis pól obiektów do wyświetlania alarmów standardowych i rozproszonych, obiektów sterujących okien, oraz opis pól trendów historycznych i zmiennych. Rozdział 3 - "Funkcje skryptowe" zawiera opis wbudowanych funkcji tekstowych, matematycznych, systemowych, historycznych, obiektów sterujących oknami, funkcji do obsługi alarmów rozproszonych, modułów dodatkowych (Recipe, SPC Pro, SQL), oraz funkcji różnych. Konwencja opisu Przykład Opis .ChartStart Zmienna { .HiLimit | .HiHiLimit } [ErrorMessage=] Ogólnie ujmując, czcionką pogrubioną oznaczone są pola, zmienne systemowe i funkcje. Przy opisie składni, czcionką pochyloną zaznaczono miejsca gdzie należy wprowadzić własne dane. Przy opisie składni, kreska pionowa oznacza, że należy wybrać jeden spośród dwóch lub większej liczby elementów. Elementy ujęte w nawiasy kwadratowe są opcjonalne. Z prawej strony każdej zmiennej systemowej, właściwości, pola zmiennej lub nagłówka funkcji skryptowej podano kategorię zastosowania (bezpieczeństwo, alarm, aplikacja, itp.), co ma na celu ułatwienie korzystania z podręcznika. Przykładowo: $AccessLevel Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware bezpieczeństwo xii Wprowadzenie Informacje o Instrukcji Użytkownika W niniejszej instrukcji stosowanych jest szereg symboli, które mają na celu ułatwienie korzystania z dokumentacji w formie elektronicznej. ! Odwołania tego typu zawierają w rzeczywistości „połączenia” do odpowiednich punktów i rozdziałów. W celu przejścia do tego punktu lub rozdziału, należy kliknąć to połączenie. Po przejściu do innego punktu lub rozdziału, można skorzystać z polecenia "Wstecz", powodującego przejście do pierwotnego miejsca. " Znak ten informuje, że dodatkowe informacje znajdują się w innych podręcznikach FactorySuite. # Znak ten umieszczono obok „Podpowiedzi”, zawierających prostszą lub szybszą metodę realizacji funkcji lub zadania. W celu zapoznania się ze środowiskiem edycyjnym programu WindowMaker, oraz jego narzędziami, należy skorzystać z podręcznika Poradnik użytkownika w formie elektronicznej. W celu zapoznania się z oknami, obiektami graficznymi, wizardami, obiektami ActiveX, itp. należy skorzystać z podręcznika Poradnik użytkownika w formie elektronicznej. Szczegółowe informacje o środowisku pracy (WindowViewer) podano w podręczniku InTouch Runtime User's Guide. Podręcznik FactorySuite System Administrator's Guide zawiera kompletne informacje na temat elementów składowych pakietu FactorySuite, wymaganiach systemu, omówienie zagadnień pracy w sieci, integracji produktów, pomocy technicznej, itp. # Dla każdego komponentu FactorySuite wchodzącego w skład zakupionego przez Państwa pakietu oprogramowania, dołączona jest wersja komputerowa dokumentacji. Przykładowo, są to: FactorySuite System Administrator's Guide, SPC PRO, SQLAccess Manager, Recipe Manager, Industrial SQL Server, InControl, oraz wszystkie 32- bitowe programy komunikacyjne. w przypadku zakupienia pakietu FactorySuite+, dostarczana jest również komputerowa wersja dokumentacji dla komponentów InTrack oraz InBatch. Wymagane wiadomości W niniejszej instrukcji przyjęto następujące założenia o użytkowniku: • Użytkownik jest zapoznany z systemami operacyjnymi Windows 95 i Windows NT. • Posiada umiejętność korzystania z myszki, menu Windows, wybierania opcji, oraz korzystania z Pomocy komputerowej. • Posiada doświadczenie w zakresie programowania lub języka makro. W celu osiągnięcia jak największych korzyści, użytkownik powinien być zapoznany z takimi zagadnieniami programowania jak zmienne, deklaracje, funkcje i metody. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Wprowadzenie xiii Pomoc techniczna Dział Pomocy Technicznej Wonderware oferuje różne metody wsparcia odnośnie jakichkolwiek produktów Wonderware lub też ich implementacji. Przed skontaktowaniem się z Działem Pomocy Technicznej, proszę szukać rozwiązania problemów, mogących wystąpić w czasie korzystania z podręcznika InTouch - Opis funkcji, pól i zmiennych systemowych, w podręczniku Poradnik użytkownika. Jeżeli okaże się konieczne skorzystanie z pomocy technicznej, należy mieć przygotowane następujące informacje: 1. Numer seryjny oprogramowania. 2. Numer wykorzystywanej wersji programu InTouch. 3. Typ i wersję wykorzystywanego sytemu operacyjnego. Przykładowo, Microsoft Windows NT Wersja 4.0, jednostanowiskowa. 4. Dokładną treść wyświetlanego przez system komunikatu o błędzie. 5. Jakiekolwiek, mogące być pomocne wydruki z Wonderware Logger, narzędzi diagnostycznych Microsoft Diagnostic (MSD), czy innych aplikacji diagnostycznych. 6. Szczegółowe informacje na temat podejmowanych prób rozwiązania problemów, oraz ich wyniki. 7. Szczegółowe informacje podające w jaki sposób można odtworzyć zaistniały problem. 8. Jeżeli jest dostępna taka informacja, numer przyporządkowany do tego problemu przez Dział Pomocy Technicznej Wonderware (dotyczy to problemów aktualnie opracowywanych). " Więcej informacji o Pomocy Technicznej podano w wersji komputerowej FactorySuite System Administrator's Guide. Informacje o posiadanej licencji FactorySuite Informacje na temat posiadanej licencji na system FactorySuite, pokazywane są przez narzędzie do wyświetlania informacji o licencji, dostępne po wybraniu okna dialogowego About z menu Help programu WindowMaker. # W celu wyświetlenia okna dialogowego About, należy wybrać polecenie About z menu Help programu WindowMaker. " Więcej informacji na temat narzędzi do wyświetlania informacji o licencji podano w FactorySuite System Administrator's Guide. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-1 R O Z D Z I A Ł 1 Zmienne systemowe InTouch posiada pewną liczbę predefiniowanych zmiennych systemowych. Zmienne te są automatycznie tworzone przez program InTouch i identyfikowane za pomocą poprzedzającego je znaku $. Po uruchomieniu aplikacji InTouch, wartość tych zmiennych ulega zmianie, w odpowiedzi na stan systemu i zdarzenia zaistniałe w systemie. Zmienne systemowe można wykorzystywać wszędzie, gdzie używane są inne zmienne programu InTouch, np. w połączeniach animacyjnych lub w skryptach. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-2 Rozdział 1 $AccessLevel bezpieczeństwo Zmienna ta określa poziom dostępu aktualnie zalogowanego użytkownika. Sposób użycia $AccessLevel Uwagi Jest to zmienna przeznaczona tylko do odczytu, której wartość determinuje uprawnienia aktualnie zalogowanego użytkownika. Uprawnienia te dla konkretnego użytkownika można zmienić z poziomu menu Configure Users programu WindowMaker. Rzeczywista wartość zmiennej $AccessLevel nie ma żadnego znaczenia dla programu WindowViewer. Wszelkie żądane "zabezpieczenia" muszą zostać stworzone przez projektanta aplikacji. Zastosowanie zmiennej $AccessLevel pozwala na zwiększenie poziomu bezpieczeństwa systemu. Typ danych Integer (tylko odczyt) Zakres wartości Od 0 do 9999 Przykłady Wyrażenie zamieszczone poniżej umożliwia wyświetlenie obiektu (np. przycisku) na ekranie (połączenie animacyjne Miscellaneous/ Visibility), w zależności od poziomu dostępu zalogowanego użytkownika:. $AccessLevel >= 2000; Obiekt może mieć również przypisane połączenie animacyjne do deaktywacji, w którym wykorzystywane jest wyrażenie zawierające zmienną $AccessLevel. $AccessLevel < 5411; IF $AccessLevel <=500 THEN Show "Access Denied"; {Wyświetlenie komunikatu informującego o braku możliwości zalogowania} ELSE Show "Access Granted"; {Wyświetlenie komunikatu informującego o możliwości zalogowania} ENDIF; Patrz również $Operator, $OperatorEntered, $PasswordEntered; $ConfigureUsers Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $AlarmLogging 1-3 alarmy Zmienna ta ponownie inicjuje logowanie i wydruk alarmów w czasie pracy aplikacji. Jest ona równoważna poleceniu Restart Alarm Log z menu Special programu WindowMaker. Sposób użycia $AlarmLogging = 1; Uwagi Przypisanie tej zmiennej wartości 1 ponownie inicjuje logowanie i wydruk alarmów w czasie pracy aplikacji. Uwaga Zmiennej $AlarmLogging nie można używać do wyłączania logowania lub drukowania alarmów. Zastępuje ona wyłącznie polecenie Restart Alarm Log z menu Special programu WindowViewer. Jeśli wartość zmiennej $AlarmLogging zostanie wyświetlona, zawsze pokazywane będzie 0 (Off), nawet jeśli aktualnie odbywa się logowanie. Przypisanie zmiennej $AlarmLogging innej wartości nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Typ danych Discrete (tylko zapis) Zakres wartości 1 Przykłady Instrukcja zamieszczona poniżej realizuje taką samą funkcję jak wybranie polecenia Restart Alarm Log z menu Special programu WindowViewer. $AlarmLogging = 1; Patrz również $HistoricalLogging $AlarmPrinterError alarmy Błąd drukarki alarmów. Sposób użycia $AlarmPrinterError Uwagi Jeśli drukarka alarmów sygnalizuje błąd, zmienna ta przyjmuje wartość 1. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Drukarka alarmów nie sygnalizuje błędu 1 = Drukarka alarmów sygnalizuje błąd Przykład Jeżeli instrukcja zamieszczona poniżej zostanie użyta jako wyrażenie w połączeniu animacyjnym wyświetlania wartości analogowej, w przypadku wystąpienia błędu w drukarce alarmów wyświetlona zostanie liczba 1, natomiast w przeciwnym razie wyświetlona będzie liczba 0. $AlarmPrinterError IF $AlarmPrinterError == 1 THEN DisplayMessageTag = "Error on alarm printer"; ELSE DisplayMessageTag = "No error on alarm printer"; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-4 Rozdział 1 $AlarmPrinterNoPaper alarmy Zmienna ta sygnalizuje brak papieru w drukarce alarmów. Sposób użycia $AlarmPrinterNoPaper Uwagi Jeśli w drukarce alarmów brakuje papieru, zmienna przyjmuje wartość 1. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = W drukarce alarmów jest papier 1 = W drukarce alarmów brakuje papieru Przykład Jeżeli instrukcja zamieszczona poniżej zostanie użyta w połączeniu animacyjnym wyświetlania wartości analogowej, oraz jeżeli w drukarce będzie brakować papieru, wyświetlona zostanie wartość 1, w przeciwnym wypadku, wyświetlona zostanie wartość 0. $AlarmPrinterNoPaper Zastosowanie w skrypcie warunkowym zdarzenia OnTrue. Condition: $AlarmPrinterOffline == 1 Script: show "window"; playsound("c:\winnt\system32\alarm.wav",1); $AlarmPrinterOffline alarmy Zmienna ta sygnalizuje brak gotowości do pracy drukarki alarmów. Sposób użycia $AlarmPrinterOffline Uwagi Jeśli drukarka alarmów nie jest gotowa do pracy, zmienna przyjmuje wartość 1. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Drukarka alarmów jest gotowa do pracy 1 = Drukarka alarmów nie jest gotowa do pracy (Offline) Przykład Jeżeli wyrażenie zamieszczone poniżej zostanie użyte w połączeniu animacyjnym wyświetlania wartości analogowej, oraz drukarka alarmów nie jest gotowa do pracy, wyświetlona zostanie wartość 1, natomiast w przypadku przeciwnym, wyświetlona zostanie wartość 0. $AlarmPrinterOffline IF $AlarmPrinterOffline == 1 THEN Call PLCHorn( ); {Funkcja skryptowa powodująca uruchomienie alarmu dźwiękowego w zakładzie} ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $AlarmPrinterOverflow 1-5 alarmy Zmienna ta sygnalizuje przepełnienie bufora drukarki alarmów. Sposób użycia $AlarmPrinterOverflow Uwagi W przypadku przepełnienia bufora drukarki alarmów, zmienna przyjmuje wartość 1. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Bufor drukarki alarmów nie jest całkowicie wypełniony 1 = Bufor drukarki alarmów jest przepełniony Przykład Jeżeli wyrażenie zamieszczone poniżej zostanie użyte w połączeniu animacyjnym wyświetlania wartości analogowej, oraz nastąpi przepełnienie bufora drukarki alarmów, wyświetlona zostanie wartość 1, natomiast w przypadku przeciwnym wyświetlona zostanie wartość 0. $AlarmPrinterOverflow $ApplicationChanged aplikacja Zmienna ta sygnalizuje zmianę aplikacji nadrzędnej w architekturze NAD (Network Application Development). Sposób użycia $ApplicationChanged Uwagi Zmienna ta jest zawsze inkrementowana w przypadku otrzymania sygnału generowanego po wybraniu polecenia Notify Clients z menu Special programu WindowViewer. W przypadku uaktualnienia aplikacji, wartość tej zmiennej ustawiana jest na 0. Zmienna ta jest stosowana do obsługi aplikacji sieciowych. Typ danych Real (tylko odczyt) Przykład Jeżeli zamieszczona poniżej instrukcja zostanie wykorzystana w skrypcie związanym ze zmianą wartości pola zmiennej, spowoduje to wykonanie instrukcji tego skryptu. Skrypt ten powinien powodować wyświetlenie komunikatu, informującego użytkownika o konieczności ponownego uruchomienia programu WindowViewer w celu uwzględnienia wprowadzonych zmian. $ApplicationChanged Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-6 Rozdział 1 $ApplicationVersion aplikacja Zmienna ta zawiera bieżący numer wersji aplikacji. Wartość tej zmiennej ulega zawsze zmianie w przypadku zmodyfikowania, dodania lub usunięcia zmiennej albo skryptu QuickScript. Sposób użycia $ApplicationVersion Uwagi Brak Typ danych Real (tylko odczyt) Przykład Jeżeli instrukcja zamieszczona poniżej zostanie użyta w połączeniu animacyjnym wyświetlania wartości analogowej, wyświetlony zostanie bieżący numer wersji aplikacji pracującej w programie WindowViewer. $ApplicationVersion $ChangePassword bezpieczeństwo Zmienna ta służy do wyświetlenia pola dialogowego do zmiany hasła. Działanie jest równoważne wybraniu polecenia Security, a następnie Change Password, z menu Special programu WindowMaker. Sposób użycia $ChangePassword Uwagi Przypisanie tej zmiennej wartości 1 powoduje wyświetlenie okna dialogowego Change Password. Jeżeli okno to zostanie zamknięte, wartość zmiennej jest automatycznie ustawiana na 0. Przypisanie tej zmiennej wartości innej niż 1 nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Typ danych Discrete (tylko zapis) Zakres wartości 1 Przykład Można utworzyć przycisk powiązany ze zmienną dyskretną, której wciśnięcie powoduje wyświetlenie okna dialogowego Change Password. Przycisk ten powinien mieć pojedyncze połączenie powiązane ze zmienną dyskretną. W momencie wciśnięcia tego przycisku wartość zmiennej systemowej $ChangePassword powinna być ustawiana na 1, powodując tym samym wyświetlenie okna dialogowego. Patrz również $AccessLevel, $OperatorEntered, $PasswordEntered, $Operator, $ConfigureUsers Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $ConfigureUsers 1-7 bezpieczeństwo Zmienna ta służy do wyświetlania okna dialogowego Configure Users. Działanie jest równoważne wybraniu polecenia Security, a następnie Change Password, z menu Special programu WindowMaker. Sposób użycia $ConfigureUsers Uwagi Przypisanie tej zmiennej wartości równej 1 powoduje wyświetlenie okna dialogowego Configure Users. Po zamknięciu tego okna, wartość zmiennej jest automatycznie ustawiana na 0. W celu wyświetlenia tego okna, zmienna $AccessLevel musi mieć wartość większą od 9000. Przypisanie tej zmiennej wartości innej niż 1 nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Typ danych Discrete (tylko zapis) Zakres wartości 1 Przykład Utworzenie przycisku powiązanego ze zmienną dyskretną pozwala użytkownikowi na wyświetlenie okna dialogowego Configure Users. Przycisk ten powinien mieć pojedyncze połączenie powiązane ze zmienną dyskretną, a żądane działanie powinno polegać na ustawieniu wartości. W momencie wciśnięcia tego przycisku wartość zmiennej systemowej $Configure Users powinna być ustawiana na 1, powodując wyświetlenie okna dialogowego. Patrz również $Operator, $OperatorEntered, $ChangePassword, $PasswordEntered, $AccessLevel $Date system Wartością tej zmiennej jest całkowita liczba dni, które upłynęły od 1/1/70. Sposób użycia $Date Uwagi Brak Typ danych Integer (tylko odczyt) Przykład StringFromTime(($Date*86400)+($Time/1000),3); {Wraca aktualną datę} Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-8 Rozdział 1 $DateString system Wartością tej zmiennej jest data w formacie określonym w pliku WIN.INI. Sposób użycia $DateString Uwagi Format daty ustawiany jest za pomocą Panelu sterowania systemu Windows, lub po podwójnym kliknięciu ikony Zegara, umieszczonej z prawej strony Paska zadań. Typ danych Memory message (tylko odczyt) Przykład If StringRight($DateString,2)== "00" THEN LogMessage("The Year 2000!"); ENDIF; $DateTime system Wartością tej zmiennej jest ułamkowa liczba dni, które upłynęły od 1/1/70. Sposób użycia $DateTime Uwagi Brak Typ danych Real (tylko odczyt) Przykład If StringFromTime($DateTime,4)== "Fri" THEN DisplayMessageTag = "It's Friday!"; ENDIF; $Day system Wartością tej zmiennej jest bieżący dzień miesiąca. Sposób użycia $Day Uwagi Zmienna ta przyjmuje wartości od 1 do 31. Typ danych Integer (tylko odczyt) Przykład If $Day == 15 THEN Show "Mid-Month Washdown Window"; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $HistoricalLogging 1-9 dane historyczne Zmienna ta służy do monitorowania i/lub sterowania procesem rejestrowania danych historycznych. Działanie jej jest równoważne wybraniu polecenia Restart Historical Logging z menu Special programu WindowViewer, lub też wybraniu polecenia Stop Historical Logging z menu Special programu WindowViewer. Sposób użycia $HistoricalLogging Uwagi Przypisanie tej zmiennej wartości 0 zatrzymuje rejestrowanie danych historycznych. Przypisanie tej zmiennej wartości 1 powoduje ponowne rozpoczęcie rejestrowania danych historycznych. Nie można wznowić rejestrowania danych historycznych za pomocą zmiennej $HistoricalLogging, o ile rejestrowanie to nie zostało wcześniej skonfigurowane poprzez wybranie polecenia Configure, a następnie polecenia Historical Logging z menu Special programu WindowMaker. Typ danych Discrete (odczyt/ zapis) Przykład IF (InfoDisk("C",4,$Second)/1024)<50 THEN {Przerwanie rejestrowania danych historycznych, jeżeli wolna przestrzeń na dysku jest mniejsza od 50 MB} $HistoricalLogging = 0; ENDIF; Patrz również $AlarmLogging $Hour system Wartością tej zmiennej jest bieżąca godzina dnia. Sposób użycia $Hour Uwagi Zmienna ta przyjmuje wartości od 0 do 23. Typ danych Integer (tylko odczyt) Przykład Skrypt warunkowy zdarzenia On True: $Hour == 20 AND $Second == 30 PrintWindow("Day Batch Summary",1,1,0,0,0); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-10 Rozdział 1 $InactivityTimeout bezpieczeństwo Zmienna ta sygnalizuje, że upłynął skonfigurowany czas, po którym użytkownik zostaje automatycznie wylogowany z aplikacji wskutek braku aktywności. Sposób użycia $InactivityTimeout Uwagi Zmienna ta przyjmuje wartość 1, gdy upłynął czas po którym użytkownik zostaje automatycznie wylogowany z aplikacji wskutek braku aktywności. W celu skonfigurowania tego czasu, z menu Special wybrać Configure, a następnie kliknąć WindowViewer, lub rozwinąć grupę Configure w Eksploratorze aplikacji, a następnie podwójnie kliknąć WindowViewer. Wyświetlone zostanie okno dialogowe WindowViewer Properties z aktywną zakładką właściwości General. W grupie Inactivity wprowadzić czas w sekundach. Typ danych Discrete (tylko odczyt) Patrz również $InactivityWarning Przykład Skrypt warunkowy zdarzenia On True: $InactivityTimeout == 1 Script: Show "You have been logged off window"; $InactivityWarning bezpieczeństwo Zmienna ta sygnalizuje, że upłynął skonfigurowany czas, po którym użytkownik zostaje ostrzeżony o zbliżającym się automatycznym wylogowaniu z aplikacji wskutek braku aktywności. Sposób użycia $InactivityWarning Uwagi Zmienna ta przyjmuje wartość 1, gdy upłynął czas, po którym użytkownik jest ostrzegany braku aktywności. Licznik czasu braku aktywności użytkownika może być wyzerowany wyłącznie poprzez kliknięcie myszką lub wciśnięcie klawisza. W celu skonfigurowania tego czasu, z menu Special wybrać Configure, a następnie kliknąć WindowViewer, lub rozwinąć grupę Configure w Eksploratorze aplikacji, a następnie podwójnie kliknąć WindowViewer. Wyświetlone zostanie okno dialogowe WindowViewer Properties z aktywną zakładką właściwości General. W grupie Inactivity wprowadzić czas w sekundach. Typ danych Discrete (tylko odczyt) Przykład If $InactivityWarning == 1 THEN Show "You are about to be logged off-window"; ENDIF; Patrz również $InactivityTimeOut Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $LogicRunning 1-11 system Zmienna ta monitoruje i/lub steruje wykonywaniem skryptów. Działanie tej zmiennej jest równoważne wybraniu polecenia Start Logic, lub polecenia Halt Logic z menu Logic programu WindowViewer. Uwaga Nie można przy pomocy tej zmiennej zatrzymać aktualnie wykonywanych funkcji asynchronicznych, zdefiniowanych przez użytkownika. Można jednakże uniemożliwić uruchamianie następnych skryptów. Sposób użycia $LogicRunning Uwagi Przypisanie zmiennej wartości 1 pozwala na uruchamianie skryptów logicznych. Przypisanie zmiennej wartości 0 uniemożliwia uruchamianie skryptów logicznych. Typ danych Discrete (odczyt / zapis) $Minute system Wartością tej zmiennej jest bieżąca minuta godziny. Sposób użycia $Minute Uwagi Zmienna ta przyjmuje wartości od 0 do 59. Typ danych Integer (tylko odczyt) Przykład W wyrażeniu tekstowym połączenia animacyjnego: IF InfoFile("C:\InTouch.32\WIZ.INI",1,$Minute)==1 THEN LogMessage("The File Exists!"); ENDIF; $Month system Wartością tej zmiennej jest bieżący miesiąc roku. Sposób użycia $Month Uwagi Zmienna ta przyjmuje wartości od 1 do 12. Typ danych Integer (tylko odczyt) Przykład IF $Month==10 THEN CurrentMonthName = "October"; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-12 Rozdział 1 $Msec system Wartością tej zmiennej jest bieżąca milisekunda. Częstotliwość uaktualniania tej zmiennej przez system zależna jest od wartości parametrów Tick Interval i Update Time. W celu zmiany wartości tych parametrów, z menu Special wybrać Configure, a następnie kliknąć WindowViewer, lub rozwinąć grupę Configure w Eksploratorze aplikacji, a następnie podwójnie kliknąć WindowViewer. Wyświetlone zostanie okno dialogowe WindowViewer Properties z aktywną zakładką właściwości General: Sposób użycia $Msec Uwagi Zmienna ta przyjmuje wartości od 0 do 999. Typ danych Integer (tylko odczyt) $NewAlarm alarmy Zmienna ta sygnalizuje wystąpienie nowego alarmu. Sposób użycia $NewAlarm Uwagi Zmienna przyjmuje wartość 1, gdy pojawi się nowy alarm. Wartość tej zmiennej ustawiana jest wyłącznie w przypadku wystąpienia alarmu lokalnego. Dotyczy to alarmów lokalnych (nie dotyczy alarmów zewnętrznych). Typ danych Discrete (odczyt / zapis) Przykład Zmienną tę można powiązać z funkcją logiczną PlaySound, powodując uruchomienie alarmu dźwiękowego. Można utworzyć również przycisk do zatwierdzania alarmu, umożliwiający operatorowi potwierdzenie alarmu i równoczesne wyzerowanie tej zmiennej. $ObjHor system Wartością tej zmiennej jest pozycja środka wybranego obiektu w kierunku poziomym, wyrażona w punktach ekranowych (pikselach). Sposób użycia $ObjHor Uwagi Brak Typ danych Integer (tylko odczyt) Patrz również $ObjVer Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $ObjVer 1-13 system Wartością tej zmiennej jest pozycja środka wybranego obiektu w kierunku pionowym, wyrażona w punktach ekranowych (pikselach). Sposób użycia $ObjVer Uwagi Brak Typ danych Integer (tylko odczyt) Patrz również $ObjHor $Operator bezpieczeństwo Określa zakres działań, które mogą być realizowane przez zalogowanego użytkownika. Sposób użycia $Operator Uwagi Wartość tej zmiennej reprezentuje nazwę aktualnie zalogowanego operatora. Typ danych Message (tylko odczyt) Przykład Dostęp do określonego okna może być kontrolowany przy pomocy następującego skryptu:. IF $Operator == "DayShift" THEN Show " Control Panel Window "; ELSE Show "Wrong Operator"; ENDIF; Patrz również $OperatorEntered, $AccessLevel, $PasswordEntered, $ChangePassword, $ConfigureUsers Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-14 Rozdział 1 $OperatorEntered bezpieczeństwo Zmienna ta służy do wprowadzania nazwy użytkownika. Sposób użycia $OperatorEntered Uwagi Umożliwia utworzenie okna użytkownika do logowania. Powiązanie z tą zmienną obiektów do wprowadzania danych reagujących na dotyk i/lub skryptów umożliwia wprowadzenie nazwy użytkownika. Uwaga: Jeżeli zmiennej $OperatorEntered przypisana zostanie jedna z poprawnych wartości, zmienne systemowe $AccessLevel i $Operator zostaną ustawione na predefiniowane wartości. Typ danych Message (odczyt/zapis) Patrz również $AccessLevel, $Operator, $PasswordEntered, $ChangePassword, $ConfigureUsers $PasswordEntered bezpieczeństwo Zmienna ta służy do wprowadzania właściwego hasła. Sposób użycia $PasswordEntered Uwagi Zmienna ta jest zawsze odczytywana jako pusty łańcuch znaków. Połączenia animacyjne wyświetlające wartość zmiennej $PasswordEnetered zawsze wyświetlają pusty łańcuch znaków. Z tego powodu skrypty uaktywniane zmianą wartości danych i uzależnione od zmiennej $PasswordEntered nie będą nigdy wykonywane. Może zostać wykorzystana do tworzenia okna użytkownika do logowania. Powiązanie z tą zmienną obiektów do wprowadzania danych reagujących na dotyk i/lub skryptów umożliwia wprowadzenie przez użytkownika hasła. Uwaga: Gdy zmienna $OperatorEntered przyjmuje dozwoloną wartość, zmienne systemowe $AccessLevel i $Operator zostaną ustawione na predefiniowane wartości. Typ danych Message (tylko zapis) Patrz również $AccessLevel, $Operator, $OperatorEntered, $ChangePassword, $ConfigureUsers Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Zmienne systemowe $Second 1-15 system Wartością tej zmiennej jest bieżąca sekunda. Sposób użycia $Second Uwagi Zmienna ta przyjmuje wartości od 0 do 59. Typ danych Integer (tylko odczyt) Przykład Wave=100*Sin(6*$Second); $StartDdeConversations system Zmienna ta rozpoczyna nie zainicjowaną konwersację DDE w czasie pracy aplikacji, w sytuacji, gdy menu Special zostało wyłączone. Działanie jest równoważne wybraniu polecenia Start Uninitiated Conversations z menu Special programu WindowMaker. Sposób użycia $StartDdeConversations Uwagi Przypisanie zmiennej wartości 1 powoduje uruchomienie nie zainicjowanej dotychczas konwersacji DDE. Typ danych Discrete (odczyt / zapis) $System alarmy Standardowa, nadrzędna grupa alarmowa. Sposób użycia $System Uwagi Jeżeli zmienna nie jest przyporządkowana do konkretnej Grupy alarmowej, InTouch automatycznie przyporządkuje ją do grupy $System. Wszystkie zdefiniowane grupy alarmowe są podgrupami grupy $System. Typ danych System Alarm Group (tylko odczyt) Przykład $System.Ack = 1;{Zatwierdzenie wszystkich alarmów} Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 1-16 Rozdział 1 $Time system Wartością tej zmiennej jest czas w milisekundach, który upłynął od północy. Sposób użycia $Time Uwagi Brak Typ danych Integer (tylko odczyt) Przykład Sec_Midnight = $Time/1000;{Liczba sekund, które upłynęły licząc od północy} $TimeString system Wartością tej zmiennej jest czas w formacie określonym w pliku WIN.INI. Sposób użycia $TimeString Uwagi Format czasu ustawiany jest za pomocą Panelu sterowania systemu Windows, lub po podwójnym kliknięciu ikony Zegara, umieszczonej z prawej strony Paska zadań. Typ danych String (tylko odczyt) Przykład BatchStartString = $TimeString; $Year system Wartością tej zmiennej jest bieżący rok w czterocyfrowym formacie. Sposób użycia $Year Uwagi Podaje rok w następującym formacie: 1990 Typ danych Integer (tylko odczyt) Przykład CurrentYear = $Year; NoYrsTill2000 = 2000 - CurrentYear; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-1 R O Z D Z I A Ł 2 Pola InTouch wykorzystuje pola do monitorowania i modyfikacji właściwości takich obiektów jak zmienne, trendy historyczne oraz obiekty sterujące Windows. Pola te mogą być wykorzystane do monitorowania i zmiany tych właściwości. W zależności od rodzaju obiektu, istnieją dwie metody korzystania z tych właściwości: bezpośrednio za pomocą instrukcji o składni Zmienna.pole, lub pośrednio, za pomocą funkcji skryptowej. Wszystkie obiekty, z wyjątkiem obiektów sterujących okien, oraz obiektów związanych z alarmowaniem rozproszonym, korzystają ze składni Zmienna.pole. Aby uzyskać dostęp do właściwości tych obiektów w czasie pracy aplikacji wystarczy wpisać nazwę obiektu, kropkę i nazwę pola, które ma być wykorzystane w skrypcie lub w połączeniu animacyjnym. Na przykład, aby umożliwić w czasie pracy aplikacji zmianę górnego progu alarmowego HiHiLimit zmiennej o nazwie Analog_Tag, można utworzyć przycisk z połączeniem do wprowadzania wartości, a jako wyrażenie wprowadzić Analog_Tag.HiHiLimit. W czasie pracy aplikacji operator może kliknąć na ten przycisk i wpisać nową wartość górnego progu alarmowego zmiennej Analog_Tag. Obiekty sterujące okien oraz obiekty związane z alarmowaniem rozproszonym wykorzystują funkcje GetPropertyX oraz SetPropertyX, gdzie X jest typem danych reprezentowanym przez określoną właściwość (D = Discrete, I = Integer, M = Message). W celu uniknięcia mylenia z polami zmiennych programu InTouch, obiekty sterujące okien i obiekty do obsługi alarmów rozproszonych zostały wymienione pod koniec tego rozdziału. Funkcje te mogą być również stosowane w skryptach, oraz w połączeniach animacyjnych w celu uzyskania dostępu do określonych właściwości tych obiektów. ! Więcej informacji na temat korzystania z funkcji skryptowych GetProperty i SetProperty podano w Rozdziale 3 niniejszego podręcznika. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-2 Rozdział 2 Typy zmiennych Przy definiowaniu nowej zmiennej w bazie danych InTouch, należy określić jej typ. Przykładowo, jeżeli wartość zmiennej jest ustawiana lub odczytywana przez inne aplikacje Windows jak na przykład program komunikacyjny, należy zadeklarować zmienną typu I/O. Poniżej opisano wszystkie typy zmiennych oraz sposób ich wykorzystywania. Zmienne typu pamięciowego (Memory) Tego typu zmienne wykorzystywane są wewnątrz aplikacji InTouch. Mogą one być stosowane jako zmienne stałe, oraz do symulacji. Można je także wykorzystywać do udostępniania wyników obliczeń innym aplikacjom pracującym w środowisku Windows. Przykładowo, można zadeklarować zmienną typu pamięciowego o wartości początkowej 3.1416, lub można przy użyciu grupy zmiennych typu pamięciowego zapisać receptury. W czasie symulowania, zmienne te mogą być wykorzystywane do sterowania działaniami wykonywanymi w tle skryptu. Przykładowo, można zdefiniować zmienną typu pamięciowego "Licznik", której wartość jest zmieniana w czasie wykonywania skryptu, dzięki czemu uzyskiwane będą różne efekty animacyjne, zależne od bieżącego etapu procesu. Istnieją cztery rodzaje zmiennych typu pamięciowego: Memory Discrete Zmienna dyskretna o wartości 0 (False, Off), lub 1 (True, On). Memory Integer 32-bitowa zmienna całkowita ze znakiem o wartościach z zakresu od - 2,147,483,648 do 2,147,483,648. Memory Real Zmienna typu rzeczywistego. Zmienna ta może mieć wartość w przedziale ± 3.4e38. Wszystkie obliczenia na zmiennych tego typu wykonywane są z dokładnością do 64bitową, a zapamiętywane z dokładnością do 32 bitów. Memory Message Zmienna typu tekstowego o długości do 131 znaków. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola 2-3 Zmienne typu I/O Wszystkie zmienne, które czytają lub zapisują wartości w innym programie pracującym w systemie Windows są zmiennymi typu I/O. Obejmuje to wymianę danych z programowalnymi sterownikami logicznymi, komputerami sterującymi procesami, oraz stacjami sieciowymi. Ze zmiennych typu I/O można korzystać zarówno za pomocą mechanizmu dynamicznej wymiany danych Microsoftu (DDE - Dynamic Data Exchange), jak i za pomocą protokołu komunikacyjnego SuiteLink. Każda zmiana wartości zmiennej typu I/O przeznaczonej do zapisu/ odczytu, powoduje natychmiastową aktualizację tej zmiennej w aplikacjach, w których jest ona wykorzystywana. Podobnie, powodem aktualizacji może być zmiana wartości zmiennej w jednej z aplikacji. Domyślnie, wszystkie zmienne typu I/O ustawiane są tak, aby można było zarówno odczytywać jak i zmieniać ich wartość. Można jednak zdefiniować je jako przeznaczone wyłącznie do odczytu, poprzez zaznaczenie odpowiedniej opcji w oknie dialogowym Tagname Dictionary. Istnieją cztery rodzaje zmiennych typu I/O: I/O Discrete Zmienna I/O o wartości 0 (False, Off), lub 1 (True, On). I/O Integer 32-bitowa zmienna całkowita ze znakiem o wartościach z zakresu od - 2,147,483,648 do 2,147,483,648. I/O Real Zmienna typu rzeczywistego. Zmienna ta może mieć wartość w przedziale ±3.4e38. Wszystkie obliczenia na zmiennych tego typu wykonywane są z dokładnością do 64-bitów, a zapamiętywane z dokładnością do 32 bitów. I/O Message Zmienna typu tekstowego o długości do 131 znaków. Zmienne typu pośredniego(Indirect): dyskretne, analogowe, tekstowe Zmienne tego typu pozwalają tworzyć okna, w których źródła wartości zmiennych mogą być wielokrotnie zmieniane. Przykładowo, można utworzyć skrypt wykonywany przy zmianie wartości zmiennej, który zmienia źródło wszystkich zmiennych występujących w oknie, w zależności od wartości zmiennej. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-4 Rozdział 2 Pozostałe typy zmiennych Dostępnych jest szereg specjalnych typów zmiennych, które mogą być wykorzystane do realizacji złożonych funkcji, jak na przykład dynamiczne wyświetlanie alarmów, tworzenie trendów historycznych, monitorowanie, oraz sterowanie przypisaniem pisaków do zmiennych na wykresie trendów historycznych. Dostępne są również zmienne pośrednie, które umożliwiają odłączenie zmiennej od jednego źródła i przypisanie jej do innego. Poniżej opisano te cztery specjalne typy zmiennych. Group Var (Zmienne grupowe) Ten typ wykorzystywany jest w zmiennych z przyporządkowaną grupą alarmową, do dynamicznego wyświetlania alarmów, rejestracji zapisu na dysk i drukowania. Zmienna typu Group Var może być wykorzystana do tworzenia okien alarmowych, lub rejestracji alarmów, wyświetlających wszystkie alarmy powiązane z określoną grupą zmiennych. Można również sterować wyświetlanymi lub zarejestrowanymi alarmami poprzez przyporządkowanie innej Grupy Alarmowej do zmiennej typu Group Var. Zmienne grupowe typu Group Var mogą być również użyte do tworzenia przycisków służących do selektywnego wyświetlania alarmów dla różnych instalacji w jednym oknie alarmowym. Wszystkie pola zmiennych związane z Grupami alarmowymi są również dostępne w zmiennych typu Group Var. " Więcej informacji na temat alarmów podano w podręczniku w wersji elektronicznej Poradnik użytkownika. Hist Trend (Trend historyczny) Typ Hist Trend jest wymagany do tworzenia trendów historycznych. Wszystkie pola dostępne w trendach historycznych mogą być również stosowane w przypadku zmiennych typu Hist Trend. Tag ID (Identyfikator zmiennej) Ten specjalny typ zmiennych jest wykorzystywany w połączeniu z obiektami trendów historycznych. Za pomocą zmiennej typu Tag ID można uzyskać informacje o zmiennych rysowanych na trendzie historycznym. W większości przypadków, zmienne typu Tag ID będą wykorzystywane do wyświetlania nazwy zmiennej rysowanej przez dany pisak, lub też do zmiany zmiennej przyporządkowanej do pisaka. Zmienne typu SuperTag InTouch pozwala na definiowanie szablonów SuperTag, wykorzystywanych do tworzenia złożonych typów zmiennych. Szablony SupetTags mogą zawierać do 64 zmiennych składowych, i mogą mieć 2 poziomy zagnieżdżenia. Zmienne składowe mają dokładnie takie same właściwości jak normalne zmienne. Umożliwiają one tworzenie trendów, obsługę alarmów, oraz posiadają takie same pola jak zmienne. " Więcej informacji na temat alarmów podano w podręczniku w wersji elektronicznej Poradnik użytkownika. Zestawienie typów pól zmiennych Tabela pokazana na następnej stronie stanowi rodzaj skrótowego poradnika, określającego typy pól zmiennych. Podany poniżej przypis odnosi się do tabeli zamieszczonej na następnej stronie. *Obsługiwane wyłącznie przez program InTouch v. 7.0. Jeżeli pola te mają być przesyłane z stacji klienckiej jako zmienne typu I/O, stacja serwera dołącza do nich informacje o czasie wysłania wartości do stacji klienckiej. Jeżeli jednak wartość tych pól przesyłana jest przez stację lokalną, zawsze ustawiana jest jakość GOOD, a czas na NO. Oznacza to, że czas zmiany wartości przez skrypty lub połączenia NIE JEST pamiętany. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-5 2-6 Rozdział 2 .Ack alarmy Pole to umożliwia sprawdzanie i/lub zmianę statusu zatwierdzenia lokalnego (-ych) alarmów. Sposób użycia Tagname.Ack=1 Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer , Real, Indirect Analog lub Group Variable. Uwagi Przypisanie omawianemu polu zmiennej 1 powoduje zatwierdzenie wszystkich aktywnych alarmów, które są związane z daną zmienną lub grupą. Jeśli podana zmienna jest zmienną typu Group Var lub Grupą alarmową, wszystkie nie zatwierdzone alarmy związane ze zmiennymi wchodzącymi w skład określonej grupy zostają zatwierdzone. W przypadku gdy zmienna jest innego typu niż Group Var, zatwierdzane są wyłącznie alarmy powiązane z daną zmienną. Przypisanie omawianemu polu wartości różnej od 1 nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Typ danych Discrete (odczyt/zapis) Zakres wartości 1 Przykłady Podane poniżej wyrażenie powoduje zatwierdzenie alarmu związanego ze zmienną o nazwie Tag1. Tag1.Ack=1; Wyrażenie podane w następnym przykładzie spowoduje zatwierdzenie wszystkich alarmów należących do grupy alarmów o nazwie PumpStation. PumpStation.Ack=1; Do zatwierdzania alarmów można skorzystać z zmiennej pośredniej (używając do tego celu zmiennej typu GroupVar). Przykładowo, można wprowadzić następujące wyrażenie: StationAlarms.Name = "PumpStation"; Zdefiniowana została zmienna StationAlarms typu GroupVar, a następnie przypisano do niej zmienną PumpStation. Tak więc podane poniżej wyrażenie jest bardzo podobne do zamieszczonych w przykładach powyżej, za wyjątkiem faktu, że jest ono wykorzystywane do zatwierdzania wszystkich nie zatwierdzonych alarmów w grupie alarmów PumpStation, która powiązana jest aktualnie ze zmienną typu GroupVar o nazwie StationAlarms. StationAlarms.Ack=1; Uwaga. Polem o wartości przeciwnej do .Ack jest pole .Unack. W przypadku wystąpienia nie zatwierdzonego alarmu, pole .Unack ustawiane jest na 1. Pole to może zostać następnie wykorzystane w połączeniu animacyjnym lub skrypcie warunkowym do wyświetlania komunikatów o niezatwierdzonych alarmach. Patrz również .Alarm and .Unack Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .Alarm 2-7 alarmy Pole to przyjmuje wartość 1, gdy zmienna, z którą jest ono skojarzone znajduje się w stanie alarmowym. Sposób użycia Tagname.Alarm Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer , Real, Indirect Analog lub Group Variable. Uwagi Pole to, przeznaczone wyłącznie do odczytu, ma zwykle przypisaną wartość 0. Gdy wartość zmiennej, z którą pole jest skojarzone przekracza zadany próg alarmowy, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Jeśli dana zmienna jest zmienną grupową (Group Var), lub jest nazwą grupy alarmowej, polu .Alarm zostaje przypisana wartość 1 zawsze, gdy którakolwiek ze zmiennych należących do tej grupy znajdzie się w stanie alarmowym. Dostępne jest również pole .Normal, o wartości przeciwnej do wartości pola .Alarm. Typ danych Discrete (tylko odczyt) Zakres wartości 0 lub 1 Przykłady Zamieszczone poniżej wyrażenie sprawdza, czy zmienna "Tag1" jest w stanie alarmowym. IF (Tag1.Alarm == 1) THEN Wyrażenia zawarte w poniższej instrukcji IF-THEN będą wykonywane, jeżeli w grupie alarmów PumpStation występują aktywne alarmy. IF (PumpStation.Alarm == 1) THEN MyAlarmMessage="The pumping station currently has an ALARM!"; ENDIF; Pole to nie jest powiązane z polami .Ack i .Unack. Z tego powodu, nawet jeżeli aktywny alarm zostanie zatwierdzony, wartość pola .Alarm pozostaje równa 1. Patrz również .Ack, .Normal, Ack() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-8 Rozdział 2 .AlarmDevDeadband alarmy Pole to służy do zmiany i monitorowania procentowej strefy nieczułości (Dead band) dla "małego" (Minor Deviation) i "dużego" (Major Deviation) alarmu odchyleniowego. Sposób użycia Tagname.AlarmDevDeadband Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer , Real, Indirect Analog lub Group Var. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Od 0 do 100 (integer) Przykład Zamieszczone poniżej wyrażenie powoduje zmianę procentowego pola nieczułości na 25%. Tagname.AlarmDevDeadband=25; Patrz również .AlarmValDeadband Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .AlarmEnabled 2-9 alarmy Pole to umożliwia włączanie i/lub wyłączanie sygnalizowania alarmów i zdarzeń dla zmiennej. Sposób użycia Tagname.AlarmEnabled Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub GroupVar. Uwagi Gdy wartość pola .AlarmEnabled jest ustawiona na 0, wszystkie zdarzenia i alarmy są ignorowane. Nie są one zapisywane w buforze, ani też na dysku. Aby uniknąć utraty danych, należy zawsze, gdy to jest możliwe, włączać sygnalizację zdarzeń i alarmów. Typ danych Discrete (odczyt/zapis) Zakres wartości 0 = Wyłączenie sygnalizacji alarmów i zdarzeń 1 = Włączenie sygnalizacji alarmów i zdarzeń (ustawienie domyślne) Przykłady Przykładowa instrukcja zamieszczona poniżej włącza sygnalizowanie wszystkich zdarzeń i alarmów dla zmiennej o nazwie Tag1. Tag1.AlarmEnabled=0; Wyrażenia zawarte w poniższej instrukcji IF-THEN będą wykonywane jeżeli dla grupy alarmów o nazwie "PumpStation" włączona została sygnalizacja zdarzeń i alarmów. IF (PumpStation.AlarmEnabled == 1) THEN MyAlarmMessage="The Events and Alarms for the Pump Station are enabled" ENDIF; Patrz również .Alarm Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-10 Rozdział 2 .AlarmValDeadband alarmy Pole to służy do zmiany i monitorowania procentowej strefy nieczułości (Dead band) dla alarmu związanego z przekroczeniem progu wartości zmiennej. Sposób użycia Tagname.AlarmValDeadband Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Musi mieścić się w zakresie wartości skonfigurowanym dla danej zmiennej. Przykład Przykładowa instrukcja zamieszczona poniżej zmienia wartość strefy nieczułości alarmu dla zmiennej Tag1 na 25. Tag1.AlarmValDeadband=25; Patrz również .AlarmDevDeadband Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .ChartLength 2-11 dane historyczne Pole to definiuje długość (w jednostkach czasu) wykresu trendu historycznego. Sposób użycia Uwagi Tagname.ChartLength Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Pole to, przeznaczone do odczytu i zapisu, jest używane do zmiany (lub weryfikacji) długości okna wykresu trendu historycznego. Wartość tego parametru jest wyrażona w sekundach. Długość definiowana jest jako okres czasu wyświetlany na wykresie trendu historycznego. Dokładniej ujmując, wzór na obliczenie długości wykresu trendu historycznego ma następującą postać: ChartLength=(Date/Time Stamp on Right-Hand Side of Chart) (Date/Time Stamp on Left-Hand Side of Chart); Ponieważ parametry Date/ Time wyrażone są w sekundach które upłynęły od 1/1/70, wynikiem obliczeń jest "liczba sekund wyświetlanych pomiędzy lewą a prawą krawędzią wykresu". Zawsze przy dodawaniu lub odejmowaniu wartości od pola .ChartLength należy pamiętać, że jego wartość wyrażona jest w sekundach. Zatem, jeżeli należy odjąć "2 godziny" od bieżącej wartości pola .ChartLength, należy wcześniej zamienić "2 godziny" na liczbę sekund, tzn. (2 godziny ) * (60 minut/ godzinę) * (60 sekund/ minutę) = 7200 sekund. Typ danych Integer (odczyt/zapis) Zakres wartości Dowolna dodatnia liczba całkowita. Przykład Zamieszczone poniżej wyrażenie ustawia długość wykresu na 1 godzinę: HtTagname.ChartLength=3600 {60 minut * 60 sekund/ minutę}; Przedstawione poniżej wyrażenie powoduje przewinięcie wykresu w lewo o połowę: HtTagname.ChartStart=HtTagname.ChartStart HtTagname.ChartLength / 2; To wyrażenie z kolei, powoduje przewinięcie wykresu w lewo o 10%: HtTagname.ChartStart=HtTagname.ChartStart - (.10 * HtTagname.ChartLength); Patrz również .ChartStart Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-12 Rozdział 2 .ChartStart dane historyczne Pole to definiuje datę i czas początku (lewej krawędzi) okna wykresu trendu historycznego. Sposób użycia Tagname.ChartLength Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Pole to przeznaczone do odczytu i zapisu używane jest do zmiany (lub weryfikacji) daty i czasu początku (lewej krawędzi) okna wykresu trendu historycznego. Pole to zawiera liczbę sekund, które upłynęły od północy, 1 stycznia 1970. Punkt początkowy jest datą/ godziną, przedstawianą na początku osi wykresu trendu historycznego. Typ danych Integer (odczyt/zapis) Zakres wartości Dowolna dodatnia liczba całkowita. Przykład Zamieszczone poniżej wyrażenie przesuwa początek wykresu w prawo, o 1 minutę: HtTagname.ChartStart=HtTagname.ChartStart + 60; .Comment zmienna Pole to zawiera komentarz wprowadzony dla danej zmiennej podczas jej definiowania na Liście zmiennych. Sposób użycia Tagname.Comment Parametry Opis Tagname Dowolna zmienna. Uwagi Chociaż pole to w programie WindowMaker przeznaczone jest wyłącznie do odczytu, jego wartość może zostać zmieniona w trakcie wykonywania aplikacji (wyłącznie w pamięci). Po zamknięciu aplikacji i ponownym jej uruchomieniu, przywracana jest stara wartość pola komentarza. Pole to jest używane przez system alarmowania rozproszonego do odczytu komentarzy dla alarmów. Typ danych Message (tylko odczyt) Zakres wartości Dowolny łańcuch znaków zawierający od 1 do 131 znaków. Porównać z zamieszczoną poniżej uwagą odnośnie dopuszczalnej liczby znaków. Uwaga Pole komentarza zmiennej może zostać zmienione wyłącznie z poziomu Listy zmiennych. Wprowadzenie do pola .Comment nowej wartości w trakcie wykonywania aplikacji nie powoduje zmiany wartości tego pola, zapisanej na Liście zmiennych. Długość komentarza wprowadzanego z poziomu Listy zmiennych nie może przekroczyć 131 znaków, oraz nie może przekroczyć 50 znaków w przypadku wprowadzania komentarza w trakcie pracy aplikacji. Przykład W podanym poniżej wyrażeniu tworzony jest łańcuch znaków (wartość zmiennej tekstowej) zawierający nazwę zmiennej, oraz tekst wprowadzony w polu .Comment tej zmiennej: OperatorMessage=MyTag.Name + " has a comment of: " + MyTag.Comment; Uwaga Wartość tego pola zapisywana jest do bazy danych pamiętanej w trakcie pracy aplikacji. Nie jest ona zapisywana do bazy danych zmiennych. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .DevTarget 2-13 alarmy Pole to służy do monitorowania i/lub zmiany wartości docelowej (od której jest obliczane odchylenie) dla "małego" (Minor Deviation) i "dużego" (Major Deviation) alarmu odchyleniowego. Sposób użycia Tagname.DevTarget Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Musi mieścić się w zdefiniowanym dla danej zmiennej zakresie wartości. Przykład Przykładowa instrukcja zamieszczona poniżej zmienia wartość pola .DevTarget zmiennej MyTag na 500. MyTag.DevTarget=500; .DisplayMode dane historyczne Pole to określa sposób wyświetlania wartości na wykresie trendu historycznego. Sposób użycia Tagname.DisplayMode Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Brak Typ danych Analog (odczyt/zapis) Zakres wartości 1 = Wyświetlanie wartości min/max dla każdego okresu próbkowania (tryb domyślny). 2 = Wyświetlanie wartości średniej dla każdego okresu próbkowania na tle rozrzutu wartości. 3 = Wyświetlanie wartości średniej dla każdego okresu próbkowania na tle wykresu słupkowego. Przykład Zamieszczone poniżej wyrażenie powoduje wyświetlanie trendu historycznego powiązanego ze zmienną MyHistTrendTag w formie wykresu słupkowego. MyHistTrendTag.DisplayMode=3; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-14 Rozdział 2 .EngUnits zmienna Pole to umożliwia użytkownikowi odwoływanie się do jednostek inżynierskich zmiennej analogowej, zgodnie z ich definicją wprowadzoną na Liście zmiennych. Sposób użycia Tagname.EngUnits Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Pole to przyjmuje wartości typu tekstowego i nie ma wpływu na skalowanie, konwersję czy format wartości zmiennej. Typ danych Message (odczyt/zapis) Zakres wartości Dowolny łańcuch znaków zawierający od 0 do 31 znaków. Przykład IF Temperature.EngUnits == "Celsius" THEN CALL TempConvert(Temperature);{A Quick Function which might be used to convert Celsius to Fahrenheit} ENDIF; .HiHiLimit alarmy Pole to służy do monitorowania i/lub zmiany pierwszej górnej wartości progowej (HiHiLimit) dla alarmu przekroczenia wartości. Sposób użycia Tagname.HiHiLimit Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Musi mieścić się w zdefiniowanym dla danej zmiennej zakresie wartości. Przykład Przykładowa instrukcja zamieszczona poniżej zwiększa wartość pola .HiHiLimit (wartość progowa alarmu) zmiennej MyTag o 5. MyTag.HiHiLimit=MyTag.HiHiLimit + 5; Patrz również .Alarm, .Ack, .LoLimit, .LoLoLimit, .HiLimit, .HiStatus, .HiHiStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .HiHiStatus 2-15 alarmy Pole to określa, czy w systemie aktywny jest drugi wysoki alarm progowy HiHiLimit. Sposób użycia Tagname.HiHiStatus Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0, w przypadku wystąpienia alarmu progowego typu HiHi dla zmiennej z którą pole to jest skojarzone, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack, w celu określenia dokładnej przyczyny alarmu związanego z daną zmienną. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład Przykładowa instrukcja warunkowa IF-THEN zamieszczona poniżej zostanie wykonana tylko wtedy, gdy pole .HiHiStatus zmiennej o nazwie MyTag przyjmie wartość 1. Jeżeli dla zmiennej MyTag uruchomiony zostanie alarm progowy HiHi, wykonane zostaną wyrażenia zamieszczone w instrukcji IF-THEN. IF (MyTag.HiHiStatus == 1) THEN OperatorMessage="MyTag has gone into High-High Alarm"; ENDIF; Patrz również .Alarm, .Ack, .LoLimit, .LoLoLimit, .HiLimit, .HiHiLimit, HiStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-16 Rozdział 2 .HiLimit alarmy Pole to służy do monitorowania i/lub zmiany pierwszej górnej wartości progowej (HiLimit) dla alarmu progowego. Sposób użycia Tagname.HiLimit Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Musi mieścić się w zdefiniowanym dla danej zmiennej zakresie wartości. Przykład Temperature.HiLimit = 212; Patrz również .Alarm, .Ack, .LoLimit, .LoLoLimit, .HiHiLimit, HiStatus, .HiHiStatus .HiStatus alarmy Pole to określa, czy w systemie występuje pierwszy górny alarm progowy (HiLimit). Sposób użycia Tagname.HiStatus Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0,a w przypadku wystąpienia alarmu progowego typu Hi dla zmiennej z którą pole to jest skojarzone, zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack w celu określenia dokładnej przyczyny alarmu związanego z daną zmienną. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład IF (MotorAmps.HiStatus == 1) THEN CALL PumpShutdown( ); {Funkcja skryptowa, wyłączająca silnik} ENDIF; Patrz również .Alarm, .Ack, .LoLimit, .LoLoLimit, .HiLimit, .HiHiLimit, .HiHiStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .LoLimit 2-17 alarmy Pole to służy do monitorowania i/lub zmiany pierwszej dolnej wartości progowej (LoLimit) dla alarmu progowego. Sposób użycia Tagname.LoLimit Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Musi mieścić się w zdefiniowanym dla danej zmiennej zakresie wartości. Przykład Zamieszczone poniżej wyrażenie powoduje zmniejszenie wartości pola LoLimit (alarmu progowego) o 10. MyTag.LoLimit=MyTag.LoLimit - 10;MyTag.LoLimit=MyTag.LoLimit - 10; Patrz również .Alarm, .Ack, .LoLoLimit, .LoStatus, .HiLimit, .HiHiLimit, HiStatus, .HiHiStatus .LoLoLimit alarmy Pole to służy do monitorowania i/lub zmiany drugiej dolnej wartości progowej (LoLoLimit) dla alarmu progowego. Sposób użycia Tagname.LoLoLimit Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Analog (odczyt/zapis) Zakres wartości Musi mieścić się w zdefiniowanym dla danej zmiennej zakresie wartości. Przykład Zamieszczone poniżej wyrażenie powoduje zmniejszenie wartości pola LoLoLimit (alarmu progowego) o 10. MyTag.LoLoLimit=MyTag.LoLoLimit - 10; Patrz również .Alarm, .Ack, .LoLimit, .HiLimit, .HiHiLimit, HiStatus, .HiHiStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-18 Rozdział 2 .LoLoStatus alarmy Pole to określa, czy w systemie występuje drugi dolny alarm progowy LoLoLimit. Sposób użycia Tagname.LoLoStatus Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0. Jeżeli wystąpi alarm progowy typu LoLo dla zmiennej, z którą pole to jest skojarzone, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack, w celu określenia dokładnej przyczyny alarmu związanego z daną zmienną. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład Przykładowa instrukcja warunkowa IF-THEN zamieszczona poniżej zostanie wykonana tylko wtedy, gdy pole .LoLoStatus zmiennej o nazwie MyTag ma wartość 1. Jeżeli dla zmiennej MyTag uruchomiony zostanie alarm progowy LoLo, wykonane zostaną wyrażenia zamieszczone w instrukcji IF-THEN. IF (MyTag.LoLoStatus == 1) THEN OperatorMessage="MyTag has gone into Low-Low Alarm"; ENDIF; Patrz również .Alarm, .Ack, .LoLimit, .LoLoLimit, .HiLimit, .HiHiLimit, HiStatus, .HiHiStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .LoStatus 2-19 alarmy Pole to określa, czy w systemie występuje pierwszy dolny alarm progowy LoLimit. Sposób użycia Tagname.LoStatus Parametry Tagname Opis Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0. Jeżeli wystąpi alarm progowy typu Lo dla zmiennej, z którą pole to jest skojarzone, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack w celu określenia dokładnej przyczyny alarmu związanego z daną zmienną. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład IF (WaterLevelTank1.LoStatus == 1) THEN PumpShutdown = 1; WaterFillValue = 1; ENDIF; Patrz również .Alarm, .Ack, .LoLimit, .LoLoLimit, .HiLimit, .HiHiLimit, HiStatus, .HiHiStatus .MajorDevPct alarmy Monitoruje i/lub zmienia wartość procentowego odchylenia dla alarmu. Sposób użycia Tagname.MajorDevPct Parametry Tagname Opis Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Integer (odczyt/zapis) Zakres wartości Od 0 do 100% Przykład Przykładowe wyrażenie zamieszczone poniżej zmienia wartość pola .MajorDeviation zmiennej MyTag na 25%. MyTag.MajorDevPct=25; Patrz również .MajorDevStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-20 Rozdział 2 .MajorDevStatus alarmy Pole to określa, czy w systemie występuje alarm dużego odchylenia. Sposób użycia Tagname.MajorDevStatus Parametry Tagname Opis Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0. W przypadku wystąpienia alarmu odchyleniowego dla zmiennej, z którą pole to jest skojarzone, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład Przykładowa instrukcja warunkowa IF-THEN zamieszczona poniżej zostanie wykonana tylko wtedy, gdy wartość pola .HiHiStatus zmiennej o nazwie MyTag jest równa 1. Inaczej ujmując, jeżeli dla zmiennej MyTag uruchomiony zostanie alarm dużego odchylenia, wykonane zostaną wyrażenia zamieszczone w instrukcji IF-THEN. IF (MyTag.MajorDevStatus == 1) THEN OperatorMessage="MyTag has gone into a Major Deviation Alarm"; ENDIF; Uwagi Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack, w celu określenia dokładnej przyczyny alarmu związanego z daną zmienną. Patrz również .MajorDevPct Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .MaxEU 2-21 zmienna Pole to zawiera maksymalną wartość danej zmiennej, wyrażoną w jednostkach inżynierskich (EU). Sposób użycia Tagname.MaxEU Parametry Tagname Uwagi Opis Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Wartość odczytana z programu komunikacyjnego uważana jest za ŹRÓDŁOWĄ (RAW), jeżeli została ona przysłana do programu WindowViewer po raz pierwszy. Wartości źródłowe mogą wymagać skalowania. Do skalowania wartości źródłowych przeznaczone są pola .MinEu i .MaxEu. Rozważmy typowy przykład - załóżmy, że wskaźnik poziomu cieczy dostarcza informacje do sterownika PLC. Czujnik dołączony do sterownika przesyła sygnał o wartości od 4 do 20 mA. Sterownik PLC przekształca ten sygnał (wykorzystując wewnętrzny przetwornik analogowo-cyfrowy) na wartość całkowitą z zakresu od 0 do 4096. Wartość ta jest zapisywana jako zmienna o nazwie PoziomZbiornika2. Wyświetlenie wartości "źródłowej " (z zakresu od 0 do 4096) nie dostarcza żadnej użytecznej informacji operatorowi. Konieczne jest zatem przekształcenie tej wartości na jednostki inżynierskie. W tym celu należy prawidłowo skonfigurować pola MaxEU i MinEU, określające granice zakresu jednostek inżynierskich. W rozważanym przykładzie, wartość RAW równa 0 (z pola odczytano 4 mA) zostanie przekształcona na "0 Galonów", a wartość 4096 (z pola odczytano 20 mA) zostanie przekształcona na "100 Galonów". W celu wyświetlenia poprawnych wartości na ekranie, należy wprowadzić następujące instrukcje: Minimum Raw=0,Maximum Raw = 4096 Minimum Engineering Units=0,Maximum Engineering Units=100 Po wprowadzeniu tych instrukcji, jeżeli wartość RAW pola będzie równa 4096, na ekranie wyświetlona zostanie liczba 100. Typ danych Real (tylko odczyt) Zakres wartości Zależy od typu zmiennej. Przykład Ponieważ pole to jest przeznaczone tylko do odczytu, nie można mu przypisywać wartości. Wyświetlenie wartości .MinEU oraz .MaxEU lub wykorzystanie ich w obliczeniach jest bardzo użyteczne i może ułatwić zrozumienie operatorowi zasad konwersji wartości uzyskiwanych np. ze sterowników lub innych urządzeń. DialogValueEntry ("IO_Point_717", IO_Point_717.MinEU, IO_Point_717.MaxEU, "Please Enter a New Value:"); Patrz również .MinEU, .MinRaw, .MaxRaw, .RawValue Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-22 Rozdział 2 .MaxRange dane historyczne Pole to określa procentową wartość zakresu Jednostek inżynierskich zmiennej, który powinien być wyświetlany na trendzie dla zmiennej. Sposób użycia Tagname.MaxRange Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Ponieważ wiele różnych zmiennych może być wyświetlanych na wykresach trendów historycznych jednocześnie, podawanie dolnej i górnej granicy zakresu wyświetlanych wartości (pola .MinRange oraz .MaxRange) w jednostkach inżynierskich staje się niemożliwe, gdyż każda zmienna może mieć (i zwykle ma) zupełnie inny zakres wartości wyrażony w takich jednostkach. Dlatego też granice zakresu wyraża się jako procentową część zakresu wartości każdej zmiennej wyrażonego w jednostkach inżynierskich. W ten sposób, niezależnie od wielkości całego zakresu dla każdej zmiennej, na trendzie historycznym wyświetlana będzie tylko zadana procentowo część zakresu wartości danej zmiennej. Typ danych Real (odczyt/zapis) Zakres wartości Pola .MaxRange i .MinRange mogą przyjmować wartości z przedziału od 0 do 100. Wartości pól .MinRange i .MaxRange wyrażane są w procentach. Wartość .MinRange musi być mniejsza od .MaxRange. Jeżeli do jednego z tych pól zostanie przypisana wartość mniejsza od 0 lub większa od 100, zostanie ona automatycznie zmieniona odpowiednio na 0 lub 100. Jeżeli wartość podana w polu .MinRange będzie większa lub równa wartości podanej w polu .MaxRange, na trendzie nie będą wyświetlane żadne dane. Przykład Zamieszczone poniżej, przykładowe wyrażenie, zmienia maksymalny, procentowy zakresu trendu historycznego związanego ze zmienną o nazwie "MyHistTrend" na wartość równą 25%. MyHistTrendTag.MaxRange=25; Patrz również .ChartStart, .ChartLength, .DisplayMode, .MinEU, .MaxEU Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .MaxRaw 2-23 zmienna Pole to zawiera górną wartość graniczną dla rzeczywistej wartości źródłowej odczytywanej z programu komunikacyjnego przez program WindowViewer, pracujący jako klient. Wartość pola .MaxRaw określana jest na podstawie definicji maksymalnej wartości źródłowej zmiennej, podanej na Liście zmiennych. Każda zmienna o większej wartości zostaje zmniejszona do wartości tego pola. Sposób użycia Tagname.MaxRaw Parametry Opis Zmienna Dowolna zmienna typu I/O Discrete, Indirect Discrete, I/O Integer, Memory Real, Indirect Analog, I/O Message lub Indirect Message. Uwagi Pole to przeznaczone wyłącznie do odczytu wykorzystywane jest do wyświetlania górnej wartości granicznej dla zmiennej źródłowej. Typ danych Dowolna zmienna typu Integer lub Real (przeznaczona wyłącznie do odczytu). Zakres wartości Dowolna zmienna analogowa. Przykład Zamieszczone poniżej wyrażenie umożliwia sprawdzenie czy zmienna nie wyszła poza zakres normalnych wartości, a więc czy jej wartość nie została obcięta. IF ((Temp01.RawValue > Temp01.MaxRaw) OR (Temp01.RawValue < Temp01.MinRaw))THEN Show "Instrument Failure Window"; ENDIF; Patrz również .MinRaw, .RawValue, .MinEU, .MaxEU Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-24 Rozdział 2 .MinEU zmienna Pole to zawiera minimalną wartość danej zmiennej wyrażoną w jednostkach inżynierskich (EU). Sposób użycia Tagname.MinEU Parametry Tagname Uwagi Opis Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Wartość odczytana z programu komunikacyjnego uważana jest za ŹRÓDŁOWĄ (RAW), jeżeli została ona przysłana do programu WindowViewer po raz pierwszy. Wartości źródłowe mogą wymagać skalowania. Do skalowania wartości źródłowych przeznaczone są pola .MinEu i .MaxEu. Rozważmy typowy przykład - załóżmy, że wskaźnik poziomu cieczy dostarcza informacje do sterownika PLC. Czujnik dołączony do sterownika przesyła sygnał o wartości od 4 do 20 mA. Sterownik PLC przekształca ten sygnał (za pomocą przetwornika analogowo-cyfrowego) na wartość całkowitą z zakresu od 0 do 4096. Wartość ta jest zapisywana jako zmienna o nazwie PoziomZbiornika2. Wyświetlenie wartości "źródłowej " (z zakresu od 0 do 4096) nie dostarcza żadnej użytecznej informacji operatorowi. Konieczne jest zatem przekształcenie tej wartości na jednostki inżynierskie. W tym celu należy prawidłowo skonfigurować pola MaxEU i MinEU, określające granice zakresu jednostek inżynierskich. W rozważanym przykładzie, wartość RAW równa 0 (z pola odczytano 4 mA) zostanie przekształcona na "0 Galonów", a wartość 4096 (z pola odczytano 20 mA) zostanie przekształcona na "100 Galonów". W celu wyświetlenia tych poprawnych wartości na ekranie należy wprowadzić następujące instrukcje: Minimum Raw=0,Maximum Raw = 4096 Minimum Engineering Units=0,Maximum Engineering Units=100 Po wprowadzeniu tych instrukcji, jeżeli wartość RAW pola będzie równa 4096, na ekranie wyświetlona zostanie liczba 100. Typ danych Real (tylko odczyt) Zakres wartości Zależy od typu rozważanej zmiennej. Przykład AbsoluteTagRange = (Tag.MaxEU - Tag.MinEU); Patrz również .MaxEU, .MinRaw, .MaxRaw, .RawValue Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .MinorDevPct Sposób użycia 2-25 alarmy Tagname.MinorDevPct Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Zaznaczenie opcji Retentive Parameters na Liście zmiennych powoduje automatyczne zapisywanie zmian wartości tego pola przez połączenia animacyjne lub skrypty programu WindowViewer. Typ danych Integer (odczyt/zapis) Zakres wartości Od 0 do 100% Przykład Przykładowe wyrażenie zamieszczone poniżej zmienia wartość pola .MinorDevPct zmiennej o nazwie MyTag na 25%. MyTag.MinorDevPct=25; Patrz również .MinorDevStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-26 Rozdział 2 .MinorDevStatus alarmy Pole to określa, czy w systemie występuje alarm małego odchylenia wartości. Sposób użycia Tagname.MinorDevStatus Parametry Opis Tagname Dowolna zmienna typu, Integer , Real, lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0. W przypadku wystąpienia alarmu odchyleniowego dla zmiennej, z którą pole to jest skojarzone, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład Przykładowa instrukcja warunkowa IF-THEN zamieszczona poniżej zostanie wykonana tylko wtedy, gdy wartość pola .MinorDevStatus ("Alarm małego odchylenia wartości) zmiennej o nazwie MyTag jest równa 1. Inaczej ujmując, jeżeli dla zmiennej MyTag uruchomiony zostanie alarm małego odchylenia wartości, wykonane zostaną wyrażenia zamieszczone w instrukcji IF-THEN. IF (MyTag.MinorDevStatus == 1) THEN OperatorMessage="MyTag has gone into a Minor Deviation Alarm"; ENDIF; Uwagi Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack, w celu określenia dokładnej przyczyny generowania alarmu dla danej zmiennej. Patrz również .MinorDevPct Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .MinRange 2-27 dane historyczne Pole to podaje w procentach dolną granicę zakresu wartości zmiennej, która ma być wyświetlona w oknie trendu historycznego. Sposób użycia Tagname.MinRange Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Ponieważ wiele różnych zmiennych może być wyświetlanych na wykresach trendów historycznych jednocześnie, podawanie dolnej i górnej granicy zakresu wyświetlanych wartości (pola .MinRange oraz .MaxRange) w jednostkach inżynierskich staje się niemożliwe, gdyż każda zmienna może mieć (i zwykle ma) zupełnie inny zakres wartości wyrażony w takich jednostkach. Dlatego też granice zakresu wyraża się jako procentową część zakresu wartości każdej zmiennej, wyrażonego w jednostkach inżynierskich. W ten sposób, niezależnie od wielkości całego zakresu dla każdej zmiennej, na trendzie historycznym wyświetlana będzie tylko zadana procentowo część zakresu wartości danej zmiennej. Typ danych Real (odczyt/zapis) Zakres wartości Pola .MaxRange i .MinRange mogą przyjmować wartości z przedziału od 0 do 100. Wartości pól .MinRange i .MaxRange wyrażane są w procentach. Wartość .MinRange musi być mniejsza od .MaxRange. Jeżeli do jednego z tych pól zostanie przypisana wartość mniejsza od 0 lub większa od 100, zostanie ona automatycznie zmieniona odpowiednio na 0 lub 100. Jeżeli wartość podana w polu .MinRange będzie większa lub równa wartości podanej w polu .MaxRange, na trendzie nie będą wyświetlane żadne dane. Przykład TotalChartHeight=MyHistTrendTag.MaxRange - MyHistTrendTag.MinRange; Patrz również .ChartStart, .ChartLength, .DisplayMode, .MinEU, .MaxEU, .MaxRange Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-28 Rozdział 2 .MinRaw zmienna Minimalna wartość zmiennej źródłowej odczytywanej z programu komunikacyjnego przez program WindowViewer pracujący jako klient. Wartość pola .MinRaw jest wprowadzana na Liście zmiennych w polu Min Raw, w czasie definiowania zmiennej typu I/O. Każdej zmienna o mniejszej wartości przypisywana będzie wartość tego pola. Sposób użycia Tagname.MinRaw Parametry Opis Tagname Dowolna zmienna typu I/O Discrete, Indirect Discrete, I/O Integer, Memory Real, Indirect Analog, I/O Message lub Indirect Message. Uwagi Pole to, przeznaczone wyłącznie do odczytu, wykorzystywane do wyświetlania górnej wartości granicznej zmiennej źródłowej. Typ danych Dowolna zmienna typu Integer lub Real (przeznaczona wyłącznie do odczytu). Zakres wartości Dowolna zmienna analogowa. Przykład Zamieszczone poniżej wyrażenie umożliwia sprawdzenie czy zmienna nie wyszła poza zakres normalnych wartości, a więc czy jej wartość nie została obcięta. IF ((Temp01.RawValue > Temp01.MaxRaw) OR (Temp01.RawValue < Temp01.MinRaw))THEN Show "Instrument Failure Window"; ENDIF; Patrz również .MaxRaw, .RawValue, .MinEU, .MaxEU Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .Name 2-29 zmienna Pole to zawiera nazwę zmiennej w postaci łańcucha znaków. Sposób użycia Tagname.Name Parametry Opis Tagname Dowolny typ zmiennej. Typ danych Message (odczyt/zapis) Zakres wartości Wartość pola .Name może być zmieniana wyłącznie w przypadku zmiennych typu pośredniego, a więc zmiennych typu Group Var i Tag ID. W czasie przypisywania wartości do tego pola należy pamiętać o obowiązującej konwencji nazewnictwa, włączając w to zakres dopuszczalnych znaków, oraz fakt, że pierwszym znakiem musi być litera alfabetu. Uwagi Pole to przeznaczone jest wyłącznie do odczytu w przypadku następujących typów zmiennych: Hist Trend, dowolne typy pamięciowe , I/O Type Pole to przeznaczone jest do odczytu/ zapisu w przypadku następujących typów zmiennych: Group Var, Tag ID, Indirect Jeżeli dla danej zmiennej pole to przeznaczone jest wyłącznie do odczytu, może być wykorzystane do podawania nazwy zmiennej, bez korzystania ze znaków cudzysłowu np. wyrażenie MojaZmienna.Name jest równoważne wyrażeniu "MojaZmienna". Mechanizm ten jest szczególnie użyteczny w przypadku wybrania polecenia Update Use Count z menu Special programu WindowMaker, czy też w przypadku poszukiwania odnośników do zmiennych, ponieważ obydwa te polecenia nie są w stanie odszukać zmiennej, jeżeli jej nazwa ujęta jest w cudzysłów. Z tego powodu, jeżeli nazwa zmiennej ujęta zostanie w cudzysłów, a następnie wybrane zostaną polecenia Update Use Counts i Special, Delete Unused Tags, zmienna zostanie usunięta, ponieważ nie znalezione zostaną miejsca jej wykorzystywania. W celu "odwołania" uprzednio przypisanej wartości do zmiennej typu pośredniego można wprowadzić "". W przypadku zmiennych, dla których wartość tego pola może być zarówno odczytywana jak i zmieniana, możliwości wykorzystania są jeszcze większe. Pole to pozwala na zamianę zmiennych typu pośredniego. Jeżeli pole .Name zmiennej typu pośredniego zostanie przypisane do nazwy innej zmiennej, oraz jeżeli obydwie zmienne są tego samego typu, zmienna pośrednia w rzeczywistości staje się inną zmienną, i może być używana we wszystkich miejscach programu InTouch, w których wykorzystywana była oryginalna zmienna. Podobnie, można zmienić Grupę alarmów emulowaną przez zmienną typu Group Var. Przykład Instrukcja zamieszczona poniżej wykorzystuje pole .Name przeznaczone wyłącznie do odczytu i pole komentarza tej samej zmiennej w celu utworzenia komunikatu dla operatora: MyMessageTag="The tag named " + MyTag.Name + " has a comment of " + MyTag.Comment; Zamieszczona poniżej instrukcja, korzystająca z pola .Name przeznaczonego do odczytu/ zapisu, zmienia Grupę alarmów wskazywaną przez zmienną typu Group Var o nazwie "MyGroupVarTag": MyGroupVarTag.Name="SomeAlarmGroup"; Opis zastosowania: Należy utworzyć okno graficzne do przedstawiania trzech parametrów jednego ze 100 odwiertów naftowych. Zamieszczony poniżej skrypt związany ze zmianą wartości pozwala na uaktualnianie informacji wyświetlanych w oknie graficznym, stosownie do odwiertu naftowego wybranego przez operatora. W skrypcie związanym z przyciskiem stosowana jest zmienna o nazwie OilWellNumber. IndOilWellPump.Name = "OilWellPump" + Text(OilWellNumber, "#"); IndOilWellTEP.Name = "OilWellTemp" + Text(OilWellNumber, "#"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-30 Rozdział 2 IndOilWellPressure.Name = "OilWellPressure" + Text(OilWellNumber, "#"); W celu wykonania skryptu należy utworzyć przycisk z połączeniem dotykowym do wprowadzania wartości analogowej ze zmienną OilWellNumber. Jeżeli w trakcie wykonywania aplikacji operator kliknie ten przycisk a następnie wprowadzi numer odwiertu, wykonany zostanie powyższy skrypt. .Normal alarmy Wartość tego pola jest równa 1, jeżeli nie jest uruchomiony żaden alarm dla zmiennej. Sposób użycia Tagname.Normal Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Group Var. Uwagi Pole to używane jest w skryptach lub połączeniach animacyjnych do zasygnalizowania, że dana zmienna znajduje się w stanie "normalnym", tzn. nie jest aktywny żaden alarm dla tej zmiennej. Jeśli dla zmiennej tej aktywny jest jeden lub więcej alarmów, wartość tego pola jest równa 0. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Aktywny jest jeden lub więcej alarmów dla zmiennej. 1 = Brak aktywnych alarmów dla danej zmiennej (wartość domyślna). Przykład Wyrażenia zawarte w poniższej instrukcji IF-THEN będą wykonywane zawsze, ilekroć nie będzie aktywnych alarmów dla zmiennej o nazwie "Tag1." Jeżeli dla zmiennej o nazwie "Tag1" aktywny będzie jeden lub więcej alarmów, wykonywana będzie część "ELSE" instrukcji: IF (Tag1.Normal==1) THEN MyOperatorMessage="Tag1 is OK - No alarms associated with it"; ELSE MyOperatorMessage="Tag1 has one or more alarms active!"; ENDIF; Patrz również .Alarm Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .OffMsg 2-31 zmienna Pole .OffMsg umożliwia użytkownikowi odwoływanie się do pola komentarza zmiennej dyskretnej przy przechodzeniu w stan 0, wprowadzonego na Liście zmiennych. Sposób użycia Tagname.OffMsg Parametry Opis Tagname Dowolna zmienna typu Discrete. Typ danych Message (odczyt/zapis) Zakres wartości Dowolny łańcuch znaków zawierający od 0 do 15 znaków. Przykład Jeżeli zmienna MyDiscrete ma wartość 0, zamieszczony poniżej skrypt spowoduje przypisanie łańcucha znaków zawartego w polu OffMsg na Liście zmiennych do zmiennej StateMessage. StateMessage=Dtext (MyDiscrete, MyDiscrete.OnMsg, MyDiscrete.OffMsg); Patrz również .OnMsg .OnMsg zmienna Pole .OnMsg umożliwia użytkownikowi odwoływać się do pola komentarza zmiennej dyskretnej przy zmianie wartości na 1, wprowadzonego na Liście zmiennych. Sposób użycia Tagname.OnMsg Parametry Opis Tagname Dowolna zmienna typu Discrete. Typ danych Message (odczyt/zapis) Zakres wartości Dowolny łańcuch znaków zawierający od 0 do 15 znaków. Przykład IF IndAnalog.OnMsg == "Running" THEN TypeOfTag = "IndAnalog was assigned a Motor Starter"; ENDIF; Patrz również .OffMsg Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-32 Rozdział 2 .Pen1 - .Pen8 dane historyczne Pola te określają przyporządkowanie zmiennych do poszczególnych pisaków na wykresie trendów historycznych. Sposób użycia Uwagi Tagname{.Pen1 | .Pen2 | .Pen3 | .Pen4 | .Pen5 | .Pen6 | .Pen7 | .Pen8}; Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Ze względu na skomplikowane zasady wykorzystania pola .PenX zaleca się, o ile to jest możliwe, stosowanie funkcji HTSetPenName i HTGetPenName. Uwaga Do pola .PenX można przypisywać wyłącznie zmienne lokalne. Nie można korzystać ze składni, w której określane jest źródło zmiennej. Składnia, w której podawane jest źródło zmiennej, może być stosowana wyłącznie w przypadku funkcji HTSetPenName. Dobrą metodą nauki korzystania z funkcji operujących na tych polach jest analiza umieszczonego na ekranie, a następnie rozdzielonego na elementy składowe wizarda trendów historycznych. Analiza taka umożliwia zrozumienie w jaki sposób pola te powinny być wykorzystywane. Typ danych TagID (odczyt/zapis) Zakres wartości Typem danych obowiązującym w tym polu jest typ TagID. Oznacza to, że do tego pola można przypisać "adres" zmiennej. Do pola tego nie można przypisać nazwy zmiennej. Może być przypisane wyłącznie pole .TagID zmiennej. Pełne zrozumienie tego opisu może wymagać skorzystania z informacji o polu .TagID. Ogólnie ujmując, zmienna typu TagID może być porównywana wyłącznie z inną zmienną typu TagID. Nie można korzystać z niej w połączeniu ze zmienną innego typu, chyba że do zmiennej innego typu dodane zostanie pole .TagID. Chociaż pole to przeznaczone jest do odczytu/ zapisu, jego wartość nie może być bezpośrednio wyświetlona na ekranie. Przykłady Zamieszczone poniżej, przykładowe wyrażenie, przypisuje nową zmienną do pola Pen1 trendu historycznego związanego ze zmienną typu Hist Trend o nazwie "MyHistTrend". Zamieszczona poniżej instrukcja skryptu Pen1 trendu historycznego powiązanego ze zmienną "MyHistTrendTag" rozpocznie wyświetlanie danych archiwalnych zarejestrowanych dla zmiennej o nazwie "MyLoggedTag." Należy zwrócić uwagę w jaki sposób pole .TagID łączone jest z nazwą zmiennej "MyLoggedTag" w celu przypisania jej do Pen1. Jest to konieczne, ponieważ pole "Pen1" jest typu "TagID" a operacja przypisania wymaga zgodności typów (tzn. akceptowalne jest wyrażenie typu ZmiennaDyskretna = ZmiennaDyskretna, natomiast błędne jest wyrażenie ZmiennaDyskretna = ZmiennaTypuPamięciowego, pozbawione w rzeczywistości logiki!) Do pola musi być przypisany obiekt typu TagID. MyHistTrendTag.Pen1=MyLoggedTag.TagID; Opierając się na powyższym przykładzie, rozważmy w jaki sposób można wyświetlić NAZWĘ zmiennej przypisanej do "MyHistTrendTag.Pen1". Informacja taka byłaby bardzo użyteczna dla operatora. Dodatkowo, wyświetlanie nazwy zmiennej rysowanej na trendzie historycznym zwiększa funkcjonalność aplikacji. Pozornie, najłatwiejszym sposobem wyświetlenia wartości wspomnianego pola MyHistTrendTag.Pen1 jest skorzystanie z połączenia wyświetlającego, ale operacja taka (o czym można się przekonać samodzielnie) nie daje przewidywanego wyniku. Powodem takiej sytuacji jest fakt, że rzeczywista wartość pola .Pen1 jest typu całkowitego i zapisana jest w pewnym obszarze pamięci programu WindowViewer, w formacie nie nadającym się do bezpośredniego wyświetlania na ekranie. Rozwiązanie wymaga nieco więcej pracy. Najpierw należy utworzyć nową zmienną typu TagID, na przykład o nazwie "Pen01." Poniżej instrukcji z poprzedniego przykładu należy umieścić następującą instrukcję: Pen01=MyHistTrendTag.Pen1; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola 2-33 W pierwszym przykładzie, zmienna "MyLoggedTag" została przypisana do pola Pen1 zmiennej "MyHistTrendTag." W niniejszym przykładzie, zrealizowana została bardziej zaawansowana operacja, polegająca na przypisaniu wartości Pen1 zmiennej "MyHistTrendTag", obecnie równej TagID zmiennej "MyLoggedTag" do zmiennej Pen01. Powodem takiego działania jest potrzeba dotarcia do pola "Name". Nie można w prosty sposób wyświetlić na ekranie "MyHistTrendTag.Name", ponieważ pokazywany będzie zawsze tekst "MyHistTrendTag." Próba wyświetlenia na ekranie "MyHistTrendTag.Pen1" zakończy się niepowodzeniem ponieważ edytor połączeń nie zezwoli na wyświetlenie Pen1 typu TagID. Jeżeli podjęta zostanie próba wyświetlenia na ekranie wartość pola MyHistTrendTag.Pen1, edytor połączeń animacyjnych nie pozwoli na to, ponieważ dane w polu Pen1 są typu TagID i nie mogą być wyświetlane. Przypisując wartość "MyHistTrendTag.Pen1" do zmiennej typu TagID o nazwie "Pen01", w rzeczywistości do zmiennej "Pen01" przypisana została zmienna "MyLoggedTag." Przedstawione powyżej zadanie można również zrealizować za pomocą pojedynczej instrukcji przedstawionej poniżej. Obydwa rozwiązania są funkcjonalnie identyczne. Pen01=MyLoggedTag.TagID; Preferowane jest pierwsze z przedstawionych rozwiązań. Jest ono bardziej naturalne. Dodatkowo, można po prostu umieścić "MyHistTrendTag.Pen1" jako "zmienną" w skrypcie zmiany wartości w miejscu: Pen01 = MyHistTrendTag.Pen1; Dzięki temu, nie wiedząc jak zmienna została przypisana do Pen1, można ją przypisać do zmiennej Pen01. Pozwala to na ustawiczne wyświetlanie na ekranie NAZWY zmiennej przypisanej do pola Pen1 trendu historycznego, nawet jeżeli zmienna zostanie zmieniona przez użytkownika lub też przez skrypt wykonywany przez system. Analizując głębiej ten przykład, można zażądać wyświetlenia maksymalnej i minimalnej wartości, wyrażonych w Jednostkach inżynierskich, dla rysowanej zmiennej. Z możliwości tej korzysta wizard trendu historycznego. Zalecamy umieszczenie na ekranie wizarda trendu historycznego, a następnie rozdzielenie go i analizę sposobu w jaki został on zaprojektowany. Jest to dobry przykład sposobu korzystania z tych pól. Ponieważ zmienne typu TagID, jak na przykład "Pen01", nie mają pól podających wartość w jednostkach inżynierskich, jak również innych pól zwykle dostępnych w zmiennych, nie można wykorzystać ich do wyświetlania wartości zmiennej w jednostkach inżynierskich. Przykładowo, nie jest możliwe wyświetlenie "Pen01.MaxEu" ponieważ edytor połączeń poinformuje, że nie można odwoływać się do pola .MaxEU w przypadku zmiennej Pen01, typu TagID. W celu rozwiązania tego problemu, wystarczy skorzystać ze zmiennej pomocniczej, której zadaniem jest zapewnienie łączności pomiędzy typem TagID a systemem wyświetlania. Najpierw należy utworzyć zmienną typu Indirect Analog, np. "IndirectAnalogPen1" W takim samym skrypcie zmiany wartości jak np. w przykładzie nr 2, wprowadzić następującą instrukcję: IndirectAnalogPen1.Name=Pen01.Name; Nazwa zmiennej Pen01 (w tym momencie równej "MyLoggedTag") jest przypisana do zmiennej typu pośredniego "IndirectAnalogPen1." Jeżeli zrealizowane zostaną te czynności, można odwoływać się do wszystkich pól zmiennych dostępnych dla zmiennych analogowych, w naszym przypadku, dla zmiennej typu całkowitego o nazwie MyLoggedTag. W tym momencie, w połączeniu wyświetlającym wartości analogowe można wprowadzić: IndirectAnalogPen1.MaxEU Spowoduje to wyświetlenie maksymalnej wartości wyrażonej w jednostkach inżynierskich dla zmiennej przypisanej w danej chwili do zmiennej "IndirectAnalogPen1." Ponieważ zostało do niej przypisane w skrypcie zmiany wartości zamieszczonym powyżej pole Pen01.Name, można z całą pewnością stwierdzić, że maksymalna wartość wyrażona w jednostkach inżynierskich zmiennej jest w tym momencie przypisana do pola Pen1 zmiennej "MyHistTrendTag." Patrz również .TagID, HTGetPenName( ), HTSetPenName( ) Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-34 Rozdział 2 .Quality zmienna W celu pełnego zrozumienia właściwości pola .Quality wykorzystywanego w pakiecie Wonderware, poniżej podano krótką definicję normy jakości. Norma jakości Wonderware oparta jest na standardzie OLE for Process Control, który z kolei bazuje na normie Fieldbus Data Quality Specifications. Flaga jakości reprezentuje jakość wartości danych. Takie rozwiązanie umożliwia zarówno aplikacjom serwera jak i klienta wyznaczenie żądanego zakresu funkcjonalności do implementowania. 8 mniej znaczących bitów Flagi Jakości składa się obecnie z trzech pól bitowych: Quality, Substatus i Limit, o następującym układzie: QQSSSSLL Pole Quality pozwala użytkownikowi korzystać z jakości zmiennej typu I/O, w postaci dostarczonej przez program komunikacyjny. Uwaga W przypadku zakłóceń pracy programu komunikacyjnego, pola związane z jakością zmiennej są automatycznie ustawiane na wartość początkową 0. Równocześnie wartość 0 przypisywana jest do flagi .ReferenceComplete. Sposób użycia Tagname.Quality Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Typ danych Message (odczyt/zapis) Zakres wartości Wartość może należeć do przedziału od 0 do 255. Przykład IF I0Tag.Quality <> 192 THEN LogMessage("This data is not Good!"); ENDIF; Program komunikacyjny Wonderware może sygnalizować sześć (6) wzajemnie wykluczających się statusów jakości danych przesyłanych do klientów. Statusy te są następujące: 1. 2. 3. 4. Dobra Obcięta od góry Obcięta od dołu Brak możliwości konwersji 5. Brak dostępu 6. Przerwana komunikacja OPC QualityBytes .QualityStatus .QualitySubstatus .QualiyLimit War. heks. OPC Quality Bits MSByte LSByte QQSSSSLL XXXXXXXX 0x00C0 0x0056 0x0055 0x0040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Q=3 Q=1 Q=1 Q=1 S=0 S=5 S=5 S=0 L=0 L=2 L=1 L=0 0x0004 0x0018 00000000 00000000 00000000 00000000 Q=0 Q=0 S=1 S=6 L=0 L=0 Jeżeli aplikacja klienta nie może nawiązać łączności z programem komunikacyjnym, wartość QualityStatus jest równa 0. 0x0000 00000000 00000000 Q=0 S=0 L=0 Poszczególne statusy jakości sygnalizowane są po spełnieniu następujących warunków: 1. Dobra • • • • Przykład Połączenie komunikacyjne zostało zweryfikowane. Żądanie dostarczenia danych zostało pomyślnie odebrane przez sterownik PLC, który w odpowiedzi wysłał poprawny, zwrotny pakiet danych. W trakcie operacji zapisu, o ile taka była realizowana, nie wystąpił błąd. Nie wystąpiły żadne zakłócenia w czasie kownersji danych zawartych w zwrotnym pakiecie danych. Wrócona została wartość 0x0000A z rejestru zawierającego 10 (w postaci heksadecymalnej). Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola 2-35 2. Obcięcie od góry • • • • • Połączenie komunikacyjne zostało zweryfikowane. Żądanie dostarczenia danych zostało pomyślnie odebrane przez sterownik PLC, który w odpowiedzi wysłał poprawny, zwrotny pakiet danych. Operacja zapisu lub odczytu rejestru została pomyślnie zrealizowana. Konieczne było zmniejszenie wartości, ponieważ przekroczono maksymalną, górną wartość graniczną. W przypadku łańcucha zanków oznacza to usunięcie części znaków. 16 bitowa liczba całkowita jest zmniejszana do wartości 65535. Przykład 3. Obcięcie od dołu • • • • Połączenie komunikacyjne zostało zweryfikowane. Żądanie dostarczenia danych zostało odebrane pomyślnie przez sterownik PLC, który w odpowiedzi wysłał poprawny pakiet informacji. Operacja zapisu lub odczytu rejestru została pomyślnie zrealizowana. Konieczne było zwiększenie wartości, ponieważ przekroczono minimalną, dolną wartość graniczną. 16 bitowa liczba całkowita jest zmniejszana do wartości 0. Przykład 4. Brak możliwości konwersji • • • • Połączenie komunikacyjne zostało zweryfikowane. Żądanie dostarczenia danych zostało odebrane pomyślnie przez sterownik PLC, który w odpowiedzi wysłał poprawny pakiet informacji. Dostarczone przez sterownik PLC dane nie mogą zostać przekonwertowane na żądany format. Przyczynami zakłóceń w konwersji mogą być przykładowo: • Wysłanie przez program komunikacyjny stałej zamiast danych, lub wysłanie wyłącznie informacji o jakości. • Nieprzydatność danych. • Brak informacji czy wartość jest zbyt duża, czy też zbyt mała. • Dostarczenie przez sterownik PLC niewłaściwego typu danych. • Nadesłanie liczby zmiennoprzecinkowej, ale nie wartości (przykładowo: niewłaściwy format liczby). Nadesłanie wartości 0x000A z rejestru BCD przetwornika PLC. Przykład 5. Brak dostępu • • • • Przykład Połączenie komunikacyjne zostało zweryfikowane. Żądanie dostarczenia danych zostało odebrane pomyślnie przez sterownik PLC, który w odpowiedzi wysłał poprawny pakiet informacji. Ze sterownika PLC został wysłany komunikat, o braku dostępu do żądanej wartości. Przyczynami braku dostępu mogą być przykładowo: • Brak elementu w pamięci sterownika PLC. • Zablokowanie w danym momencie dostępu do elementu (na przykład przez mechanizm wspólnego korzystania z zasobów). • Niewłaściwy format/ typ danych. • Podjęcie próby zapisu do elementu przeznaczonego wyłącznie do odczytu. • W większości przypadków, wystąpienie zakłóceń w stosunku do jednego elementu ma wpływ na całą grupę elementów - jest to powodowane przez schemat odczytu blokowego stosowany przez program komunikacyjny. Przykładowo, jeżeli jeden z elementów w bloku złożonym z 10 elementów będzie niepoprawny, cały blok zostanie zaznaczony przez sterownik PLC jako niepoprawny. Zasygnalizowanie przez program komunikacyjny niewłaściwej liczby elementów w bloku. • Nieużyteczność danych. Próba odczytu R40001, jeżeli R40001 nie jest zdefiniowane w mapie pamięci PLC. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-36 Rozdział 2 6. Przerwana komunikacja • Dowolna kombinacja następujących przyczyn: • Przerwanie transmisji danych. • Temat w trybie wolnej wymiany danych (lub w równoważnym trybie). • Brak połączenia do sprawdzenia poprawności komunikatów. • Brak zasobów w programie komunikacyjnym. Przykładowo, brak możliwości alokowania pamięci przez program TSR (lub sterownik). • Brak zasobów w połączeniu komunikacyjnym. • Wyłączenie połączenia komunikacyjnego. • Wszystkie kanały komunikacyjne zajęte. • Brak możliwość wysłania poprzez sieć komunikatu do sterownika PLC. Przykład Próba odczytu danych z wyłączonego sterownika PLC. Patrz również .QualityLimit, .QualityStatus, .QualitySubstatus .QualityLimit zmienna Liczba całkowita wykorzystywana do wyświetlania wartości granicznych jakości zmiennej typu I/O, dostarczanej przez program komunikacyjny przy poprawnie funkcjonującym połączeniu. Sposób użycia Tagname.QualityLimit Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości (LLL) 0 1 2 3 Patrz również Bez ograniczenia Ograniczenie od dołu Ograniczenie od góry Stała .Quality .QualityLimitString zmienna Pole wykorzystywane do wyświetlania tekstowej wartości granicznej jakości zmiennej I/O, dostarczanej przez program komunikacyjny przy poprawnie funkcjonującym połączeniu. Sposób użycia Tagname.QualityLimitString Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Typ danych Message (tylko odczyt) Patrz również .QualityLimit, .Quality Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .QualityStatus 2-37 zmienna Liczba całkowita wykorzystywana do wyświetlania statusu jakości zmiennej I/O, dostarczanej przez program komunikacyjny przy poprawnie funkcjonującym połączeniu. Sposób użycia Tagname.QualityStatus Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Uwagi Wartość pola bitowego podstatusu (SSSS) zależy od wartości pola jakości (QQSSSSLL). Typ danych Integer (tylko odczyt) Zakres wartości (SSSS) 0 1 3 Patrz również Zły Niepewny Dobry .QualitySubStatus, .Quality .QualityStatusString zmienna Liczba całkowita wykorzystywana do wyświetlania statusu jakości w postaci tekstowej, dla zmiennej I/O, dostarczanej przez program komunikacyjny przy poprawnie funkcjonującym połączeniu. Sposób użycia Tagname.QualityStatusString Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Typ danych Message (tylko odczyt) Patrz również .QualityStatus, .QualitySubStatus, .Quality Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-38 Rozdział 2 .QualitySubstatus zmienna Liczba całkowita wykorzystywana do wyświetlania podstatusu jakości zmiennej I/O, dostarczanej przez program komunikacyjny przy poprawnie funkcjonującym połączeniu. Sposób użycia Tagname.QualitySubstatus Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości (SSSS) i (QQ) Podstatus (SSSS) w przypadku gdy jakość jest ZŁA (QQ=0): 0 1 2 3 4 5 6 7 Nie określona Błąd w konfiguracji Nie podłączona Uszkodzenie sprzętowe Uszkodzenie czujnika Ostatnio odebrana wartość Uszkodzenie Com Wyłączenie Podstatus (SSSS) w przypadku gdy jakość jest NIEPEWNA (QQ=1): 0 1 4 5 6 Nie określona Ostatnio odebrana wartość Czujnik nie dokładny Przekroczenie Jednostek inżynierskich Sub-normalna Podstatus (SSSS) w przypadku gdy jakość jest Dobra (QQ=2): 0 6 Patrz również Nie określona Lokalne przepisanie .QualityStatus, .Quality .QualitySubstatusString zmienna Pole wykorzystywane do wyświetlania podstatusu jakości zmiennej I/O, dostarczanej przez program komunikacyjny przy poprawnie funkcjonującym połączeniu. Sposób użycia Tagname.QualitySubstatusString Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Analog lub Message. Typ danych Message (tylko odczyt) Patrz również .QualityStatus, .QualitySubstatus, .Quality Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .RawValue 2-39 zmienna Rzeczywista wartość odczytana z programu komunikacyjnego przez program WindowViewer pracujący jako klient. Pole wartości źródłowej pozwala użytkownikowi na odczytanie wartości zmiennej typu I/O przed wyskalowaniem jej przez program InTouch. Sposób użycia Tagname.RawValue Parametry Opis Tagname Dowolna zmienna typu I/O Discrete, Indirect Discrete, I/O Integer, Memory Real, Indirect Analog, I/O Message lub Indirect Message. Uwagi Pole przeznaczone wyłącznie do odczytu, wykorzystywane do wyświetlania aktualnej wartości zmiennej dyskretnej lub analogowej typu I/O, przed jej skalowaniem w programie InTouch. Typ danych Integer (tylko odczyt) Zakres wartości Wszędzie tam gdzie mogą być stosowane wartości dyskretne lub analogowe. Przykład Zamieszczone poniżej wyrażenie umożliwia sprawdzenie czy zmienna nie wyszła poza zakres normalnych wartości. IF ((IOtag.RawValue > IOtag.MaxRaw) OR (IOTag.RawValue < IOTag.MinRaw))THEN AlarmMessage = "Sensor is out of calibration or requires replacement."; ENDIF; Patrz również .MinRaw, .MaxRaw, .MinEU, .MaxEU Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-40 Rozdział 2 .Reference zmienna Pole to pozwala operatorowi na dynamiczną zmianę nazwy dostępu (Access Name) i/lub nazwy elementu (Item) w czasie pracy aplikacji. Sposób użycia Tagname.Reference Parametry Opis Tagname Dowolna zmienna typu I/O Discrete, Indirect Discrete, I/O Integer, I/O Real, Indirect Analog, I/O Message lub Indirect Message. Uwagi Pole to zapewnia łatwą metodę dynamicznej zmiany nazwy dostępu i/lub nazwy elementu. Typ danych Message (odczyt/zapis) Zakres wartości Dowolny łańcuch znaków zawierający nazwę dostępu i/lub nazwę elementu. Przykład Instrukcja zamieszczona poniżej przypisuje do pola z nazwą elementu zmiennej I/O nazwę elementu wygenerowaną przez funkcję tekstową w zależności od wartości zmiennej pamięciowej typu całkowitego. Instrukcja ta zastosowana zostanie w skrypcie warunkowym, do wykonywania operacji na sekwencji zmiennych, z wykorzystaniem do tego celu pola .ReferenceComplete. MyTag.Reference="R" + Text( MyIndex, “#” ); { Jeżeli MyIndex=40001, Nazwa elementu będzie równa: .ReferenceComplete R40001 } zmienna Wraca potwierdzenie w przypadku zmiany pola .Reference zmiennej, odbiera żądany element, a uaktualniona wartość jest zapisywana do pola .Value zmiennej. Sposób użycia Uwagi Tagname.ReferenceComplete; Parametry Opis Tagname Dowolna zmienna typu I/O Discrete, Indirect Discrete, I/O Integer, I/O Real, Indirect Analog, I/O Message lub Indirect Message. Pole to jest bardzo użyteczne w połączeniu z polem .Reference. Pole .ReferenceComplete wskazuje, że nastąpiła modyfikacja nazwy elementu lub nazwy dostępu, i co ważniejsze, że nowe wartości zostały uzyskane z nowego źródła danych. Nawet jeżeli nowe źródło danych jest identyczne z poprzednio wykorzystywanym źródłem danych, w momencie pierwszego uaktualnienia wartości przez nowe źródło danych, pole to ustawiane jest na 1. W czasie procesu uaktualniania, od momentu zmodyfikowania pola .Reference do momentu pierwszego uaktualnienia wartości przez nowe źródło danych, system ustawia wartość tego pola na 0. Typ danych I/O Discrete (tylko odczyt) Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .ROCPct 2-41 alarmy Pole to służy do monitorowania i/lub zmiany maksymalnej, dopuszczalnej zmiany wartości zmiennej w jednostce czasu. Sposób użycia Tagname.ROCPct Parametry Opis Tagname Dowolna zmienna typu, Integer , Real lub Indirect Analog. Uwagi Pole to zawiera wartość wyrażoną w procentach. Jego wartość jest równa wartości odpowiedniego parametru, wprowadzonego w czasie definiowania zmiennej na Liście zmiennych. Użytkownik może wyświetlić wartość tego pola lub wykorzystać ją w skrypcie. Ponadto wartość ta może zostać zmieniona w czasie pracy aplikacji. Typ danych Integer (odczyt/zapis) Zakres wartości Od 0 do 100% Przykład Wyrażenie zamieszczone poniżej ustawia wartość tego pola dla zmiennej MyTag na 25%. MyTag.ROCPct=25; Patrz również .ROCStatus Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-42 Rozdział 2 .ROCStatus alarmy Pole to określa, czy w systemie występuje alarm związany z szybkością zmian wartości danej zmiennej (Rate of Change). Sposób użycia Tagname.ROCStatus Parametry Opis Tagname Dowolna zmienna typu, Integer , Real lub Indirect Analog. Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0. W przypadku aktywowania dla zmiennej alarmu przekroczenia dopuszczalnej prędkości zmiany wartości, pole to ustawiane jest przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Stan alarmowy nie występuje 1 = Stan alarmowy występuje Przykład Wyrażenia zawarte w zamieszczonej poniżej instrukcji IF-THEN wykonywane są wyłącznie wtedy, gdy pole .ROCStatus ("Alarm dopuszczalnej prędkości zmian wartości") jest równe 1. Inaczej ujmując, jeżeli dla zmiennej MyTag aktywowany zostanie alarm przekroczenia dopuszczalnej prędkości zmian wartości, wykonane zostaną wyrażenia zamieszczone w tej instrukcji warunkowej. IF (MyTag.ROCStatus == 1) THEN OperatorMessage="MyTag has gone into a Rate-Of-ChangeAlarm"; ENDIF; Uwagi Pole to jest często używane w połączeniu z polami .Alarm oraz .Ack, w celu określenia dokładnej przyczyny alarmu związanego z daną zmienną. Patrz również .ROCPct Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .ScooterLockLeft 2-43 dane historyczne Pole to uniemożliwia przesunięcie prawego suwaka na wykresie trendu historycznego poza aktualne położenie lewego suwaka . Sposób użycia Tagname.ScooterLockLeft Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Ogólnie ujmując, zalecane jest aby użytkownik nie miał możliwości przesunięcie prawego suwaka w lewo, poza pozycję zajmowaną przez lewy suwak. Jeżeli lewy suwak nie jest zablokowany, w momencie gdy prawy suwak zostanie przesunięty w lewo poza pozycję zajmowaną przez lewy suwak, ich pozycje będą równe. Typ danych Discrete (odczyt/zapis) Zakres wartości 0 = FALSE = prawy suwak może zostać przesunięty poza pozycję zajmowaną przez lewy suwak. 1 = FALSE = prawy suwak nie może zostać przesunięty poza pozycję zajmowaną przez lewy suwak. Przykład Po wykonaniu zamieszczonej poniżej instrukcji, prawy suwak związany ze zmienną typu HistTrendTag o nazwie "MyHistTrendTag" nie będzie mógł być przesunięty za pozycję zajmowaną przez lewy suwak. MyHistTrendTag.ScooterLockLeft=1; Patrz również .ScooterPosRight, .ScooterPosLeft, .ScooterLockRight Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-44 Rozdział 2 .ScooterLockRight dane historyczne Pole to uniemożliwia przesunięcie lewego suwaka na wykresie trendu historycznego poza aktualne położenie prawego suwaka . Sposób użycia Tagname.ScooterLockRight Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Ogólnie ujmując, zalecane jest aby użytkownik nie miał możliwości przesunięcia lewego suwaka w prawo, poza pozycję zajmowaną przez prawy suwak. Jeżeli prawy suwak nie jest zablokowany, w momencie gdy lewy suwak zostanie przesunięty w prawo poza pozycję zajmowaną przez prawy suwak, ich pozycje będą równe. Typ danych Discrete (odczyt/zapis) Zakres wartości 0 = FALSE = lewy suwak może zostać przesunięty poza pozycję zajmowaną przez prawy suwak. 1 = FALSE = lewy suwak nie może zostać przesunięty poza pozycję zajmowaną przez prawy suwak. Przykład Po wykonaniu zamieszczonej poniżej instrukcji, lewy suwak związany ze zmienną typu HistTrendTag o nazwie "MyHistTrendTag" nie będzie mógł być przesunięty za pozycję zajmowaną przez prawy suwak. MyHistTrendTag.ScooterLockRight=1; Patrz również .ScooterPosRight, .ScooterPosLeft, .ScooterLockLeft Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .ScooterPosLeft 2-45 dane historyczne Pole to umożliwia odczyt i/lub zmianę położenia lewego suwaka na wykresie trendu historycznego. Sposób użycia Uwagi Tagname.ScooterPosLeft Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Pole to, przeznaczone do odczytu i zapisu, dynamicznie steruje położeniem lewego suwaka na wykresie trendu historycznego. Użytkownik może użyć tego pola w skrypcie do odczytania bieżącej pozycji lewego suwaka, albo też do przestawienia suwaka w inne położenie na wykresie, poprzez wpisanie zadanej wartości do tego pola. Pole to jest bardzo często wykorzystywane w połączeniu z funkcją HTGetValue(). W przypadku korzystania z tego typu funkcji należy określić do którego trendu historycznego mają być wysyłane zapytania, jak również należy podać bieżące pozycje suwaków. Patrz przykład poniżej. Typ danych Real (odczyt/zapis) Zakres wartości Od 0.0 do 1.0; gdzie 0.0 odpowiada lewemu krańcowi wykresu trendu historycznego, natomiast 1.0 odpowiada prawemu krańcowi tego wykresu. Przykład Podana poniżej instrukcja zmienia pozycję zajmowaną przez lewy suwak. Lewy suwak zostanie przesunięty o 34% całkowitej długości wykresu związanego ze zmienną typu HistTrendTag o nazwie "MyHistTrendTag", licząc od lewej strony MyHistTrendTag.ScooterPosLeft=.34; W zamieszczonym poniżej skrypcie, funkcja HtGetValueAtScooter() została wykorzystana do odczytu wartości wskazywanej przez pisak Pen1 w miejscu, w którym znajduje się lewy suwak. Ponieważ zmiana każdego z parametrów funkcji powoduje ponowne wyznaczenie wartości funkcji, instrukcja ta wykonywana jest po każdej zmianie pozycji lewego suwaka. MyRealTag=HTGetValueAtScooter( MyHistTrendTag, MyHistTrendTag.UpdateCount,1, MyHistTrendTag.ScooterPosLeft,1,"PenValue"); Patrz również .ScooterPosRight, .ScooterLockLeft, ScooterLockRight Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-46 Rozdział 2 .ScooterPosRight dane historyczne Pole to umożliwia odczyt i/lub zmianę położenia prawego suwaka na wykresie trendu historycznego. Sposób użycia Uwagi Tagname.ScooterPosRight Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Pole to, przeznaczone do odczytu i zapisu, dynamicznie steruje położeniem prawego suwaka na wykresie trendu historycznego. Użytkownik może użyć tego pola w skrypcie do odczytania bieżącej pozycji prawego suwaka, albo też do przestawienia suwaka w inne położenie na wykresie, poprzez wpisanie zadanej wartości do tego pola. Pole to jest bardzo często wykorzystywane w połączeniu z funkcją HTGetValue().. W przypadku korzystania z tego typu funkcji należy określić do którego trendu historycznego mają być wysyłane zapytania, jak również należy podać bieżące pozycje suwaków. Patrz przykład poniżej. Typ danych Real (odczyt/zapis) Zakres wartości Od 0.0 do 1.0; 0.0 odpowiada prawemu krańcowi wykresu trendu historycznego, natomiast 1.0 odpowiada lewemu krańcowi tego wykresu. Przykłady Podana poniżej instrukcja zmienia pozycję zajmowana przez prawy suwak. Prawy suwak zostanie przesunięty o 34% całkowitej długości wykresu związanego ze zmienną typu HistTrendTag o nazwie "MyHistTrendTag", licząc od prawej strony MyHistTrendTag.ScooterPosRight=.34; W zamieszczonym poniżej skrypcie, funkcja HtGetValueAtScooter() została wykorzystana do odczytu wartości wskazywanej przez pisak Pen1 w miejscu, w którym znajduje się prawy suwak. Ponieważ zmiana każdego z parametrów funkcji powoduje ponowne wyznaczenie wartości funkcji, instrukcja ta wykonywana jest po każdej zmianie pozycji prawego suwaka. MyRealTag=HTGetValueAtScooter( MyHistTrendTag, MyHistTrendTag.UpdateCount,2, MyHistTrendTag.ScooterPosRight,1,"PenValue"); Patrz również .ScooterPosLeft, .ScooterLockLeft, ScooterLockRight Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .SPCStatus 2-47 SPC Pole to określa, czy dla danej zmiennej aktywny jest alarm SPC. Uwaga Pole to może być wykorzystywane tylko wtedy, gdy zainstalowany jest moduł SPC (statystycznej kontroli procesu). Sposób użycia Tagname.SPCStatus Parametry Opis Tagname Dowolna zmienna typu, Integer , Real lub Indirect Analog. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Alarm SPC nie występuje 1 = Alarm SPC występuje Uwagi Wartość tego pola przeznaczonego wyłącznie do odczytu jest zwykle równa 0. W momencie uruchomienia alarmu SPC, dla zmiennej, z którą pole to jest skojarzone, wartość pola zostaje zmieniona przez system na 1. Pole to ma wartość równą 1 do czasu, gdy zniknie przyczyna alarmu. Przykład Polecenia zawarte w zamieszczonej poniżej instrukcji IF-THEN będą wykonywane wyłącznie wtedy, gdy pole .SPCStatus zmiennej o nazwie MyTag ma wartość równą 1. Inaczej ujmując, jeżeli dla zmiennej MyTag uruchomiony zostanie alarm SPC, wykonane zostaną polecenia zawarte w instrukcji IF-THEN: IF (MyTag.SPCStatus == 1) THEN OperatorMessage="MyTag has gone into an SPC-Alarm"; ENDIF; .TagID zmienna Pole to używane jest w połączeniu ze polami .Pen1-.Pen8 zmiennych typu HistTrendTag do sprawdzania i/lub zmiany zmiennych, których przebiegi rysowane są przez pisaki na wykresie trendu historycznego. Sposób użycia Tagname.TagID Parametry Opis Tagname Dowolna zmienna typu Discrete, Indirect Discrete, oraz Indirect Analog. Uwagi Pole .TagID zawiera adres zmiennej, i wykorzystywane jest głównie w kontekście przypisywania zmiennych do pisaków trendu historycznego. Typ danych TagID (tylko odczyt) Przykład MyHistTrendTag.Pen6=SomeAnalogTag.TagID; Patrz również .Pen1-.Pen8 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-48 Rozdział 2 .TimeDate zmienna Pole typu całkowitego, zawierające liczbę dni, które upłynęły od momentu dostarczenia wartości typu I/O przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Typ danych Tagname.TimeDate Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Integer (tylko odczyt) .TimeDateString zmienna Zmienna tekstowa zawierająca datę w formacie określonym w pliku WIN.INI. Sposób użycia Typ danych Tagname.TimeDateString Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Message (tylko odczyt) .TimeDateTime zmienna Pole typu rzeczywistego, zawierające liczbę dni w postaci ułamka, które upłynęły od momentu dostarczenia wartości typu I/O przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Typ danych Tagname.TimeDateTime Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Message (tylko odczyt) Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .TimeDay 2-49 zmienna Pole typu całkowitego, zawierające dzień, w którym wartość typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeDay Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 1 - 31. .TimeHour zmienna Pole typu całkowitego, zawierające liczbę godzin, które upłynęły od momentu dostarczenia wartości typu I/O przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu I/O. Sposób użycia Tagname.TimeHour Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 0 - 23. .TimeMinute zmienna Pole typu całkowitego, zawierające minutę, w której wartość typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeMinute Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 0 - 59. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-50 Rozdział 2 .TimeMonth zmienna Pole typu całkowitego, zawierające miesiąc, w którym wartość typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeMonth Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 1 - 12. .TimeMsec zmienna Pole typu całkowitego, zawierające liczbę milisekund, w momencie gdy wartość typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeMsec Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 0 - 999. .TimeSecond zmienna Pole typu całkowitego, zawierające liczbę sekund, w momencie gdy wartość typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeSecond Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 0 - 59. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .TimeTime 2-51 zmienna Pole typu całkowitego, zawierające liczbę milisekund które upłynęły od północy do momentu, gdy wartość typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeTime Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Z przedziału 0 - 86399999. .TimeTimeString zmienna Pole typu tekstowego zawierające godzinę i datę dostarczania przez program komunikacyjny wartości zmiennej typu I/O, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Typ danych Tagname.TimeTimeString Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Message (tylko odczyt) .TimeYear zmienna Pole typu całkowitego, zawierające rok zapisany w postaci czterech cyfr, w którym wartość zmiennej typu I/O została dostarczona przez program komunikacyjny, przy poprawnie funkcjonującym połączeniu typu I/O. Sposób użycia Tagname.TimeTime Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real, Indirect Analog lub Message. Typ danych Integer (tylko odczyt) Zakres wartości Dowolny rok w formacie ####. Przykładowo 1998. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-52 Rozdział 2 .UnAck alarmy Pole to umożliwia zmianę statusu niezatwierdzonych alarmów lokalnych. Sposób użycia Tagname.Unack=1 Parametry Opis Tagname Dowolna zmienna typu Discrete, Integer, Real Indirect lub GroupVar. Uwagi Przypisanie omawianemu polu zmiennej wartości 1 powoduje usunięcie zatwierdzenia wszelkich aktywnych alarmów, powiązanych z daną zmienną/ grupą. Jeśli podana zmienna jest zmienną typu Group Var lub Grupą alarmów, wszystkie nie zatwierdzone alarmy związane ze zmiennymi wchodzącymi w skład tej grupy zostają zatwierdzone. W przypadku gdy zmienna jest innego typu niż Group Var, zatwierdzenie alarmu dla tej zmiennej jest anulowane. Przypisanie omawianemu polu wartości różnej od 1 nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Typ danych Discrete (odczyt/zapis) Zakres wartości 1 Przykłady Przykładowe polecenie, zamieszczone poniżej, powoduje usunięcie zatwierdzenia alarmu związanego ze zmienną o nazwie Tag1. Tag1.Unack=1; Następne przykładowe polecenie służy do usunięcia zatwierdzenia wszelkich zatwierdzonych alarmów w obrębie grupy alarmowej o nazwie PumpStation. PumpStation.Unack = 1; Instrukcja ta jest bardzo podobna do zamieszczonej powyżej, za wyjątkiem faktu, że służy do usunięcia zatwierdzenia jakichkolwiek zatwierdzonych alarmów w grupie alarmów związanych w danym momencie ze zmienną typu GroupVar o nazwie "StationAlarms." Uwaga. Polem o wartości przeciwnej do .UnAck jest pole .Ack. W przypadku wystąpienia zatwierdzonego alarmu, pole .Ack ustawiane jest na wartość 1. Patrz również .Ack and .Alarm Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .UpdateCount 2-53 dane historyczne Wartość tego pola jest zwiększana o 1 każdorazowo, gdy następuje aktualizacja trendu historycznego związanego z daną zmienną. Sposób użycia Tagname.UpdateCount Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Uwagi Pole to jest powiązane bezpośrednio z systemem odczytu danych historycznych. Każdorazowo, gdy program InTouch zażąda danych dla trendu historycznego związanego z określoną zmienną typu Hist Trend, żądane dane muszą zostać odczytane z dysku. Po zakończeniu operacji czytania danych, wartość tego pola jest zwiększana o 1. Pole .UpdateCount jest wykorzystywane w wielu funkcjach związanych z trendami historycznymi, w celu uaktualnienia wyników przeprowadzanych wcześniej obliczeń. Typ danych Integer (tylko odczyt) Zakres wartości Dowolna dodatnia liczba całkowita. Przykład W zamieszczonym poniżej skrypcie, funkcja HtGetValueAtScooter() została wykorzystana do odczytu wartości wskazywanej przez pisak Pen1 w miejscu, w którym znajduje się prawy suwak. Ponieważ zmiana jednego z parametrów funkcji powoduje ponowne wyznaczenie wartości funkcji, każdorazowo po aktualizacji danych (po odczycie tych danych z dysku) i zwiększeniu wartości pola .UpdateCount o 1, wartość poniższej funkcji jest wyznaczana na nowo. MyRealTag=HTGetValueAtScooter( MyHistTrendTag, MyHistTrendTag.UpdateCount,2, MyHistTrendTag.ScooterPosRight,1,"PenValue"); Patrz również .UpdateInProgress, .UpdateTrend Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-54 Rozdział 2 .UpdateInProgress dane historyczne Wartość tego pola jest równa 1 podczas odczytu danych historycznych; jeżeli operacja ta nie jest realizowana, wartość jest równa 0. Sposób użycia Uwagi Tagname.UpdateInProgress Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Pole to jest powiązane bezpośrednio z systemem odczytu danych historycznych. Każdorazowo, gdy InTouch zażąda danych dla trendu historycznego związanego z określoną zmienną typu Hist Trend, dane te muszą zostać odczytane z dysku. W czasie procesu czytania, pole to ma wartość 1. Po zakończeniu tej operacji, wartość pola .UpdateInProgress zmieniana jest na 0. Pole .UpdateInProgress jest wykorzystywane w wielu funkcjach związanych z trendami historycznymi. Większość trendów historycznych wyświetlanych na ekranie ma mechanizm pozwalający użytkownikowi na przewijanie wyświetlanych danych. Podczas przeglądania trendu przez operatora system odczytu danych historycznych musi zapewnić, aby dane wyświetlane na ekranie były aktualne. Jeśli operator przewinie trend na fragment, który nie jest wyświetlany na ekranie w danej chwili ani nie znajduje się w pamięci, dane muszą zostać odczytane z dysku. Ponieważ proces ten wymaga pewnego czasu, system informuje operatora o trwającym odczycie danych z dysku. Bez tego typu informacji operator może nie być świadomy tego, że system wykonuje wydane polecenie. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Operacja aktualizacji nie jest w tym momencie realizowana. 1 = Operacja aktualizacji jest w trakcie realizacji. Przykłady Instrukcja zamieszczona poniżej jest powszechnie używana jako wyrażenie w połączeniu animacyjnym dla obiektu tekstowego, lub na przycisku przewijania wykresu trendu historycznego. W momencie gdy moduł prezentacji danych historycznych odczytuje wymagane dane, wyrażenie to ma wartość 1. Po zaktualizowaniu trendu, wyrażenie to ma wartość 0. MyHistTrendTag.UpdateInProgress Patrz również .UpdateCount, .UpdateTrend Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .UpdateTrend 2-55 dane historyczne Pole to umożliwia aktualizację wykresu trendu historycznego. Sposób użycia Uwagi Tagname.UpdateTrend Parametry Opis Tagname Dowolna zmienna typu Hist Trend. Trendy historyczne nie są uaktualniane automatycznie. Aby uaktualnić i wyświetlić bieżące wartości określonych zmiennych, musi zostać zmieniony punkt początkowy wykresu lub długość wykresu. Wykorzystanie pola .UpdateTrend w skrypcie związanym z przyciskiem umożliwia operatorowi aktualizację wykresu w czasie pracy aplikacji, zawsze ilekroć taka potrzeba wystąpi. Pole to można również zastosować w skrypcie, jeśli inne pola związane ze zmienną trendu historycznego ulegają zmianom. Zapewni to wyświetlenie zaktualizowanego wykresu trendu. Przypisanie omawianemu polu wartości różnej od 1 nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Przypisanie wartości różnej od 1 nie ma żadnego znaczenia, a wynik takiej operacji jest nieokreślony. Typ danych Discrete (tylko zapis) Zakres wartości 1 Przykład Zamieszczone poniżej wyrażenie powoduje uaktualnienie trendu historycznego związanego ze zmienną typu HistTrendTag o nazwie "MyHistTrendTag". MyHistTrendTag.UpdateTrend=1; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-56 Rozdział 2 .Value zmienna Pole to zawiera wartość danej zmiennej. Jest to również domyślne pole dla każdej zmiennej programu InTouch. Jeśli nie jest używane inne pole, zakłada się, że użytkownik posługuje się tym polem. Sposób użycia Tagname.Value Parametry Opis Tagname Dowolna zmienna za wyjątkiem zmiennych typu HistTrendTag. Uwagi Pole to jest również domyślnym polem każdej zmiennej programu InTouch. Jeśli nie jest użyte inne pole, zakłada się, że użytkownik posługuje się tym polem. Pole to jest rzadko używane, ale w niektórych przypadkach jest użyteczne w celu jaśniejszego zapisu wykonywanych operacji. Typ danych Zależy od typu zmiennej (odczyt/ zapis). Przykład Zamieszczone poniżej wrażenie ustawia wartość zmiennej typu Memory Integer o nazwie MyTag na wartość 100. Tagname.Value=100; Wyrażenie to jest funkcjonalnie identyczne z: Tagname=100; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .AlarmGroup 2-57 alarmowanie rozproszone Pole to zawiera aktualną listę alarmów obiektu do wyświetlania alarmów rozproszonych. Sposób użycia [ErrorNumber=]GetPropertyM("ObjectName.AlarmGroup",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu tekstowego, w której zapisywana jest wartość pola podczas wykonywania funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera aktualną listę alarmów wykorzystywaną w systemie alarmowania rozproszonego przez obiekt alarmowy o podanej nazwie. Lista ta może być listą grup alarmowych lub listą aplikacji, w których generowane są alarmy, i które uruchomione są na innych komputerach. Typ danych Message (tylko odczyt) Przykład Pole to przypisuje bieżące zapytanie alarmowe wykorzystywane przez obiekt do wyświetlania "AlmObj_1" do zmiennej tekstowej "CurrentQuery". GetPropertyM("AlmObj_1.AlarmGroup",CurrentQuery) Patrz również GetPropertyM() .NextPage alarmowanie rozproszone Pole to powoduje przewinięcie listy wyświetlanych alarmów o jedną stronę ekranu w dół, w momencie , gdy wartość pola ulega zmianie z 1 na 0. Sposób użycia [ErrorNumber=]GetPropertyD("ObjectName.NextPage",Tagname); [ErrorNumber=]SetPropertyD("ObjectName.NextPage",Value); Parametry Opis ObjectName Value Nazwa obiektu alarmowego, np. AlmObj1. Nazwa zmiennej dyskretnej wykorzystywanej do pamiętania wartości właściwości w momencie gdy funkcja jest realizowana, stosowana jako "Zmienna" lub Zmienna.Name. Wartość dyskretna. Może to być również zmienna dyskretna przechowująca wartość do zapisu w momencie przetwarzania funkcji. Tagname Uwagi Zawsze, gdy wartość tego pola ulega zmianie z 1 na 0, obiekt do wyświetlania alarmów przewinie ekran do przodu o jedną stroną. Po wyświetleniu tej strony wartość zmiennej zostaje automatycznie ustawiona na 1, chyba że osiągnięty został początek listy. W takim przypadku wartość ta pozostaje równa 0. Typ danych Discrete (odczyt/zapis) Patrz również GetPropertyD(), SetPropertyD(), .PrevPage Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-58 Rozdział 2 .NumAlarms alarmowanie rozproszone Pole to zawiera liczbę alarmów w obiekcie alarmowym. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.NumAlarms",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, do której funkcja przypisuje wartość właściwości. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera bieżącą liczbę alarmów zarejestrowanych w alarmowaniu rozproszonym przez obiekt alarmowy o podanej nazwie. Liczba ta obejmuje nie tylko alarmy wyświetlane, ale wszystkie alarmy zarejestrowane. Typ danych Integer (tylko odczyt) Przykład Pole to zwraca bieżące zapytanie alarmowe wykorzystywane przez obiekt do wyświetlania "AlmObj_1" do zmiennej całkowitej "CurrentQuery". GetPropertyI("AlmObj_1.NumAlarms",AlarmCount); Patrz również GetPropertyI() .PageNum alarmowanie rozproszone Pole to zawiera numer strony aktualnie wyświetlanej w obiekcie alarmowym. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.PageNum",Tagname); Parametry Opis ObjectName Nazwa obiektu alarmowego, np. AlmObj_1. Stosowanych w systemie alarmowania rozproszonego Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera numer strony aktualnie wyświetlanej w obiekcie alarmowym w alarmowaniu rozproszonym. Typ danych Integer (tylko odczyt) Przykład Zamieszczona poniżej instrukcja zwraca bieżący numer strony obiektu do wyświetlania "AlmObj_1" do zmiennej całkowitej "AlarmPage". GetPropertyI("AlmObj_1.PageNum",AlarmPage); Patrz również GetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .PrevPage 2-59 alarmowanie rozproszone Pole to powoduje przewinięcie listy wyświetlanych alarmów o jedną stronę ekranową zapełnioną alarmami w górę w sytuacji, gdy wartość pola ulega zmianie z 1 na 0. Sposób użycia [ErrorNumber=]GetPropertyD("ObjectName.PrevPage",Tagname); [ErrorNumber=]SetPropertyD("ObjectName.PrevPage",Value); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna (takiego samego typu jaki ma być zwrócony), przechowująca wartość właściwości w momencie realizacji funkcji. Wartość dyskretna. Może to być również zmienna dyskretna przechowująca wartość do zapisu w momencie przetwarzania funkcji. Value Uwagi Zawsze, gdy wartość tego pola ulega zmianie z 1 na 0, obiekt do wyświetlania alarmów pokazywał będzie poprzednią stronę. Po wyświetleniu tej strony, wartość zmiennej zostaje automatycznie ustawiona na 1, chyba że osiągnięty został początek listy. W takim przypadku wartość ta pozostaje równa 0. Typ danych Discrete (odczyt/zapis) Patrz również GetPropertyD(), SetPropertyD(), .NextPage .PriFrom alarmowanie rozproszone Pole to zawiera dolny zakres priorytetu alarmów. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.PriFrom",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to zawiera minimalny priorytet wykorzystywany w oknie obiektu alarmowego do stawiania zapytań alarmowych. Typ danych Integer (tylko odczyt) Przykład Zamieszczone poniżej wyrażenie ustawia wartość zmiennej "MinPri" na minimalną wartość priorytetu, wykorzystywaną przez obiekt do wyświetlania alarmów. GetPropertyI("AlmObj_1.PriFrom",MinPri); Patrz również GetPropertyI(), .PriTo Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-60 Rozdział 2 .PriTo alarmowanie rozproszone Pole to zawiera górny zakres priorytetu alarmów. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.PriTo",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera górny zakres priorytetu alarmów wyświetlanych w oknie obiektu alarmowego, stosowanych w systemie alarmowania rozproszonego. Typ danych Integer (tylko odczyt) Przykład Zmienna (takiego samego typu jaki ma być zwrócony), przechowująca wartość właściwości w momencie realizacji funkcji. GetPropertyI("AlmObj_1.PriTo",MaxPri); Patrz również GetPropertyI(), .PriFrom .ProviderReq alarmowanie rozproszone Pole to zawiera łączną liczbę aplikacji uruchomionych na innych komputerach, aktualnie odpytywanych pod kątem występowania alarmów. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.ProviderReq",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera łączną liczbę aplikacji uruchomionych na innych komputerach, aktualnie odpytywanych pod kątem występowania alarmów w alarmowaniu rozproszonym. Typ danych Integer (tylko odczyt) Przykład Zamieszczona poniżej instrukcja zwraca liczbę dostawców alarmów wymaganą przez bieżące zapytanie, wykorzystywaną przez obiekt do wyświetlania alarmów "AlmObj_1". Wartość ta jest przypisywana zmiennej całkowitej "TotalProv": GetPropertyI("AlmObj_1.ProviderReq",TotalProv); Patrz również GetPropertyI(), .ProviderRet Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .ProviderRet 2-61 alarmowanie rozproszone Pole to zawiera liczbę aplikacji uruchomionych na innych komputerach, które udzieliły odpowiedzi na pytanie o występowanie alarmów. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.ProviderRet",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera łączną liczbę aplikacji uruchomionych na innych komputerach, które udzieliły odpowiedzi na pytanie o występowanie alarmów w alarmowaniu rozproszonym. Typ danych Integer (tylko odczyt) Przykład Zamieszczona poniżej instrukcja zwraca do obiektu do wyświetlania alarmów "AlmObj_1", liczbę dostawców alarmowych którzy pomyślnie przesłali informacje o alarmach. Wartość ta jest przypisywana zmiennej całkowitej "RetProv": GetPropertyI("AlmObj_1.ProviderRet",RetProv); Patrz również GetPropertyI(), .ProviderReq Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-62 Rozdział 2 .QueryState alarmowanie rozproszone Pole to zawiera aktualny filtr obowiązujący przy pytaniu o alarmy. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.QueryState",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera aktualny filtr stosowany przy pytaniu o alarmy przez obiekt alarmowy, w alarmowaniu rozproszonym. Typ danych Integer (tylko odczyt) Zakres wartości 0 = Wszystkie alarmy 1 = Alarmy niepotwierdzone 2 = Alarmy potwierdzone Przykład Zamieszczona poniżej instrukcja ustawia wartość zmiennej całkowitej "AlmQueryState" na filtr bieżącego zapytania obiektu do wyświetlania "AlmObj_1": GetPropertyI("AlmObj_1.QueryState",AlmQueryState); Patrz również GetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .QueryType 2-63 alarmowanie rozproszone Pole to definiuje aktualnie obowiązujący sposób pytania o alarmy. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.QueryType",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i określa aktualnie obowiązujący sposób pytania o alarmy przez obiekt alarmowy, w alarmowaniu rozproszonym. Typ danych Integer (tylko odczyt) Zakres wartości 1 = Historia alarmów 2 = Alarmy bieżące (aktywne) Przykład Zamieszczona poniżej instrukcja ustawia wartość zmiennej całkowitej "AlmQueryType" na typ bieżącego zapytania obiektu do wyświetlania "AlmObj_1": GetPropertyI("AlmObj_1.QueryType",AlmQueryType); Patrz również GetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-64 Rozdział 2 .Successful alarmowanie rozproszone Pole to dostarcza informacji na temat przebiegu zapytania o alarmy. Sposób użycia [ErrorNumber=]GetPropertyD("ObjectName.Successful",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu dyskretnego, przechowująca wartość właściwości w momencie wykonywania funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i dostarcza informacji na temat przebiegu zapytania o alarmy przez obiekt alarmowy, w alarmowaniu rozproszonym. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Błąd 1 = Odpytywanie wykonane Przykład Zamieszczona poniżej instrukcja ustawia wartość zmiennej dyskretnej "AlmFlag" na status ostatniego zapytania obiektu do wyświetlania "AlmObj_1": GetPropertyD("AlmObj_1.Successful",AlmFlag); Patrz również GetPropertyD() .TotalPages alarmowanie rozproszone Pole to zawiera łączną liczbę stron (wypełnionych alarmami) w obiekcie alarmowym. Sposób użycia [ErrorNumber=]GetPropertyI("ObjectName.TotalPages",Tagname); Parametry Opis ObjectName Tagname Nazwa obiektu alarmowego, np. AlmObj_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Uwagi Pole to przeznaczone jest tylko do odczytu i zawiera bieżącą liczbę stron z alarmami w obiekcie alarmowym o podanej nazwie. Typ danych Integer (tylko odczyt) Przykład Pole to ustawia wartość zmiennej całkowitej "AlmTotalPage" na sumaryczną liczbę stron w obiekcie do wyświetlania "AlmObj_1". GetPropertyI("AlmObj_1.TotalPages",AlmTotalPages); Patrz również GetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .Caption 2-65 obiekty sterujące okien Pole to definiuje informację, która ma zostać wyświetlona jako opis pola wyboru. Sposób użycia [ErrorNumber=]GetPropertyM ("ControlName.Caption", Tagname ); [ErrorNumber=]SetPropertyM ("ControlName.Caption", "Message"); Parametry Opis ControlName Tagname "Message" Nazwa obiektu sterującego okna, np. ChkBox_4. Zmienna tekstowa do przechowywania żądanej właściwości. Tekst komunikatu ujęty w cudzysłowy. Uwagi Pole to jest zapisywane/ odczytywane zarówno w czasie edycji, jak i w czasie pracy aplikacji). Typ danych Message (odczyt/zapis) Zastosowanie Pola wyboru. Przykład Zamieszczona poniżej instrukcja ustawia pole .Caption obiektu "CheckBox_1" na wartość "Blue Paint Option". SetPropertyM( "CheckBox_1.Caption","Blue Paint Option" ); Patrz również GetPropertyM(), SetPropertyM() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-66 Rozdział 2 .Enabled obiekty sterujące okien Pole to określa, czy obiekt sterujący może reagować na zdarzenia wygenerowane przez użytkownika. Sposób użycia [ErrorNumber=] GetPropertyD("ControlName.Enabled", Tagname); [ErrorNumber=] SetPropertyD("ControlName.Enabled", Discrete); Parametry Opis ControlName Tagname Nazwa obiektu sterującego okna, np. ChkBox_4. Zmienna dyskretna przeznaczona do przechowywania żądanej właściwości. Wartość dyskretna. 0 = Obiekt sterujący jest nieaktywny 1 = Obiekt sterujący jest aktywny lub, Zmienna dyskretna przechowująca wartość do zapisu w momencie wykonywania funkcji. Dyskretne Uwagi Pole to jest zapisywane/odczytywane zarówno w czasie edycji, jak i w czasie pracy aplikacji. Typ danych Discrete (odczyt/zapis) Zastosowanie Pola tekstowe , pola list , listy rozwijane , pola wyboru i pola wyboru wykluczającego . Przykład Zamieszczona poniżej instrukcja dezaktywuje obiekt o nazwie "ListBox_1." SetPropertyD( "ListBox_1.Enabled",0 ); Patrz również GetPropertyD(), SetPropertyD() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .ListCount 2-67 obiekty sterujące okien Pole to określa liczbę elementów w polu listy lub na liście rozwijalnej. Sposób użycia [ErrorNumber=]GetPropertyI("ControlName.ListCount",Tagname); Parametry Opis ControlName Tagname Nazwa obiektu sterującego okna, np. ListBox_4. Zdefiniowana zmienna zawierająca liczbę elementów na liście. Uwagi Pole to jest dostępne tylko w trybie w czasie pracy aplikacji. Typ danych Integer (tylko odczyt) Zastosowanie Pola listy i listy rozwijalne. Przykład Zamieszczona poniżej instrukcja odczytuje liczbę elementów listy o nazwie "ListBox_1" i przypisuje tę wartość do zmiennej typu Memory Integer o nazwie "MyListBoxCount". GetPropertyI( "ListBox_1.ListCount",MyListBoxCount ); Patrz również GetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-68 Rozdział 2 .ListIndex obiekty sterujące okien Pole to zawiera indeks (zmienną lub liczbę) aktualnie wybranego elementu z listy. Indeks jest liczbą definiującą pojedynczy element na liście. W przypadku pola listy indeks równy -1 oznacza, że żaden element nie jest aktualnie wybrany. W przypadku listy rozwijalnej indeks równy -1 oznacza, że użytkownik wprowadził nowy tekst w polu wprowadzania tekstu listy rozwijalnej. Sposób użycia [ErrorNumber=]GetPropertyI("ControlName.ListIndex",Tagname); [ErrorNumber=]SetPropertyI("ControlName.ListIndex",Number); Parametry Opis ControlName Tagname Number Nazwa obiektu sterującego okna, np. ListBox_4. Zdefiniowana zmienna zawierająca liczbę elementów na liście. Liczba definiująca konkretny element z listy. Uwagi Pole to jest dostępne tylko w trybie w czasie pracy aplikacji. Typ danych Integer (odczyt/zapis) Zastosowanie Przykład Pola listy i listy rozwijalne. Zamieszczona poniżej instrukcja odczytuje indeks elementu zaznaczonego na liście o nazwie "ListBox_1" i przypisuje tę wartość do zmiennej typu Memory Integer o nazwie "MyListBoxIndex." GetPropertyI( "ListBox_1.ListIndex",MyListBoxIndex ); Patrz również GetPropertyI(), SetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .NewIndex 2-69 obiekty sterujące okien Pole to zawiera indeks elementu ostatnio dodanego do pola listy lub listy rozwijalnej za pomocą funkcji wcAddItem() lub wcInsertItem(). Sposób użycia [ErrorNumber=]GetPropertyI("ControlName.NewIndex",Tagname); Parametry Opis ControlName Tagname Nazwa obiektu sterującego okna, np. ListBox_4. Zmienna typu całkowitego zawierająca indeks elementu ostatnio dodanego do pola listy lub listy rozwijalnej. W przypadku pustych list pole to zawiera wartość -1. Uwagi Pole to jest dostępne tylko w czasie pracy aplikacji. Typ danych Integer (tylko odczyt) Zastosowanie Pola listy i listy rozwijalne. Przykład Zamieszczona poniżej instrukcja odczytuje indeks elementu ostatnio dodanego do listy o nazwie "ListBox_1" i przypisuje tę wartość do zmiennej typu Memory Integer o nazwie "NewItemIndex." GetPropertyI("ListBox_1.NewIndex",NewItemIndex); Patrz również GetPropertyI(), wcAddItem(), wcInsertItem() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-70 Rozdział 2 .ReadOnly obiekty sterujące okien Pole to określa, czy zawartość obiektu sterującego w postaci pola tekstowe ma być przeznaczona tylko do odczytu, czy może dopuszczać również zapis. Sposób użycia [ErrorNumber=]GetPropertyD("ControlName.ReadOnly", Tagname); Parametry Opis ControlName Tagname Nazwa obiektu sterującego okna, np. TextBox_1. Zmienna typu dyskretnego, przechowująca wartość właściwości w momencie wykonywania funkcji. Uwagi Pole to jest dostępne zarówno w czasie pracy aplikacji, jak i w czasie jej edycji. Typ danych Discrete (tylko odczyt) Zakres wartości 0 = Zawartość pola tekstowego umożliwia odczyt i zapis. 1 = Zawartość pola tekstowego jest przeznaczona tylko do odczytu. Zastosowanie Pola tekstowe. Przykład Poniższa instrukcja odczytuje status pola .ReadOnly obiektu o nazwie "TextBox_1". GetPropertyD( "TextBox_1.ReadOnly",A_Tagname ); Patrz również GetPropertyD(), SetPropertyD() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .TopIndex 2-71 obiekty sterujące okien Pole to zawiera odpowiedni indeks (zmienną lub liczbę całkowitą) pierwszego od góry elementu w polu listy. Sposób użycia [ErrorNumber=]GetPropertyI("ControlName.TopIndex", Tagname); [ErrorNumber=]SetPropertyI("ControlName.TopIndex", Number); Parametry Opis ControlName Tagname Nazwa obiektu sterującego okna, np. ListBox_1. Zmienna typu Integer, przechowująca wartość właściwości w momencie realizacji funkcji. Liczba definiująca pierwszy od góry element w polu listy. Number Uwagi Pole to jest dostępne tylko w czasie pracy aplikacji. Typ danych Integer (odczyt/zapis) Zastosowanie Pola listy. Przykład Zamieszczona poniżej instrukcja ustawia wartość pola .TopIndex obiektu o nazwie "ListBox_1" na wartość 14. SetPropertyI( "ListBox_1.TopIndex",14 ); Patrz również GetPropertyI(), SetPropertyI() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 2-72 Rozdział 2 .Value obiekty sterujące okien Domyślna właściwość dla wszystkich wizardów obiektów sterujących Windows. Zmiany tej właściwości zsynchronizowane są z zmiennymi InTouch, oraz z wizardami obiektów sterujących Windows. Sposób użycia [ErrorNumber=]GetPropertyM("ControlName[.Value]", Tagname); [ErrorNumber=]SetPropertyM("ControlName[.Value]", Value); [ErrorNumber=]GetPropertyI("ControlName[.Value]", Tagname); [ErrorNumber=]SetPropertyI("ControlName[.Value]", Value); [ErrorNumber=]GetPropertyD("ControlName[.Value]", Tagname); [ErrorNumber=]SetPropertyD("ControlName[.Value]", Value); Uwaga Wartość początkowa zmiennej powiązanej z polami listy, lub listą rozwijalną nie może być wykorzystana do inicjalizowania wartości tych pól listy lub listy rozwijalnej. Parametry Opis ControlName .Value Nazwa obiektu sterującego okna, np. ChkBox_4. Właściwość ta jest opcjonalna. Jeżeli jej wartość nie zostanie określona, funkcja będzie domyślnie przyjmować, że wykorzystywane jest pole .Value. Zdefiniowana zmienna programu InTouch (takiego samego typu jak typ zwracany), przechowująca wartość właściwości w momencie realizacji funkcji. Aktualna wartość do zapisania lub zdefiniowana zmienna (takiego samego typu jak właściwość do zapisania), przechowująca wartość właściwości do zapisania w momencie wykonywania funkcji. Tagname Value Uwagi Pole to umożliwia zapis i odczyt zarówno w czasie pracy aplikacji, jak i w czasie jej edycji. Jeśli pole .Value jest wykorzystywane w połączeniu z polami listy lub listą rozwijalną , jest ono przeznaczone tylko do odczytu. Jeśli pole .Value jest wykorzystywane w połączeniu z polem wyboru, polem wyboru wykluczającego lub polem tekstowym, można zarówno odczytywać jak również zmieniać jego wartość. Wartość wprowadzona w trakcie edycji aplikacji, przyjmowana jest jako wartość domyślna w trakcie pracy aplikacji. Typ danych Message (zapis/ odczyt) dla pól tekstowych, pól listy i list rozwijalnych. Integer (zapis/ odczyt) dla pól wyboru wykluczającego. Discrete (zapis/ odczyt) dla pól wyboru. Zastosowanie Pola tekstowe , pola list , listy rozwijane , pola wyboru i pola wyboru wykluczającego . Przykład Zamieszczona poniżej instrukcja ustawia wartość pola .Value obiektu pole wyboru wykluczającego o nazwie "RadioButton_1" na wartość 4. SetPropertyI( "RadioButton_1.Value",4 ); Patrz również GetPropertyM(), SetPropertyM(), GetPropertyI(), SetPropertyI(), GetPropertyD(), SetPropertyD() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Pola .Visible 2-73 obiekty sterujące okien Właściwość ta określa, czy obiekt jest widoczny w oknie. Sposób użycia [ErrorNumber=]GetPropertyD("ControlName.Visible",Tagname); [ErrorNumber=]SetPropertyD("ControlName.Visible",Number); Parametry Opis ControlName Tagname Nazwa obiektu sterującego okna, np. ListBox_1. Zdefiniowana zmienna programu InTouch (takiego samego typu jak typ zwracany), przechowująca wartość właściwości w momencie realizacji funkcji. Wartość dyskretna. Może to być również zmienna dyskretna przechowująca wartość do zapisu w momencie przetwarzania funkcji. Number Uwagi Pole to przeznaczone jest do zapisu/ odczytu zarówno w trakcie edycji aplikacji jak również w momencie wykonywania aplikacji. Typ danych Discrete (odczyt/zapis) Zakres wartości 0 = Obiekt jest niewidoczny 1 = Obiekt jest widoczny Zastosowanie Pola tekstowe , pola list , listy rozwijane , pola wyboru i pola wyboru wykluczającego . Przykład Zamieszczona poniżej instrukcja przywraca widzialność pola tekstowego o nazwie "TextBox_1". SetPropertyD( "TextBox_1.Visible",0 ); Patrz również GetPropertyD(), SetPropertyD() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-1 R O Z D Z I A Ł 3 Funkcje skryptowe Jednym z najbardziej istotnych elementów funkcjonalności aplikacji InTouch jest możliwość korzystania ze skryptów. Skrypty dają możliwość wykonywania poleceń, oraz operacji logicznych, w zależności od spełnienia określonych kryteriów. Przykładowo, wciśnięcie klawisza może powodować otwarcie okna, zmianę wartości zmiennej, itd. Funkcje skryptowe QuickScript są skryptami, które można wywoływać z poziomu innych skryptów i połączeń animacyjnych. Kod źródłowy takiej funkcji pamiętany jest w jednym miejscu, tak więc jej edycja umożliwia wprowadzenie zmian we wszystkich aplikacjach, w których funkcja taka jest wywoływana. Skrypty umożliwiają utworzenie szeregu zautomatyzowanych funkcji systemowych, dostosowanych do potrzeb użytkownika. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-2 Rozdział 3 Abs() funkcje matematyczne Zwraca wartość bezwzględną danej liczby. Składnia Result=Abs(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Obliczona wartość bezwględna liczby Number jest przypisywana do zmiennej Result. Przykłady Abs(14) zwraca 14 Abs(-7.5) zwraca 7.5 Ack() alarmy Funkcja ta służy do zatwierdzania lokalnych alarmów programu InTouch. Składnia Ack Tagname; Parametry Opis Tagname Dowolna zmienna, grupa alarmowa (Alarm Group) lub zmienna grupowa (Group Var). Uwagi Funkcja ta może być użyta w odniesieniu do zmiennej, grupy alarmowej lub zmiennej grupowej. (Zmienna grupowa jest zmienną, której wartości są nazwami grup alarmowych). Przykłady Poniższe instrukcje można zastosować w powiązaniu z przyciskiem, w celu zatwierdzenia dowolnego, nie potwierdzonego alarmu: Ack $System; (zatwierdzenie wszystkich alarmów) Ack Tagname; Ack GroupName; Ack GroupVariable; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe ActivateAPP() 3-3 system Funkcja ta służy do uaktywnienia aktualnie uruchomionej aplikacji Windows. Składnia ActivateApp TaskName; Parametry Opis TaskName Nazwa aplikacji, która ma zostać uaktywniona za pomocą funkcji. Uwagi TaskName jest ciągiem znaków (włącznie ze spacjami), który pojawia się na Pasku Zadań lub w Menadżerze zadań (w celu wyświetlenia w systemie Windows NT należy kliknąć prawym przyciskiem myszy na Pasku zadań, a następnie kliknąć Menadżer zadań lub wcisnąć Ctrl+Alt+Delete). Przykład Poniżej podano przykład sprawdzający czy aktywna jest linia poleceń. Jeżeli jest aktywna, przenoszona jest na pierwszy plan. W przeciwnym wypadku, jest uruchamiana, z automatycznym wywołaniem programu systemu DOS edit.com. IF InfoAppActive( InfoAppTitle("cmd")) == 1 THEN ActiveApp InfoAppTitle("cmd"); ELSE StartApp "cmd /c edit"; ENDIF; Patrz również StartApp(), InfoAppTitle() almAckAll() alarmowanie rozproszone Funkcja ta służy do zatwierdzania wszystkich alarmów z aktualnej listy odpytywanych alarmów, włącznie z tymi, które nie są aktualnie wyświetlane w oknie obiektu alarmowego. Składnia [Result=]almAckAll(ObjectName,Comment); Parametry Opis ObjectName Comment Nazwa obiektu alarmowego, np. AlmObj_1. Komentarz do zatwierdzania alarmu. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład MessageTag = "Acknowledge All by” + $Operator; AlmAckAll("AlmObj_1”, MessageTag); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-4 Rozdział 3 almAckDisplay() alarmowanie rozproszone Funkcja ta służy do zatwierdzania tylko tych alarmów, które są aktualnie wyświetlane w oknie obiektu alarmowego. Składnia [Result=]almAckDisplay(ObjectName,Comment); Parametry Opis ObjectName Comment Nazwa obiektu alarmowego, np. AlmObj_1. Komentarz do zatwierdzania alarmu. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład almAckDisplay("AlmObj_1”, "Display Acknowledgement”); almAckRecent() alarmowanie rozproszone Funkcja ta służy do zatwierdzania najnowszych alarmów. Składnia [Result=]almAckRecent(ObjectName,Comment); Parametry Opis ObjectName Comment Nazwa obiektu alarmowego, np. AlmObj_1. Komentarz do zatwierdzania alarmu. Uwagi Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład almAckRecent("AlmObj_1”, $DateString); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe almAckSelect() 3-5 alarmowanie rozproszone Funkcja ta służy do zatwierdzania alarmów zaznaczonych w oknie obiektu alarmowego. Składnia [Result=]almAckSelect(ObjectName,Comment); Parametry Opis ObjectName Comment Nazwa obiektu alarmowego, np. AlmObj_1. Komentarz do zatwierdzania alarmu. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład IF ($Hour > 0 and $Hour < 8) THEN AckTag = "NightShift”; ELSE AckTag = "Day Shift”; ENDIF; AlmAckSelect ("AlmObj_1”,AckTag); almDefQuery() alarmowanie rozproszone Wykonanie zapytania w celu zaktualizowania okna obiektu alarmowego przy użyciu domyślnych parametrów. Składnia Uwagi [Result=]almDefQuery(ObjectName); Parametry Opis ObjectName Nazwa obiektu alarmowego, np. AlmObj_1. Domyślne parametry zapytania o alarmy są podawane w czasie edycji aplikacji. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład almDefQuery("AlmObj_1”); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-6 Rozdział 3 almMoveWindow() alarmowanie rozproszone Przewija okno obiektu alarmowego. Składnia [Result=]almMoveWindow(ObjectName,Options,Repeat); Parametry Opis ObjectName Options Nazwa obiektu alarmowego, np. AlmObj_1. Rodzaj przewijania alarmów. Typ Opis LineDn O jedną linię w dół. LineUp O jedną linię w górę. PageDn O jedną stronę w dół. PageUp O jedną stronę w górę. Top Do początku listy. Bottom Do końca listy. PageRt O jedna stronę w prawo. PageLf O jedna stronę w lewo. Right Do końca listy w prawą stronę. Left Do końca listy w lewą stronę. Liczba określająca, ile razy operacja ma zostać powtórzona. Repeat ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład almMoveWindow("AlmObj_1”, ”Bottom”, 0); almMoveWindow("AlmObj_1”, ”LineDn”, 3); almMoveWindow("AlmObj_1”, ”PageUp”, 0); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe almQuery() 3-7 alarmowanie rozproszone Wykonanie zapytania w celu zaktualizowania obiektu alarmowego. Składnia [Result=]almQuery(ObjectName,AlarmList,FromPri, ToPri,State,Type); Parametry Opis ObjectName AlarmList Nazwa obiektu alarmowego. Przykładowo, AlmObj_1. Grupa alarmowa lub lista grup objętych zapytaniem o alarmy, np. "MyGroup" lub zmienna typu Message. Dolny zakres priorytetu alarmów, które mają być wyświetlone, np. 100, lub zmienna typu Integer. Górny zakres priorytetu, dla którego alarmy mają być wyświetlone. Przykładowo, 900, lub zmienna typu integer. Rodzaj alarmów, które mają być wyświetlone. Przykładowo, "UnAck" lub zmienna tekstowa. Dopuszczalnymi statusami są All, UnAck, oraz Ack. Określa typ zapytania, przykładowo, "Hist" (Alarmy historyczne"), lub "Summ" (Alarmy bieżące). FromPri ToPri State Type ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład Poniższa instrukcja powoduje wyświetlenie wszystkich alarmów historycznych określonych w grupie "MyGroup" o priorytecie zawartym pomiędzy 500 i 600. Funkcja ta spowoduje ograniczenie liczby alarmów wyświetlanych przez obiekt "Alarm1." AlmQuery("AlmObj_1","MyGroup",500,600,"All","Hist"); almSelectAll() alarmowanie rozproszone Odwraca zaznaczenie wszystkich alarmów w obiekcie alarmowym. Składnia [Result=]almSelectAll(ObjectName); Parametry Opis ObjectName Nazwa obiektu alarmowego, np. AlmObj_1. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład If $AccessLevel > 8000 THEN almSelectAll("AlmObj_1”); almAckSelect("AlmObj_1”, "Ack Selected by a Manager”); ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-8 Rozdział 3 almSelectItem() alarmowanie rozproszone Odwraca zaznaczenie podświetlonego elementu w obiekcie alarmowym. Składnia [Result=]almSelectItem(ObjectName); Parametry Opis ObjectName Nazwa obiektu alarmowego, np. AlmObj_1. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład almSelectItem("AlmObj_1”); almShowStats() alarmowanie rozproszone Wyświetla ekran z informacjami statystycznymi obiektu alarmowego. Składnia [Result=]almShowStats(ObjectName); Parametry Opis ObjectName Nazwa obiektu alarmowego, np. AlmObj_1. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykład almSlowStats("AlmObj_1”); ArcCos() funkcje matematyczne Dla liczby z przedziału domkniętego [-1,1] funkcja ta oblicza wartość kąta (z zakresu od 0 do 180 stopni), którego cosinus jest równy tej liczbie. Składnia Result=ArcCos(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Wartość funkcji jest zwracana do zmiennej Result. Przykład ArcCos(1) zwraca 0 ArcCos(-1) zwraca 180 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe ArcSin() 3-9 funkcje matematyczne Dla liczby z przedziału domkniętego [-1,1] funkcja ta oblicza wartość kąta (z zakresu od 90 do 90 stopni), którego sinus jest równy tej liczbie. Składnia Result=ArcSin(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Wartość funkcji jest zwracana do zmiennej Result. Przykład ArcSin(1) zwraca 90 ArcSin(-1) zwraca -90 ArcTan() funkcje matematyczne Dla danej liczby funkcja ta oblicza wartość kąta (z zakresu od -90 do 90 stopni), którego tangens jest równy tej liczbie. Składnia Result=ArcTan(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Wartość funkcji jest zwracana do zmiennej Result. Przykład ArcTan(1) zwraca 45 ArcTan(0) zwraca 0 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-10 Rozdział 3 ChangePassword() bezpieczeństwo Wyświetla okno dialogowe Change Password pozwalające operatorowi na zmianę swojego hasła. Składnia [Result=]ChangePassword(); Parametry Opis [Result] Przyjmuje jedną z następujących wartości: 0 = Naciśnięty został klawisz Cancel 1 = Naciśnięty został klawisz OK Uwagi W aplikacjach z ekranem dotykowym można użyć klawiatury alfanumerycznej. Przykład Errmgs=ChangePassword(); Jeśli taka instrukcja zostanie użyta w skrypcie związanym z przyciskiem, w skrypcie warunkowym lub wywoływanym wskutek zmiany wartości danych, spowoduje to otworzenie okna dialogowego (z opcjonalną klawiaturą) umożliwiającego użytkownikowi wprowadzenie nowego hasła dostępu. Cos() funkcje matematyczne Zwraca cosinus kąta podanego w stopniach. Składnia Result=Cos(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Wartość funkcji jest zwracana do zmiennej Result. Przykład Cos(90) zwraca 0 Cos(0) zwraca 1 Wave = 50 * Cos(6 * $Minute); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe DialogStringEntry() 3-11 różne Wyświetla na ekranie klawiaturę alfanumeryczną umożliwiając użytkownikowi zmianę aktualnej wartości zmiennej tekstowej zdefiniowanej na Liście zmiennych. Składnia [Result=]DialogStringEntry(MessageTag_Text,UserPrompt_Text); Parametry Opis Result Przyjmuje jedną z następujących wartości: 0 = Naciśnięty został klawisz Cancel 1 = Naciśnięty został klawisz OK -1 = Błąd wewnętrzny -2 = Brak możliwości inicjacji -3 = Zmienna nie jest zdefiniowana -4 = Zmienna nie jest zmienną typu Message -5 = Brak możliwości zapisu Podaje nazwę zmiennej typu Message, która ma zostać zmodyfikowana. Parametr tej funkcji musi zostać podany jako łańcuch znaków, dlatego nazwa zmiennej musi zostać podana w cudzysłowie albo przy użyciu pola .Name (bez cudzysłowu). Dopuszczalne jest również stosowanie jako wskaźnik zmiennej tekstowej. Porównać z zamieszczonym w dalszej części przykładem. Tekst użytkownika, który ma być wyświetlony w górnej części klawiatury. MessageTag_Text UserPrompt_Text Uwagi Funkcja jest stosowana głównie w aplikacjach z ekranem dotykowym. Przykład Errmsg=DialogStringEntry(MyMessageTag.Name, "Enter a new string..."); Errmsg=DialogStringEntry("MyMessageTag","Enter a new string..."); Parametry mogą również być wykorzystane w charakterze "wskaźników" do innych zmiennych, co umożliwia dynamiczne zmiany parametrów w czasie pracy aplikacji. Errmsg=DialogStringEntry(MessageTagX, MessageDisplay); W przykładzie powyżej użytkownik może przed wykonaniem funkcji modyfikować jej parametry, poprzez zastosowanie w połączeniach do wprowadzania danych zmiennych tekstowych. Skrypt zamieszczony poniżej spowoduje wyświetlenie klawiatury alfanumerycznej, pozwalającą na zmodyfikowanie zmiennej MyMessageTag, wyświetlając jednocześnie komunikat "Enter a new string..." w górnej części klawiatury. MessageTagX="MyMessageTag"; {przypisanie zmiennej tekstowej MyMessageTag (zmienna, która ma być modyfikowana) do zmiennej typu Memory Message o nazwie MessageTagX} MessageDisplay="Enter a new string..."; {przypisanie nowego ciągu znaków do zmiennej typu Memory Message o nazwie MessageDisplay} Errmsg=DialogStringEntry(MessageTagX,MessageDisplay); {cudzysłów nie jest wymagany, ponieważ zmienna MessageTagX została zdefiniowana jako zmienna typu Message } Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-12 Rozdział 3 DialogValueEntry() różne Funkcja ta wyświetla na ekranie klawiaturę alfanumeryczną umożliwiając użytkownikowi zmianę aktualnej wartości zmiennej typu Discrete, Integer lub Real na Liście zmiennych. Składnia [Result=]DialogValueEntry(ValueTag_Text, LowLimit,HighLimit,UserPrompt_Text); Parametry Opis Result Przyjmuje jedną z następujących wartości: 0 = Naciśnięty został klawisz Cancel 1 = Naciśnięty został klawisz OK -1 = HighLimit<=LowLimit -2 = Brak możliwości inicjacji -3 = Zmienna nie jest zdefiniowana -4 = Zmienna nie jest zmienną typu Discrete, Integer lub Real -5 = Brak możliwości zapisu Nazwa zmiennej typu Discrete, Integer lub Real, która ma zostać zmodyfikowana. Ten parametr funkcji musi zostać podany jako łańcuch znaków, dlatego nazwa zmiennej musi zostać podana w cudzysłowie albo przy użyciu pola .Name (wtedy bez cudzysłowu). Porównać z zamieszczonym w dalszej części przykładem. Określa minimalną dopuszczalną wartość zmiennej. (Powinna ona być >= od wartości podanych w czasie definiowania zmiennej wartości w polach Min Value, Min Raw, oraz Min EU, o ile są wprowadzane wartości do tych pól). Określa maksymalną dopuszczalną wartość zmiennej. (Powinna ona być <= od podanych w czasie definiowania zmiennej wartości w polach Max Value, Max Raw, oraz Max EU, o ile są wprowadzane wartości do tych pól). Tekst (wprowadzony przez użytkownika), który ma zostać wyświetlony w górnej części klawiatury. ValueTag_Text LowLimit HighLimit UserPrompt_Text Uwagi Funkcja jest stosowana głównie w aplikacjach z ekranem dotykowym. Przykłady Errmsg=DialogValueEntry(MyIntegerTag.Name, MyIntegerTag.MinEU, MyIntegerTag.MaxEU, "Enter a new value..."); Errmsg=DialogValueEntry("MyIntegerTag", -100, 100, "Enter a new value..."); Parametry mogą również działać jako wskaźniki, wskazujące na inne zmienne, co umożliwia dynamiczną zmianę parametrów w czasie pracy aplikacji. Errmsg=DialogValueEntry(TagnameX, Min, Max, MessageDisplay); W przykładzie powyżej użytkownik może przed wykonaniem funkcji modyfikować jej parametry poprzez wykorzystanie zmiennych wskazujących w połączeniach do wprowadzania danych. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe 3-13 Skrypt zamieszczony poniżej spowoduje wyświetlenie klawiatury alfanumerycznej, pozwalającej na wprowadzenie nowej wartości zmiennej MyIntegerTag, mieszczącej się w granicach wyznaczonych przez Min i Max, wynoszących odpowiednio -100 i 100, wyświetlając jednocześnie komunikat "Enter a new value..." w górnej części klawiatury. TagnameX="MyIntegerTag"; {przypisanie zmiennej MyIntegerTag (zmienna, której wartość ma być zmieniona), do zmiennej typu Memory Message o nazwie TagnameX} Min=-100; {minimalna dopuszczalna wartość modyfikowanej zmiennej typu integer/ real} Max=100; {maksymalna, dopuszczalna wartość modyfikowanej zmiennej typu integer/ real} MessageDisplay="Enter a new string..."; {przypisanie nowego ciągu znaków do zmiennej typu Memory Message o nazwie MessageDisplay} Errmsg=DialogValueEntry(TagnameX, Min, Max, MessageDisplay; {cudzysłów nie jest wymagany, ponieważ zmienna TagnameX została zdefiniowana jako zmienna typu tekstowego} Jeżeli do zmiennej TagnameX przypisana zostanie inna zmienna typu Discrete, Integer lub Real, funkcja zmodyfikuje wartość przypisanej zmiennej} DText() funkcje tekstowe Funkcja ta dynamicznie zmienia zawartość zmiennej tekstowej w zależności od wartości innej zmiennej dyskretnej (typu Discrete). Składnia MsgTag=DText(Discrete_Tag,OnMsg,OffMsg); Parametry Opis MsgTag Discrete_Tag OnMsg Zmienna tekstowa . Zmienna dyskretna (typu Discrete). Komunikat tekstowy, który będzie wyświetlany, gdy wartość zmiennej Discrete_Tag wynosi 1 (True, On, Yes). Komunikat tekstowy, który będzie wyświetlany, gdy wartość zmiennej Discrete_Tag wynosi 0 (False, Off, No). OffMsg Przykład MessageTag=Dtext(DiscreteTag, DiscreteTag.OnMsg, DiscreteTag.OffMsg); If Dtext(D_Tag, "True”, "False”) == "True” THEN Message=”D_Tag contains a value of 1”; ELSE Message=”D_Tag contains a value of 0”; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-14 Rozdział 3 Exp() funkcje matematyczne Zwraca wartość e podniesioną do potęgi. Składnia Result=Exp(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Liczba e jest podnoszona do potęgi Number, a wynik przypisywany jest do zmiennej Result. Przykład Exp(1) zwraca 2.718... Zakres argumentów dla tej funkcji: od -88.72 do 88.72. FileCopy() system Kopiuje plik SourceFile do DestFile, podobnie jak polecenie copy systemu DOS czy funkcja copy systemu Windows. Składnia FileCopy(SourceFile,DestFile,DoneTag); Parametry Opis SourceFile Nazwa pliku źródłowego (do skopiowania), włącznie z pełną ścieżką dostępu. Nazwa pliku wynikowego, włącznie z pełną ścieżką dostępu, lub nazwa katalogu (patrz przykłady poniżej). Nazwa zmiennej używanej przez funkcję FileCopy() do poinformowania o trwaniu procedury kopiowania. Parametr ten musi być łańcuchem znaków wskazującym nazwę zmiennej (a nie samą zmienną). Dlatego więc, jeśli zmienną służącą do komunikowania o przebiegu operacji jest zmienna Monitor, jako parametr należy podać "Monitor" lub Monitor.name, a nie Monitor. DestFile DoneTag Uwagi Funkcja FileCopy() zwraca natychmiast wartość 1, jeśli procedura kopiowania została pomyślnie zainicjowana. Funkcja zwraca 0, jeśli inna procedura znajduje się w trakcie realizacji (nowa procedura nie może zostać zainicjowana), oraz zwraca -1 w przypadku błędu. Wartość ta pozwala na monitorowania inicjalizacji funkcji FileCopy(). Status=FileCopy("C:\*.TXT", "C:\BACKUP", "Monitor"); Status jest zmienną typu Integer, o wartościach wartość 1, -1 lub 0. Funkcja FileCopy() jest wykonywana w tle, dlatego też nie zakłóca innych operacji realizowanych prze program InTouch. Zmienna DoneTag umożliwia natomiast monitorowanie przez aplikację lub użytkownika postępu operacji kopiowania. W ten sposób użytkownik może zostać ostrzeżony o wszelkich błędach, które mogą wystąpić PO zainicjowaniu procedury. Zmienna ta nie jest równoważna zmiennej Status zastosowanej w przykładzie powyżej, która wskazuje wyłącznie, czy procedura kopiowania została pomyślnie zainicjowana. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe 3-15 Pomyślne zainicjowanie procedury kopiowania powoduje zmianę wartości zmiennej DoneTag. Wartość ta jest ustawiana na 0 w czasie trwania operacji kopiowania. Jeżeli wartość jest równa 1, operacja została pomyślnie zrealizowana, natomiast pojawienie się wartości -1 informuje o wystąpieniu błędu przed zakończeniem procedury. Zwykle nazwami plików są SourceFile i DestFile. Jeśli jednak za pomocą funkcji FileCopy() kopiowany jest pojedynczy plik, zamiast nazwy pliku wynikowego można użyć nazwy katalogu: FileCopy("C:\DATA.TXT", "C:\BACKUP", "Monitor"); Instrukcja ta spowoduje skopiowanie pliku DATA.TXT do katalogu o nazwie BACKUP na dysku "C:\”. Po zakończeniu tej operacji zmienna Monitor przyjmie wartość 1. Jeżeli jednak nazwa SourceFile zawiera znaki wzorca, DestFile MUSI być kartoteką (nie plikiem), bowiem w przeciwnym wypadku zwrócony zostanie błąd. FileCopy("C:\*.TXT", "C:\BACKUP", "Monitor"); Instrukcja ta spowoduje skopiowanie wszystkich plików o rozszerzeniu .TXT do katalogu C:BACKUP. Po zakończeniu tej operacji zmienna Monitor przyjmie wartość 1. FileDelete() system Usuwa niepotrzebne pliki. Składnia FileDelete(Filename); Parametry Opis FileName Nazwa pliku do usunięcia. Uwagi Jeśli podany plik zostanie znaleziony i pomyślnie usunięty, funkcja zwraca wartość 1. W przeciwnym razie funkcja zwraca wartość 0. Przykład Status=FileDelete("C:\DATA.TXT"); Zmienna Status przyjmuje wartość 1, jeśli plik o nazwie "DATA.TXT” został znaleziony w katalogu głównym dysku C:, lub też 0, w wypadku przeciwnym. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-16 Rozdział 3 FileMove() system Działanie tej funkcja ta jest podobna do funkcji FileCopy() z tą różnicą, że powoduje ona przesunięcie pliku SourceFile w nowe miejsce, a nie skopiowanie go. Składnia Uwagi FileMove(SourceFile,DestFile,DoneTag); Parametry Opis SourceFile DestFile DoneTag Nazwa pliku źródłowego, włącznie z pełną ścieżką dostępu. Nazwa pliku wynikowego, włącznie z pełną ścieżką dostępu. Nazwa zmiennej, która zostanie użyta przez funkcję FileMove() do powiadamiania o trwaniu procedury kopiowania. Parametr ten musi być łańcuchem znaków wskazującym nazwę zmiennej (a nie samą zmienną). Dlatego więc, jeśli zmienną służącą do komunikowania o przebiegu operacji jest zmienna Monitor, jako parametr należy podać "Monitor" lub Monitor.name, a nie Monitor. Funkcja FileMove() zwraca wartość 1, jeśli procedura kopiowania została pomyślnie zainicjowana. Funkcja zwraca 0, jeśli inna procedura jest aktualnie realizowana (i nowa procedura nie może zostać zainicjowana) oraz zwraca -1 w przypadku błędu. Używając tej wartości można monitorować inicjowanie funkcji FileMove(): Status=FileMove("C:\DATA.TXT", "D:\DATA.TXT", "Monitor"); Status jest zmienną typu Integer, która przyjmuje wartość 1, -1 lub 0. Funkcja FileMove() jest wykonywana w tle, dlatego też nie zakłóca funkcjonowania programu InTouch. Zmienna DoneTag umożliwia natomiast monitorowanie postępu operacji przesuwania pliku, przez aplikację lub użytkownika. W ten sposób użytkownik może zostać ostrzeżony o wszelkich błędach, które mogą wystąpić PO zainicjowaniu procedury. Nie jest ona równoważna zmiennej Status zastosowanej w przykładzie powyżej, która wskazuje tylko, czy procedura przesuwania pliku została pomyślnie zainicjowana. Po pomyślnym zainicjowaniu procedury przesuwania pliku ustawiana jest wartość zmiennej DoneTag. Wartość ta jest ustawiana na 0, gdy procedura trwa, na 1 po pomyślnym zakończeniu procedury lub na -1, jeśli przed zakończeniem kopiowania wystąpi błąd. Jeżeli wartość jest równa 1, operacja została pomyślnie zrealizowana, natomiast pojawienie się wartości -1 informuje o wystąpieniu błędu przed zakończeniem procedury. Jeśli SourceFile i DestFile znajdują się na tym samym dysku, funkcja zmienia tylko adres miejsca w pamięci, gdzie przechowywane są dane o pliku, bez faktycznego przemieszczania danych. W takim przypadku procedura jest wykonywana bardzo szybko, niezależnie od rozmiarów pliku. Jeżeli pliki SourceFile i DestFile umieszczone są na różnych dyskach, czas potrzebny na zrealizowanie operacji przesunięcia zależy od rozmiaru pliku. Jest to powodowane przez fakt, że dane muszą być przesunięte z jednego dysku fizycznego na drugi Przykład FileMove ("C:\DATA.TXT","C:\BACKUP\DATA.TXT","Monitor"); Instrukcja ta spowoduje przesunięcie pliku "DATA.TXT” z katalogu głównego dysku "C" do podkatalogu o nazwie BACKUP na tym dysku: Po zakończeniu tej operacji zmienna Monitor przyjmie wartość 1. Uwaga Jeżeli w SourceFile i Destfile podano tę samą kartotekę ale różne nazwy plików, funkcja ta spowoduje zmianę nazwy plików. FileMove ("C:\DATA.TXT","C:\DATA.BAK","Monitor"); Instrukcja ta spowoduje zmianę nazwy pliku "DATA.TXT" na "DATA.BAK" w katalogu głównym dysku C: Po zakończeniu tej operacji zmienna Monitor przyjmie wartość 1. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe FileReadFields() 3-17 system Odczytuje rekord z zadanego pliku w formacie CSV (Comma Separated Variable zmienne oddzielone przecinkami). Składnia FileReadFields(Filename,FileOffset,StartTag,NumberOfFields); Parametry Opis FileName FileOffset StartTag Nazwa pliku źródłowego do odczytu. Miejsce rozpoczęcia odczytu (w pliku). Nazwa zmiennej zdefiniowanej w programie InTouch, w której zostanie zapisany pierwszy element odczytany z pliku. Nazwa tej zmiennej musi kończyć się liczbą (np. MyTag1). Parametr ten musi być łańcuchem znaków wskazującym nazwę zmiennej (a nie samą zmienną). Dlatego więc, jeśli rozważaną zmienną ma być zmienna MyTag1, jako parametr należy podać "MyTag1" lub MyTag1.name, a nie MyTag1. Jest to liczba elementów do odczytu (liczba pól oddzielonych przecinkami w każdym rekordzie pliku). NumberOfFields Uwagi Jeśli parametrem StartTag jest zmienna MyTag1, a parametrem NumberOfFields jest 3, z pliku odczytane zostaną trzy elementy i zostaną zapisane jako wartości zmiennych MyTag1, MyTag2 i MyTag3. Zmienne te (o kolejnych numerach w nazwie) muszą zostać wcześniej utworzone w programie InTouch i mogą być różnych typów (Integer, Message). Przykłady Jeśli pierwsza linia pliku C:\DATA\FILE.CSV ma postać: This is text, 3.1416, 5 to instrukcja ta zamieszczona w skrypcie poniżej odczyta tę linię i zapisze "This is text" jako zmienną MyTag1, 3.1416 jako zmienną MyTag2, a liczbę 5 jako zmienną MyTag3: BytePosition=FileReadFields ("C:\DATA\FILE.CSV", 0, "MyTag1", 3); Funkcja ta po zakończeniu odczytu zwraca nową pozycję bajtu. Można użyć tej wartości jako parametru FileOffset do następnego odczytu. FileReadFields ("C:\DATA\FILE.CSV",BytePosition,"MyTag1",3); Uwaga Długość zmiennych tekstowych w programie InTouch nie może przekraczać 131 znaków. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-18 Rozdział 3 FileReadMessage() system Odczytuje podaną liczbę bajtów, lub całą linię z podanego pliku. Składnia FileReadMessage(Filename,FileOffset,Message_Tag,CharsToRead); Parametry Opis FileName FileOffset Message_Tag Nazwa pliku źródłowego do odczytu. Miejsce rozpoczęcia odczytu (w pliku). Nazwa zmiennej programu InTouch, w której zostanie zapisany pierwszy element odczytany z pliku. Maksymalnie można zapamiętać 131 znaków. Jest to liczba bajtów do odczytu z pliku. W przypadku przetwarzania plików tekstowych, można ustawić wartość CharsToRead na 0. Spowoduje to odczyt ciągu znaków do rozpoczęcia kolejnej linii (znak LF). CharsToRead Przykład FileReadMessage ("C:\DATA\FILE.TXT", 0, MsgTag, 0); Powyższa instrukcja spowoduje odczyt pierwszej linii z pliku "C:\data\fileTXT" i przypisanie jej do zmiennej o nazwie MsgTag. Funkcja ta po zakończeniu odczytu zwraca nową pozycję bajtu. Można użyć tej wartości jako parametru FileOffset do następnego odczytu. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe FileWriteFields() 3-19 system Zapisuje rekord do zadanego pliku w formacie CSV (Comma Separated Variable zmienne oddzielone przecinkami). Składnia FileWriteFields(Filename,FileOffset,StartTag,NumberOfFields); Parametry Opis FileName Nazwa pliku źródłowego, w którym ma zostać zapisany rekord. Jeśli plik FileName nie istnieje, zostanie utworzony. Miejsce rozpoczęcia zapisu (w pliku). Jeśli wartość parametru FileOffset wynosi -1, funkcja dopisze rekord na końcu pliku. Nazwa zmiennej programu InTouch, z której zostanie wzięty pierwszy element zapisany w pliku. Nazwa tej zmiennej musi kończyć się liczbą (np. MyTag1). Parametr ten musi być łańcuchem znaków zawierającym nazwę zmiennej (a nie samą zmienną). Dlatego więc, jeśli rozważaną zmienną ma być zmienna MyTag1, jako parametr należy podać "MyTag1" lub MyTag1.name, a nie MyTag1. Liczba elementów do zapisu (liczba pól oddzielonych przecinkami w każdym rekordzie pliku). FileOffset StartTag NumberOfFields Uwagi Jeśli parametrem StartTag jest zmienna MyTag1, a parametrem NumberOfFields jest 3, w pliku zapisane zostaną trzy elementy przechowywane jako MyTag1, MyTag2 i MyTag3. Zmienne te (o kolejnych numerach w nazwie) muszą zostać wcześniej utworzone w programie InTouch i mogą być różnych typów (Integer, Message). Zamieszczony poniżej skrypt zapisuje linie "This is text, 3.1416,5" do pierwszej linii pliku C:\DATA\FILE.CSV. "This is text" jest aktualną wartością zmiennej MyTag1, liczba 3.1416 jest wartością zmiennej MyTag2, a liczba 5 jest wartością zmiennej MyTag3: FileWriteFields ("C:\DATA\FILE.CSV", 0, "MyTag1", 3); Po zapisie funkcja zwraca nową pozycję położenia w pliku. Można użyć tej wartości jako parametru FileOffset do następnego odczytu. Poniższa instrukcja spowoduje zapisanie ciągu znaków MyTag1 na końcu pliku C:\DATA\\FILE.CSV: FileWriteFields ("C:\DATA\FILE.CSV", -1, "MyTag1", 3); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-20 Rozdział 3 FileWriteMessage() system Zapisuje podaną liczbę bajtów (lub całą linię) do podanego pliku. Składnia FileWriteMessage(Filename,FileOffset,Message_Tag,LineFeed); Parametry Opis FileName Nazwa pliku, w którym ma zostać zapisany ciąg znaków. Jeśli plik FileName nie istnieje, zostanie utworzony. Miejsce rozpoczęcia zapisu (w pliku). Jeśli wartość parametru FileOffset wynosi -1, funkcja dopisze rekord na końcu pliku. Ciąg znaków, który ma zostać zapisany w pliku. Parametr ten określa, czy po operacji zapisu przejść do następnej linii (znak LF). W przypadku zapisu do pliku tekstowego parametr LineFeed powinien mieć wartość 1. FileOffset Message_Tag LineFeed Uwagi Po odczycie funkcja zwraca nową pozycję położenia w pliku. Można użyć tej wartości jako parametru FileOffset do następnego zapisu. Przykład Poniższa instrukcja zapis zawartości zmiennej MsgTag na końcu pliku "C:\DATA\FILE.TXT": FileWriteMessage ("C:\DATA\FILE.TXT", -1, MsgTag, 1); GetNodeName() system Zwraca za pomocą zmiennej tekstowej nazwę stacji NetDDE. Składnia GetNodeName(Tagname,NodeNum); Parametry Opis Tagname Nazwa zmiennej tekstowej programu InTouch, w której zapisana zostanie nazwa stacji. Zmienna całkowita, określająca długość zmiennej tekstowej w znakach. NodeNum Uwagi Funkcja GetNodeName() zastosowana w skrypcie odczytuje nazwę lokalnej stacji i zapisuje ją jako zmienną Tagname. Parametr NodeNum podaje długość zmiennej w znakach). Uwaga Funkcja ta działa wyłącznie jeżeli w środowisku Windows 95 pracuje NetDDE, lub też jeżeli pracuje NetworkDDE w środowisku Windows NT. Przykład GetNodeName("MyNodeTag",131); If MyNodeTag == "Master” THEN MessageTag = "This is the Primary Machine!”; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe GetPropertyD() 3-21 GOT Odczytuje wartość dyskretną określonej właściwości. Składnia [ErrorNumber=]GetPropertyD("ControlName.Property",Tagname); Parametry Opis ControlName Nazwa obiektu sterującego okien, np. ChkBox_1, lub nazwa obiektu do wyświetlania alarmów, np. AlmObj_1. Właściwość obiektu sterującego okna lub obiektu do wyświetlania alarmów. .Property ! Więcej informacji na temat pól zmiennych można znaleźć w rozdziale 2 "Pola". Tagname Zdefiniowana zmienna programu InTouch, w której zostaje zapisana odczytana wartość pola (zmienna tego samego typu, co odczytana wartość). ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". GetPropertyI() GOT Odczytuje wartość całkowitą określonej właściwości. Składnia [ErrorNumber=]GetPropertyI("ControlName.Property",Tagname); Parametry Opis ControlName Nazwa obiektu sterującego okien, np. ChkBox_1, lub nazwa obiektu do wyświetlania alarmów, np. AlmObj_1. Właściwość obiektu sterującego okna lub obiektu do wyświetlania alarmów. .Property ! Więcej informacji na temat pól zmiennych można znaleźć w rozdziale 2 "Pola". Tagname Zdefiniowana zmienna programu InTouch, w której zostaje zapisana odczytana wartość pola (zmienna tego samego typu, co odczytana wartość). ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-22 Rozdział 3 GetPropertyM() GOT Odczytuje wartość tekstową określonej właściwości. Składnia [ErrorNumber=]GetPropertyM("ControlName.Property",Tagname); Parametry Opis ControlName Nazwa obiektu sterującego okien, np. ChkBox_1, lub nazwa obiektu do wyświetlania alarmów, np. AlmObj_1. Właściwość obiektu sterującego okna lub obiektu do wyświetlania alarmów. .Property ! Więcej informacji na temat pól zmiennych można znaleźć w rozdziale 2 "Pola". Tagname Zdefiniowana zmienna programu InTouch, w której zostaje zapisana odczytana wartość pola (zmienna tego samego typu, co odczytana wartość). ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Hide różne Pozwala na ukrycie okna z poziomu skryptu. Funkcja Hide() musi poprzedzać nazwę każdego okna, które ma być ukryte. Składnia Hide Window; Parametry Opis Okno Nazwa okna lub zmienna tekstowa. Uwagi W czasie pracy aplikacji, jeśli okno o podanej nazwie nie istnieje, instrukcja jest ignorowana. Jeśli celem skryptu jest wyłącznie ukrycie lub wyświetlenia okna, najlepszym rozwiązaniem jest wykorzystanie połączenia animacyjnego Show Window lub Hide Window, związanego z przyciskiem. Przykład Hide "My Popup Alarm Window"; HideSelf różne Ukrywa aktywne okno. Składnia HideSelf; Uwagi Funkcja ta może zostać użyta tylko w skrypcie związanym z przyciskiem. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe HTGetLastError() 3-23 dane historyczne Określa, czy podczas ostatniego odczytu danych dla określonego pisaka trendu historycznego wystąpił błąd. Składnia [Result=]HTGetLastError(Hist_Tag,UpdateCount,PenNum); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita reprezentująca wartość pola .UpdateCount zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca numer pisaka (od 1 do 8). Funkcja zwraca następujące wyniki: Wynik Opis 0 Brak błędu. 1 Generalny błąd serwera. 2 Moduł trendów historycznych realizuje poprzednie zapytanie. 3 Błąd pliku. 4 Serwer nie jest załadowany. 5 Trend lub pisak podany jako parametr funkcji nie istnieje. 6 Nazwa zmiennej reprezentującej trend nie występuje na liście zmiennych programu InTouch. 7 Numer pisaka podany jako parametr funkcji nie mieści się w dopuszczalnym zakresie (od 1 do 8). UpdateCount PenNum Result Przykład Poniższa instrukcja powoduje odczytanie kodu błędu, który wystąpił podczas ostatniego odczytu danych historycznych dla pisaka Pen3 trendu związanego ze zmienną Trend1 i przypisanie tego kodu jako zmiennej całkowitej ResultCode: [ResultCode=]HTGetLastError("Trend1",Trend1.UpdateCount,3); Poniższą instrukcję można wykorzystać w wyrażeniu połączenia animacyjnego do wyświetlania wartości analogowych: HTGetLastError("Trend1",Trend1.UpdateCount,3); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-24 Rozdział 3 HTGetPenName() dane historyczne Odczytuje nazwę zmiennej aktualnie przypisanej do określonego pisaka danego trendu historycznego. Składnia MessageResult=HTGetPenName(Hist_Tag,UpdateCount,PenNum); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita zawierająca wartość pola .UpdateCount zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca numer pisaka (od 1 do 8). Funkcja zwraca nazwę zmiennej związanej z tym pisakiem w postaci zmiennej tekstowej (Message). UpdateCount PenNum Przykład Poniższa instrukcja powoduje odczytanie nazwy zmiennej przypisanej do pisaka Pen2 trendu związanego ze zmienną Trend1, i jej do zmiennej tekstowej TrendPen: TrendPen=HTGetPenName("Trend1",Trend1.UpdateCount,2); HTGetTimeAtScooter() dane historyczne Podaje w sekundach czas, jaki upłynął od godziny 00:00:00, 1 stycznia 1970 czasu GMT, dla podanej pozycji suwaka określonej przez ScootLoc i ScooterNum. Składnia IntegerResult=HTGetTimeAtScooter(Hist_Tag,UpdateCount, ScootNum,ScootLoc); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita zawierająca wartość pola .UpdateCount zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca prawy (=1) lub lewy (=2) suwak. Liczba rzeczywista równa wartości pola .ScooterPosRight lub .ScooterPosLeft zmiennej reprezentującej trend. UpdateCount ScootNum ScootLoc Uwagi W przypadku gdy parametry UpdateCount, ScootNum, i ScootLoc ulegną zmianie, wymuszane jest uaktualnienie wartości wyrażenia. Zapewnia to obliczanie wartości wyrażenia po znalezieniu nowych danych, lub po przemieszczeniu suwaka. Przykład Poniższa instrukcja powoduje odczytanie czasu (w sekundach) dla aktualnej pozycji lewego suwaka trendu reprezentowanego przez zmienną Trend1: HTGetTimeAtScooter("Trend1",Trend1.UpdateCount,1, Trend1.ScooterPosLeft); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe HTGetTimeStringAtScooter() 3-25 dane historyczne Zwraca ciąg znaków zawierający czas/datę próbki w pozycji suwaka określonej przez ScootNum i ScootLoc. Składnia MessageResult=HTGetTimeStringAtScooter(Hist_Tag, UpdateCount,ScootNum,ScootLoc,Format_Text); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita reprezentująca wartość pola .UpdateCount zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca prawy (=1) lub lewy (=2) suwak. Liczba rzeczywista równa wartości pola .ScooterPosRight lub .ScooterPosLeft zmiennej reprezentującej trend. Łańcuch znaków określający format czasu/daty, który ma zostać użyty. Jako Format_Text akceptowane są następujące łańcuchy znaków: "Date" , "Time" , "DateTime" , "DOWShort" (dzień tygodnia w skrócie, np. Wed - środa), "DOWLong" (dzień tygodnia w całości, np. Wednesday - środa). UpdateCount ScootNum ScootLoc Format_Text Uwagi W przypadku gdy parametry UpdateCount, ScootNum, i ScootLoc ulegną zmianie, wymuszane jest uaktualnienie wartości wyrażenia. Zapewnia to zaktualizowanie wartości po znalezieniu nowych danych, lub po przemieszczeniu suwaka. Format tekstu określa zawartość wartości zwracanej. Przykład Poniższa instrukcja powoduje odczytanie daty i czasu dla aktualnej pozycji prawego suwaka trendu reprezentowanego przez zmienną Trend1. Data i czas są zapisywane jako zmienna tekstowa o nazwie NewRightTimeString w formacie "Time": NewRightTimeString=HTGetTimeStringAtScooter ("Trend1",Trend1.UpdateCount,2,Trend1.ScooterPosRight,"Time"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-26 Rozdział 3 HTGetValue() dane historyczne Zwraca wartość określonego typu (np. maksymalna, minimalna, średnia, itp.) dla wykresu trendu historycznego dla danego pisaka. Parametr UpdateCount wymusza obliczanie wartości wyrażenia po odczytaniu danych. Składnia RealResult=HTGetValue(Hist_Tag,UpdateCount,PenNum,ValType_Text); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita reprezentująca wartość pola .UpdateCount zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca numer pisaka (od 1 do 8). Łańcuch znaków określający rodzaj wskaźnika, który ma być obliczony przez funkcję: Typ Opis "PenAverageValue" Wartość średnia dla całego trendu. "PenMaxValue" Wartość maksymalna dla całego trendu. "PenMinValue" Wartość minimalna dla całego trendu. "PenMaxEU" Wartość maksymalna w jednostkach inżynierskich dla całego trendu. "PenMinEU" Wartość minimalna w jednostkach inżynierskich dla całego trendu. "PenStdDev" Wartość odchylenia standardowego dla całego trendu. UpdateCount PenNum ValType_Text Uwaga W przypadku korzystania z parametru ValType_Text w połączeniu z funkcją HTGetValue, należy upewnić się, że wykorzystywany jest jeden z dopuszczalnych typów, wymienionych powyżej. Uwagi Wynikiem obliczeń jest wartość rzeczywista obliczonego wskaźnika, którą można zapisać jako zmienną pamięciową typu Real. Przykład Poniższa instrukcja powoduje odczytanie standardowego odchylenia danych zebranych dla pola Trend.Pen2.: Wartość ta jest zapamiętywana w zmiennej typu Memory Real o nazwie LeftHemisphereSD: LeftHemisphereSD=HTGetValue("Trend1",Trend1.UpdateCount, 2,"PenStdDev"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe HTGetValueAtScooter() 3-27 dane historyczne Zwraca wartość odpowiedniego typu dla próbki wyznaczonej przez pozycje suwaka na trendzie oraz numer pisaka. Parametr UpdateCount wymusza obliczanie wartości wyrażenia po odczytaniu danych. Składnia RealResult=HTGetValueAtScooter(Hist_Tag,UpdateCount,ScootNum, ScootLoc,PenNum,ValType_Text); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita reprezentująca wartość pola .UpdateCount zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca prawy (=1) lub lewy (=2) suwak. Liczba rzeczywista równa wartości pola .ScooterPosRight lub .ScooterPosLeft zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca numer pisaka (od 1 do 8). Łańcuch znaków określający rodzaj wartości, która ma być obliczona przez funkcję: Typ Opis "PenValue" Wartość na wykresie w pozycji suwaka. "PenValid" 0 - jeśli wartości nie można wyznaczyć, UpdateCount ScootNum ScootLoc PenNum ValType_Text Uwaga W przypadku korzystania z parametru ValType_Text w połączeniu z funkcją HTGetValueAtScooter należy upewnić się, że wykorzystywany jest jeden z dopuszczalnych typów, wymienionych powyżej. Uwagi Wracana jest zmienna typu Memory Real, reprezentująca wartość obliczoną dla "PenValue". Wracana jest zmienna typu Discrete, reprezentująca wartość obliczoną dla "PenValid". Przykład Poniższa instrukcja powoduje przypisanie zmiennej dyskretnej o nazwie ValidFlag wartości 1, jeśli wartość próbki odpowiadającej bieżącej pozycji prawego suwaka dla pisaka Pen3 na wykresie trendu związanego ze zmienną Trend1 można wyznaczyć, lub wartości 0, jeśli wartości próbki nie można wyznaczyć: ValidFlag=HTGetValueAtScooter("Trend1",Trend1.UpdateCount,2, Trend1.ScooterPosRight,3,"PenValid"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-28 Rozdział 3 HTGetValueAtZone() dane historyczne Zwraca wartość określonego typu (np. maksymalna, minimalna, średnia, itp.) dla danych zawartych pomiędzy lewym i prawym suwakiem na wykresie trendu historycznego, dla danego pisaka. Parametr UpdateCount wymusza obliczanie wartości wyrażenia po odczytaniu danych. Składnia RealResult=HTGetValueAtZone(Hist_Tag,UpdateCount,Scoot1Loc, Scoot2Loc,PenNum,ValType_Text); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba całkowita reprezentująca wartość pola .UpdateCount zmiennej reprezentującej trend. Liczba rzeczywista równa wartości pola .ScooterPosLeft (pozycja lewego suwaka) zmiennej reprezentującej trend. Liczba rzeczywista równa wartości pola .ScooterPosRight (pozycja prawego suwaka) zmiennej reprezentującej trend. Zmienna typu Integer lub liczba całkowita określająca numer pisaka (od 1 do 8). Łańcuch znaków określający rodzaj wskaźnika, który ma być obliczony przez funkcję: Typ Opis "PenAverageValue" Wartość średnia dla obszaru pomiędzy lewym a prawym suwakiem. "PenMaxValue" Wartość maksymalna dla obszaru pomiędzy lewym a prawym suwakiem. "PenMinValue" Wartość minimalna dla obszaru po-między lewym a prawym suwakiem. "PenMaxEU" Wartość maksymalna w jednostkach inżynierskich dla obszaru pomiędzy lewym a prawym suwakiem. "PenMinEU" Wartość minimalna w jednostkach inżynierskich dla obszaru pomiędzy lewym a prawym suwakiem. "PenStdDev" Wartość odchylenia standardowego dla obszaru pomiędzy lewym a prawym suwakiem. UpdateCount Scoot1Loc Scoot2Loc PenNum ValType_Text Uwaga W przypadku korzystania z parametru ValType_Text w połączeniu z funkcją HTGetValueAtZone należy upewnić się, że wykorzystywany jest jeden z dopuszczalnych typów, wymienionych powyżej. Uwagi Wynikiem obliczeń jest wartość rzeczywista obliczonego wskaźnika, którą można zapisać jako zmienną pamięciową typu Real. Podanie stałych wartości dla parametrów ScootLoc i Scoot2Loc nie daje żadnego rezultatu, i może być stosowane wyłącznie aby wywołać funkcję w celu uaktualnienia wyświetlanych linii. Funkcja ta, w celu wyznaczenia granic, korzysta bezpośrednio z pól trendu.ScooterPosLeft i .ScooterPosRight, przechowywanych w roboczej bazie danych. Przykład Zamieszczona poniżej instrukcja oblicza wartość średnią danych pomiędzy lewym a prawym suwakiem trendu "Trend1", dla pisaka Pen1. Wartość ta jest zapamiętywana w zmiennej typu Memory Real o nazwie AvgValue. AvgValue=HTGetValueAtZone("Trend1",Trend1.UpdateCount, Trend1.ScooterPosLeft,Trend1.ScooterPosRight,1, "PenAverageValue"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe HTScrollLeft() 3-29 dane historyczne Przesuwa punkt początkowy wykresu trendu do tyłu, w stosunku do aktualnego punktu początkowego o czas stanowiący procentową część długości wykresu trendu. Powoduje to przewinięcie wykresu w lewo o określoną procentowo wartość. Składnia HTScrollLeft(Hist_Tag,Percent); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba rzeczywista oznaczająca wartość przesunięcia w procentach długości wykresu. Percent Przykład Poniższa instrukcja powoduje przesunięcie wykresu trendu związanego ze zmienną Trend1 o 10% w prawo: HTScrollLeft("Trend1",10.0); Jeśli aktualny wykres rozpoczyna się o 12:00:00, a długość wykresu w jednostkach czasu wynosi 60 sekund, to po wykonaniu tej operacji nowy wykres będzie zaczynał się o 11:59:54. HTScrollRight() dane historyczne Przesuwa punkt początkowy wykresu trendu do przodu, w stosunku do aktualnego momentu początkowego o czas stanowiący procentową część długości wykresu trendu. Powoduje to przewinięcie wykresu w prawo o określoną procentowo wartość. Składnia HTScrollRight(Hist_Tag,Percent); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Liczba rzeczywista oznaczająca wartość przesunięcia w procentach długości wykresu. Percent Przykład Poniższa instrukcja powoduje przesunięcie wykresu trendu związanego ze zmienną Trend1 o 20% w prawo: HTScrollRight("Trend1",20.0); Jeśli aktualny wykres rozpoczyna się o 12:00:00, a długość wykresu w jednostkach czasu wynosi 60 sekund, to po wykonaniu tej operacji nowy wykres będzie zaczynał się o 12:00:12. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-30 Rozdział 3 HTSelectTag() różne Wyświetla okno dialogowe Select Tag, za pomocą którego operator może przypisać inną zmienną do danego pisaka. (W oknie tym wyświetlane są wyłącznie zmienne, które zostały włączone do logowania historycznego (zaznaczona została opcja Log Data)). Składnia HTSelectTag(); Uwagi Funkcja HTSelectTag() pokazuje wszystkie zmienne, dla których ustawiono opcję Log Data. Można jednak za pomocą filtra, zdefiniowanego w Przeglądarce zmiennych, ograniczyć liczbę wyświetlanych zmiennych. Przykładowo, można wyświetlić wyłącznie zmienne, których nazwa rozpoczyna się od litery A. NIE jest jednak możliwe wykorzystanie funkcji HTSelectTag() do wyświetlania wszystkich zmiennych zdefiniowanych w bazie danych, można wyświetlać wyłącznie zmienne historyczne. Przykłady Skrypt związany z przyciskiem może zawierać przedstawioną poniżej instrukcję. Powoduje ona wyświetlenie Przeglądarki zmiennych w programie WindowViewer. Użytkownik może zaznaczyć jedną ze zmiennych, wyświetlanych na liście. Zmienna ta zostanie następnie przypisana do pisaka Pen1, trendu historycznego o nazwie HistTrend. HTSetPenName( "HistTrend", 1, HTSelectTag( ) Patrz również ); HTSetPenName() HTSetPenName() dane historyczne Przypisanie innej zmiennej do pisaka trendu. Składnia HTSetPenName(Hist_Tag,PenNum,Tagname); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Zmienna typu Integer lub liczba całkowita równa numerowi pisaka (od 1 do 8), który ma zostać związany z zmienną Tagname. Zmienna tekstowa oznaczająca nazwę zmiennej przypisanej danemu pisakowi. PenNum Tagname Uwagi Jedyną metodą dodawania zmiennych, od dostawcy danych historycznych w czasie pracy aplikacji, jest korzystanie z funkcji skryptowych. Przykłady Zamieszczona poniżej instrukcja powoduje przypisanie zmiennej OutletPressure do pola Pen3 trendu Trend1. HTSetPenName("Trend1",3,"OutletPressure"); Zamieszczona poniżej instrukcja powoduje przypisanie zmiennej rozproszonej HistPrv1.Tag1 do TrendPen4 trendu Trend1. HTSetPenName("Trend1",TrendPen4,"HistPrv1.Tag1"); Patrz również HTSelectTag(); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe HTUpdateToCurrentTime() 3-31 dane historyczne Odczytuje i wyświetla dane historyczne dla okresu kończącego się w bieżącej chwili. Punkt początkowy wykresu trendu historycznego będzie równy różnicy punktu końcowego i długości wykresu. Składnia Przykład HTUpdateToCurrentTime(Hist_Tag); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Poniższa instrukcja powoduje odczytanie i zaktualizowanie, aż do bieżącego momentu, danych dla wykresu trendu historycznego związanego ze zmienną "Trend1": HTUpdateToCurrentTime("Trend1"); Jeśli wykres rozpoczyna się o 16:04, a długość wykresu w jednostkach czasu wynosi 60 sekund, to po wykonaniu tej instrukcji wykres będzie kończył się dla danych zebranych o godzinie 16.04. Nową godziną początkową będzie 16.03. HTZoomIn() dane historyczne Oblicza nową szerokość wykresu oraz punkt początkowy. Jeżeli wartość .ScooterPosLeft jest równa 0.0, a wartość ScooterPosRight jest równa 1.0, to nowa szerokość wykresu jest równa szerokości starego wykresu podzielonej przez dwa. Nowy punkt początkowy zostanie obliczony na podstawie wartości LockString. Składnia HTZoomIn(Hist_Tag,LockString); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Łańcuch znaków określający sposób zmiany skali wykresu. Typ Opis "StartTime" Punkt początkowy wykresu pozostaje bez zmian. "Center" Centralny punkt wykresu pozostaje bez zmian. "EndTime" Punkt końcowy wykresu pozostaje bez zmian. LockString Uwagi Jeśli pozycje suwaków nie odpowiadają krawędziom wykresu, nowa długość okna wykresu będzie odpowiadała odległości pomiędzy suwakami (.ScooterPosLeft a .ScooterPosRight). W takim przypadku parametr LockString nie jest używany. Minimalna długość okna wykresu wynosi 1 sekundę. Po zmianie skali wykresu, suwaki przyjmą następujące pozycje: .ScooterPosLeft=0.0 oraz .ScooterPosRight=1.0. Przykład Zamieszczona poniżej instrukcja powoduje dwukrotne powiększenie wyświetlanego wykresu, z zachowaniem tego punktu początkowego wykresu dla zmiennej "Trend1". Pole Trend1.ScooterPosRight jest równe 1.0, a pole Trend1.ScooterPosLeft jest równe 0.0. Jeśli punkt początkowy wykresu przypadał na godz. 13:25:00, długość wykresu w jednostkach czasu wynosiła 30 sekund, to po wykonaniu operacji powiększenia, nowy wykres będzie zaczynał się nadal o godz. 13:25:00, ale jego długość wynosić będzie tylko 15 sekund. HTZoomIn("Trend1","StartTime"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-32 Rozdział 3 HTZoomOut() dane historyczne Oblicza nową szerokość wykresu oraz punkt początkowy. Nowa szerokość wykresu jest równa szerokości starego wykresu pomnożonej przez dwa. Nowy punkt początkowy zostanie obliczony na podstawie wartości LockString. Składnia HTZoomOut(Hist_Tag,LockString); Parametry Opis Hist_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Łańcuch znaków określający sposób zmiany skali wykresu. Typ Opis "StartTime" Punkt początkowy wykresu pozostaje bez zmian. "Center" Centralny punkt wykresu pozostaje bez zmian. "EndTime" Punkt końcowy wykresu pozostaje bez zmian. LockString Uwagi Pozycje suwaków nie mają wpływu na działanie funkcji HTZoomOut, ale po wykonaniu operacji zmiany skali wykresu przyjmą one następujące wartości: .ScooterPosLeft=0.0 oraz .ScooterPosRight=1.0. Przykład Zamieszczona poniżej instrukcja powoduje dwukrotne powiększenie wyświetlanego wykresu, z zachowaniem tego samego punktu początkowego. Jeśli wykres rozpoczynał się, przed jego powiększeniem, o godz. 14:15:00, długość wykresu w jednostkach czasu wynosiła 30 sekund, to po wykonaniu operacji powiększenia nowy wykres będzie zaczynał się nadal o godz. 14:15:00. Długość wykresu nadal wynosić będzie 60 sekund, a środek rysowanego wykresu przypadał będzie na godz. 14:15:15. HTZoomOut("Volume","Center"); InfoAppActive() system Sprawdza czy podana aplikacja jest uruchomiona. Składnia Przykład DiscreteResult=InfoAppActive(AppTitle); Parametry Opis AppTitle Nazwa sprawdzanej aplikacji podana jako łańcuch znaków. InfoAppActive("Microsoft Excel") zwraca 1 {jeżeli uruchomiony} InfoAppActive("Calculator") zwraca 0 { jeżeli nie jest uruchomiony} Uwaga: Nazwę danej aplikacji można uzyskać stosując funkcję InfoAppTitle(). Zamieszczony poniżej skrypt korzysta z funkcji InoAppActive do sprawdzenia listy zadań uruchomionych w systemie. Jeżeli jest uruchomione zadanie o nazwie Notatnik, zwracana jest wartość 1. Pozwala to na uniknięcie uruchamiania drugiej kopii programu Notatnik. Jeżeli funkcja InfoAppActive zwraca wartość 0 (Notatnik nie jest uruchomiony), następuje jego uruchomienie. IF InfoAppActive( InfoAppTitle( "Notepad" ) ) == 1 THEN ActivateApp InfoAppTitle( "Notepad" ); ELSE StartApp "Notepad"; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe InfoAppTitle() 3-33 system Zwraca nazwę uruchomionej aplikacji (znajdującą się na pasku tytułowym). Składnia Przykład MessageResult=InfoAppTitle("ProgramEXEName”); Parametry Opis ProgramEXEName Łańcuch znaków zawierający nazwę pliku z rozszerzeniem .EXE. Zamieszczona poniżej przykładowa instrukcja z parametrem ProgramEXEName= "calc" zwróci wartość "Kalkulator". Program nazywa się w rzeczywistości calc.exe. W nazwie programu nie podawać rozszerzenia EXE. InfoAppTitle("calc") zwraca "Calculator" InfoAppTitle("excel") zwraca "Microsoft Excel" Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-34 Rozdział 3 InfoDisk() system Zwraca informacje na temat lokalnego lub sieciowego napędu. Składnia IntegerResult=InfoDisk("Drive”,InfoType,Trigger); Parametry Opis Drive InfoType Łańcuch znaków lub zmienna tekstowa z nazwą dysku. Liczba całkowita określająca rodzaj informacji: Typ Opis 1 Odczyt całkowitej pojemności dysku (w bajtach). 2 Odczyt dostępnego, wolnego obszaru na dysku (w bajtach). 3 Całkowita pojemność dysku (w kilobajtach). 4 Ilość wolnego obszaru na dysku (w kilobajtach). Funkcja InfoDisk jest wykonywana po każdej zmianie parametru Trigger. Parametr ten może być dowolną zmienną (bez ograniczenia do zmiennych systemowych). Parametr ten wykorzystywany jest wyłącznie w polach wyrażeń połączeń animacyjnych, można użyć dowolnej wartości w przypadku, gdy funkcja InfoDisk() wykorzystywana jest w skrypcie, ponieważ parametr ten nie ma żadnego wpływu na wykonywanie skryptu. Trigger Uwagi Informacje o dysku określonym parametrem Drive są zwracane jako wartość całkowita. Przykład Zamieszczona poniżej instrukcja jest wykonywana co minutę, zwracając bieżącą wartość. Po umieszczeniu w połączeniu wyświetlającym wartości analogowych, wartość będzie uaktualniana co minutę. InfoDisk("C", 1, $Minute) zwraca 233869345 {całkowita pojemność w bajtach} InfoDisk("C", 2, $Minute) zwraca 3238935 {wolne miejsce w bajtach} InfoDisk("C", 3, $Minute) zwraca 228388 {całkowita pojemność w kilobajtach} InfoDisk("C", 4, $Minute) zwraca 3163 {wolne miejsce w kilobajtach} Komentarz 1 kilobajt = 1024 bajtów Podobnie jak w przypadku innych funkcji, które wykorzystują pojedyncze znaki, jeśli badany łańcuch znaków (lub zmienna tekstowa) zawiera więcej niż jeden znak, testowany jest tylko pierwszy znak tego łańcucha. Ponieważ funkcja ta korzysta z informacji dostarczanych przez system operacyjny, może zwracać błędne wartości w przypadku zainstalowania w komputerze pracującym w systemie operacyjnym Windows 95 dysku o pojemności większej niż 2 gigabajty. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe InfoFile() 3-35 system Zwraca informacje o określonym pliku lub kartotece. Składnia IntegerResult=InfoFile("Filename”,”InfoType”,Trigger); Parametry Opis FileName InfoType Łańcuch znaków zawierający nazwę pliku. Liczba całkowita określająca rodzaj informacji: Typ Opis Sprawdza czy zadany plik istnieje. Jeżeli parametr 1 Filename jest plikiem, zwracana jest wartość 1. Jeżeli parametr Filename jest podkartoteką, zwracana jest wartość 2. W przypadku gdy funkcja nie może znaleźć pliku, zwracana jest wartość 0. 2 Rozmiar pliku (w bajtach). 3 Data i czas zapisu pliku (w sekundach od 1 stycznia 1970). 4 Liczba plików odpowiadających opisowi. Wartości większe od 1 zostaną zwrócone tylko w przypadku szukania z zastosowaniem znaków * lub ?, gdy znalezionych może zostać więcej plików odpowiadających opisowi. Dowolna zmienna. Funkcja InfoFile jest wykonywana po każdej zmianie parametru Trigger. Parametr ten wykorzystywany jest wyłącznie w polach wyrażeń połączeń animacyjnych, można użyć dowolnej wartości w przypadku, gdy funkcja InfoFile() wykorzystywana jest w skrypcie, ponieważ parametr ten nie ma żadnego wpływu na wykonywanie skryptu. Trigger Uwagi Informacje o pliku określonym parametrem FileName są zwracane jako wartość całkowita. Parametr Filename musi zawierać pełną ścieżkę dostępu do pliku i może zawierać znaki * oraz ?. Przykład Zamieszczona poniżej przykładowa instrukcja zwraca co minutę następujące informacje: InfoFile("c:\IT56\view.exe", 1, $Minute) zwraca 1 {pik znaleziony} InfoFile("c:\InTouch\view.exe", 2, $Minute) zwraca 634960 {rozmiar pliku} InfoFile("c:\InTouch\view.exe", 3, $Minute) zwraca 736701852 {liczba sekund od 1-1-70} InfoFile("c:\InTouch\*.exe", 4, $Minute) zwraca 17 {znaleziono 17 plików .EXE } InfoInTouchAppDir() system Zwraca kartotekę aktualnej aplikacji InTouch. Składnia MessageResult=InfoInTouchAppDir(); Uwagi Nazwa katalogu aktualnie uruchomionej aplikacji programu InTouch przypisywana jest do parametru MessageResult. Przykład InfoInTouchAppDir() zwraca "c:\InTouch.32\demoapp1" Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-36 Rozdział 3 InfoResources() system Funkcja ta dostarcza różnych informacji o zasobach systemu. Składnia IntegerResult=InfoResources(ResourceType,Trigger); Parametry Opis ResourceType Liczba całkowita określająca rodzaj informacji: Typ Opis 1 Wolna pamięć GDI. 2 Wolna pamięć Użytkownika. 3 Liczba bajtów aktualnie wolnej pamięci. 4 Liczba aktywnych aplikacji. Funkcja InfoResources() jest wykonywana po każdej zmianie parametru Trigger. Parametr ten może być dowolną zmienną (bez ograniczenia do zmiennych systemowych). Parametr ten wykorzystywany jest wyłącznie w polach wyrażeń połączeń animacyjnych. W przypadku, gdy funkcja InfoResources() wykorzystywana jest w skrypcie, można użyć dowolnej wartości w przypadku, ponieważ parametr ten nie ma żadnego wpływu na wykonywanie skryptu. Trigger Uwagi Żądane informacje o zasobach systemu, zgodnie z wartością parametru ResourceType, zwracane są jako wartość całkowita. Przykład Zamieszczona poniżej przykładowa instrukcja zwraca co minutę następujące informacje: InfoResources(1, $Minute) zwraca 54 {% wolnych} InfoResources(2, $Minute) zwraca 36 {% wolnych } InfoResources(3, $Minute) zwraca 11524093 InfoResources(4, $Minute) zwraca 14 Przykład {bajtów} {zadań} Informacje o zasobach systemu: Przypadek 1 i Przypadek 2: Pamięci GDI i Użytkownika zakodowane są na zwracanie 50% w systemach Windows NT i Windows 95. Przypadek 3: W systemie Windows NT i Windows 95 zwracana jest "liczba wolnych bajtów pliku stronicowania". Przypadek 4: W systemie Windows NT i Windows 95 zwracany jest wynik przeszukiwania wszystkich okien umieszczonych na samej górze. Zliczane są wyłącznie okna widoczne, nie należące do innych okien. Nie jest to w rzeczywistości "liczba zadań uruchomionych w danej chwili" w systemie. Najlepszym przybliżeniem tej liczby jest liczba elementów na zakładce Aplikacje dostępnej po uruchomieniu Menadżera zadań w systemie Windows NT, lub liczba pozycji wyświetlana na liście po wciśnięciu klawiszy CTRL+ALT+DEL w systemie Windows 95. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe Int() 3-37 funkcje matematyczne Zwraca najbliższą liczbę całkowitą, mniejszą lub równą podanej liczbie. Składnia IntegerResult=Int(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi W przypadku podanej liczby ujemnej wynikiem działania funkcji jest największa liczba całkowita mniejsza lub równa argumentowi funkcji. Przykład Int(4.7) zwraca 4 Int(-4.7) zwraca -5 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-38 Rozdział 3 IOSetAccessName() różne Zmodyfikowanie części application lub topic Nazwy dostępu w czasie wykonywania aplikacji, co pozwala na zaimplementowanie strategii hot- backup (rezerwacji komunikacji). Składnia IOSetAccessName("AccessName”, "NodeName”, "AppName”, "TopicName”); Parametry Opis AccessName Istniejąca Nazwa dostępu, dla której mają być przypisane nowe wartości parametrów AppName, i TopicName. Łańcuch znaków lub zmienna tekstowa. Sieciowa nazwa komputera Nowa wartość parametru AppName. Łańcuch znaków lub zmienna tekstowa. Nowa wartość parametru TopicName. Łańcuch znaków lub zmienna tekstowa. NodeName AppName TopicName Uwagi Parametry AccessName, AppName i TopicName mogą być łańcuchami znaków, wartościami innych zmiennych programu InTouch, lub wartościami funkcji. Przykładowo, Nazwa dostępu MyAccess może zostać zmieniona tak, aby wskazywać na aplikację "EXCEL", oraz temat "Sheet1" przy pomocy polecenia: Przykład IOSetAccessName("MyAccess1", "KS1", "EXCEL", "Sheet1"); lub poprzez Number = 1; AccNameString = "MyAccess" + Text(Number, "#"); IOSetAccessName(AccNameString, "KS1", "EXCEL", "Sheet1"); W przypadku gdy jako TopicName wprowadzony zostanie pusty łańcuch znaków, Nazwa dostępu bieżącej aplikacji nie ulegnie zmianie, a Nazwa tematu zostanie zaktualizowana. Zamieszczona poniżej instrukcja zmienia wartość AppName dla parametru AccessName na "excel", bez wprowadzania zmian w bieżącej wartości TopicName. IOSetAccessName("MyAccess2", "KS1", "excel", ""); Podobnie, jeżeli dla parametru AppName wprowadzony zostanie pusty łańcuch znaków , bieżąca wartość TopicName nie ulegnie zmianie, a parametr AppName zostanie zaktualizowany. Zamieszczona poniżej instrukcja zmienia wartość TopicName zmiennej MyAccess3 na "Sheet2", bez zmiany wartości AppName. IOSetAccessName("MyAccess3","KS1", "", "Sheet2"); Uwaga Wykonywaniu funkcji IOSetAccessName() towarzyszy krótka zwłoka czasowa, wymagana na przerwanie bieżącej konwersacji oraz zainicjowanie nowej. W czasie tej zwłoki, wszystkie próby odczytu lub zapisu wartości do nowego tematu kończą się niepowodzeniem. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe IOSetItem() 3-39 różne Zmienia nazwę dostępu i/lub nazwę pozycji w polu .Reference zmiennej typu I/O. Składnia Przykłady IOSetItem("Tagname”,”AccessName”,”Item”); Parametry Opis Tagname AccessName Item Dowolna zmienna typu I/O ujęta w cudzysłowy. Nowa Nazwa dostępu Nowa Nazwa pozycji IOSetItem(TagName, AccessName, Item) Zmienna, Nazwa dostępu, i Nazwa tematu mogą być łańcuchami znaków, wartościami innych zmiennych programu InTouch, lub wartościami funkcji. Przykładowo, instrukcja zamieszczona poniżej zmienia pole .Reference zmiennej "MyTag1" na Nazwę dostępu "excel" i pozycję "R1C1": IOSetItem("MyTag1", "excel", "R1C1"); lub poprzez Numer = 1; TagNameString = "MyTag" + Text(Number, "#"); IOSetItem(TagNameString, "excel", "R1C1"); Jeżeli jako wartość parametrów AccessName i Item podany będzie pusty łańcuch znaków (""), zmienna zostanie dezaktywowana. Przykładowo, w celu dezaktywacji zmiennej "MyTag2" należy wpisać: IOSetItem("MyTag2", "", ""); Podobnie, jeżeli jako wartość parametry Item wprowadzony zostanie pusty łańcuch znaków, bieżąca wartość pozycji nie ulegnie zmianie, a parametr AccessName zostanie zaktualizowana. Zmiana nazwy dostępu dla zmiennej "MyTag3" na "excel2", tak jak to przedstawiono poniżej, nie spowoduje zmiany bieżącej wartości pozycji" IOSetItem("MyTag3", "excel2", ""); Podobnie, jeżeli jako parametr AccessName wprowadzony zostanie pusty łańcuch znaków , bieżąca wartość pozycji nie ulegnie zmianie, a parametr AccessName zostanie zaktualizowany. Zmiana Nazwy pozycji dla zmiennej "MyTag3" na "R1C2", tak jak to przedstawiono poniżej, nie spowoduje zmiany bieżącej wartości Nazwy dostępu: IOSetItem("MyTag4", "", "R1C2"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-40 Rozdział 3 IsAnyAsyncFunctionBusy() system Zadaniem tej funkcji jest sprawdzenie, czy w danej chwili uruchomiona jest jakakolwiek funkcja asynchroniczna. Funkcja ta może zostać użyta do wstrzymywania uruchamiania kolejnych funkcji asynchronicznych, aż do momentu zakończenia wykonywania już uruchomionych. Pozwala to na synchronizację pracy tych funkcji. Składnia DiscreteTag=IsAnyAsyncFunctionBusy(timeout); Parametry Opis DiscreteTag Zmienna typu dyskretnego której wartość ustalana jest w następujący sposób: Jeżeli przekroczony został czas oczekiwania na zakończenie wykonywania wszystkich funkcji QuickFunction, wartość zmiennej ZmiennaDyskretna ustawiana jest na 1 Jeżeli nie jest wykonywana żadna funkcja asynchroniczna, wartość tej zmiennej ustawiana jest natychmiast na 0, lub też funkcja QuickFunction będzie czekać przez okres czasu, podany w parametrze timeout. Jeżeli po upływie okresu czasu określonego parametrem timeout, żadna funkcja QuickFunction nie będzie w trakcie wykonywania, wartość tej zmiennej zostanie ustawiona na 0. Wartość całkowita podająca w sekundach okres czasu, w ciągu którego będzie sprawdzane, czy jest uruchomiona funkcja asynchroniczna. timeout Przykład Załóżmy, że zachodzi potrzeba połączenia szeregu baz danych SQL za pomocą asynchronicznych funkcji QuickFunction, oraz , że operacja ta będzie wymagać 2 minut. Najpierw należy wywołać funkcję asynchroniczną QuickFunction w celu połączenia się z bazą danych SQL. Następnie, należy wywołać funkcję IsAnyAsyncFunctionBusy(120) w celu zapewnienia odpowiedniej ilości czasu na realizację funkcji QuickFunction. Jeżeli jednakże po upływie dwóch minut połączenie nie zostanie nawiązane, a asynchroniczna funkcja QuickFunction nadal podejmuje próby realizacji połączenia, funkcja IsAnyAsyncFunctionBusy() zwracać będzie wartość 1 (true). Można w tym momencie wyświetlić komunikat informujący operatora, że próba połączenia SQL nie powiodła się. Skorzystać z następującego skryptu On Show związanego z oknem. IF IsAnyAsyncFunctionBusy(120) == 1 THEN SHOW "SQL Connection Error Dialog"; ENDIF; Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe Log() 3-41 funkcje matematyczne Funkcja ta oblicza wartość logarytmu naturalnego z podanej liczby. Składnia RealResult=Log(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Logarytm naturalny z liczby Number jest obliczany i przypisywany do zmiennej RealResult. Wartość logarytmu naturalnego z liczby 0 jest nie określona. Przykład Log(100) zwraca 4.605... Log(1) zwraca 0 LogMessage różne Zapisuje komunikat zdefiniowany przez użytkownika w programie Wonderware Logger. Składnia LogMessage("Message_Tag”); Parametry Opis Message_Tag Łańcuch znaków, który ma zostać zapisany w oknie programu WWLogger. Łańcuch znaków lub zmienna tekstowa. Uwagi Funkcja ta jest bardzo użytecznym narzędziem do szukania przyczyn niepoprawnego wykonywania skryptów. Umieszczenie funkcji LogMessage() w odpowiednim miejscu w skrypcie, pozwala na wyznaczenie kolejności wykonywania, ocenę pracy skryptów, oraz identyfikację wartości zmiennych, przed ich zmianą, a po przekazaniu ich do skryptu. Każdy komunikat wysyłany do programu Wonderware Logger ma określoną dokładnie godzinę i datę. Przykład LogMessage("Report Script is Running"); Powyższa instrukcja powoduje zapisanie następującego komunikatu w oknie programu WWLogger: 94/01/14 15:21:14 WWSCRIPT Message: Skrypt z raportem uruchomiony LogMessage("The Value of MyTag is " + Text(MyTag, "#”)); MyTag+MyTag + 10; LogMessage("The Value of MyTag is " + Text(MyTag, "#”)); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-42 Rozdział 3 LogN() funkcje matematyczne Zwraca wartość logarytmu o podstawie n z liczby x. Składnia Result=LogN(Number,Base); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Podstawa logarytmu (liczba rzeczywista). Liczba lub zmienna całkowita. Base Uwagi Wartość podstawy nie może być równa 1. Przykład LogN(8, 3) zwraca 1.89279... LogN(NumberTag, BaseTag) zwraca 0.564...if NumberTag contains 3 and BaseTag contains 7. Pi() funkcje matematyczne Zwraca wartość liczby Pi. Składnia RealResult=Pi(); Przykład Pi() zwraca 3.1415926... Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe PlaySound() 3-43 różne Odtwarza zadany plik dźwiękowy w formacie .wav, lub też element podany w sekcji [sounds] pliku WIN.INI za pomocą urządzenia do odtwarzania dźwięku w Windows (o ile jest zainstalowane). Składnia PlaySound("SoundName”,Flags); Parametry Opis SoundName Łańcuch znaków lub zmienna tekstowa, zawierająca nazwę pliku dźwiękowego do odtworzenia. Parametr Flags może mieć jedną z następujących wartości: Typ Opis 0 Asynchroniczne odtworzenie dźwięku (opcja domyślna). 1 Synchroniczne odtworzenie dźwięku. 2 Nie zostanie odtworzony dźwięk domyślny. Jako SoundName można podać nazwę dowolnego pliku typu .wav. Może to być również dowolna nazwa z sekcji [Sounds] pliku WIN.INI. 3 Wartość ta nie jest używana! 4 Wskaźnik do pliku w pamięci. Wartość ta nie jest wykorzystywana przy pisaniu skryptów. 5-7 Wartość ta nie jest używana! 8 Powtarzanie dźwięku do momentu ponownego wywołania funkcji PlaySound(). Flags Przykład PlaySound ("c:\horns.wav",1); Uwaga: Dźwięk musi fizycznie zmieścić się w dostępnym obszarze pamięci i musi istnieć możliwość jego odtworzenia na zainstalowanym urządzeniu do odtwarzania. W celu znalezienia pliku z dźwiękami, kartoteki przeszukiwane są w następującej kolejności: kartoteka bieżąca, kartoteka systemu Windows, podkartoteka System systemu Windows, oraz kartoteki podane w instrukcji PATH. Jeśli podany plik .wav nie może zostać znaleziony, kliknąć menu Start, a następnie kolejno Ustawienia, Panel sterowania i Dźwięki w celu skonfigurowania domyślnych dźwięków. Jeśli jednak pliku tego nie można znaleźć, żaden dźwięk nie zostanie odtworzony. PrintHT() dane historyczne Funkcja ta może być wykorzystana do drukowania wykresu trendu historycznego powiązanego z określoną zmienną typu Hist Trend. W czasie korzystania z tej funkcji, trend historyczny musi być widoczny na ekranie. Składnia PrintHT("Trend_Tag"); Parametry Opis Trend_Tag Nazwa zmiennej typu HistTrend reprezentującej trend historyczny. Łańcuch znaków lub zmienna tekstowa. Uwagi Brak Przykład PrintHT("HistTrend1"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-44 Rozdział 3 PrintWindow() różne Drukuje określone okno. Składnia PrintWindow("Window",Left,Top,Width,Height,Options); Parametry Opis Okno Nazwa okna przeznaczonego do wydruku. Łańcuch znaków lub zmienna tekstowa. Liczba zmiennoprzecinkowa oznaczająca wielkość lewego marginesu w calach. Liczba lub zmienna typu rzeczywistego. Liczba zmiennoprzecinkowa oznaczająca wielkość górnego marginesu w calach. Liczba lub zmienna typu rzeczywistego. Liczba zmiennoprzecinkowa oznaczająca szerokość wydruku w calach. Może być ona równa 0 (co oznacza największą możliwą wielkość wydruku) lub może podawać konkretną szerokość. Liczba lub zmienna typu rzeczywistego. Liczba zmiennoprzecinkowa oznaczająca wysokość wydruku w calach. Może być ona równa 0 (co oznacza największą możliwą wielkość wydruku) lub może podawać konkretną wysokość. Liczba lub zmienna typu rzeczywistego. Wartość dyskretna, 0 lub 1, wykorzystywana jeżeli wartość Width lub Height jest równa 0. Jeśli wartość parametru Options wynosi 1, okno jest drukowane w powiększeniu stanowiącym całkowitą wielokrotność rozmiarów okna (przy zachowaniu stosunku długości boków). Wartość 0, 1, lub zmienna typu dyskretnego. Jeśli wartość parametru Options wynosi 0, okno jest drukowane w największym możliwym powiększeniu, tak, aby zmieściło się na stronie. Left Top Width Height Options Uwaga Jeśli okno zawiera mapę bitową, parametr Options należy ustawić na 1, aby zapobiec "rozciągnięciu" mapy bitowej. Uwagi Można przytoczyć wiele przykładów użycia tej funkcji. W przypadku konieczności wydruku nie tylko wykresu trendu historycznego, ale całego ekranu w czasie pracy aplikacji, zamiast funkcji PrintHT() i wydruku inicjowanego przez operatora z poziomu okna dialogu trendu historycznego zaleca się używanie funkcji PrintWindow(). W czasie wykonywania tej funkcji, okno zapisywane jest poza obszarem pamięci ekranu. Kolejny etap to odczekanie 10 sekund w celu umożliwienia uaktualnienia wartości wszystkich zmiennych DDE. Następnie okno jest wysyłane do drukarki. W celu wydrukowania okna, nie musi ono być otwarte czy widoczne.. Okres oczekiwania można zmienić poprzez dodanie następującej linii w pliku INTOUCH.INI. PrintWindowWait=10000 gdzie 10000 jest czasem w milisekundach. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe 3-45 Czcionki są drukowane jako czcionki, obiekty jako mapy bitowe. Okna z białym tłem, zawierające tylko teksty są drukowane bardzo szybko. Okna z kolorowym tłem, zawierające wiele obiektów są drukowane znacznie wolniej. Uwaga Aby zapewnić prawidłowy wydruk tekstu w oknach, zaleca się stosowanie czcionek "TrueType" we wszystkich polach tekstowych w oknach przeznaczonych do drukowania. Przy drukowaniu przycisków może okazać się, że tekst na przyciskach zostanie obcięty, ponieważ czcionka zastosowana w tekście na przycisku jest czcionką systemową, a nie czcionką "TrueType". Czcionki systemowe na drukarce wyglądają nieco inaczej niż na ekranie. Jeśli sytuacja taka będzie miała miejsce, należy spróbować zwiększyć rozmiar przycisku. Jeśli drukarka przeznaczona jest do drukowania alarmów, aby móc wykorzystywać funkcję PrintWindow() konieczna jest jeszcze jedna drukarka. Przykłady Zamieszczone poniżej przykładowe skrypty warunkowe ON TRUE drukują trzy stronicowy raport, codziennie o godz. 8:30. Condition: $Hour == 8 AND $Minute == 30 Script Body: PrintWindow("1st Shift Summary",1,1,0,0,0); PrintWindow("2nd Shift Summary",1,1,0,0,0); PrintWindow("3rd Shift Summary",1,1,0,0,0); Funkcja PrintWindow() zwraca wartość 1, jeśli okno o podanej nazwie istnieje i może zostać wydrukowane. W przeciwnym wypadku zwracana jest wartość 0. W ten sposób można monitorować wykonanie funkcji. Status=PrintWindow("Shift Summary",1,1,0,0,0); Status jest zmienną dyskretną i może przyjmować wartości 0 lub 1. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-46 Rozdział 3 RecipeDelete() receptury Funkcja ta powoduje usunięcie receptury z zadanego pliku. Składnia RecipeDelete("Filename","RecipeName"); Parametry Opis FileName Nazwa pliku z recepturami. Łańcuch znaków lub zmienna tekstowa. Nazwa receptury w pliku o podanej nazwie, którego dotyczą operacje wykonywane przez funkcję. Parametr ten musi zostać podany przez użytkownika w przypadku funkcji RecipeLoad(), RecipeSave() oraz RecipeDelete(). Funkcja RecipeSelectRecipe() zwraca natomiast wartość tego parametru. Łańcuch znaków lub zmienna tekstowa. RecipeName Przykład Instrukcja zamieszczona poniżej powoduje usunięcie receptury "Recipe1" z pliku RECFILE.CSV. RecipeDelete("c:\recipe\recfile.csv", "Recipe1"); RecipeGetMessage() receptury Funkcja ta zapisuje kod błędu zwrócony przez funkcję jako zmienną analogową, a związany z kodem komunikat jako zmienną tekstową. Składnia RecipeGetMessage(Analog_Tag,Message_Tag,Number); Parametry Opis Analog_Tag Message_Tag Zmienna analogowa zawierająca kod błędu. Zmienna tekstowa zawierająca komunikat związany z kodem błędu. Parametr ten określa maksymalną długość łańcucha znaków przypisywanego do zmiennej Message_Tag.. Zmienne tekstowe w programie InTouch mogą przyjmować maksymalną długość 131 znaków. Jeśli maksymalna długość zmiennych nie jest ograniczona z innych względów, należy przyjmować wartość tego parametru równą 131. Parametr Number może być wartością stałą lub zmienną programu InTouch. Number Przykład Zastosowanie funkcji RecipeGetMessage()w skrypcie związanym ze zmianą danych umożliwia zapisanie kodu błędu do zmiennej analogowej, a związanego z kodem komunikat może być przypisany do zmiennej tekstowej: Data Change Script Tagname[.field]:ErrorCode Script body:RecipeGetMessage(ErrorCode, ErrorMessage,131); Skrypt ten będzie wykonywany po każdorazowej zmianie wartości zmiennej analogowej ErrorCode. Spowoduje to odczytanie przez funkcję RecipeGetMessage() aktualnej wartości zmiennej ErrorCode, oraz zapisanie komunikatu towarzyszącego tej wartości do zmiennej ErrorMessage. ErrorCode = RecipeLoad ("c:\App\recipe.csv","Unit1","cookies"); RecipeGetMessage(ErrorCode, ErrorMessageTag, 131); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe RecipeLoad() 3-47 receptury Funkcja ta powoduje załadowanie receptury (Recipe) dla podanego zestawu zmiennych (Unit). Składnia RecipeLoad("Filename","UnitName","RecipeName"); Parametry Opis FileName Nazwa pliku z recepturami. Parametrem FileName może być stała tekstowa, lub zmienna tekstowa zawierająca nazwę pliku z szablonami receptur. Nazwa zestawu zmiennych w pliku receptur, którego dotyczą operacje wykonywane przez funkcję. Funkcja RecipeLoad() wymaga od użytkownika podania parametru UnitName. Funkcja RecipeSelectUnit() zwraca wartość tego parametru. Parametrem UnitName może być stała tekstowa lub zmienna tekstowa zawierająca nazwę modułu. Nazwa receptury w podanym pliku. Funkcje RecipeLoad(), RecipeSave() i RecipeDelete() wymagają od użytkownika podania parametru RecipeName. Funkcja RecipeSelectRecipe() zwraca natomiast wartość tego parametru. Parametr RecipeName może być podany jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). UnitName RecipeName Przykład Instrukcja zamieszczona poniżej powoduje załadowanie zestawu wartości zdefiniowanych jako receptura "Recipe1" w pliku RECFILE.CSV do zestawu zmiennych "Unit1". RecipeLoad("c:\recipe\recfile.csv", "Unit1", "Recipe1"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-48 Rozdział 3 RecipeSave() receptury Funkcja ta powoduje zapisanie nowo utworzonej lub zmodyfikowanej receptury (Recipe) w pliku receptur o podanej nazwie. Składnia RecipeSave("Filename","UnitName","RecipeName"); Parametry Opis FileName Nazwa pliku z recepturami. Parametrem FileName może być stałą tekstową, lub zmienną tekstową zawierająca nazwę pliku z szablonami receptur. Nazwa zestawu zmiennych w pliku receptur, którego dotyczą operacje wykonywane przez funkcję. Funkcja RecipeLoad() wymaga od użytkownika podania parametru UnitName. Funkcja RecipeSelectUnit() zwraca wartość do tego parametru. Parametrem UnitName może być stała tekstowa lub zmienna tekstowa zawierająca nazwę modułu. Nazwa receptury w podanym pliku FileName. Funkcje RecipeLoad(), RecipeSave() i RecipeDelete() wymagają od użytkownika podania parametru RecipeName. Funkcja RecipeSelectRecipe() zwraca natomiast wartość tego parametru. Parametr RecipeName może być zadany jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). UnitName RecipeName Przykład Instrukcja zamieszczona poniżej powoduje zapisanie zmian dokonanych w recepturze o nazwie "Recipe3" w pliku o nazwie RECFILE.CSV. Jeżeli w pliku recfile.csv nie ma receptury Recipe3, zostanie ona utworzona. Wartości zostaną przypisane zmiennym zdefiniowanym dla zestawu Unit2: RecipeSave("c:\recipe\recfile.csv", "Unit2", "Recipe3"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe RecipeSelectNextRecipe() 3-49 receptury Funkcja ta powoduje wybranie z pliku receptur receptury o kolejnej zdefiniowanej nazwie. Składnia RecipeSelectNextRecipe("Filename", RecipeName, Number); Parametry Opis FileName Nazwa pliku z recepturami. Nazwa ta może być zadana jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Nazwa receptury (Recipe) w podanym pliku FileName. Parametr ten musi zostać podany przez użytkownika w przypadku funkcji RecipeLoad(), RecipeSave() oraz RecipeDelete(). Funkcja RecipeSelectRecipe() zwraca natomiast wartość tego parametru. Parametr RecipeName może być zadany jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Jeśli zadaniem funkcji jest wypełnienie zmiennej tekstowej znakami, pole to służy do zadawania maksymalnej długości zapisywanego łańcucha znaków. Zmienne tekstowe w programie InTouch mogą przyjmować maksymalną długość 131 znaków. Jeśli maksymalna długość zmiennych nie jest ograniczona z innych względów, należy przyjmować wartość tego parametru równą 131. Parametr Number może być wartością stałą lub zmienną programu InTouch. RecipeName Number Przykład Instrukcja zamieszczona poniżej powoduje odczytanie aktualnej wartości zmiennej tekstowej RecipeName i wybranie z pliku następnej receptury. Jeśli zmienna RecipeName nie ma żadnej przypisanej wartości lub nie może zostać znaleziona, funkcja zwraca nazwę pierwszej receptury w pliku. Jeśli zmienna RecipeName zawiera aktualnie nazwę ostatniej receptury w pliku, jej wartość pozostaje bez zmian. (Receptury są zapisywane w pliku w kolejności ich tworzenia.) RecipeSelectNextRecipe("c:\recipe\recfile.csv", RecipeName, 131); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-50 Rozdział 3 RecipeSelectPreviousRecipe() receptury Funkcja ta powoduje wybranie z pliku receptur poprzedniej receptury. Składnia RecipeSelectPreviousRecipe("Filename",RecipeName,Number); Parametry Opis FileName Nazwa pliku z recepturami. Nazwa ta może być zadana jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Nazwa receptury w podanym pliku FileName. Parametr ten musi zostać podany przez użytkownika w przypadku funkcji RecipeLoad(), RecipeSave() oraz RecipeDelete(). Funkcja RecipeSelectRecipe() zwraca natomiast wartość tego parametru. Parametr RecipeName może być zadany jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Jeśli zadaniem funkcji jest wypełnienie zmiennej tekstowej znakami, pole to służy do zadawania maksymalnej długości zapisywanego łańcucha znaków. Zmienne tekstowe w programie InTouch mogą przyjmować maksymalną długość 131 znaków. Jeśli maksymalna długość zmiennych nie jest ograniczona z innych względów, należy przyjmować wartość tego parametru równą 131. Parametr Number może być wartością stałą lub zmienną programu InTouch. RecipeName Number Przykład Instrukcja zamieszczona poniżej powoduje odczytanie aktualnej wartości zmiennej tekstowej RecipeName i wybranie z pliku poprzedniej receptury. Wrócona wartość zostanie zapamiętana w RecipeName, zastępując poprzednią wartość. Jeśli zmienna RecipeName zawiera aktualnie nazwę pierwszej receptury w pliku, jej wartość pozostaje bez zmian. Jeśli zmienna RecipeName zawiera aktualnie nazwę ostatniej receptury w pliku, jej wartość pozostaje bez zmian. (Receptury są zapisywane w pliku w kolejności ich tworzenia.) RecipeSelectPreviousRecipe("c:\recipe\recfile.csv", RecipeName, 131); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe RecipeSelectRecipe() 3-51 receptury Funkcja ta powoduje wybranie z pliku receptur receptury o podanej nazwie. Składnia RecipeSelectRecipe("Filename",RecipeName,Number); Parametry Opis FileName Nazwa pliku z recepturami. Nazwa ta może być zadana jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Nazwa receptury w podanym pliku FileName. Parametr ten musi zostać podany przez użytkownika w przypadku funkcji RecipeLoad(), RecipeSave() oraz RecipeDelete(). Funkcja RecipeSelectRecipe() natomiast zwraca wartość tego parametru. Parametr RecipeName może być zadany jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Jeśli zadaniem funkcji jest wypełnienie zmiennej tekstowej znakami, pole to służy do zadawania maksymalnej długości zapisywanego łańcucha znaków. Zmienne tekstowe w programie InTouch mogą przyjmować maksymalną długość 131 znaków. Jeśli maksymalna długość zmiennych nie jest ograniczona z innych względów, należy przyjmować wartość tego parametru równą 131. Parametr Number może być wartością stałą lub zmienną programu InTouch. RecipeName Number Przykład Zamieszczona poniżej instrukcja powoduje otwarcie okna dialogowego Select a Recipe: RecipeSelectRecipe("c:\recipe\recfile.csv", RecipeName, 131); Po wybraniu z okna dialogowego żądanej receptury, jej nazwa jest zwracana za pomocą zmiennej RecipeName. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-52 Rozdział 3 RecipeSelectUnit() receptury Funkcja ta powoduje wybranie z pliku receptur zestawu zmiennych, do którego zostanie załadowana bieżąca receptura. Składnia RecipeSelectUnit("Filename", UnitName,Number); Parametry Opis FileName Nazwa pliku z recepturami. Nazwa ta może być zadana jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Nazwa zestawu zmiennych w pliku receptur, którego dotyczą operacje wykonywane przez funkcję. Funkcja RecipeLoad() wymaga od użytkownika podania parametru UnitName. Funkcja RecipeSelectUnit() zwraca wartość do tego parametru. Parametr RecipeName może być zadany jako łańcuch znaków lub jako zmienna programu InTouch (pamięciowa lub DDE). Jeśli zadaniem funkcji jest wypełnienie zmiennej tekstowej znakami, pole to służy do zadawania maksymalnej długości zapisywanego łańcucha znaków. Zmienne tekstowe w programie InTouch mogą przyjmować maksymalną długość 131 znaków. Jeśli maksymalna długość zmiennych nie jest ograniczona z innych względów, należy przyjmować wartość tego parametru równą 131. Parametr Number może być wartością stałą lub zmienną programu InTouch. UnitName Number Przykład Zamieszczona poniżej instrukcja powoduje otwarcie okna dialogowego Select a Unit: RecipeSelectUnit("c:\recipe\recfile.csv", UnitName, 131); Po wybraniu z okna dialogowego zestawu, jego nazwa jest zwracana za pomocą zmiennej UnitName. Uwaga Zarówno funkcja RecipeSelectRecipe(), jak i funkcja RecipeSelectUnit() są używane w połączeniu z funkcją RecipeLoad(). " Więcej informacji na temat stosowania kombinacji funkcji można znaleźć w rozdziale "Combining Recipe Functions" podręcznika Recipe Manager User's Guide. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe RestartWindowViewer 3-53 system Pozwala użytkownikowi na sterowane zamknięcie i ponowne uruchomienie programu WindowViewer. Składnia RestartWindowViewer; Uwagi Funkcja ta powoduje automatyczne zamknięcie, a potem natychmiastowe otwarcie programu WindowViewer. Pozwala to na uaktualnianie aplikacji w przypadku nie korzystania z funkcji automatycznego uaktualniania w architekturze NAD (Network Application Development). Funkcja ta może zostać wykorzystana wraz ze zmienną $ApplicationChanged do sprawdzenia czy aplikacja została uaktualniona, i czy ma być zamknięta przez użytkownika. W przypadku korzystania z opcji NAD, Notify Operator, operator może spowodować opóźnienie uaktualniania, jak również można tę funkcję stosować w skrypcie związanym z przyciskiem. Pozwala to operatorowi na automatyczne zamknięcie i ponowne uruchomienie programu WindowViewer w dogodnym momencie. Patrz również $ApplicationChanged Round() funkcje matematyczne Zaokrągla liczbę rzeczywistą z podaną dokładnością. Składnia RealResult=Round(Number,Precision); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Dokładność, z jaką podana liczba ma zostać zaokrąglona. Liczba, zmienna rzeczywista lub całkowita. Precision Uwagi Parametr Precision określa do jakiej dokładności przybliżona zostanie wartość Number. Przykłady Round(4.3, 1) zwraca 4 Round(4.3, .01) zwraca 4.30 Round(4.5, 1) zwraca 5 Round(-4.5, 1) zwraca -5 Round(106, 5) zwraca 105 Round(43.7, .5) zwraca 43.5 Patrz również Trunc() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-54 Rozdział 3 SendKeys różne Wysyła sekwencję klawiszy do aplikacji. Funkcja SendKeys może symulować naciśnięcie większości klawiszy. Mechanizm ten pozwala na wprowadzanie danych do aplikacji, lub też wywoływanie jej poleceń. Za pomocą instrukcji SendKeys można wysłać większość klawiszy. Każdy klawisz jest reprezentowany przez jeden lub więcej znaków, np. litera A przez A, klawisz Enter - przez ENTER. Składnia Uwagi SendKeys KeySequence; Parametry Opis KeySequence Dowolna sekwencja klawiszy lub zmienna tekstowa InToucha. Aby zasymulować naciśnięcie kilku klawiszy, należy uszeregować kody wprowadzanych znaków. Przykładowo, w celu wysłania symbolu dolara ($) i znaku (b), należy wprowadzić $b. Poniżej zamieszczono listę kodów różnych klawiszy klawiatury komputera: Klawisze Kod Klawisze BACKSPACE BREAK CAPSLOCK DELETE DOWN END ENTER ESCAPE F1 {BACKSPACE} lub {BS}HOME {BREAK} INSERT {CAPSLOCK} LEFT {DELETE} lub {DEL} NUMLOCK {DOWN} PAGE DOWN {END} PAGE UP {ENTER} lub ~ (tylda) PRTSC {ESCAPE} lub {ESC} RIGHT {F1}* TAB UP Kod {HOME} {INSERT} {LEFT} {NUMLOCK} {PGDN} {PGUP} {PRTSC} {RIGHT} {TAB} {UP} * W ten sposób budowane są nazwy dla pozostałych klawiszy funkcyjnych. Klawisze specjalne (SHIFT, CTRL oraz ALT) posiadają własne kody: Klawisze Kod SHIFT CTRL ALT + ^ % Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe Przykłady 3-55 Jeśli dwa klawisze mają zostać wciśnięto jednocześnie, wymagany jest nawias przy kodzie drugiego klawisza. Instrukcja zamieszczona poniżej zastępuje przytrzymanie naciśniętego klawisza CTRL, naciśnięcie klawisza ALT, a po nim wprowadzenie litery p: SendKeys "^(%(p))"; Powyższe polecenie może poprzedzać instrukcja zawierająca funkcję ActivateApp w celu skierowania kodów klawiszy do odpowiedniej aplikacji. Instrukcja zamieszczona poniżej uaktywnia arkusz kalkulacyjny Excel i wysyła do niego kombinację klawiszy CTRL+P (która może uruchamiać zdefiniowaną wcześniej makroinstrukcję drukowania, ze zdefiniowanym skrótem klawiszowym CTRL+P): ActivateApp "Microsoft Excel"; SendKeys "^(p)"; W celu wyświetlenia okna dialogowego do wprowadzania hasła w programie WindowViewer można skorzystać z następującej instrukcji: SendKeys "%(SYL)"; Z przyciskiem o nazwie HELP można związać następujący skrypt: SendKeys "{F1}"; SetDDEAppTopic() różne Począwszy od wersji 7.0 programu InTouch, funkcja ta zastąpiona została przez IOSetAccessName. Porównać IOSetAccessName. ! Więcej informacji na temat funkcji IOSetAccessName podano w odpowiednim punkcie niniejszego podręcznika. SetDDEItem() różne Począwszy od wersji 7.0 programu InTouch, funkcja ta zastąpiona została przez IOSetItem. Porównać IOSetItem. ! Więcej informacji na temat funkcji IOSetItem podano w odpowiednim punkcie niniejszego podręcznika. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-56 Rozdział 3 SetPropertyD() GOT Funkcja ta nadaje właściwości wartość dyskretną w czasie wykonywania aplikacji. Składnia [ErrorNumber=]SetPropertyD("ControlName.Property", DiscreteTag); Parametry Opis ControlName Nazwa obiektu sterującego okien, np. ChkBox_1, lub nazwa obiektu do wyświetlania alarmów, np. AlmObj_1. Właściwość obiektu sterującego okna lub obiektu do wyświetlania alarmów. .Property ! Więcej informacji na temat pól zmiennych można znaleźć w rozdziale 2 "Pola". DiscreteTag Wartość dyskretna (0 lub 1) lub zmienna dyskretna programu InTouch, której wartość zostanie zapisana jako wartość odpowiedniego pola wskutek wykonania funkcji. Typowe zastosowanie: 0 = Obiekt sterujący jest nieaktywny 1 = Obiekt sterujący jest aktywny ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". SetPropertyI() GOT Funkcja ta nadaje właściwości wartość całkowitą w czasie wykonywania aplikacji. Składnia [ErrorNumber=]SetPropertyI("ControlName.Property", Integer); Parametry Opis ControlName Nazwa obiektu sterującego okien, np. ChkBox_1, lub nazwa obiektu do wyświetlania alarmów, np. AlmObj_1. Właściwość obiektu sterującego okna, lub obiektu do wyświetlania alarmów. .Property ! Więcej informacji na temat pól zmiennych można znaleźć w rozdziale 2 "Pola". Integer Liczba lub zmienna całkowita. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SetPropertyM() 3-57 GOT Funkcja ta nadaje właściwości wartość tekstową w czasie wykonywania aplikacji. Składnia [ErrorNumber=]SetPropertyM("ControlName.Property", "MessageTag"); Parametry Opis ControlName Nazwa obiektu sterującego okien, np. ChkBox_1, lub nazwa obiektu do wyświetlania alarmów, np. AlmObj_1. Właściwość obiektu sterującego okna, lub obiektu do wyświetlania alarmów. .Property ! Więcej informacji na temat pól zmiennych można znaleźć w rozdziale 2 "Pola". MessageTag Łańcuch znaków, który zostanie przypisany do właściwości obiektu o nazwie ControlName. Łańcuch znaków lub zmienna tekstowa. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Sgn() funkcje matematyczne Określa znak podanej wartości (+,-,0). Składnia IntegerResult=Sgn(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Jeżeli parametr będzie liczbą dodatnią, zwrócona zostanie wartość 1. Jeśli parametr jest ujemny, zwrócona zostanie wartość -1, a w przypadku zera funkcja zwraca 0. Przykłady Sgn(425) zwraca 1 Sgn(0) zwraca 0 Sgn(-37.3) zwraca -1 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-58 Rozdział 3 Show różne Wyświetlenie określonego okna. (Nazwa okna musi być ujęta w cudzysłów.) Składnia Show "Window"; Parametry Opis Window Nazwa okna, które ma zostać wyświetlone. Łańcuch znaków lub zmienna tekstowa. Uwagi Window musi być nazwą istniejącego okna lub okna, które zostanie utworzone. W czasie pracy aplikacji, jeśli okno o podanej nazwie nie istnieje, instrukcja jest ignorowana. Jeśli nazwa okna zmieni się, musi ona zostać zmieniona również w skrypcie. Przykład Show "Alarm Summary Window"; Uwaga Jeśli celem skryptu jest tylko ukrywanie lub wyświetlanie okna, zaleca się wykorzystanie połączenia animacyjnego Show Window lub Hide Window. W przypadku używania tych połączeń, jeśli nazwa okna ulegnie zmianie, InTouch automatycznie dokona zmian. ShowAt() różne Określa w pikselach położenie okna w kierunku poziomym i pionowym w momencie jego wyświetlania. Składnia ShowAt("Window",Horiz,Vert); Parametry Opis Window Horiz Nazwa okna. Łańcuch znaków lub zmienna tekstowa. Współrzędna pozioma. Parametr ten może być wartością stałą lub zmienną programu InTouch. Współrzędna pionowa. Parametr ten może być wartością stałą lub zmienną programu InTouch. Vert Uwagi Po otwarciu okna, jest ono ustawiane na środku względem współrzędnych położenia poziomego i pionowego. Okno nie zostanie wycentrowane, jeśli jedna z jego krawędzi wykracza poza obszar ekranu. W takiej sytuacji zostanie ono wyrównane do krawędzi ekranu. Przykłady W zamieszczonej poniżej instrukcji, 100 oznacza położenie piksela w kierunku poziomym, a 200 w kierunku pionowym: ShowAt("Window Name",100,200); Aby umożliwić dynamiczną zmianę pozycji okna w czasie wykonywania aplikacji, ze zmiennymi pamięciowymi zastosowanymi jako parametry funkcji, np. TagHoriz i TagVert można powiązać obiekty służące do wprowadzania danych (połączenia animacyjne). W takim przypadku omawiana funkcja przyjmie postać: ShowAt("Boiler Room 7 Details",TagHoriz,TagVert); Zamieszczona poniżej instrukcja umożliwia określenie położenia w pikselach, zmienne wewnętrzne $ObjHor i $ObjVer mogą zostać przypisane do analogowego połączenia wyświetlającego, dzięki czemu na ekranie wyświetlane będą współrzędne aktualnie zaznaczonego obiektu. Zastosowanie zmiennych $ObjHor i $ObjVer w skrypcie lub przycisku pozwala na wyświetlenie okna w pozycji środkowej względem obiektu lub przycisku. ShowAt("Window Name",$ObjHor,$ObjVer); Patrz również $ObjHor, $ObjVer, ShowTopLeftAt() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe ShowHome 3-59 różne Wyświetlenie okna (-okien) "startowych". Okna startowe to okna automatycznie otwierane po uruchomieniu programu WindowViewer. (Okna startowe ustawiane są za pomocą zakładki WindowViewer Properties - Home Windows. Składnia ShowHome; ShowTopLeftAt() różne Określa w pikselach współrzędną poziomą i pionową lewego, górnego rogu okna, w momencie jego wyświetlania. Składnia ShowTopLeftAt("Window",Horiz,Vert); Parametry Opis Window Horiz Nazwa okna. Łańcuch znaków lub zmienna tekstowa. Współrzędna pozioma Parametr ten może być wartością stałą lub zmienną programu InTouch. Współrzędna pionowa Parametr ten może być wartością stałą lub zmienną programu InTouch. Vert Uwagi Po otwarciu okna, jego lewy, górny róg umieszczany jest w miejscu wskazywanym przez współrzędną poziomą i pionową. (Współrzędne lewego, górnego narożnika ekranu wynoszą 0,0.) Działanie tej funkcji jest takie same jak funkcji ShowAt(), za wyjątkiem faktu, że steruje ona położeniem lewego, górnego okna. Patrz również ShowAT() Sin() funkcje matematyczne Zwraca sinus kąta podanego w stopniach. Składnia Result=Sin(AngleNumber); Parametry Opis AngleNumber Wartość kąta w stopniach. Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Wartość tej funkcji jest przypisywana do zmiennej Result. Przykład Sin(90) zwraca 1 Sin(0) zwraca 0 wave = 100 * sin (6 * $second); Patrz również Cos(), Tan() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-60 Rozdział 3 SPCConnect() SPC Funkcja ta jest używana w połączeniu z automatycznym zbieraniem zestawów danych. Przed rozpoczęciem automatycznego zbierania zestawów danych, należy wywołać tę funkcję w celu poinformowania SPC, jaki użytkownik jest przy stanowisku: Składnia SPCConnect("User”,”Password”); Parametry Opis User Nazwa bazy danych użytkownika. Łańcuch znaków lub zmienna tekstowa. Hasło użytkownika. Łańcuch znaków lub zmienna tekstowa. Hasło. Uwagi Wykonanie tej funkcji spowoduje połączenie użytkownika z baza danych, oraz rozpoczęcie automatycznego odczytywania zestawów danych, w oparciu o wprowadzony przez użytkownika identyfikator. Jeżeli w bazie danych nie zostało zdefiniowane hasło, można wprowadzić następujący skrypt: Przykład SPCConnect("User1", ""); SPCDisconnect() SPC Funkcja ta służy do odłączania użytkownika od bazy danych SPC Pro. Wykonanie tej funkcji spowoduje przerwanie zbierania danych z wszystkich zestawów danych przypisanych do użytkownika. Składnia SPCDisconnect(); Uwagi Wykonanie tej funkcji spowoduje odłączenie użytkownika od bazy danych, oraz zatrzymanie automatycznego odczytywania zestawów danych. Przykład SPCDisconnect(); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SPCDisplayData() 3-61 SPC Funkcja ta zapewnia mechanizm wygodnego przewijania wykresu w celu wyświetlenia odpowiedniej daty lub godziny. Status przeszukiwania danych SPC można monitorować za pomocą zmiennej. Jeżeli SPC odszuka dane, zwracana jest wartość 0, jeżeli natomiast w ciągu określonego czasu dane nie zostaną znalezione, zwracana jest wartość 1. Składnia [Status=]SPCDisplayData("Dataset", "DateString", "TimeString", RangeInHours ); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Data w formacie mm/dd/rr. Łańcuch znaków lub zmienna tekstowa. Godzina w formacie gg:mm:ss. Łańcuch znaków lub zmienna tekstowa. Okres czasu, dla którego dane będą wyświetlane. Parametr ten może być wartością stałą lub zmienną programu InTouch. DateString TimeString RangeInHours Przykład StatusTag = SPCDisplayData("Dataset", "DateString", "TimeString" , RangeInHours); SPCLocateScooter() SPC Funkcja ta zapewnia mechanizm wygodnego przewijania suwaka w celu wyświetlenia odpowiedniej próbki. Wartość zmiennej suwaka, zapisanej w bazie danych, zostanie zaktualizowana, przypisana zostanie jej wartość X-Bar. Przypisanie parametrowi SampleNumber wartości 0 powoduje ukrycie/ deaktywację suwaka. Składnia SPCLocateScooter( "Dataset", SampleNumber ); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Numer dowolnej, nie zawierającej błędów próbki. Parametr ten może być wartością stałą lub zmienną programu InTouch. SampleNumber SPCMoveScooter() SPC Funkcja ta zapewnia mechanizm wygodnego przewijania suwaka w celu wyświetlenia odpowiedniej próbki. Wartość zmiennej suwaka, zapisanej w bazie danych, zostanie zaktualizowana, przypisana zostanie jej wartość próbki X-Bar. Składnia SPCMoveScooter( "Dataset", IncrementValue ); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Dowolny numer. W celu przewinięcia do przodu należy wprowadzić wartość dodatnią, natomiast w celu przewinięcia do tyłu należ wyprowadzić wartość ujemną. Parametr ten może być wartością stałą lub zmienną programu InTouch. IncrementValue Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-62 Rozdział 3 SPCSaveSample() SPC Funkcja ta służy do ręcznego zapisu próbki wejściowej. Funkcja ta używana jest w połączeniu z funkcją SPCSetMeasurement(). Składnia SPCSaveSample("Dataset"); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Uwagi Wykonanie instrukcji zawierającej tę funkcję spowoduje zapisanie próbki jako zestawu danych (Dataset) o określonej nazwie. Funkcja ta korzysta z ręcznie wprowadzonych wartości pomiarów próbki. Wartości ustawiane są zarówno za pomocą zmiennych DDE MI_Mx (gdzie x numer pomiaru z przedziału od 1 do 25), jak i za pomocą funkcji SPCSetMeasurement() (pomiary 1 do 300). Patrz również SPCSetMeasurement() SPCSelectDataset() SPC Wyświetla okno dialogowe pozwalające użytkownikowi na wybranie żądanego zestawu danych. Składnia DatasetName=SPCSelectDataset() Uwagi Skrypt ten powoduje otwarcie okna dialogowego Select a Dataset. Po wybraniu nazwy zestawu danych, funkcja przypisuje go do zmiennej DatasetName. Funkcja ta może również służyć do zmiany nazwy zestawu danych opisanego przez zmienną typu Indirect Dataset. SPCSelectProduct() SPC Wyświetla okno dialogowe pozwalające użytkownikowi na wybranie produktu z podanego zestawu danych. Składnia ProductName=SPCSelectProduct(Dataset); Uwagi Funkcja ta zastosowana w skrypcie pozwala na otwarcie okna dialogowego Select a Product. Po wybraniu nazwy wyrobu, funkcja przypisuje go do zmiennej ProductName. Funkcja ta może również służyć do zmiany nazwy produktu w zestawie danych Dataset. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SPCSetControlLimits() 3-63 SPC Funkcja ta umożliwia wygodne wprowadzenie (ręcznie lub w sposób automatyczny, w wyniku zaistnienia określonych zdarzeń) wartości granicznych dla wykresu kontrolnego (Control Chart). Składnia SPCSetControlLimits("Dataset",XUCL,XLCL); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Wartość, która ma zostać wykorzystana jako górny limit kontrolny (UCL) dla wykresu kontrolnego. Liczba lub zmienna typu rzeczywistego. Wartość, która ma zostać wykorzystana jako dolny limit kontrolny (LCL) dla wykresu kontrolnego. Liczba lub zmienna typu rzeczywistego. XUCL XLCL Uwagi Wyniki pomiarów są zapisywane w próbce za pomocą funkcji SPCSaveSample(). Patrz również SPCSaveSample(), SPCSetRangeLimits(), SPCSetSpecLimits() SPCSetMeasurement() SPC Funkcja ta umożliwia wygodne wprowadzenie (ręcznie lub w sposób automatyczny, w wyniku zaistnienia określonych zdarzeń) analogowych wartości z pomiaru poprzez wykonanie skryptu. Składnia SPCSetMeasurement("Dataset",Measurement,Value); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Numer pomiaru (od 1 do 300). Parametr ten może być wartością stałą lub zmienną programu InTouch. Wartość która ma być zapisana do określonego numeru pomiarów. Liczba lub zmienna typu rzeczywistego. Measurement Value Uwagi Z funkcji SPCSaveSample() należy korzystać po uprzednim ustawieniu wszystkich pomiarów na zapisywanie danych w bazie danych. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-64 Rozdział 3 SPCSetProductCollected() SPC Funkcja ta umożliwia zmianę wyrobu (Product), dla którego zbierane są dane w obrębie danego zestawu danych (Dataset). Składnia SPCSetProductCollected("Dataset","Product"); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Nazwa Produktu, dla którego mają być zbierane dane. Łańcuch znaków lub zmienna tekstowa. Product Uwagi Funkcja ta nie zmienia wyrobu, dla którego wyświetlane są dane. Możliwe jest gromadzenie danych jednego produktu i wyświetlanie danych dla innego produktu, używając tej funkcji do gromadzenia a funkcji SPCSetProductDisplayed() do wyświetlania: Przykład SPCSetProductCollected("Data5838", "Widgets"); Patrz również SPCSetProductDislpayed() SPCSetProductDislpayed() SPC Funkcja ta umożliwia zmianę wyrobu (Product), dla którego wyświetlane są dane w obrębie danego zestawu zmiennych (Dataset). Składnia SPCSetProductDisplayed("Dataset","Product"); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Nazwa wyrobu, dla którego mają być wyświetlane dane . Łańcuch znaków lub zmienna tekstowa. Product Przykład SPCSetProductDisplayed("ADataSetName", "AProductName"); Patrz również SPCSetProductCollected() SPCSetRangeLimits() SPC Funkcja ta umożliwia wygodne wprowadzenie (ręcznie lub w sposób automatyczny, w wyniku zaistnienia określonych zdarzeń) wartości granicznych dla wykresu rozpiętościowego (Range Chart). Składnia SPCSetRangeLimits("Dataset",RUCL,RLCL); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Wartość, która ma zostać wykorzystana jako górny limit kontrolny (UCL) dla wykresu rozpiętościowego. Liczba lub zmienna typu rzeczywistego. Wartość, która ma zostać wykorzystana jako dolny limit kontrolny (LCL) dla wykresu rozpiętościowego. Liczba lub zmienna typu rzeczywistego. RUCL RLCL Patrz również SPCSetControlLimits(), SPCSetSpecLimits() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SPCSetSpecLimits() 3-65 SPC Funkcja ta umożliwia wygodne wprowadzenie (ręcznie lub w sposób automatyczny, w wyniku zaistnienia określonych zdarzeń) wartości granicznych specyfikacyjnych (dla wykresu kontrolnego (Control Chart). Składnia SPCSetSpecLimits("Dataset",XUSL,XLSL); Parametry Opis Dataset Nazwa bieżącego zestawu danych. Łańcuch znaków lub zmienna tekstowa. Wartość, która ma zostać wykorzystana jako górny limit specyfikacyjny (USL) dla wykresu rozpiętościowego. Liczba lub zmienna typu rzeczywistego. Wartość, która ma zostać wykorzystana jako dolny limit specyfikacyjny (LSL) dla wykresu rozpiętościowego. Liczba lub zmienna typu rzeczywistego. XUSL XLSL Patrz również SPCSetControlLimits(), SPCSetRangeLimits() SQLAppendStatement() SQL Dalsza część instrukcji SQL zawarta w zmiennej tekstowej. Funkcja ta zwraca kody błędów. Składnia [ResultCode=]SQLAppendStatement(ConnectionID,"SQLStatement"); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Łańcuch znaków, który ma zostać dołączony do instrukcji. SQLStatement Przykład [ResultCode=]SQLAppendStatement(ConnectionID,"where tablename.columnname=(any value or string)"); Patrz również SQLConnect() SQLClearParam() SQL Funkcja ta powoduje usunięcie wartości danego parametru. Przed wykonaniem funkcji SQLExecute() musi zostać wywołana ponownie funkcja SQLSetParam(). Składnia [ResultCode=]SQLClearParam(SQLHandle,ParameterNumber); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Parametr do zmodyfikowania w instrukcji SQL. ParameterNumber Patrz również SQLPrepareStatement(),SQLExecute() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-66 Rozdział 3 SQLClearStatement() SQL Zwolnienie zasobów powiązanych z instrukcją określoną przez SQLHandle. Składnia [ResultCode=]SQLClearStatement(ConnectionID,SQLHandle); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). SQLHandle Patrz również SQLConnect() SQLClearTable() SQL Funkcja ta usuwa wszystkie rekordy z tablicy w bazie danych, ale nie usuwa samej tablicy. Składnia [ResultCode=]SQLClearTable(ConnectionID,"TableName"); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja usuwania rekordów. TableName Przykład Aby usunąć wszystkie rekordy z tablicy BATCH1, można użyć następującej instrukcji: [ResultCode=]SQLClearTable(ConnectionID,"BATCH1"); Patrz również SQLConnect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLCommit() 3-67 SQL Funkcja SQLCommit() powoduje wykonanie zestawu transakcji. Grupa poleceń zawierających się pomiędzy funkcjami SQLTransact() i SQLCommit() nosi nazwę zestawu transakcji. Zestaw transakcji jest traktowany jak pojedyncza transakcja. Po wykonaniu polecenia SQLTransact(), wszystkie kolejne operacje nie będą kierowane do bazy danych, aż do momentu kolejnego wywołania polecenia SQLCommit(). Składnia [ResultCode=]SQLCommit(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Uwaga Przy pisaniu skryptów zawierających funkcję SQLCommit() należy zachować dużą ostrożność. Ponieważ czas wykonania skryptu jest mnożony przez liczbę transakcji w zestawie transakcji, włączanie wielu poleceń do zestawu transakcji istotnie zwalania działanie aplikacji. Przykład ResultCode = ResultCode = SQLHandle ); ResultCode = ResultCode = ResultCode = ResultCode = ResultCode = SQLTransact( ConnectionID); SQLInsertPrepare( ConnectionID, TableName, BindList, SQLInsertExecute( ConnectionID, BindList, SQLHandle); SQLInsertExecute( ConnectionID, BindList, SQLHandle); SQLInsertExecute( ConnectionID, BindList, SQLHandle); SQLInsertEnd( ConnectionID, SQLHandle ); SQLCommit( ConnectionID); {3 operacje wstawienia} Patrz również SQLRollback(), SQLTransact() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-68 Rozdział 3 SQLConnect() SQL Funkcja ta służy do założenia połączenia pomiędzy programem InTouch a bazą danych wyszczególnioną za pomocą parametru ConnectString. Składnia [ResultCode=]SQLConnect(ConnectionID,"ConnectString"); Parametry ConnectionID Przykład Opis Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. ConnectString Nazwa bazy danych, oraz dodatkowe informacje potrzebne do zalogowania, wymagane przez funkcje SQLConnect(). Instrukcja zamieszczona poniżej łączy program InTouch z programem IBM OS/2 Database Manager, z bazą danych o nazwie SAMPLE: [ResultCode=]SQLConnect(ConnectionID,"DSN=OS2DM;DB=SAMPLE"); Funkcja ta zwraca wartość zmiennej ConnectionID, wykorzystywanej jako parametr we wszystkich, następujących w dalszej kolejności, wywołaniach funkcji z grupy SQL. Parametr ConnectString identyfikuje bazę danych i zawiera dodatkowe informacje potrzebne do ustanowienia połączenia z tą bazą. Posiada on następujący format: "DSN=data source name[;attribute=value[;attribute=value]...]" Każda z baz danych może wymagać podania innych atrybutów. QUELIB rozpoznaje następujące atrybuty: " Więcej informacji na temat atrybutów obsługiwanych przez określone bazy danych podano w Rozdziale 2 podręcznika SQL Access for InTouch User's Guide. Atrybut DSN Wartość Nazwa źródła danych (Data Source Name) skonfigurowana w programie Microsoft ODBC Administrator. DLG Jeżeli DLG=1, wyświetlane jest okno dialogowe pozwalające na wpisanie informacji potrzebnych do ustanowienia połączenia. DRV W celu zachowania zgodności z SQL Access w programie InTouch v. 4.11, wartość ta jest wykorzystywana jeżeli nazwa źródła danych (DSN) nie została podana w łańcuchu znaków połączenia. QELIB zmienia ten atrybut na nazwę źródła danych. UID Nazwa identyfikacyjna do logowania. PWD Hasło. MODIFYSQL Atrybut wykorzystywany przez QELIB w celu zapewnienia kompatybilności języka SQL używanego w aplikacji i języka SQL używanego w bazie danych. Gdy wartość tego atrybutu jest ustawiona na 1 (wartość domyślna), sterownik bazy danych oczekuje składni instrukcji zgodnej z ODBC, którą zmodyfikuje w razie potrzeby w celu dostosowania jej do bazy danych. Gdy wartość tego atrybutu jest ustawiona na 0, sterownik bazy danych oczekuje składni instrukcji zgodnej ze składnią bazy danych. Mechanizm ten pozwala na używanie aplikacji opracowanych z zastosowaniem SQL opartego na sterownikach QELIB 1.0. REREADAFTERUPDATE Jeżeli wartość tego atrybutu jest ustawiona na 1, QELIB ponownie odczytuje rekord z bazy danych po jego aktualizacji. Jest to użyteczna właściwość w przypadku pobierania właściwej wartości z automatycznie aktualizowanych kolumn, zawierających np. czas. REREADAFTERINSERT Jeżeli wartość tego atrybutu jest ustawiona na 1, QELIB ponownie odczytuje rekord z bazy danych po jego wstawieniu. Mechanizm ten jest użyteczny w przypadku pobierania właściwej wartości z automatycznie aktualizowanych kolumn, zawierających np. czas. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLCreateTable() 3-69 SQL Funkcja ta tworzy tablicę w bazie danych przy wykorzystaniu parametrów ze wzorca tablicy (Table Template) o określonej nazwie. Wzorce tablic, zdefiniowane w pliku SQL.DEF, określają strukturę tablic. Składnia [ResultCode=]SQLCreateTable(ConnectionID,TableName,TemplateName); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. Nazwa zdefiniowanego wzorca tablicy, który ma zostać użyty przez funkcję. TableName TemplateName Przykład Instrukcja zamieszczona poniżej powoduje utworzenie tablicy o nazwie BATCH1, dla której nazwy i typy kolumn zdefiniowane są we wzorcu o nazwie TEMPLATE. [ResultCode=]SQLCreateTable(ConnectionID,"BATCH1","TEMPLATE"); Uwaga Jeżeli parametr wprowadzony w skrypcie ujęty jest w cudzysłów, np. "Parametr1", jako parametr użyty zostanie wprowadzony łańcuch znaków. Jeżeli znaki cudzysłowów nie są używane, system przyjmuje, ze Parameter1 jest zmienną, po czym przeszukuje bazę danych programu InTouch w celu znalezienia wartości zmiennej Parameter1. Przykładowo: "c:\main\file" vs. location gdzie: Location jest zmienną tekstowa programu InTouch. "c:\main\file" jest łańcuchem znaków Patrz również SQLConnect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-70 Rozdział 3 SQLDelete() SQL Funkcja ta usuwa rekord lub kilka rekordów. Składnia [ResultCode=]SQLDelete(ConnectionID,TableName,WhereExpr); Uwaga Funkcja SQLDelete() może być wywołana z pustym parametrem WhereExpression. Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. Warunek, który może być spełniony lub niespełniony dla każdego wiersza tablicy. Funkcja wybiera tylko te wiersze z tablicy, dla których warunek jest spełniony. Warunek musi mieć następujący format: Nazwa_kolumny operator_porównania wyrażenie TableName WhereExpression Uwaga Jeśli obowiązującym typem danych w kolumnie są dane tekstowe, wyrażenie musi zostać wpisane w apostrofach. Poniższy przykład służy do wybrania wszystkich wierszy, w których w kolumnie name występuje ciąg znaków EmployeeID: name='EmployeeID' Kolejny przykład służy do wybrania wszystkich wierszy, w których w kolumnie partno występuje liczba od 100 do 199: partno>=100 and partno<200 Następny przykład służy do wybrania wszystkich wierszy, w których w kolumnie temperature występuje liczba większa od 350: temperature>350 Przykład Instrukcja zamieszczona poniżej powoduje usunięcie z tablicy o nazwie BATCH1 wszystkich rekordów, w których w kolumnie lotno występuje liczba równa 65: [ResultCode=]SQLDelete(ConnectionID,"BATCH1","lotno=65"); Patrz również SQLConnect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLDisconnect() 3-71 SQL Funkcja ta służy do odłączenia użytkownika od bazy danych. Składnia Patrz również [ResultCode=]SQLDisconnect(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. SQLConnect() SQLDropTable() SQL Funkcja ta usuwa tablicę z bazy danych. Składnia [ResultCode=]SQLDropTable(ConnectionID,TableName); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. TableName Przykład Zamieszczona poniżej instrukcja usuwa tablicę BATCH1, po wykonaniu jej tablica ta nie będzie dostępna i nie będzie reagować na żadne polecenia. [ResultCode=]SQLDropTable(ConnectionID,"BATCH1"); Patrz również SQLConnect() SQLEnd() SQL Funkcja ta jest wykorzystywana po funkcji SQLSelect() w celu zwolnienia zasobów, które były użyte do zapamiętania tablicy wynikowej (Results Table). Składnia Patrz również [ResultCode=]SQLEnd(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. SQLConnect(), SQLSelect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-72 Rozdział 3 SQLErrorMsg() SQL Odczytuje tekst komunikatu o błędzie związanego z zadanym kodem błędu ResultCode. ErrorMsg jest zmienną typu Memory Message (maksymalnie 131 znaków), powiązaną z parametrem ResultCode. Składnia SQLErrorMsg(ResultCode); Parametry Opis ResultCode Zmienna całkowita zwracana przez większość funkcji SQL. Jej wartość wynosi 0, jeśli funkcja została wykonana pomyślnie oraz jest ujemną liczbą całkowitą, jeśli funkcja nie została wykonana. ! Więcej informacji na temat kodów błędów podano Dodatku A, "Diagnostyka funkcji SQL". Przykład ErrorMsg=SQLErrorMsg(ResultCode); Patrz również SQLConnect() SQLExecute() SQL Funkcja ta wykonuje instrukcję SQL. Jeśli instrukcja służy do wyboru danych z bazy, parametr BindList określa nazwę listy powiązań między kolumnami bazy danych i zmiennymi programu InTouch. Jeśli lista powiązań jest PUSTA, żadne zmienne nie zostaną powiązane z kolumnami w bazie danych. Przykładowo, instrukcjami SQL mogą być Create View, Insert, itp. Funkcja ta zwraca kody błędów. Jeśli instrukcja została "przygotowana" za pomocą funkcji SQLPepareStatement(), jako parametru SQLHandle należy użyć wartości zwróconej przez tę funkcję. Jeśli instrukcja nie została "przygotowana", wartość parametru SQLHandle powinna wynosić zero. Składnia [ResultCode=]SQLExecute(ConnectionID,BindList,SQLHandle); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Lista powiązań między kolumnami bazy danych i zmiennymi programu InTouch Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). BindList SQLHandle Patrz również SQLConnect(),SQLPrepareStatement() Uwaga Jeżeli instrukcja nie została przygotowana, funkcja SQLExecute() może być wywołana jeden raz. Jeśli instrukcja została przygotowana, może być wywoływana wiele razy. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLFirst() 3-73 SQL Funkcja ta wybiera pierwszy rekord z tablicy wynikowej (Results Table) utworzonej poprzez wykonanie ostatniej funkcji SQLSelect(). Przed wykonaniem tego polecenia musi być wywołana funkcja SQLSelect(). Składnia Patrz również [ResultCode=]SQLFirst(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. SQLConnect(), SQLSelect() SQLGetRecord() SQL Funkcja ta odczytuje z bufora rekord określony przez parametr RecordNumber. Składnia [ResultCode=]SQLGetRecord(ConnectionID,Record Number); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Numer rekordu, który ma zostać odczytany. RecordNumber Przykład [ResultCode=]SQLGetRecord(ConnectionID,3); Patrz również SQLConnect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-74 Rozdział 3 SQLInsert() SQL Funkcja ta wstawia nowy rekord do tablicy o podanej nazwie, wykorzystując wartości zmiennych z podanej listy powiązań. Parametr BindList definiuje wykorzystywane zmienne programu InTouch, oraz powiązania pomiędzy nimi, a kolumnami bazy danych. Składnia [ResultCode=]SQLInsert(ConnectionID,TableName,BindList); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. Lista powiązań między kolumnami bazy danych i zmiennymi programu InTouch TableName BindList Przykład Instrukcja zamieszczona poniżej powoduje wstawienie nowego rekordu do tablicy o nazwie ORG przy wykorzystaniu wartości zmiennych z listy o nazwie List1. [ResultCode=]SQLInsert(ConnectionID,"ORG","List1"); Uwaga W celu szybkiego wstawienia rekordów do tablicy, zamiast funkcji SQLInsert() można użyć trzech innych funkcji. Funkcja SQLInsert() w jednej operacji przygotowuje instrukcję wstawienia, wykonuje ją i zwalnia wykorzystywane zasoby. Przy ponownym wywołaniu funkcji SQLInsert() wszystkie te operacje są wykonywane ponownie. Zabiera to znacznie więcej czasu, niż wykorzystanie trzech funkcji wymienionych poniżej, które realizują poszczególne etapy omawianego zadania. Po wywołaniu funkcja SQLInsertPrepare() (przygotowanie) można wykonać dowolną liczbę razy funkcję SQLInsertExecute() (wstawienie rekordu), a następnie zakończyć wstawianie wywołując funkcję SQLInsertEnd(). Patrz również SQLConnect(), SQLInsert(), SQLInsertPrepare(), SQLInsertExecute(), SQLInsertEnd() SQLInsertEnd() SQL Przerwanie instrukcji. Składnia [ResultCode=]SQLInsertEnd(ConnectionID,SQLHandle); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). SQLHandle Patrz również SQLConnect(), SQLPrepareStatement() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLInsertExecute() 3-75 SQL Funkcja ta wykonuje przygotowaną instrukcję wstawiania rekordów do tablicy. Składnia [ResultCode=]SQLInsertExecute(ConnectionID,BindList,SQLHandle); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Lista powiązań między kolumnami bazy danych i zmiennymi programu InTouch Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). BindList SQLHandle Patrz również SQLConnect(), SQLPrepareStatement() SQLInsertPrepare() SQL Funkcja ta przygotowuje instrukcję wstawiania rekordów do tablicy. Instrukcja wstawiania nie jest wykonywana. Parametr SQLHandle jest zmienną całkowitą, której wartość jest ustalana po wykonaniu instrukcji. Składnia [ResultCode=]SQLInsertPrepare(ConnectionID,TableName,BindList, SQLHandle); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. Lista powiązań między kolumnami bazy danych i zmiennymi programu InTouch Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). TableName BindList SQLHandle Patrz również SQLConnect(), SQLPrepareStatement() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-76 Rozdział 3 SQLLast() SQL Funkcja ta wybiera ostatni rekord z tablicy wynikowej (Results Table) utworzonej poprzez wykonanie ostatniej funkcji SQLSelect(). Przed wykonaniem tego polecenia musi być wywołana funkcja SQLSelect(). Składnia [ResultCode=]SQLLast(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Przykład [ResultCode=]SQLLast(ConnectionID); Patrz również SQLConnect(), SQLSelect() SQLLoadStatement() SQL Funkcja ta odczytuje instrukcję zapisaną w pliku FileName. W tym momencie funkcja ta wykazuje podobieństwo do instrukcji utworzonej za pomocą funkcji SQLSetStatement(), oraz może być dołączana za pomocą funkcji SQLAppendStatement, lub wykonywana za pomocą funkcji SQLExecute. W jednym pliku może znajdować się wyłącznie jedna instrukcja. Funkcja SQLAppendStatement() może być jednak wykorzystana do dołączania do instrukcji, jeżeli nie były wywoływane funkcje SQLPrepareStatement() lub SQLExecute(). Składnia [ResultCode=]SQLLoadStatement(ConnectionID,FileName); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa pliku zawierającego odczytywaną instrukcję. FileName Uwagi Przygotowuje instrukcję SQL utworzoną za pomocą funkcji: SQLSetStatement() lub SQLLoadStatement(). Funkcja zwraca parametr SQLHandle. Przykład [ResultCode=]SQLLoadStatement(ConnectionID,"C:\InTouchAppname\SQL.t xt") SQL.txt = Select ColumnName from TableName where ColumnName>100; Patrz również SQLConnect(), SQLAppendStatement(), SQLExecute(), SQLPrepareStatement Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLManageDSN() 3-77 SQL Funkcja ta uruchamia program konfiguracyjny Microsoft ODBC Manager. Można go wykorzystać do dodawania, usuwania i modyfikacji nazw źródeł danych (Data Source Names). Składnia SQLManageDSN(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. SQLNext() SQL Funkcja ta wybiera następny rekord z tablicy wynikowej (Results Table) utworzonej poprzez wykonanie ostatniej funkcji SQLSelect(). Funkcja SQLPrepareStatement() musi następować po funkcji SQLSelect(). Składnia [ResultCode=]SQLNext(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Przykład [ResultCode=]SQLNext(ConnectionID); Patrz również SQLConnect(), SQLSelect() SQLNumRows() SQL Funkcja ta oblicza, ile wierszy spełnia kryteria podane w ostatnio użytej funkcji SQLSelect(). Przykładowo, warunek WhereExpression podany jako jeden z parametrów funkcji SQLSelect() może spełniać 40 lub 4000 wierszy, co może decydować o dalszym toku postępowania. Może być wykorzystane do określenia, która funkcja będzie wykonywana jako następna. Składnia Przykład SQLNumRows(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Instrukcja zamieszczona poniżej powoduje przypisanie liczby wybranych wierszy do zmiennej całkowitej NumRows: NumRows=SQLNumRows(ConnectionID); Patrz również SQLConnect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-78 Rozdział 3 SQLPrepareStatement() SQL SQLPrepareStatement() przygotowuje istniejącą instrukcję SQL do wykorzystania jej przez funkcję SQLSetParam(). Instrukcja może zostać utworzona zarówno za pomocą SQLSetStatement(), jak i SQLLoadStatement(). Funkcja zwraca parametr SQLHandle. Składnia [ResultCode=]SQLPrepareStatement(ConnectionID,SQLHandle); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). SQLHandle Przykład [ResultCode=]SQLPrepareStatement(ConnectionID,SQLHandle); Patrz również SQLConnect(), SQLSelect(), SQLSetStatement(), SQLLoadStatement() SQLPrev() SQL Funkcja ta wybiera poprzedni rekord z tablicy wynikowej (Results Table) utworzonej poprzez wykonanie ostatniej funkcji SQLSelect(). Składnia [ResultCode=]SQLPrev(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Uwagi Funkcja SQLPrepareStatement() musi następować po funkcji SQLSelect(). Przykład [ResultCode=]SQLPrev(ConnectionID); Patrz również SQLConnect(), SQLSelect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLRollback() 3-79 SQL Funkcja SQLRollback() cofa ostatnio wykonany zestaw transakcji. Grupa poleceń zawartych pomiędzy funkcjami SQLTransact() i SQLCommit() lub SQLRollback nosi nazwę zestawu transakcji. Zestaw transakcji jest traktowany jak pojedyncza transakcja. Po wykonaniu polecenia SQLTransact(), wszystkie kolejne operacje nie będą kierowane do bazy danych, aż do momentu kolejnego wywołania polecenia SQLCommit(). Składnia Przykład [ResultCode=]SQLRollback(ConnectionID,); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. ResultCode =SQLTransact( ConnectionID); ResultCode = SQLInsertPrepare( ConnectionID, TableName, BindList, SQLHandle ); ResultCode = SQLInsertExecute( ConnectionID, BindList, SQLHandle); ResultCode = SQLInsertExecute( ConnectionID, BindList, SQLHandle); ResultCode = SQLInsertExecute( ConnectionID, BindList, SQLHandle); ResultCode = SQLInsertEnd( ConnectionID, SQLHandle ); ResultCode =SQLRollback( ConnectionID); {Po Transact() ignorowane są wszystkie polecenia zmian} Patrz również SQLCommit(), SQLTransact() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Baz danych bez 3-80 Rozdział 3 SQLSelect() SQL Funkcja ta wybiera informacje z wyszczególnionej tablicy w bazie danych. Podczas wykonywania funkcji SQLSelect() w pamięci tworzona jest tymczasowa tablica wynikowa (Results Table), zawierająca rekordy, które można przeszukiwać używając funkcji SQLFirst(), SQLLast(), SQLNext() i SQLPrev(). Uwaga Po wykonaniu funkcji SQLSelect() zawsze należy użyć funkcji SQLEnd() w celu zwolnienia zasobów, które były użyte do zapamiętania tablicy wynikowej (Results Table). Składnia [ResultCode=]SQLSelect(ConnectionID,TableName,BindList, WhereExpr,OrderByExpr); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. Lista powiązań między kolumnami bazy danych i zmiennymi programu InTouch Warunek, który może być spełniony lub niespełniony dla każdego wiersza tablicy. Funkcja wybiera z tablicy tylko te wiersze, dla których warunek jest spełniony. Warunek musi mieć następujący format: Nazwa_kolumny operator_porównania wyrażenie TableName BindList WhereExpression Uwaga Jeśli w kolumnie znajdują się dane typu tekstowego, wyrażenie musi zostać wpisane w apostrofach. Poniższy przykład służy do wybrania wszystkich wierszy, w których w kolumnie name występuje ciąg znaków EmployeeID: name='EmployeeID' Kolejny przykład służy do wybrania wszystkich wierszy, w których w kolumnie partno występuje liczba od 100 do 199: partno>=100 and partno<200 Następny przykład służy do wybrania wszystkich wierszy, w których w kolumnie temperature występuje liczba większa od 350: temperature>350 Przykłady wyrażenia WhereExpression: WhereExpr - zmienna typu Memory Message. OrderByExpr - zmienna typu Memory Message. Speed_Input - Memory Real - Liczba wprowadzana przez użytkownika Serial_Input - Memory Message - Tekst wprowadzony przez użytkownika Przykład dla danych typu analogowego WhereExpr = "Speed = " + text(Speed_Input,”#.##”); # Ponieważ Speed_Input jest liczbą, musi ona zostać przekonwertowana na tekst, co pozwoli na dołączenie jej do wyrażenia tekstowego. Przykład dla danych typu tekstowego WhereExpr = "Ser_No = " + Serial_input + ""; # Ponieważ Serial_Input jest łańcuchem znaków, wartość ujęta musi być w apostrofy, np. WhereExpr="Ser_No='125gh"; Przykłady dla danych typu tekstowego z wykorzystaniem instrukcji like Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe 3-81 WhereExpr = "Ser_No like " + "125%" # W przypadku korzystania z słowa Like można stosować znak % jako filtr. Przykłady dla danych typu tekstowego i analogowego, stosowanych z operatorem And: WhereExpr = "Ser_No = " + Serial_input + "" + " and " + "Speed = " + text(Speed_Input,”#.##”); OrderByExpr = ""; # Jeżeli kolejność nie odgrywa żadnej roli, wpisać pusty łańcuch znaków, tak jak w przykładzie powyżej. SQLSelect z zastosowaniem zmiennej WhereExpr ResultCode = SQLSelect(Connect_Id,TableName,BindList,WhereExpr,OrderByExpr); Error_msg = SQLErrorMsg( ResultCode ); SQLSelect, WhereExpr wbudowane w funkcję ResultCode = SQLSelect(Connect_Id,TableName,BindList, "Ser_No = " + Serial_input + "'", OrderByExpr); Error_msg = SQLErrorMsg( ResultCode ); Uwaga Po zakończeniu SQLSelect() należy zawsze wywoływać funkcję SQLEnd(Connect_Id). Jeżeli funkcja SQLEnd() nie zostanie wywołana, zasoby nie zostaną zwolnione, co może spowodować brak wolnej pamięci w czasie wykonywania aplikacji. OrderByExpression Przykład Definiuje kolumnę i kierunek sortowania. Do sortowania można korzystać wyłącznie z nazw kolumn, a wyrażenie musi mieć postać: Nazwa_kolumny [ASC|DESC] Poniższe wyrażenie spowoduje uporządkowanie wybranej tablicy względem kolumny manager, w porządku malejącym: "manager ASC" W celu posortowania kilku kolumn, wyrażenie musi mieć postać: Nazwa_kolumny [ASC|DESC], Nazwa_kolumny [ASC|DESC] Kolejne wyrażenie spowoduje uporządkowanie wybranej tablicy względem kolumny temperature w porządku rosnącym i względem kolumny time w porządku malejącym: " temperature ASC, time DESC" Instrukcja zamieszczona poniżej powoduje wybranie z tablicy o nazwie BATCH (przy wykorzystaniu listy powiązań o nazwie List1) wszystkich rekordów, w których w kolumnie type znajduje się słowo cookie. Odczytana tablica zostanie uporządkowana rosnąco względem kolumny amount i malejąco względem kolumny sugar: [ResultCode=]SQLSelect(ConnectionID,"BATCH","List1","type='cookie'" ,"amount ASC, sugar DESC"); Kolejna przykładowa instrukcja powoduje wybranie wszystkich danych z bazy danych, bez określania warunków WhereExpression i OrderByExpression: [ResultCode=]SQLSelect(ConnectionID,"BATCH","List1","",""); Patrz również SQLFirst(), SQLConnect(), SQLLast(), SQLNext(), SQLPrev(), SQLEnd(), SQLSelect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-82 Rozdział 3 SQLSetParamChar() SQL Funkcja ta powoduje przypisanie łańcucha znaków określonemu parametrowi tekstowemu. Funkcja SQLSetParamChar() może być wywoływana wiele razy przed wykonaniem instrukcji SQL, w wyniku czego parametr może być złożeniem kolejno przypisywanych łańcuchów znaków. Puste łańcuchy znaków są ignorowane. Składnia [ResultCode=]SQLSetParamChar(SQLHandle,ParameterNumber, ParameterValue,MaxLen); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. Maksymalny rozmiar kolumny, z którą związany jest parametr. Opcja ta wyznacza czy parametr jest typu o różnej liczbie znaków, czy też typu o znacznie różnej liczbie znaków. Jeżeli parametr MaxLen ma długość równą lub większa od maksymalnej wartości dopuszczalnej w bazie danych, to parametr jest typu o różnej liczbie znaków. Jeżeli jest dłuższy, ma typ o znacznie różnej liczbie znaków. ParameterNumber ParameterValue MaxLen Przykład [ResultCode=]SQLSetParamChar(SQLHandle,ParameterNumber, ParameterValue,MaxLen); Patrz również SQLPrepareStatement() SQLSetParamDate() SQL Funkcja ta powoduje przypisanie łańcucha znaków określonemu parametrowi reprezentującemu datę. Składnia [ResultCode=]SQLSetParamDate(SQLHandle,ParameterNumber, ParameterValue); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. ParameterNumber ParameterValue Przykład [ResultCode=]SQLSetParamDate(SQLHandle,ParameterNumber, ParameterValue); Patrz również SQLPrepareStatement() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLSetParamDateTime() 3-83 SQL Funkcja ta powoduje przypisanie łańcucha znaków określonemu parametrowi zawierającemu datę i czas. Składnia [ResultCode=]SQLSetParamDateTime(SQLHandle,ParameterNumber, ParameterValue,Precision); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. Długość wartość daty-czasu do przypisania. Jest to liczba znaków, wykorzystywanych w ParameterValue. ParameterNumber ParameterValue Precision Przykład [ResultCode=]SQLSetParamDateTime(SQLHandle,ParameterNumber, ParameterValue,Precision); Patrz również SQLPrepareStatement() SQLSetParamDecimal() SQL Funkcja ta powoduje przypisanie łańcucha znaków (cyfr) określonemu parametrowi dziesiętnemu. Precision jest liczbą cyfr, a Scale jest liczbą cyfr po kropce dziesiętnej. Składnia [ResultCode=]SQLSetParamDecimal(SQLHandle,ParameterNumber, ParameterValue,Precision,Scale); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. Długość wartość daty-czasu do przypisania. Jest to liczba znaków, wykorzystywanych w ParameterValue. Liczba cyfr po kropce dziesiętnej. ParameterNumber ParameterValue Precision Scale Przykład [ResultCode=]SQLSetParamDecimal(SQLHandle,ParameterNumber, ParameterValue,Precision, Scale); Patrz również SQLPrepareStatement() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-84 Rozdział 3 SQLSetParamFloat() SQL Funkcja ta powoduje ustawienie wartości danego parametru na wartość równą ParameterValue. Składnia [ResultCode=]SQLSetParamFloat(SQLHandle,ParameterNumber, ParameterValue); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. ParameterNumber ParameterValue Przykład [ResultCode=]SQLSetParamFloat(SQLHandle,ParameterNumber, ParameterValue); Patrz również SQLPrepareStatement() SQLSetParamInt() SQL Funkcja ta powoduje ustawienie wartości danego parametru na wartość równą ParameterValue. Składnia [ResultCode=]SQLSetParamInt(SQLHandle,ParameterNumber, ParameterValue); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. ParameterNumber ParameterValue Przykład [ResultCode=]SQLSetParamInt(SQLHandle,ParameterNumber, ParameterValue); Patrz również SQLPrepareStatement() SQLSetParamLong() SQL Funkcja ta powoduje ustawienie wartości danego parametru na wartość równą ParameterValue. Składnia [ResultCode=]SQLSetParamLong(SQLHandle,ParameterNumber, ParameterValue); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. ParameterNumber ParameterValue Przykład [ResultCode=]SQLSetParamLong(SQLHandle,ParameterNumber, ParameterValue); Patrz również SQLPrepareStatement() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLSetParamNull() 3-85 SQL Funkcja ta powoduje przypisanie określonemu parametrowi wartości zerowej (pustej). Składnia [ResultCode=]SQLSetParamNull(SQLHandle,ParameterNumber, ParameterType,Precision,Scale); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Typ danych określonego parametru: Typ Value Opis Char 1 Łańcuch znaków o stałej długości wypełniony znakami pustymi Var Char 2 Łańcuch znaków o zmiennej długości Decimal 3 Liczba dziesiętna w kodzie BCD Integer 4 4-bajtowa liczba całkowita ze znakiem Small Integer 5 2-bajtowa liczba całkowita ze znakiem Float 6 4-bajtowa liczba zmiennoprzecinkowa Double 7 8-bajtowa liczba Precision Float zmiennoprzecinkowa DateTime 8 26-bajtowa reprezentacja daty i czasu Date 111 26-bajtowa reprezentacja daty i czasu Time 112 26-bajtowa reprezentacja daty i czasu No Type 0 Brak typu danych Dokładność wartości podawanych w systemie dziesiętnym, maksymalna liczba znaków, lub długość bajtów przeznaczonych do zapisu daty i czasu. Liczba cyfr po kropce dziesiętnej. Jest wymagana tylko w przypadku, gdy dotyczy zerowanego parametru. ParameterNumber ParameterType Precision Scale Uwagi Jeśli dla tego samego parametru została wywołana już funkcja SQLSetParam(), nie można użyć żadnego typu danych. Przykład [ResultCode=]SQLSetParamNull(SQLHandle,ParameterNumber, ParameterType,Precision,Scale); Patrz również SQLPrepareStatement() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-86 Rozdział 3 SQLSetParamTime() SQL Funkcja ta powoduje przypisanie łańcucha znaków określonemu parametrowi reprezentującemu czas. Składnia [ResultCode=]SQLSetParamTime(SQLHandle,ParameterNumber, ParameterValue); Parametry Opis SQLHandle Wartość całkowita zwracana przez SQL po użyciu funkcji SQLPrepareStatement(). Numer parametru w instrukcji SQL. Przypisywana wartość parametru. ParameterNumber ParameterValue Przykład [ResultCode=]SQLSetParamTime(SQLHandle,ParameterNumber, ParameterValue); Patrz również SQLPrepareStatement() SQLSetStatement() SQL Funkcja ta tworzy bufor instrukcji SQL wykorzystując do tego celu wartość SQLStatement, dla ustanowionego połączenia ConnectionID. Jedno połączenie ConnectionID może korzystać tylko z jednego bufora. Funkcja ta zwraca kody błędów. Składnia [ResultCode=]SQLSetStatement(ConnectionID,SQLStatement); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Właściwa instrukcja SQL, jak w poniższym przykładzie. SQLStatement Przykład [ResultCode=]SQLSetStatement(ConnectionID,"Select LotNo, LotName from LotInfo"); W zamieszczonym poniżej przykładzie, wartość SQLHandle ustawiona zostaje na 0, dzięki czemu instrukcja nie wywołuje SQLPrepare(Connect_Id,SQLHandle) przed wykonaniem instrukcji. Ponieważ SQLHandle nie została utworzona przez SQLPrepare w celu poprawnego zakończenia tego zaznaczania, skorzystać z funkcji SQLEnd w miejsce SQLClearStatement(). SQLSetStatement( Connect_Id, "Select Speed, Ser_No from tablename where Ser_No =" + Serial_input + ""); SQLExceute(Connect_Id,0); W zamieszczonym poniżej przykładzie, SQLHandle jest tworzona za pomocą SQLPrepareStatement, i wykorzystywana w funkcji SQLExecute. W celu zakończenia tej instrukcji zaznaczania skorzystać z funkcji SQLClearStatement w celu uwolnienia zasobów, oraz zwolnienia SQLhandle. SQLSetStatement( Connect_Id, "Select Speed, Ser_No from tablename where Ser_No =" + Serial_input + ""); SQLPrepareStatement(Connect_Id,SQlHandle); SQLExceute(Connect_Id,SqlHandle); Patrz również SQLConnect() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe SQLTransact() 3-87 SQL Funkcja SQLTransact() określa początek zestawu transakcji. Grupa poleceń zawierających się pomiędzy funkcjami SQLTransact() i SQLCommit() nosi nazwę zestawu transakcji. Zestaw transakcji jest traktowany jak pojedyncza transakcja. Po wykonaniu polecenia SQLTransact(), wszystkie kolejne operacje nie będą kierowane do bazy danych, aż do momentu kolejnego wywołania polecenia SQLCommit(). Składnia [ResultCode=]SQLTransact(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Uwaga Przy pisaniu skryptów z użyciem funkcji SQLTransact() należy zachować dużą ostrożność. Ponieważ czas wykonania skryptu jest mnożony przez liczbę transakcji w zestawie transakcji, włączanie wielu poleceń do zestawu transakcji istotnie zwalnia działanie aplikacji. Patrz również SQLCommit(), SQLRollback() SQLUpdate() SQL Funkcja ta powoduje zmodyfikowanie rekordu w wyszczególnionej tablicy w bazie danych przy użyciu bieżących wartości zmiennych powiązanych z kolumnami tablicy. Składnia [ResultCode=]SQLUpdate(ConnectionID,TableName,BindList, WhereExpr); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Nazwa tablicy w bazie danych, której dotyczy operacja. Lista powiązań między kolumnami bazy danych i zmiennymi programu InTouch Warunek, który może być spełniony lub niespełniony dla każdego wiersza tablicy. Funkcja aktualizuje tylko te wiersze w tablicy, dla których warunek jest spełniony. Warunek musi mieć następujący format: Nazwa_kolumny operator_porównania wyrażenie TableName BindList WhereExpression Uwaga Jeśli obowiązującym typem danych w kolumnie są dane tekstowe, wyrażenie musi zostać wpisane w apostrofach. Poniższy przykład służy do wybrania wszystkich wierszy, w których w kolumnie name występuje ciąg znaków EmployeeID: name='EmployeeID' Kolejny przykład służy do wybrania wszystkich wierszy, w których w kolumnie partno występuje liczba od 100 do 199: partno>=100 and partno<200 Następny przykład służy do wybrania wszystkich wierszy, w których w kolumnie temperature występuje liczba większa od 350: temperature>350 Przykład Zamieszczone poniżej wyrażenie powoduje uaktualnienie wszystkich rekordów tablicy BATCH, dla których numer serii jest równy 65, do bieżącej wartości zmiennych określonych za pomocą parametru BindList "List1". [ResultCode=]SQLUpdate(ConnectionID,"BATCH","List1","lotno=65"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-88 Rozdział 3 Uwaga Należy sprawdzić, czy rekordy nie powtarzają się. W przypadku gdy w tabeli będą znajdować się identyczne rekordy, zostaną one wszystkie uaktualnione. Patrz również SQLConnect() SQLUpdateCurrent() SQL Funkcja ta pobiera zaznaczony rekord i uaktualnia go. Zamieszczony poniżej przykład spowoduje uaktualnienie zaznaczonego w danym momencie rekordu. Składnia [ResultCode=]SQLUpdateCurrent(ConnectionID); Parametry Opis ConnectionID Zmienna typu Memory Integer, utworzona przez użytkownika do pamiętania numeru (ID) przypisywanego przez funkcję SQLConnect do każdego połączenia z bazą danych. Przykład [ResultCode=]SQLUpdateCurrent(ConnectionID); Patrz również SQLConnect() Sqrt() funkcje matematyczne Funkcja ta oblicza pierwiastek kwadratowy z podanej liczby. Składnia Real Result=Sqrt(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Zmienna typu rzeczywistego, przeznaczona do przechowywania wyniku. Real Result Przykład AnalogTag1=Sqrt(AnalogTag2); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe StartApp 3-89 system Automatyczne uruchomienie innej aplikacji Windows. Składnia StartApp "AppName"; Parametry Opis AppName Nazwa programu (pliku z rozszerzeniem .EXE) aplikacji do uruchomienia, (np. WRITE.EXE). Chociaż rozszerzenie .EXE w nazwie pliku nie jest wymagane, zaleca się jego wpisywanie. Można również wprowadzać parametry, w przypadkach gdy aplikacja je obsługuje. Nie są obsługiwane długie nazwy plików, jednak jeżeli zachodzi potrzeba korzystania z takich nazw, można wprowadzać te nazwy w postaci w jakiej są one przedstawiane w systemie Dos: Jeżeli długa nazwa dostępu ma postać: :C:\Program files\Microsoft Office\Office\Excel. Wprowadzić: C:\Progra~1\Micros~2\Office\Excel (postać w systemie Dos). SetApp "C:\Progra~1\Micros~2\Office\Excel"; Jeżeli wykorzystywany jest plik windows i pokazywane są wszystkie informacje o pliku, w środkowej kolumnie umieszczona będzie nazwa w postaci, w jakiej jest ona reprezentowana w systemie Dos. Przykłady Zamieszczona poniżej instrukcja powoduje uruchomienie programu Microsoft Windows Wordpad. StartApp "Wordpad.exe"; Patrz również ActivateAPP() StringASCII() funkcje tekstowe Zwraca kod ASCII pierwszego znaku zadanej zmiennej tekstowej Składnia IntegerResult=StringASCII("Char"); Parametry Opis Char Zmienna tekstowa lub łańcuch znaków alfanumerycznych. Uwagi Kod ASCII pierwszego znaku ciągu znaków Char zostanie przypisany do zmiennej IntegerResult. W czasie wykonywania funkcji, testowany lub zmieniany jest wyłącznie pojedynczy znak. Jeśli łańcuch znaków lub zmienna tekstowa podana jako parametr funkcji StringASCII() zawiera więcej niż jeden znak, podany zostanie tylko kod pierwszego znaku. Przykłady StringASCII("A") zwraca 65 StringASCII("A Mixer is Running") zwraca 65 StringASCII("a mixer is running") zwraca 97 Patrz również StringChar() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-90 Rozdział 3 StringChar() funkcje tekstowe Zwraca znak dla zadanego kodu ASCII. Składnia MessageResult=StringChar(ASCII); Parametry Opis ASCII Kod ASCII lub zmienna typu całkowitego. Uwagi Znak o podanym (jako parametr ASCII) kodzie ASCII zostanie przypisany do zmiennej MessageResult. Jednym z zastosowań tej funkcji jest dołączanie do zmiennych tekstowych znaków ASCII, które nie są reprezentowane na klawiaturze. Przykład ControlString=MessageTag+StringChar(13)+StringChar(10); W przykładzie powyżej, do zmiennej MessageTag dołączone zostały znaki [CR(13)] i [LF(10)], a całość została zapisana jako ControlString. Wstawianie znaków o kodach spoza normalnego zakresu 32-126 może być bardzo użyteczne przy tworzeniu kodów sterujących dla urządzeń zewnętrznych, takich jak drukarki lub modemy. Funkcja ta jest często wykorzystywana do tworzenia poleceń SQL. W wyrażeniu WhereExpression wartości tesktowe muszą często ujęte być w znaki cudzysłowów, można je wstawić za pomocą funkcji StringChar(34). Patrz również StringASCII() StringFromIntg() funkcje tekstowe Zamienia wartość całkowitą na odpowiadający jej ciąg znaków. Składnia MessageResult=StringFromIntg(Number,Base); Parametry Opis Number Liczba do konwersji. Parametr ten może być wartością stałą lub zmienną programu InTouch. Parametr określający system zapisu. Parametr ten może być wartością stałą lub zmienną programu InTouch. Base Uwagi Liczba całkowita Integer jest przekształcana na system określony przez parametr Base (dwójkowy, szesnastkowy, itp.), a wynik tej operacji jest zapisywany jako MessageResult. Przykłady StringFromIntg(26, 2) zwraca "11010" StringFromIntg(26, 8) zwraca "32" StringFromIntg(26, 16) zwraca "1A" Patrz również StringToIntg(), StringFromReal(), StringToReal(), Text() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe StringFromReal() 3-91 funkcje tekstowe Przekształca liczbę w formacie rzeczywistym na odpowiadający jej ciąg znaków, zapisując ją w formacie zmiennoprzecinkowym lub w formacie wykładniczym. Składnia MessageResult=StringFromReal(Number,Precision,"Type"); Parametry Opis Number Jest konwertowany zgodnie z parametrami Precision i Type, a wartość przypisywana jest do MessageResult. Liczba lub zmienna typu rzeczywistego. Podaje ile miejsc dziesiętnych należy wyświetlić. Parametr ten może być wartością stałą lub zmienną programu InTouch. Parametr określający system zapisu: Typ Opis "f" 8-bajtowa liczba zmiennoprzecinkowa "e" Notacja "naukowa" z małym e. "E" Notacja "naukowa" z dużym E. Precision Type Przykłady StringFromReal(263.355, 2,"f") zwraca "263.36" StringFromReal(263.355, 2,"e") zwraca "2.63e2" StringFromReal(263.55, 3,"E") zwraca "2.636E2" Patrz również StringToReal(), StringFromIntg(), StringToIntg(), Text() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-92 Rozdział 3 StringFromTime() funkcje tekstowe Przekształca czas (wyrażany w sekundach licząc od 01-01-1970) na ciąg znaków. Składnia MessageResult=StringFromTime(SecsSince1-1-70,StringType); Parametry Opis SecsSince1-1-70 Konwersja przeprowadzana jest zgodnie z parametrem StringTypei, a wynik zwracany za pomocą MessageResult. Parametr określający system zapisu: Typ Opis 1 Zapis daty w formacie ustawionym w Panelu sterowania Windows. (Podobny do formatu zmiennej systemowej $DateString.) 2 Zapis czasu w formacie ustawionym w Panelu sterowania Windows. (Podobny do formatu zmiennej systemowej $TImeString.) 3 Wyświetlenie tekstu składającego się z 24 znaków, podającego zarówno datę jak i godzinę. "Wed Jan 02 02:03:55 1993" 4 Wyświetlenie skrótowego oznaczenia dla dnia tygodnia. "Wed" 5 Wyświetlenie pełnej nazwy dnia tygodnia. "Wednesday" StringType Przykłady StringFromTime(86400, 1) zwraca "1/2/70" StringFromTime(86400, 2) zwraca "12:00:00 AM" StringFromTime(86400, 3) zwraca "Fri Jan 02 00:00:00 1970" StringFromTime(86400, 4) zwraca "Fri" StringFromTime(86400, 5) zwraca "Friday" Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe StringInString() 3-93 funkcje tekstowe Funkcja ta podaje pozycję określonej grupy znaków w łańcuchu znaków. Składnia IntegerResult=StringInString("Text","SearchFor" ,StartPos,CaseSens); Parametry Opis Text Łańcuch znaków przeszukiwany pod kątem występowania grupy znaków SearchFor. Jeśli grupa ta występuje w kilku miejscach, do zmiennej IntegerResult przypisywane jest miejsce pierwszego wystąpienia. Łańcuch znaków lub zmienna tekstowa. Poszukiwany ciąg znaków tekst. Liczba całkowita określająca miejsce początkowe przeszukiwania łańcucha Text. Parametr ten może być wartością stałą lub zmienną programu InTouch. Parametr określający, czy przy przeszukiwaniu łańcucha znaków mają być rozróżniane duże i małe litery (0=nie, 1=tak). Parametr ten może być wartością stałą lub zmienną programu InTouch. SearchFor StartPos CaseSens Przykład StringInString("The mixer is running", "mix", 1, 0) zwraca 5 StringInString("Today is Thursday", "day", 1, 0) zwraca 3 StringInString("Today is Thursday", "day", 10, 0) zwraca 15 StringInString("Today is Veteran's Day", "Day", 1, 1) zwraca 20 StringInString("Today is Veteran's Day", "Night", 1, 1) zwraca 0 StringLeft() funkcje tekstowe Zwraca liczbę znaków określoną przez Chars, począwszy od znaku umieszczonego skrajnie po lewej stronie. Składnia MessageResult=StringLeft(Text,Chars); Parametry Opis Text Chars Łańcuch znaków lub zmienna tekstowa. Liczba znaków, które ma zwrócić funkcja, lub zmienna typu całkowitego. Uwagi Jeśli wartość parametru Chars wynosi 0, funkcja zwraca cały łańcuch znaków. Przykład StringLeft("The Control Pump is On", 3) zwraca "The" StringLeft("Pump 01 is On", 4) zwraca "Pump" StringLeft("Pump 01 is On", 96) zwraca "Pump 01 is On" StringLeft("The Control Pump is On", 0) zwraca "The Control Pump is On" Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-94 Rozdział 3 StringLen() funkcje tekstowe Zwraca liczbę całkowitą określającą długość zadanej zmiennej tekstowej. Składnia IntegerResult=StringLen(Text); Parametry Opis Text Łańcuch znaków lub zmienna tekstowa. Uwagi Długość tekstu Text (w znakach) przypisywana jest do zmiennej IntegerResult. Zliczane są wszystkie znaki w zmiennej tekstowej, włączając w to znaki standardowo nie wyświetlane. Przykład StringLen("Twelve percent") zwraca 14 StringLen("12%") zwraca 3 StringLen("The end." + StringChar(13)) zwraca 10 Uwaga [CR] jest znakiem powrotu karetki o kodzie ASCII 13 StringLower() funkcje tekstowe Zamienia wszystkie znaki pisane duże literą na znaki pisane małą literą, a wynik tej operacji umieszczany jest w zmiennej MessageResult. Składnia MessageResult=StringLower(Text); Parametry Opis Text Tekst, w którym duże litery mają być zmienione na małe. Łańcuch znaków lub zmienna tekstowa. Uwagi Funkcja nie zmienia małych liter, cyfr, symboli i znaków specjalnych (a także, niestety, polskich dużych liter na małe). Przykłady StringLower("TURBINE") zwraca "turbine" StringLower("22.2 Is The Value") zwraca "22.2 is the value." Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe StringMid() 3-95 funkcje tekstowe Zwraca liczbę znaków określoną parametrem Chars, rozpoczynając od pozycji określonej przez parametr StartChar. Funkcja ta nieznacznie różni się od swoich odpowiedników: funkcji StringLeft() i StringRight(), ponieważ umożliwia ona określenie zarówno początku jak i końca łańcucha znaków. Składnia MessageResult=StringMid(Text,StartChar,Chars); Parametry Opis Text StartChar Łańcuch znaków lub zmienna tekstowa. Liczba całkowita określająca miejsce pierwszego znaku z grupy. Parametr ten może być wartością stałą lub zmienną programu InTouch. Liczba znaków do odczytania. Parametr ten może być wartością stałą lub zmienną programu InTouch. Chars Przykłady StringMid("The Furnace is Overheating",5,7,) zwraca "Furnace" StringMid("The Furnace is Overheating",13,3) zwraca "is " StringMid("The Furnace is Overheating",16,50) zwraca "Overheating" Patrz również StringLeft(),StringRight() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-96 Rozdział 3 StringReplace() funkcje tekstowe Funkcja ta zastępuje określoną grupę znaków w podanym łańcuchu znaków (lub zmiennej tekstowej). Dzięki tej funkcji można zastępować znaki, słowa lub frazy w łańcuchach znaków i zmiennych tekstowych. Składnia MessageResult=StringReplace(Text,SearchFor,ReplaceWith, CaseSens,NumToReplace,MatchWholeWords); Parametry Opis Text Łańcuch znaków lub zmienna tekstowa podlegające modyfikacjom. Poszukiwana grupa znaków, która ma zostać wymieniona na inną. Łańcuch znaków lub zmienna tekstowa. Dowolny tekst. Łańcuch znaków lub zmienna tekstowa. Parametr określający, czy przy przeszukiwaniu łańcucha znaków mają być rozróżniane duże i małe litery . (0-nie i 1=tak). Liczba luz zmienna typu całkowitego. Liczba wystąpień, w których ma być wprowadzona zamiana. (-1=wszystkie.) Liczba lub zmienna typu całkowitego. Określa czy działanie funkcji ograniczone zostanie do zastępowania całych słów. (0-nie i 1=tak.) Liczba lub zmienna typu całkowitego. Jeżeli parametr MatchWholeWords zostanie ustawiony na 1, a SearchFor na "and", znaki "and" w słowie "handle" nie zostaną zastąpione. Jeśli natomiast parametr MatchWholeWords zostanie ustawiony na 0, grupa znaków "and" występująca w słowie "handle" zostanie zastąpiona. SearchFor ReplaceWith CaseSens NumToReplace MatchWholeWords Przykłady StringReplace("In From Within","In","Out",0,1,0) zwraca "Out From Within" (zastąpienie wyłącznie pierwszego wystąpienia) StringReplace("In From Within","In","Out",0,-1,0) zwraca "Out From without" (zastąpienie wszystkich wystąpień) StringReplace("In From Within","In","Out",1,-1,0) zwraca "Out From Within" (zastępowanie z uwzględnieniem wielkości liter) StringReplace("In From Within","In","Out",0,-1,1) zwraca "Out From Within" (zastępowanie całych słów) Uwaga Funkcja StringReplace() nie rozpoznaje znaków specjalnych, np. @#$%&*(). Traktuje je jako znaki rozdzielające. Przykładowo, wywołanie funkcji StringReplace() ((abc#,abc#,1234,0,1,1), nie spowoduje żadnego zastąpienia. Znak # zostanie potraktowany jako znak rozdzielający. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe StringRight() 3-97 funkcje tekstowe Zwraca liczbę znaków określoną przez parametr Chars, począwszy od znaku umieszczonego skrajnie po prawej stronie. Składnia MessageResult=StringRight(Text,Chars); Parametry Opis Text Chars Łańcuch znaków lub zmienna tekstowa. Liczba znaków, które ma zwrócić funkcja, lub zmienna typu całkowitego. Uwagi Jeśli wartość parametru Chars wynosi 0, funkcja zwraca cały łańcuch znaków. Przykłady StringRight("The Pump is On", 2) zwraca "On" StringRight("The Pump is On", 5) zwraca "is On" StringRight("The Pump is On", 87) zwraca "The Pump is On" StringRight("The Pump is On", 0) zwraca "The Pump is On" StringSpace() funkcje tekstowe Wstawia łańcuch spacji do zmiennej tekstowej lub do wyrażenia. Składnia MessageResult=StringSpace(NumSpaces); Parametry Opis NumSpaces Liczba spacji do wygenerowania. Parametr ten może być wartością stałą lub zmienną programu InTouch. Uwagi Funkcja StringSpace() zwraca łańcuch spacji o długości zadanej za pomocą parametru NumSpaces. Przykłady Wszystkie spacje reprezentowane są za pomocą znaku "×". StringSpace(4) zwraca "××××" "Pump" + StringSpace(1) + "Station" zwraca "Pump×Station" Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-98 Rozdział 3 StringTest() funkcje tekstowe Sprawdza typ pierwszego znaku łańcucha znaków. Składnia DiscreteResult=StringTest(Text,TestType) Parametry Opis Text Łańcuch znaków na którym operuje funkcja. Łańcuch znaków lub zmienna tekstowa. Kryterium sprawdzania, zgodnie z poniższym zestawieniem: Typ Opis 1 Znak alfanumeryczny ('A'-'Z', 'a-z' i '0-9') 2 Cyfra (od '0' do '9') 3 Litera alfabetu (od 'A' do 'Z', od 'a' do 'z') 4 Duża litera alfabetu (od 'A' do 'Z') 5 Mała litera alfabetu (od 'a' do 'z') 6 Znak interpunkcyjny (0x21-0x2F) 7 Znak ASCII (0x00-0x7F) 8 Znak heksadecymalny ('A'-'F' or 'a'-'f' or '0'-'9') 9 Znak drukowany (0x21-0x2F) 10 Znak sterujący (0x00-0x1F lub 0x7F) 11 Znaki spacji (0x09-0x0D lub 0x20) TestType Uwagi Jeśli pierwszy znak łańcucha znaków Text jest znakiem zgodnym z kryterium określonym za pomocą TestType, funkcja StringTest() ustawia DiscreteResult na 1. Jeżeli funkcja StringTest() zawiera większą liczbę znaków, sprawdzany jest typ wyłącznie pierwszego znaku. Przykłady StringTest("ACB123",1) zwraca 1 StringTest("ABC123",5) zwraca 0 StringToIntg() funkcje tekstowe Funkcja ta przekształca wartość numeryczną łańcucha znaków (lub zmiennej tekstowej) na wartość całkowitą, która może być użyta do obliczeń matematycznych. Składnia IntegerResult=StringToIntg(Text); Parametry Opis Text Łańcuch znaków na którym operuje funkcja. Łańcuch znaków lub zmienna tekstowa. Uwagi Gdy określana jest wartość łańcucha znaków, system odczytuje pierwszy znak łańcucha i określa jego wartość numeryczną. Jeśli pierwszy znak nie jest cyfrą ani znakiem minus "-" (puste miejsca są ignorowane), wartość numeryczna łańcucha znaków wynosi 0. Jeśli pierwszy znak jest cyfrą lub znakiem minus "-", system odczytuje kolejne znaki do czasu napotkania znaku nie będącego cyfrą. Przykłady Jeżeli Tekst="ABCD", to ZmiennaAnaalogowa =0. Jeżeli Tekst="Wartość jest równa 22.2", to ZmiennaCałkowita=22 (ponieważ liczby całkowite nie mają części ułamkowej). Jeżeli Tekst="Wartość jest równa 22", then ZmiennaCałkowita =0. Patrz również StringFromIntg(), StringFromReal(), StringToReal(), Text() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe StringToReal() 3-99 funkcje tekstowe Przekształca zmienną tekstową na wartość rzeczywistą (liczbę zmiennoprzecinkową), na której mogą być przeprowadzone obliczenia matematyczne. Składnia RealResult=StringToReal(Text); Parametry Opis Text Łańcuch znaków na którym operuje funkcja. Łańcuch znaków lub zmienna tekstowa. Uwagi Gdy określana jest wartość łańcucha znaków, system odczytuje pierwszy znak łańcucha i określa jego wartość numeryczną. Jeśli pierwszy znak nie jest cyfrą ani znakiem minus "-" (puste miejsca są ignorowane), wartość numeryczna łańcucha znaków wynosi 0. Jeśli pierwszy znak jest cyfrą lub znakiem minus "-", system odczytuje kolejne znaki do czasu napotkania znaku nie będącego cyfrą. Przykłady Jeżeli Tekst ="ABCD", to ZmiennaRzeczywista=0. Jeżeli Tekst ="Wartość jest równa 22.261", to ZmiennaRzeczywista=22.261. Jeżeli Tekst=" Wartość jest równa 22", to ZmiennaRzeczywista=0. Patrz również StringFromReal(), StingFromIntg(), StringToIntg(), Text() StringTrim() funkcje tekstowe Usuwa niepotrzebne spacje z łańcucha znaków. Składnia MessageResult=StringTrim(Text,TrimType); Parametry Opis Text Łańcuch znaków z którego będą usuwane spacje. Łańcuch znaków lub zmienna tekstowa. Kryterium sprawdzania, zgodnie z poniższym zestawieniem: Typ Opis 1 Spacje zostaną usunięte z początku łańcucha znaków (wszystkie spacje na lewo od pierwszego znaku, który nie jest spacją). 2 Spacje zostaną usunięte z końca łańcucha znaków (wszystkie spacje na prawo od ostatniego znaku, który nie jest spacją). 3 Usunięte zostaną wszystkie spacje z wyjątkiem pojedynczych spacji pomiędzy słowami. TrimType Uwagi Text jest przeszukiwany pod kątem występowania spacji o kodach ASCII 0x09-0x0D lub 0x20, które zostaną usunięte. Parametr TrimType określa, które spacje zostaną usunięte. Przykład Wszystkie spacje reprezentowane są za pomocą znaku "×". StringTrim("×××××This×is×a××test×××××", 1) zwraca "This×is×a××test×××××" StringTrim("×××××This×is×a××test×××××", 2) zwraca "×××××This×is×a××test" StringTrim("×××××This×is×a××test×××××", 3) zwraca "This×is×a×test" Uwaga Funkcja StringReplace() pozwala na usunięcie WSZYSTKICH spacji z zadanej zmiennej tekstowej. W tym celu należy zamienić wszystkie spacje na pusty łańcuch znaków. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-100 Rozdział 3 StringUpper() funkcje tekstowe Przekształca wszystkie małe litery w podanym tekście na duże. Składnia MessageResult=StringUpper(Text); Parametry Opis Text Tekst, w którym małe litery mają być zmienione na duże. Łańcuch znaków lub zmienna tekstowa. Uwagi Funkcja nie zmienia małych liter, cyfr, symboli i znaków specjalnych (a także, niestety, polskich małych liter na duże). Przykłady StringUpper("abcd") zwraca "ABCD." StringUpper("22.2 is the value") zwraca "22.2 IS THE VALUE" Tan() funkcje matematyczne Zwraca tangens kąta podanego w stopniach. Składnia Przykłady Result=Tan(AngleNumber); Parametry Opis AngleNumber Wartość kąta w stopniach. Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Wave = 10 + 50 * Tan(6 * $seconds); Tan(45) zwraca 1 Tan(0) zwraca 0 Patrz również Sin(), Cos() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe Text() 3-101 funkcje tekstowe Funkcja ta powoduje zapisanie wartości zmiennej analogowej (całkowitej lub rzeczywistej) w postaci łańcucha znaków, w określonym przez parametr Format_Text formacie zapisu. Składnia Przykłady MessageResult=Text(Analog_Tag,"Format_Text"); Parametry Opis Analog_Tag Format_Text Liczba, zmienna rzeczywista lub całkowita, do konwersji. Parametr określający format zapisu. Łańcuch znaków lub zmienna tekstowa. MessageTag=Text(66,"#.00"); Message_Tag jest zmienną tekstową , 66 jest wartością zmiennej całkowitej lub rzeczywistej, a "#0.00" reprezentuje format zapisu wartości zmiennej: Jeżeli ZmiennaAnalogowa=66, to ZmiennaTekstowa=66.00. Jeżeli ZmiennaAnalogowa =22.269, to ZmiennaTekstowa=22.27. Jeżeli ZmiennaAnalogowa =9.999, to ZmiennaTekstowa=10.00. LogMessage("The current value of FreeserRoomTemp is:" + Text (FreezerRoomTemp, "#.#")); W zamieszczonym poniżej przykładzie, zmienna MessageTag zostanie ustawiona na wartość "One=1 Two=2". MessageTag = "One + " + Text(1,"#") + StringChar(32) + "Two +" + Text(2,"#"); Patrz również StringFromIntg(), StringToIntg(), StringFromReal(), StringToReal() Trunc() funkcje matematyczne Przybliża liczbę rzeczywistą przez odrzucenie części po prawej stronie kropki dziesiętnej. Składnia ResultNumericTag=Trunc(Number); Parametry Opis Number Dowolna liczba, zmienna rzeczywista lub całkowita programu InTouch. Uwagi Wynik wykonania tej funkcji jest taki sam, jak zapisania wartości zmiennej rzeczywistej jako zmiennej całkowitej . Przykłady Trunc(4.3) zwraca 4 Trunc(-4.3) zwraca -4 Patrz również Round() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-102 Rozdział 3 wcAddItem() obiekty sterujące okien Dodaje łańcuch znaków do listy lub listy rozwijalnej. Jeśli lista lub lista rozwijalna nie zostały utworzone jako posortowane, tekst jest dodawany na końcu listy. W przeciwnym wypadku, tekst jest wstawiany do listy, po czym jest ona ponownie sortowana. Składnia [ErrorNumber=]wcAddItem("ControlName","MessageTag"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Łańcuch znaków do wyświetlania. Łańcuch znaków lub zmienna tekstowa. MessageTag ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykłady Instrukcja zamieszczona poniżej dodaje łańcuch znaków do listy po otwarciu okna (przy użyciu skryptu związanego z oknem OnShow), zawierającego obiekt lista: wcAddItem("ListBox_1", "Chocolate"); wcAddItem("ListBox_1", "Vanilla"); wcAddItem("ListBox_1", "Strawberry"); Patrz również wcInsertItem() wcClear() obiekty sterujące okien Funkcja ta usuwa wszystkie elementy z listy (List box) lub listy rozwijalnej (Combo box). Składnia [ErrorNumber=]wcClear("ControlName"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Jeśli instrukcja zamieszczona poniżej zostanie np. zapisana w skrypcie związanym z przyciskiem, wciśnięcie tego przycisku spowoduje usunięcie wszystkich elementów listy ListBox_1: wcClear("ListBox_1"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe wcDeleteItem() 3-103 obiekty sterujące okien Funkcja ta usuwa pole listy lub element listy rozwijalnej o podanym indeksie. Składnia [ErrorNumber=]wcDeleteItem("ControlName",ItemIndex); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Numer oznaczający pozycję elementu na liście. Parametr ten może być wartością stałą lub zmienną programu InTouch. ItemIndex ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Zamieszczona poniżej instrukcja, po wciśnięciu skryptu klawiszowego, powoduje usunięcie 3-o elementu listy,. wcDeleteItem("ListBox_1", 3); wcDeleteSelection() obiekty sterujące okien Usuwa aktualnie wybrany element z listy lub listy rozwijalnej. Składnia [ErrorNumber =]wcDeleteSelection("ControlName"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Jeżeli wciśnięty zostanie przycisk zawierający zamieszczoną poniżej instrukcję, usunięte zostaną wszystkie, zaznaczone w danym momencie elementy listy rozwijalnej: wcDeleteSelection("ListBox_1"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-104 Rozdział 3 wcErrorMessage() obiekty sterujące okien Funkcja ta zwraca komunikat tekstowy opisujący błąd. Składnia ErrorMessage=wcErrorMessage(ErrorNumber); Parametry Opis ErrorMessage ErrorNumber Zmienna tekstowa. Liczba zwracana przez obiekty sterujące okien. Liczba lub zmienna całkowita. ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Pola tekstu, listy, listy rozwijalne, pola wyboru i pola wyboru wykluczającego. Przykłady Jeśli podczas ładowania listy wystąpi błąd, opis błędu w formie komunikatu tekstowego zostanie zapisany jako zmienna tekstowa ErrorDescription. W poniższym przykładzie w połączeniu animacyjne wyświetlającym wartości tekstowe wykorzystano zmienną ErrorDescription w celu wyświetlenia komunikatu błędzie. Skrypt związany z oknem On Show: ErrorNumber=wcLoadList("ListBox_1","c:\InTouch\recipe.txt"); ErrorDescription=wcErrorMessage(errornumber); Funkcja ta może również zostać wykorzystana do wyświetlania komunikatów o błędach dla wszystkich funkcji związanych z obiektami sterującymi Windows: ErrorNumber=wcAddItem("ListBox_1","United States"); ErrorMsg=wcErrorMessage(ErrorNumber); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe wcFindItem() 3-105 obiekty sterujące okien Funkcja ta wyznacza indeks pierwszego elementu listy lub listy rozwijalnej, który odpowiada podanemu łańcuchowi znaków Message. Składnia [ErrorNumber=]wcFindItem ("ControlName","MessageTag",DiscreteTag, Tagname); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Łańcuch znaków do celów porównawczych. Łańcuch znaków lub zmienna tekstowa. Określa sposób w jaki będą porównywane łańcuchy znaków. Przyjmuje jedną z następujących wartości: 0 = przy porównywaniu nie są rozróżniane litery duże i małe 1 = litery duże i małe są rozróżniane przy porównywaniu Nazwa zmiennej typu całkowitego. MessageTag DiscreteTag Tagname ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-106 Rozdział 3 wcGetItem() obiekty sterujące okien Funkcja ta odczytuje łańcuch znaków związany z elementem listy lub listy rozwijalnej, określony przez parametr ItemIndex. Składnia [ErrorNumber=]wcGetItem("ControlName",ItemIndex,Tagname); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Numer oznaczający pozycję elementu na liście. Liczba lub zmienna całkowita. Nazwa zmiennej typu całkowitego lub rzeczywistego. Funkcja wcGetItem przypisuje do tej zmiennej wartość numeryczną, odpowiadającą elementowi. ItemIndex Tagname ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Wciśniecie przycisku z którym powiązane jest zamieszczone poniżej wyrażenie powoduje przypisanie łańcucha znaków, odpowiadającego 10-u elementowi listy rozwijalnej zmiennej tekstowej ListSelection. wcGetItem("Combobox_1", 10, ListSelection); Jeśli dziesiątym elementem listy jest "Vanilia", zmiennej ListSelection będzie odpowiadał łańcuch znaków "Vanilia". Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe wcGetItemData() 3-107 obiekty sterujące okien Funkcja ta zwraca wartość całkowitą związaną z elementem listy lub listy rozwijalnej, określonym przez parametr ItemIndex. Składnia [ErrorNumber=]wcGetItemData("ControlName",ItemIndex,Tagname); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Numer oznaczający pozycję elementu na liście. Liczba lub zmienna całkowita. Nazwa zmiennej typu całkowitego lub rzeczywistego. Funkcja wcGetItemdata przypisuje tej zmiennej wartość numeryczną, odpowiadającą elementowi. ItemIndex Tagname ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Jeśli instrukcja zamieszczona poniżej zostanie np. zapisana w skrypcie związanym z przyciskiem , po naciśnięciu tego przycisku odczyta ona wartość numeryczną związaną z piątym elementem listy ListBox_1 i przypisze ją do zmiennej ItemValue: wcGetItemData("ListBox_1", 5, ItemValue); Jeśli piątemu elementowi listy przypisana jest wartość całkowita 4500, zmiennej ItemValue zostanie przypisana wartość 4500. Patrz również wcSetItemData() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-108 Rozdział 3 wcInsertItem() obiekty sterujące okien Wstawia do listy łańcuch znaków. ItemIndex jest numerem pozycji na liście, gdzie będzie umieszczony łańcuch znaków. W przeciwieństwie do funkcji wcAddItem(), funkcja wcInsertItem() nie sortuje listy, nawet jeśli pole listy lub lista rozwijalna zostały utworzone jako posortowane. Składnia [ErrorNumber=]wcInsertItem("ControlName",ItemIndex,"MessageTag"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Numer oznaczający pozycję elementu na liście. Jeśli ten parametr ma wartość -1, łańcuch znaków zostanie dodany na końcu listy. Liczba lub zmienna całkowita. Zawiera łańcuch znaków, który ma być wstawiony w miejscu określonym przez ItemIndex. Łańcuch znaków lub zmienna tekstowa. ItemIndex MessageTag ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Jeśli instrukcja zamieszczona poniżej zostanie np. umieszczona w skrypcie związanym z przyciskiem, naciśnięcie tego przycisku wstawia ona nowy element o nazwie "Blueberry" do listy, na czwartym miejscu od góry: wcInsertItem("ListBox_1", 4, "Blueberry"); Patrz również wcAddItem() wcLoadList() obiekty sterujące okien Funkcja ta zastępuje zawartość elementów listy lub listy rozwijalnej elementami wczytanymi z pliku FileName. Składnia [ErrorNumber=]wcLoadList("ControlName","Filename"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Zmienna lub tekst zawierająca nazwę pliku z zawartością elementu listy w formacie ASCII. Jeśli nie zostanie tu podana pełna ścieżka dostępu do pliku, a tylko jego nazwa, funkcja będzie poszukiwać pliku w katalogu aplikacji. Łańcuch znaków lub zmienna tekstowa. FileName ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Instrukcja zamieszczona poniżej wczytuje poprawnie sformatowaną listę (umieszczoną w pliku c:\InTouch.32\wclist.txt.) do listy rozwijalnej, w momencie otwarcia okna zawierającego tę listę (wykorzystywany jest o tego celu skrypt związany z oknem On Show): wcLoadList("Combobox_1", "c:\InTouch.32\wclist.txt"); Patrz również wcAddItem(), wcSaveList() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe wcLoadText() 3-109 obiekty sterujące okien Funkcja ta zastępuje zawartość pola tekstowego zawartością pliku o nazwie FileName. Składnia [ErrorNumber=]wcLoadText("ControlName", "Filename"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Zmienna lub tekst zawierający nazwę pliku z zawartością pola tekstowego w formacie ASCII. Jeśli nie zostanie tu podana pełna ścieżka dostępu do pliku, a tylko jego nazwa, funkcja będzie poszukiwać pliku w katalogu aplikacji. Łańcuch znaków lub zmienna tekstowa. FileName Uwagi Funkcja wcLoadText() obsługuje pliki zawierające dane w formacie ASCII, np. utworzone za pomocą programu Microsoft Notatnik. Kody błędów dla okien wymieniono w załączniku A. " Więcej informacji na temat zaawansowanych metod wyświetlania plików podano w opisie przeglądarki dokumentów, wchodzącej w skład pakietu Factory Suite's Productivity Pack. Zastosowanie Pola tekstowe. Przykład Instrukcja zamieszczona poniżej wczytuje zawartość pliku tekstowego (c:\InTouch.32\readme.txt) do pola tekstowego w momencie po otwarciu okna zawierającego pole tekstowe (przy użyciu skryptu związanego z oknem On Show): wcLoadText("Textbox_1", "c:\InTouch.32\readme.txt"); Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-110 Rozdział 3 wcSaveList() obiekty sterujące okien Funkcja ta zastępuje zawartość pliku FileName elementami obiektu lista lub lista rozwijalna. Składnia [ErrorNumber=]wcSaveList("ControlName","Filename"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Zmienna lub tekst określający nazwę pliku z zawartością listy w formacie ASCII. Jeśli plik nie istnieje, to zostaje utworzony. Tekst zapisany w pliku może zostać następnie załadowany do pola tekstu przy użyciu funkcji wcLoadText(). Łańcuch znaków lub zmienna tekstowa. FileName ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Listy i listy rozwijalne. Przykład Zamieszczona poniżej instrukcja powoduje zapisanie elementów listy w pliku (c:\InTouch.32\newlist.txt), w momencie naciśnięcia przycisku: wcSaveList("ListBox_1", "c:\InTouch.32\newlist.txt"); Uwaga Jeżeli pliki ASCII wykorzystywane do tworzenia listy lub listy rozwijalnej zostały utworzone przy pomocy innego programu, muszą być odpowiednio sformatowane, oraz zawierać wszystkie, wymagane dodatkowo informacje. Format: TypObiektu, LiczbaElementów ElementListy, WartośćElementu ElementListy, WartośćElementu : : : : ElementListy, WartośćElementu Przykład: Zamieszczony poniżej plik, wczytywany do listy, zawiera trzy elementy, elementy nie mają przyporządkowanych wartości (więcej informacji na temat wartości danych elementów podano w opisie funkcji wcSetItemData()). Plik ten ma następujący format: COMBOBOX, 3 Czekolada, 0 Wanilia, 0 Truskawki, 0 Opis: COMBOBOX jest typem obiektu. LiczbaElementów jest równa 3, ponieważ lista zawiera następujące elementy: Czekolada, Wanilia, Truskawki. Czekolada jest umieszczona na liście jako pierwszy element. Wanilia jako drugi, a Truskawki jako trzeci. Każdy z tych elementów ma wartość równą 0. Patrz również wcLoadList(), wcSetItemData() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe wcSaveText() 3-111 obiekty sterujące okien Zapisuje tekst z pola tekstu do pliku FileName.. Jeśli plik nie istnieje, to zostaje utworzony. Jeśli istnieje, musi być to plik umożliwiający odczyt i zapis. Składnia [ErrorNumber=]wcSaveText("ControlName","Filename"); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Zmienna lub tekst określający nazwę pliku z zawartością listy w formacie ASCII. Jeśli nie zostanie tu podana pełna ścieżka dostępu do pliku, a tylko jego nazwa, funkcja zapisze plik w katalogu aplikacji. Jeśli plik nie istnieje, to zostaje utworzony. Tekst zapisany w pliku może zostać następnie załadowany do pola tekstu przy użyciu funkcji wcLoadText(). Łańcuch znaków lub zmienna tekstowa. FileName ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Zastosowanie Pola tekstu. Przykład Wciśnięciu przycisku z którym powiązany jest zamieszczony poniżej skrypt powoduje zapisanie informacji wprowadzonej w polu tekstowym do pliku (c:\InTouch.32\newtext.txt). wcSaveText("Textbox_1", "c:\InTouch.32\newtext.txt"); Uwaga Funkcja wcSaveText() zapisuje pliki w formacie ASCII, tak, jak np. Notatnik systemu Windows. Patrz również wcLoadList() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-112 Rozdział 3 wcSetItemData() obiekty sterujące okien Funkcja ta przypisuje wartości całkowite (Number) elementom listy określonym przez parametr ItemIndex. Funkcja umożliwia przypisanie liczby do łańcucha znaków. Składnia [ErrorNumber=]wcSetItemData("ControlName",ItemIndex,Number); Parametry Opis ControlName Nazwa obiektu sterującego okna, np. ListBox_1. Łańcuch znaków lub zmienna tekstowa. Numer oznaczający pozycję elementu na liście. Liczba lub zmienna całkowita. Liczba całkowita zawierająca wartość elementu. Liczba lub zmienna całkowita. ItemIndex Number Uwagi Pełna lista zawierająca elementy może być utworzona za pomocą innego programu (np. Notatnika), a następnie wczytana poprzez wywołanie odpowiedniej funkcji. Pliki te musza być odpowiednio sformatowane, zgodnie z instrukcjami, podanymi przy opisie funkcji wcSaveList(). ! Kody błędów dla funkcji tego typu można znaleźć w Dodatku A: "Komunikaty o błędach dla obiektów sterujących Windows i funkcji związanych z alarmowaniem rozproszonym". Przykłady Mamy do czynienia z trzyskładnikową recepturą, zawierającą mąkę, cukier i sól. Dane: ilość mąki to 4500 gramów, cukru 1500 gramów a soli 325 gramów. Wartości te są przypisywane poszczególnym elementom w polu listy przy użyciu skryptu typu DataChange wykonywanego po wybraniu receptury o określonej nazwie: wcSetItemData("ListBox_1", 1, 4500); {ustawienie 1-go elementu na liście (mąka)=4500} wcSetItemData("ListBox_1", 2, 1500); { ustawienie 2-go elementu na liście (cukier)=1500} wcSetItemData("ListBox_1", 3, 325); liście (sól)=325} { ustawienie 3-go elementu na Funkcja wcGetItemData() zwraca wartość elementu o podanym indeksie. Ta wartość numeryczna przypisywana jest do parametru Tagname. Parametr ten może być zmienną typu I/O Integer, zapisującą swoją wartość bezpośrednio do urządzenia. Patrz również wcLoadList(), wcSaveList(), wcGetItemData() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe WWControl() 3-113 różne Pozwala na Przywrócenie,. Zminimalizowanie, Maksymalizowanie lub Zamknięcie aplikacji z poziomu pakietu InTouch. Składnia WWControl("AppTitle","ControlType"); Parametry Opis AppTitle Nazwa sterowanej aplikacji. Nazwę danej aplikacji można uzyskać za pomocą funkcji InfoAppTitle(). Łańcuch znaków lub zmienna tekstowa. Określa w jaki sposób ma zachowywać się aplikacja po uruchomieniu (działanie jest identyczne z wybraniem odpowiedniego polecenia z menu do sterowania oknem). Łańcuch znaków lub zmienna tekstowa. Typ Opis "Restore" Uaktywnienie okna danej aplikacji i wyświetlenie go z przywróceniem poprzedniego rozmiaru i pozycji. "Minimize" Uaktywnienie okna danej aplikacji i zmniejszenie go do ikony. "Maximize" Uaktywnienie okna danej aplikacji i wyświetlenie go na całym ekranie. "Close" Zamknięcie danej aplikacji. ControlType Przykłady WWControl("Calculator","Restore"); WWControl("Microsoft Excel","Close"); WWControl(InfoAppTitle("View"), "Close"); Patrz również InFoAppTitle(), ActivateApp(), StartApp() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-114 Rozdział 3 WWExecute() WWDDE Wykonanie polecenia (za pomocą protokołu DDE) do określonej aplikacji (Application) i tematu (Topic). Składnia [Status=]WWExecute("Application","Topic","Command"); Parametry Opis Application Nazwa aplikacji, do której jest wysyłane polecenie. Łańcuch znaków lub zmienna tekstowa. Nazwa tematu w obrębie aplikacji, do której jest wysyłane polecenie. Łańcuch znaków lub zmienna tekstowa. Polecenie, które ma zostać wysłane. Łańcuch znaków lub zmienna tekstowa. Topic Polecenie Uwagi Łąńcuch znaków Command zostanie przesłany do określonej aplikacji (Application) i tematu (Topic). Przykłady Poniższa instrukcja spowoduje wykonanie makroinstrukcji w Excelu: Macro="Macro1!TestMacro"; Command="[Run(" + StringChar(34) + Macro + StringChar(34) + ",0)]"; WWExecute("excel","system",Command); Wykonanie instrukcji WWExecute("excel","system",Command); spowoduje wysłanie do Excela następującego polecenia (i uruchomienie makra TestMacro): [Run("Macro1!TestMacro")] Poniższa instrukcja spowoduje wykonanie makroinstrukcji w bazie danych Access: WWExecute("MSAccess","system","MyMacro"); Funkcja WWExecute zwraca wartość 1, jeśli aplikacja jest uruchomiona, podany temat (Topic) istnieje i polecenie zostało pomyślnie przesłane. Funkcja zwraca wartość 0, jeśli aplikacja jest zajęta oraz -1, jeśli wystąpi błąd. Tak więc można monitorować status polecenia: Status=WWExecute("excel","system",Command); Status jest zmienną typu Integer, o wartościach 1, -1 lub 0. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Funkcje skryptowe WWPoke() 3-115 WWDDE Funkcja ta wysyła wartość (za pomocą protokołu DDE) do zadanej pozycji (Item) i tematu (Topic) wewnątrz określonej aplikacji (Application). Składnia [Status=]WWPoke("Application","Topic","Item","TextValue"); Parametry Opis Aplikacja Nazwa aplikacji, do której wysyłany jest łańcuch znaków. Łańcuch znaków lub zmienna tekstowa. Nazwa tematu w obrębie aplikacji, do której jest wysyłane polecenie. Łańcuch znaków lub zmienna tekstowa. Nazwa pozycji w obrębie tematu. Łańcuch znaków lub zmienna tekstowa. Zmienna tekstowa lub łańcuch znaków. Jeśli zachodzi potrzeba przesłania liczby, można przekształcić ją na łańcuch znaków używając jednej z funkcji: Text(), StringFromIntg() lub StringFromReal(). Łańcuch znaków lub zmienna tekstowa. Topic Item TextValue Uwagi Zamieszczona poniżej instrukcja powoduje wysłanie wartości Textvalue do określonej pozycji (Item), tematu (Topic) i aplikacji (Application). Przykład Poniższa instrukcja przekształca wartość numeryczną na łańcuch znaków i przesyła ją do komórki arkusza kalkulacyjnego Excel: String=Text(Value,"0"); WWPoke("excel","sheet1","r1c1",String); " Więcej informacji na temat współpracy arkusza kalkulacyjnego Excel 5.0 z programem InTouch (przy pomocy DDE) podano w InTouch - Poradnik Użytkownika. Uwaga Wynik działania funkcji WWPoke() przy przesyłaniu danych w obrębie tej samej aplikacji InTouch jest nieokreślony. Nie jest gwarantowane pomyślne wykonanie polecenia WWPoke(), a najbardziej prawdopodobne jest wystąpienie błędu przekroczenia dopuszczalnego okresu oczekiwania. Funkcja WWPoke() zwraca wartość 1, jeśli aplikacja jest uruchomiona, podany temat istnieje i łańcuch znaków został pomyślnie przesłany. Funkcja zwraca wartość 0, jeśli aplikacja jest zajęta oraz -1, jeśli wystąpi błąd. Tak więc można monitorować status polecenia: Status=WWPoke("excel","sheet1","r1c1",String); Status jest zmienną typu Integer, o wartościach 1, -1 lub 0. Patrz również Text(), StringFromIntg(), StringFromReal() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware 3-116 Rozdział 3 WWRequest() WWDDE Funkcja ta wysyła jedno polecenie odczytu wartości (za pomocą protokołu DDE) z określonej aplikacji (Application), tematu (Topic) i pozycji (Item). Składnia WWRequest(Application,Topic,Item,ValueMsg_Tag); Parametry Opis Application Nazwa aplikacji, z której ma być przesłany łańcuch znaków. Łańcuch znaków lub zmienna tekstowa. Nazwa tematu w obrębie aplikacji, z której ma być przesłany łańcuch znaków. Łańcuch znaków lub zmienna tekstowa. Pozycja w obrębie tematu z której odczytywane będą dane. Łańcuch znaków lub zmienna tekstowa. Zmienna tekstowa ujęta w cudzysłowy, zawierająca dane czytane z określonej aplikacji (Application), tematu (Topic) i pozycji (Item). Łańcuch znaków lub zmienna tekstowa. Topic Item ValueMsg_Tag Uwagi Zamieszczona poniżej instrukcja przypisuje zmiennej ValueMsg_Tag wartość DDE odczytaną z określonej pozycji (Item), tematu (Topic) i aplikacji (Application). Wartość ta jest zmienną tekstową. Jeżeli otrzymana wartość jest wartością numeryczną, należy ją przekonwertować za pomocą funkcji StringToIntg() lub StringToReal(). Przykłady Poniższa instrukcja wysyła żądanie przesłania zawartości komórki Excela i przekształca przesłany łańcuch znaków na wartość liczbową: WWRequest("excel","[Book1.xls]sheet1","r1c1",Result); Value=StringToReal(Result); Funkcja WWRequest zwraca wartość 1, jeśli aplikacja jest uruchomiona, podany temat istnieje i łańcuch znaków został pomyślnie przesłany. Funkcja zwraca wartość 0, jeśli aplikacja jest zajęta oraz -1, jeśli wystąpi błąd. Tak więc można monitorować status polecenia: Status=WWRequest("excel","[Book1.xls]sheet1","r1c1",Result); Status jest zmienną typu Integer, o wartościach 1, -1 lub 0. Patrz również StringToIntg(), StringToReal() Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware A-1 Z A Ł Ą C Z N I K A Usuwanie zakłóceń przy korzystaniu z funkcji skryptowych Szereg funkcji skryptowych zwraca wartość, zależną od wyniku ich działania. Wartość ta nazywana jest kodem wynikowym, lub kodem błędu, i może być zastosowana do określenia rezultatu działania funkcji. W niniejszym załączniku opisano kody wynikowe dla funkcji skryptowych obiektów sterujących okien, receptur, oraz funkcji skryptowych SQL. Opisano również Elementy SPC DDE, które mogą być zastosowane do odczytywania Zestawów danych, oraz do sterowania operacjami na wykresach. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware A-2 Załącznik A Komunikaty o błędach dla obiektów sterujących okien i alarmów rozproszonych Funkcje związane z obiektami sterującymi okien i z alarmowaniem rozproszonym zwracają wartość zależną od wyniku działania funkcji. Zwracana wartość jest wykorzystywana do diagnozowania błędów i może być podstawiona pod zmienną całkowitą. Przykładowo: ErrorNumber = wcGetItem("ControlName", Number, Tagname); gdzie: ErrorNumber jest zmienną typu Integer w której zapisany jest kod błędu. Wartość ta może być przekazana do funkcji wcErrorMessage(). Funkcja wcMessage() zwraca opis tekstowy błędu. Przykładowo: ErrorMsg = wcErrorMessge(ErrorNumber); gdzie: ErrorMsg jest zmienną tekstową zawierającą opis błędu. W zamieszczonej poniżej tabeli zestawiono kody oraz ich opis. Kod błędu 0 -1 -2 -3 -4 -5 -6 -x* Opis Operacja zakończona pomyślnie Błąd ogólny Brak pamięci Atrybut tylko do odczytu Określony element już istnieje Nieznana nazwa obiektu Nieznana nazwa właściwości Błąd nieznany * -x jest dowolnym numerem. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A A-3 Usuwanie zakłóceń przy korzystaniu z funkcji do obsługi receptur W celu odczytania kodu błędu zwracanego przez funkcje receptur należy go przypisać do zmiennej całkowitej, zdefiniowanej w programie InTouch. Przykład: ErrorCode = RecipeLoad(FileName, UnitName, RecipeName); Funkcja RecipeLoad() ustawia wartość zmiennej ErrorCode na 0, o ile jej działanie zakończyło się pomyślnie. W przypadku wystąpienia błędu w czasie wykonywania funkcji RecipeLoad(), jego kod zostanie przypisany do zmiennej analogowej ErrorCode. Poniżej zamieszczono zestawienie wszystkich kodów błędów, oraz odpowiadające im komunikaty, wraz z ich opisem. Wartość Błąd Opis Operacja zakończona pomyślnie Pomyślne wykonanie wywołanej funkcji receptur. -1 Brak szablonu receptur Brak pliku z określonym szablonem receptury -2 Nie uruchomiona aplikacja WindowViewer Funkcja receptur została wywołana przez inny program, ale nie może zostać wykonana ponieważ program WindowViewer nie jest uruchomiony -3 Brak pamięci Zbyt mało pamięci na zakończenie wykonywanego działania -4 Zbyt długi wiersz w pliku z szablonem receptury Liczba znaków w wierszu pliku z szablonem receptury przekracza maksymalną, dopuszczalną wartość. -5 Obcięta linia w pliku receptury Linia w pliku z szablonem receptury została obcięta -6 Brak poprawnego pliku z szablonami receptur Wskazany plik nie jest poprawnym plikiem z szablonami receptur .CSV. 0 ! Więcej informacji na temat zestawów i nazw receptur podano w podręczniku w wersji elektronicznej Recipe Manager User's Guide. -7 Spodziewane "unit" lub "recipe" W pliku z szablonami receptur brakuje nazwy zestawu lub nazwy receptury. ! Więcej informacji na temat zestawów i nazw receptur podano w podręczniku w wersji elektronicznej Recipe Manager User's Guide. -8 Brak zdefiniowanych zestawów w pliku z szablonami receptur W pliku z szablonami receptur nie zostały zdefiniowane zestawy danych. -9 Nazwa receptury nie znaleziona w pliku z szablonami receptur Określona nazwa receptury nie została zdefiniowana w pliku z szablonami receptur. -10 Nazwa zestawu nie znaleziona w pliku z szablonami receptur Określona nazwa zestawu nie została zdefiniowana w pliku z szablonami receptur. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware A-4 Załącznik A Wartość Błąd Opis Wprowadzony został niewłaściwy typ elementu w pliku z szablonami receptur. Dopuszczalne jest stosowanie wyłącznie typów Analog, Discrete i Message. -12 Spodziewane słowo "Analog", "Discrete", "Message" -13 Niezgodność typów "Analog", "Discrete", lub "Message" Niezgodność typów pomiędzy zadaną zmienną a typem elementu np. element receptury jest typu analogowego, a w zestawie zdefiniowano dla niego zmienną typu tekstowego. -14 Niewłaściwa wartość dyskretna, spodziewana wartość "0" lub "1" W pliku z szablonami receptur wprowadzona została niewłaściwa wartość dla typu dyskretnego. Dopuszczalnymi wartościami typu dyskretnego są 0 lub 1. -15 Niemożliwe otwarcie pliku tymczasowego Plik tymczasowy nie może zostać otworzony, prawdopodobnie z powodu braku wolnego miejsca na dysku. -16 Błąd w czasie zapisu do pliku z szablonem receptury W czasie zapisywania do pliku z szablonem receptury wystąpił błąd -17 Brak wyboru ze strony użytkownika Użytkownika wybrał polecenie Cancel w oknie dialogowym Select a Recipe, a nie nazwę receptury. -19 Szablon receptury jest wykorzystywany przez inną aplikację Żądany szablon receptury jest już otwarty, przez co nie jest dostępny dla programu WindowViewer. Wyświetlanie komunikatów dla kodów błędów Każda funkcja receptur zwraca numer kodu błędu. Umieszczenie go w skrypcie funkcji RecipeGetMessage() pozwala na przypisanie komunikatu błędu do zmiennej tekstowej. W tym celu można skorzystać z następującego skryptu związanego ze zmianą wartości: RecipeGetMessage(ErrorCode, ErrorMessage, 131); Skrypt ten będzie wykonywany po każdorazowej zmianie wartości zmiennej analogowej ErrorCode. Spowoduje on odczytanie przez funkcję RecipeGetMessage() aktualnej wartości liczbowej zmiennej ErrorCode oraz zapisanie komunikatu towarzyszącego tej wartości jako zmiennej ErrorMessage. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A A-5 Nazwy elementów SPC DDE Z elementów DDE można korzystać w celu uzyskania informacji o zestawach danych, oraz w celu sterowania operacjami na wykresach. Nazwa aplikacji to SPC. Nazwa tematu jest nazwą zestawu danych. Uwaga Wszystkie elementy SPC DDE traktowane są tak samo zarówno w przypadku rozproszonego SPC, jak i w przypadku nie rozproszonego SPC, jednak w przypadku rozproszonego SPC nazwa tematu musi być typu Indirect Dataset. DDE SPC sterowanie i wyświetlanie Elementy DDE sterowania i wyświetlania przeznaczone są do sterowania i wyświetlania informacji o tematach Zestawu danych. Z elementów DDE Sterowania korzystają wszystkie stanowiska. Są to wartości zestawów danych zebranych produktów dla zdalnego zestawu danych. Każde stanowisko korzysta ze swoich elementów wyświetlania DDE. Są to wartości próbne dla produktu wyświetlanego na lokalnym stanowisku. Zmodyfikowane próbki mogą być wykorzystane w odniesieniu do zebranych wyświetlanych produktów lokalnego zestawu danych. Zmiany wprowadzone poprzez kliknięcie na wyświetlanym wykresie są uwzględniane w wyświetlanym produkcie. Elementy SPC DDE wprowadzają zmiany w zebranych produktach. Wyświetlany produkt, oraz zebrane produkty muszą posiadać swoje własne wartości próbne, którymi są ostatnio zebrane próbki. Dla zebranych i wyświetlanych produktów oceniane są i pamiętane alarmy. Są one sygnalizowane dla zebranych produktów wyłącznie w czasie pracy aplikacji. Uwaga Poza zebranymi i wyświetlanymi produktami, wiele elementów SPC DDE może być stosowanych wyłącznie w odniesieniu do zebranych produktów. Elementy te oznaczone są przez umieszczenie znaku (*) przed nazwą elementu SPC DDE na liście. Nazwa elementu Typ DDE Dostęp AutoCollection Discrete O/Z *CalculateControlLimits Discrete O/Z DatasetName Message (32) O/Z HistogramLCL Real O HistogramUCL Real O Kurtosis LastSampleDisplayed Real Integer O O/Z *ManualInputDialog Discrete O/Z MeasurementsPerSample Integer O NewProduct Message (32) O/Z Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Opis Aktywowanie/ deaktywowanie automatycznego zbierania danych. Ustawienie wartości 1 powoduje rozpoczęcie obliczania wartości granicznych sterowania. Ustawia parametr DatasetName, wykorzystywany przez Indirect Dataset. Wyświetla Dolne wartości graniczne sterowania histogramu, w oparciu o populację. Wyświetla Górne wartości graniczne sterowania histogramu, w oparciu o populację. Kształt dystrybucji histogramów. Ustawia numer ostatniej próbki wyświetlanej przez Zestaw danych. Ustawienie wartości 1 powoduje wyświetlanie wbudowanego okna dialogowego do ręcznego wprowadzania danych. Wyświetlenie skonfigurowanej liczby pomiarów przypadających na próbkę Wykorzystywana do tworzenia nowej Nazwy produktu. A-6 Załącznik A Nazwa elementu Typ DDE Dostęp *ProductCollected Message (32) O/Z ProductDisplayed Message (32) O/Z SampleSize Integer O SamplesPerControlChart Integer O/Z SamplesPerHistogram Integer O/Z SamplesPerLimitCalc Integer O/Z SamplesPerPareto Integer O/Z SelSPCOutSpecMsg Message O Skewness Real O SPCAllowSampDelMod Discrete O/Z StartCollection Discrete O/Z Opis Zmienia Nazwę produktu zebranego przez Zestaw danych. Zmienia Nazwę produktu wyświetlanego przez Zestaw danych. Rozmiar próbki dla Zestawu danych NP. Ustawia liczbę próbek wyświetlanych na Wykresie kontrolnym. Ustawia liczbę próbek wyświetlanych na histogramie. Ustawia liczbę próbek wykorzystywanych przy obliczaniu kontrolnych wartości granicznych. Ustawia liczbę próbek wykorzystywanych do wyświetlania na wykresie kontrolnym Pareto. Zmienna tekstowa dla alarmu "Próbka poza dopuszczalnymi wartościami granicznymi." Wyświetla odchylenie od średniej na Histogramie. Włączenie/ wyłączenie opcji Delete i Modify menu rozwijanego po wciśnięciu prawego przycisku myszy. Ustawienie wartości 1 powoduje rozpoczęcie cyklu automatycznego zbierania. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A A-7 Elementy DDE SPC bieżącej próbki Wszystkie elementy DDE bieżącej próbki odnoszą się do ostatnio zebranej próbki zadanego Zestawu danych. Mogą one być zastosowane do zmodyfikowania źródłowych danych, oraz wartości granicznych dla Nazwy zestawu danych. W celu wprowadzenia zmian w informacjach o bieżącej próbce, należy zapisać odpowiedni element DDE, a następnie ustawić element DDE CurrentUpdate na 1. Efekt będzie identyczny jak w przypadku ponownego wprowadzenia próbki, i spowoduje ponowne wykonanie odpowiednich obliczeń. Po wprowadzeniu próbki, program SPC ustawi wartość elementu i DDE CurrentUpdate na 0. Rozpoczęcie przez następną próbkę cyklu zbierania, blokuje możliwość uaktualnienia elementu DDE bieżącej próbki. Z elementów DDE bieżącej próbki korzystają wspólnie wszystkie stacje. Wartości tych elementówi reprezentują ostatnio zebraną próbkę zebranego produktu. W przypadku rozproszonego SPC, na początku wszystkie wartości ustawiane są na zero. SPC co 5 sekund łączy się z bazą danych oraz sprawdza nowe dane. Zawsze w przypadku znalezienia nowych informacji, wartości elementów są uaktualniane. Modyfikacje bieżącej próbki są buforowane lokalnie, aż do ustawienia elementu CurrentUpdate na 1. Następnie wartości umieszczane są w pakiecie bieżącej próbki i wysyłane do sieciowego stanowiska zestawu danych w celu przeprowadzania analizy i zapamiętania ich. Modyfikacje bieżących próbek wskazujące na inny zebrany produkt, oraz bieżące próbki o numerze różnym od ostatnio zapisanej próbki są odrzucane przez Serwer. Uwaga Poza zebranymi i wyświetlanymi produktami, wszystkie "Bieżące" Elementy i DDE SPC mają zastosowanie wyłącznie w odniesieniu do zebranych produktów. Nazwa elementu Typ DDE Dostęp CurrentCauseCode Integer O/Z CurrentCauseString Message (128) Message (50) O CurrentCp Real O CurrentCpk Real O CurrentDate Message (8) O/Z CurrentFlag Discrete O/Z CurrentIgnoreValue Discrete O/Z CurrentMx Real O/Z CurrentR Real O CurrentRBar Real O/Z CurrentRLCL Real O/Z CurrentComment Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware O/Z Opis Ustawia wartość SpecialCauseCode dla bieżącej próbki. Wyświetla opis numeru SpecialCauseCode dla bieżącej próbki. Element wykorzystywany do zapisu różnych komentarzy powiązanych z bieżącą próbką. Element ten wyświetla możliwości dla bieżącej próbki. Element ten wyświetla wyśrodkowane możliwości dla bieżącej próbki. Ustawia datę dla bieżącej próbki w formacie DD/MM/YY. Jeżeli data zostanie niepoprawnie wprowadzona, przyjęta zostanie data bieżąca. Ustawia element flag dla bieżącej próbki. Ustawia ignorowanie bieżącej próbki w momencie gdy Wykres kontrolny jest automatycznie skalowany. Ustawia indywidualny pomiar wartości dla bieżącej próbki. (x=1 do 25.) Elementten wyświetla zakres dla bieżącej próbki. Element ten ustawia średni zakres dla bieżącej próbki. Element ten ustawia dolne, kontrolne wartości graniczne. A-8 Załącznik A Nazwa elementu Typ DDE Dostęp CurrentRUCL Real O/Z CurrentSample Real O CurrentSampleBar Real O/Z CurrentSampleNumber CurrentTarget Integer Real O O/Z CurrentTime Message (8) O/Z CurrentUpdate Discrete O/Z CurrentXLCL Real O/Z CurrentXLSL Real O/Z CurrentXUCL Real O/Z CurrentXUSL Real O/Z SPC2L3Out2SD Integer O SPC2L3Out2SDMsg Message O SPC4L5Out1SD Integer O SPC4L5Out1SDMsg Message O SPCConSampAltUpDn Integer O SPCConSampAltUpDnMsg Message O SPCConSampln1SD Integer O SPCConSampln1SDMsg Message O Opis Element ten ustawia górne, kontrolne wartości graniczne. Element ten wyświetla wartość ostatniego punktu próbkowania (tj. X, C, P). Ustawia średnią bieżącej próbki w danym punkcie próbkowania. Wyświetla numer ostatnio zebranej próbki. Ustawia wartość docelową w danym punkcie próbkowania. Ustawia czas dla bieżącej próbki w formacie HH:MM:SS. Jeżeli czas zostanie niepoprawnie wprowadzony, przyjęty zostanie czas bieżący. Element ten należy ustawić na 1 w celu wprowadzenia zmian w informacji o próbce, w dowolnym z bieżących pól. Ustawia Dolną, kontrolną wartość graniczną (LCL - Lower Control Limit) dla bieżącej próbki. Ustawia Dolną, wartość graniczną specyfikowaną (LSL - Lower Specification Limit) dla bieżącej próbki. Ustawia Górną , kontrolną wartość graniczną (UCL - Upper Control Limit) dla bieżącej próbki. Ustawia Górną, wartość graniczną specyfikowaną (USL - Upper Specification Limit) dla bieżącej próbki. Licznik alarmów dla alarmu "2 z 3 ostatnich próbek poza 2 odchyleniami standardowymi SS." Zmienna tekstowa dla alarmu "2 z 3 ostatnich próbek poza 2 odchyleniami standardowymi SS." Licznik alarmów dla alarmu "4 z 5 ostatnich próbek poza 1 odchyleniem standardowym SS." Zmienna tekstowa dla alarmu "4 z 5 ostatnich próbek poza 1 odchyleniem standardowym SS." Licznik alarmów dla alarmu "Wartość kolejnych próbek naprzemiennie zmniejsza się i zwiększa." Zmienna tekstowa dla alarmu "Wartość kolejnych próbek naprzemiennie zmniejsza się i zwiększa." Licznik alarmów dla alarmu "Kolejne próbki znajdują się wewnątrz 1 Odchylenia standardowego." Zmienna tekstowa dla alarmu "Kolejne próbki znajdują się wewnątrz 1 Odchylenia standardowego." Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A Nazwa elementu Typ DDE Dostęp Opis SPCConSamplncDec Integer O SPCConSamplncDecMsg Message O SPCConSampOneSideCL Integer O SPCConSampOneSideCLMsg Message O SPCConSampOut1SD Integer O SPCConSampOut1SDMsg Message O SPCNLNOutNSD Integer O SPCNLNOutNSDMsg Message O SPCNLNOutNSDSS Integer O SPCNLNOutNSDSSMsg Message O SPCOutRCtrl Integer O SPCOutRCtrlMsg Message O SPCOutXCtrl Integer O SPCOutXCtrlMsg Message O SPCOutSpec Integer O SPCOutSpecMsg Message O SPCResetAlarmCounters Discrete O/Z Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware A-9 Licznik alarmów dla alarmu "Wartość kolejnych próbek zmniejsza się lub zwiększa." Zmienna tekstowa dla alarmu "Wartość kolejnych próbek zmniejsza się lub zwiększa." Licznik alarmów dla alarmu "Wartość kolejnych próbek znajduje się po jednej stronie osi symetrii." Zmienna tekstowa dla alarmu "Wartość kolejnych próbek znajduje się po jednej stronie osi symetrii." Licznik alarmów dla alarmu "Kolejne próbki znajdują się poza 1 Odchyleniem standardowym." Zmienna tekstowa dla alarmu "Kolejne próbki znajdują się poza 1 Odchyleniem standardowym." Licznik alarmów dla alarmu "? Poza ostatnią? próbka poza? Standardowym odchyleniem." Zmienna tekstowa dla alarmu "? Poza ostatnią? próbka poza? Standardowym odchyleniem." Licznik alarmów dla alarmu "?Poza ostatnią? Próbka poza ? standardowym odchyleniem SS." Zmienna tekstowa dla alarmu "?Poza ostatnią? Próbka poza ? standardowym odchyleniem SS." Licznik alarmów dla alarmu "Zakres poza kontrolnymi wartościami granicznymi." Zmienna tekstowa dla alarmu "Zakres poza kontrolnymi wartościami granicznymi." Licznik alarmów dla alarmu Wykresu X "Próbka poza kontrolnymi wartościami granicznymi." Zmienna tekstowa dla alarmu Wykresu X "Próbka poza kontrolnymi wartościami granicznymi." Licznik alarmów dla alarmu "Próbka poza dopuszczalnymi wartościami specyfikowanymi." Zmienna tekstowa dla alarmu "Próbka poza dopuszczalnymi wartościami granicznymi." Zeruje wszystkie liczniki alarmów. A-10 Załącznik A Elementy DDE SPC ręcznego wprowadzania Elementy DDE ręcznego wprowadzania stosowane są do tworzenia okien użytkownika do ręcznego wprowadzania danych. W celu zastosowania elementów ręcznego wprowadzania danych, ustawić wartości odpowiednich elementów, a następnie ustawić element DDE MI_Save na wartość 1. Spowoduje to wprowadzenie informacji zawartych w innych polach MI jako nowej próbki. Po wprowadzeniu próbki, program SPC ustawi wartość elementu DDE MI_Save na 0 (zero). W przypadku rozproszonego SPC, elementy ręcznego wprowadzania danych mają zasięg lokalny dla każdego ze stanowisk. Wartości są lokalnie buforowane na każdym ze stanowisk, aż do momentu kiedy element DDE MI_Save zostanie ustawiona na 1. Po ustawieniu MI_Save na 1, wartości umieszczane są w pakiecie ręcznie wprowadzonych danych i wysyłane do sieciowego stanowisk zestawu danych w celu przeprowadzenia analizy i ich zapisania. Uwaga Poza zebranymi i wyświetlanymi produktami, wszystkie elementy DDE SPC "Ręczne" mają zastosowanie wyłącznie w odniesieniu do zebranych produktów. Nazwa elementu Typ DDE Dostęp MI_CauseCode Integer O/Z MI_CauseString Message (127) O MI_Comment Message (50) O/Z MI_Date Message (8) O/Z MI_Flag Discrete O/Z MI_IgnoreValue Discrete O/Z MI_Mx Real O/Z Opis Ustawia wartość SpecialCauseCode dla ręcznie wprowadzanej próbki. Wyświetla opis numeru wejściowego SpecialCauseCode dla próbki. Element ten wykorzystywany do zapisu/ odczytu różnych komentarzy wprowadzonych dla próbką. Ustawia datę dla bieżącej próbki. Data musi być wprowadzona w formacie DD/MM/YY. Jeżeli data zostanie niepoprawnie wprowadzona, przyjęta zostanie data bieżąca. Ustawia element Flag dla ręcznie wprowadzanej próbki. Ustawia ignorowanie bieżącej próbki w momencie gdy Wykres kontrolny jest automatycznie skalowany. Ustawia wartość dla oznaczonego ręcznie wprowadzonego pomiaru (x=1 do 25). Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A Nazwa elementu MI_Save Typ DDE Discrete A-11 Dostęp Opis O/Z Zapisuje wprowadzoną ręcznie w innych polach MI informację jako nową próbkę. Uwaga Jeżeli element MI_Save ustawiony jest na 1, wartości wszystkich elementów MI zapisywane są do odpowiednich elementów i DDE Current, a element CurrentSampleNumber jest inkrementowana o 1. MI_Time Message (8) Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware O/Z Ustawia czas dla bieżącej próbki. Czas musi być wprowadzona w formacie HH:MM:SS. Jeżeli czas zostanie niepoprawnie wprowadzony, przyjęty zostanie domyślnie czas bieżący. A-12 Załącznik A Elementy DDE do zaznaczania SPC Elementy DDE do zaznaczania mogą być wykorzystane do uzyskiwania szczegółowych informacji o dowolnej z próbek. Elementy DDE do zaznaczania umożliwiają wprowadzenie numeru próbki, która ma być wyświetlana. Po wprowadzeniu, program SPC zaktualizuje wszystkie elementy do zaznaczania, wprowadzając szczegółowe informacje o zaznaczonym numerze próbki. Nie można zmienić starych danych, ale można dodać elementy Special Cause Code, Flags i/lub Comments poprzez wprowadzenie wartości do odpowiednich elementówi, i następnie ustawienie elementu SelectionUpdate na 1. Spowoduje to wprowadzenie do rekordu zaznaczonej próbki nowych wartości. Po wprowadzeniu próbki, program SPC ustawi wartość elementu DDE SelectionUpdate na 0 (zero). W przypadku rozproszonego SPC, elementy DDE do zaznaczania mają zasięg lokalny dla każdego ze stanowisk. Są to wartości próbek zarejestrowane na stanowisku sieciowym dla określonego numeru próbki zebranego produktu. Po ustawieniu elementu DDE do zaznaczania na numer próbki, z pliku z próbkami na stanowisku sieciowym odczytywane są dane. Nie można zmienić starych danych, ale można dodać elementy Special Cause Code, Flags i/lub Comments poprzez wprowadzenie wartości do odpowiednich elementów, i następnie ustawienie elementu SelectionUpdate na 1. Po ustawieniu wartości SelectionUpdate na 1, następuje wysłanie elementu Cause Code, Comment, flag i Ignore Value w formie pakietu do stanowiska sieciowego. Uwaga Poza zebranymi i wyświetlanymi produktami, wszystkie "Do zaznaczania" Elementy DDE SPC mają zastosowanie wyłącznie w odniesieniu do zebranych produktów. Nazwa elementu Typ DDE Dostęp Selection Integer O/Z SelectionCauseCode Integer O/Z SelectionCauseString Message (128) Message SelectionComment (50) O O/Z SelectionCp Real O SelectionCpk Real O SelectionDate O SelectionFlag Message (8) Discrete SelectionIgnoreValue Discrete O/Z SelectionMx Real O SelectionProduct Message (32) O O/Z Opis Ustawienie tego elementu na numer próbki powoduje wprowadzenie do wszystkich zaznaczonych elementów odpowiednich danych. Ustawia wartość SpecialCauseCode dla zaznaczonej próbki. Wyświetla opis wprowadzonego Special Cause Code. Element ten wykorzystywany do zapisu/ odczytu różnych komentarzy, wprowadzonych dla zaznaczonej próbki. Element ten wyświetla możliwości dla zaznaczonej próbki. Element ten wyświetla wyśrodkowane możliwości dla zaznaczonej próbki. Element ten wyświetla datę dla zaznaczonej próbki. Ustawia element Flag dla zaznaczonej próbki. Ustawia ignorowanie zaznaczonej próbki w momencie gdy Wykres kontrolny jest automatycznie skalowany. Wyświetla wartość dla indywidualnego pomiaru (x=1 - 25), zawierającego próbkę. Wyświetla Nazwę produktu dla zaznaczonej próbki. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A Nazwa elementu Typ DDE Dostęp Opis SelectionRUCL Real O SelectionRLCL Real O SelectionR Real O SelectionRBAR Real O SelectionSample Real O SelectionSampleBar Real O SelectionTarget Real O SelectionTime Message (8) O SelectionUpdate Discrete O/Z SelectionXUSL Real O SelectionXLSL Real O SelectionXUCL SelectionXLCL Real Real O O SelSPC2L3Out2SDMsg Message O SelSPC4L5Out1SDMsg Message O SelSPCConSampAltUpDnMsg Integer O SelSPCConSampln1SDMsg Message O SelSPCConSamplncDecMsg Message O SelSPCConSampOneSideCLMsg Message O SelSPCConSampOut1SDMsg Message O SelSPCNLNOutNSDMsg Message O Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware A-13 Wyświetla zakres UCL dla zaznaczonej próbki. Wyświetla zakres LCL dla zaznaczonej próbki. Wyświetla zakres dla zaznaczonej próbki. Wyświetla średni zakres dla zaznaczonej próbki. Wyświetla wartość zaznaczonego punkt próbki. Wyświetla średnio zaznaczonej próbki w zaznaczonym punkcie próbki. Wyświetla docelową wartość dla zaznaczonej próbki. Element ten wyświetla Czas dla zaznaczonej próbki. Aktualizuje zmiany wprowadzone w polach Zaznaczonej próbki Wyświetla Górną, wartość graniczną wartość specyfikowaną Wyświetla Dolną, wartość graniczną wartość specyfikowaną Wyświetla Górną wartość graniczną. Wyświetla Dolną wartość graniczną. Zmienna tekstowa dla alarmu "2 z 3 ostatnich próbek poza 2 odchyleniami standardowymi SS." Zmienna tekstowa dla alarmu "4 z 5 ostatnich próbek poza 1 odchyleniami standardowymi SS." Zmienna tekstowa dla alarmu "Wartość kolejnych próbek naprzemiennie zmniejsza się i zwiększa." Zmienna tekstowa dla alarmu "Kolejne próbki znajdują się wewnątrz 1 Odchylenia standardowego." Zmienna tekstowa dla alarmu "Wartość kolejnych próbek zmniejsza się lub zwiększa." Zmienna tekstowa dla alarmu "Wartość kolejnych próbek znajduje się po jednej stronie osi symetrii." Zmienna tekstowa dla alarmu "Kolejne próbki znajdują się poza 1 Odchyleniem standardowym." Zmienna tekstowa dla alarmu "? Ostatnia? Próbka poza? Odchyleniem standardowym?." A-14 Załącznik A Nazwa elementu Typ DDE Dostęp Opis SelSPCNLNOutNSDSSMsg Message O SelSPCOutRCtrlMsg Message O SelSPCOutXCtrlMsg Message O SelSPCOutSpecMsg Message O Zmienna tekstowa dla alarmu "? Ostatnia? Próbka poza? Odchyleniem standardowym SS?." Zmienna tekstowa dla alarmu "Zakres poza kontrolnymi wartościami granicznymi." Zmienna tekstowa dla alarmu Wykresu X "Próbka poza kontrolnymi wartościami granicznymi." Zmienna tekstowa dla alarmu "Próbka poza dopuszczalnymi wartościami granicznymi." Uwaga Wiele pośrednich zestawów danych może być ustawionych i połączonych z tym samym, rzeczywistym Zestawem danych. Można wtedy Zaznaczoną wartość każdego z Pośrednich Zestawów danych ustawić na inny numer próbki. Pozwala to użytkownikowi na podglądanie informacji o wielu próbkach w obrębie jednego Zestawu danych. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A A-15 Usuwanie zakłóceń przy korzystaniu z funkcji skryptowych SQL Wszystkie funkcje SQL zwracają parametr ResultCode, który może zostać wykorzystany przy usuwaniu zakłóceń. Funkcja SQLErrorMsg() zwraca komunikat o błędzie, dla zdanego kodu ResultCode. Przykład: ErrorMsg=SQLErrorMsg(ResultCode); gdzie: ErrorMsg jest zmienną typu Memory Message. ResultCode jest zmienną całkowitą, z wartością dostarczoną przez odpowiednią funkcję SQL. Komunikaty o błędach W niniejszym dokumencie nie omówiono znaczenia poszczególnych wartości ResultCode, więcej informacji na temat tych wartości podano w dokumentacji do bazy danych. Należy również pamiętać o sprawdzeniu informacji wyświetlanych przez program diagnostyczny Wonderware Logger. Funkcja SQLErrorMsg() ustawia wartość zmiennej tekstowej ErrorMsg. Poniżej zamieszczono zestawienie wybranych kodów błędów, oraz odpowiadające im komunikaty, wraz z ich opisem. Kod błędu (ResultCode) 0 -1001 Kod błędu Operacja zakończona pomyślnie Ostatni rekord w bazie danych Brak pamięci -1002 Błąd w połączeniu -1003 -1005 Nie znaleziono listy powiązań Nie znaleziono szablonu Błąd wewnętrzny -1006 Pusty łańcuch znaków -1007 Obcięty łańcuch znaków -1008 Brak klauzuli Where -5 -1004 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Opis Polecenie zostało zakończone pomyślnie, bez wystąpienia błędu Odczytany został ostatni rekord bazy danych Brak wolnej pamięci na zakończenie funkcji Niepoprawny parametr ConnectionID przekazany do funkcji Lista powiązań o zadanej nazwie nie istnieje Szablon o zadanej nazwie nie istnieje Wystąpił błąd wewnętrzny. Skontaktować się z Serwisem. Ostrzeżenie - z bazy danych odczytano pusty łańcuch znaków Ostrzeżenie - łańcuch znaków odczytany z bazy danych ma więcej niż 131 znaków w związku z czym został on obcięty Brak klauzuli Where dla Delete A-16 Załącznik A Kod błędu (ResultCode) -1009 -1010 -1011 -4149 Kod błędu Błąd w komunikacji Baza danych określona w łańcuchu znaków do ustanowienia połączenia, w części DB= nie istnieje Brak zaznaczonych wierszy Niepoprawna instrukcja do ustanowienia połączenia lub niewłaściwy parametr SQLHandle Opis Błąd w komunikacji, szczegółowy opis zakłócenia podany jest w programie diagnostycznym Wonderware Logger Określona baza danych nie istnieje Podjęto próbę wykonania polecenia SQLNumRows(), SQLFirst(), SQLNext(), lub SQLPrev(), bez uprzedniego wykonania polecenia SQLSelect(). Przyczyną może być niewłaściwie zdefiniowany typ kolumny. Przykładowo, jeżeli w pliku dBASE zdefiniować szablon tabeli z kolumną typu znak, a nie typu znaki, zasygnalizowany zostanie błąd Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Załącznik A A-17 Kody błędów dla poszczególnych baz danych Oracle Kod błędu Rozwiązanie ORA-03112 - Błąd w składni łańcucha znaków hosta Jeżeli uruchamiany jest program NETINIT.EXE należy umieścić go w grupie Autostart systemu Windows. Jeżeli uruchamiany jest program NETINIT.EXE i nawiązywane jest więcej niż jedno połączenie, lub też uruchamianych jest więcej niż jedna sesja, należy przydzielić więcej pamięci. W tym celu należy ustawić parametr WIN_REMOTE_SESSIONS pliku CONFIG.ORA na wartość równa liczbie żądanych połączeń. Zamieszczona poniżej instrukcja przydziela pamięć dla 4 połączeń: WIN_REMOTE_SESSIONS=4 ORA-3121 - Brak podłączonego sterownika Przed uruchomieniem Windows, oraz przed korzystaniem z InTouch SQL Access należy uruchomić SQL *NET TSR, odpowiedni dla systemu sieciowego. ORA-6435 - NetBIOS: Brak możliwości dodania lokalnej nazwy do tabeli nazw Musi być uruchomiony system sieciowy (Novell, LAN Manager, itp.) ORA-09301 - Kernel lokalny obsługiwany jest wyłącznie w trybie standardowym W łańcuchu znaków do ustanowienia połączenia określić nazwę serwera ("SRVR="). ORA-06430 - Brak możliwości połączenia Zweryfikować poprawność i kolejność atrybutów w łańcuchu znaków do ustanowienia połączenia. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware A-18 Załącznik A Sybase lub Microsoft SQL Server Kod błędu Rozwiązanie W jednym momencie nie może być aktywna więcej niż jedna instrukcja Próba wykonania polecenia SQL po wykonaniu SQLSelect(). Wywołać polecenie SQLEnd() w celu zwolnienia zasobów systemu, lub też przeznaczyć dla drugiej instrukcji oddzielny parametr ConnectionID. Brak wolnej pamięci na wykonanie polecenia Spróbować ponownie uruchomić stację kliencką Niewłaściwa nazwa tablicy nazwy obiektu Nazwa tablicy nie istnieje w używanej bazie danych. Spróbować skorzystać z instrukcji DB=nazwa bazy danych. dBASE Kod błędu Rozwiązanie Plik lub moduł DLL nie znalezione W przypadku systemu Windows, plik QEDBF.DLL musi znajdować się w bieżącej kartotece, lub w kartotece systemu Windows podanej w ścieżce DOS. Błąd w połączeniu Należy sprawdzić, czy w kartotece znajdują się odpowiednie pliki DLL. W przypadku DBF, potrzebny jest plik QLDBF.DLL. Niepoprawna instrukcja do ustanowienia połączenia lub niewłaściwy parametr SQLHandle Więcej informacji na temat podano w programie Wonderware Logger . Instrukcja SQL może zawierać błąd w składni. Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware I-1 Index $ $AccessLevel, 1-2 $AlarmLogging, 1-3 $AlarmPrinterError, 1-3 $AlarmPrinterNoPaper, 1-4 $AlarmPrinterOffline, 1-4 $AlarmPrinterOverflow, 1-5 $ApplicationChanged, 1-5 $ApplicationVersion, 1-6 $ChangePassword, 1-6 $ConfigureUsers, 1-7 $Date, 1-7 $DateString, 1-8 $DateTime, 1-8 $Day, 1-8 $HistoricalLogging, 1-9 $Hour, 1-9 $InactivityTimeout, 1-10 $InactivityWarning, 1-10 $LogicRunning, 1-11 $Minute, 1-11 $Month, 1-11 $Msec, 1-12 $NewAlarm, 1-12 $ObjHor, 1-12 $ObjVer, 1-13 $Operator, 1-13 $OperatorEntered, 1-14 $PasswordEntered, 1-14 $Second, 1-15 $StartDdeConversations, 1-15 $System, 1-15 $Time, 1-16 $TimeString, 1-16 $Year, 1-16 . .Ack, 2-6 .Alarm, 2-7 .AlarmDevDeadband, 2-8 .AlarmEnabled, 2-9 .AlarmGroup, 2-57 .AlarmValDeadband, 2-10 .Caption, 2-65 .ChartLength, 2-11 .ChartStart, 2-12 .Comment, 2-12, 2-34 .DevTarget, 2-13 .DisplayMode, 2-13 .Enabled, 2-66 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware .EngUnits, 2-14 .HiHiLimit, 2-14 .HiHiStatus, 2-15 .HiLimit, 2-16 .HiStatus, 2-16 .ListCount, 2-67 .ListIndex, 2-68 .LoLimit, 2-17 .LoLoLimit, 2-17 .LoLoStatus, 2-18 .LoStatus, 2-19 .MajorDevPct, 2-19 .MajorDevStatus, 2-20 .MaxEU, 2-21 .MaxRange, 2-22 .MaxRaw, 2-23 .MinEU, 2-24 .MinorDevPct, 2-25 .MinorDevStatus, 2-26 .MinRange, 2-27 .MinRaw, 2-28 .Name, 2-29 .NewIndex, 2-69 .NextPage, 2-57 .Normal, 2-30 .NumAlarms, 2-58 .OffMsg, 2-31 .OnMsg, 2-31 .PageNum, 2-58 .Pen1-.Pen8, 2-32 .PrevPage, 2-59 .PriFrom, 2-59 .PriTo, 2-60 .ProvidesReg, 2-60 .ProvidesRet, 2-61 .Quality, 2-34 .QualityLimit, 2-36 .QualityLimitString, 2-36 .QualityStatus, 2-37 .QualitySubstatus, 2-38 .QualitySubstatusString, 2-38 .QueryState, 2-62 .QueryType, 2-63 .RawValue, 2-39 .ReadOnly, 2-70 .Reference, 2-40 .ReferenceComplete, 2-40 .ROCPct, 2-41 .ROCStatus, 2-42 .ScooterLockLeft, 2-43 .ScooterLockRight, 2-44 .ScooterPosLeft, 2-45 .ScooterPosRight, 2-46 .SPCStatus, 2-47 .Successful, 2-64 I-2 Index .TagID, 2-47 .TimeDate, 2-48 .TimeDateString, 2-48 .TimeDateTime, 2-48 .TimeDay, 2-49 .TimeHour, 2-49 .TimeMinute, 2-49 .TimeMonth, 2-50 .TimeMsec, 2-50 .TimeSecond, 2-50 .TimeTime, 2-51 .TimeTimeString, 2-51 .TimeYear, 2-51 .TopIndex, 2-71 .TotalPages, 2-64 .Unack, 2-52 .UpdateCount, 2-53 .UpdateInProgress, 2-54 .UpdateTrend, 2-55 .Value, 2-56, 2-72 .Visible, 2-73 A Abs(), 3-2 Ack(), 3-2 ActivateApp(), 3-3 Alarm, 1-4 Alarmów Funkcje Ack(), 3-2 Alarmów pola .Ack, 2-6 .Alarm, 2-7 .AlarmDevDeadband, 2-8 .AlarmEnabled, 2-9 .AlarmValDeadband, 2-10 .DevTarget, 2-13 .HiHiLimit, 2-14 .HiHiStatus, 2-15 .HiLimit, 2-16 .HiStatus, 2-16 .LoLimit, 2-17 .LoLoLimit, 2-17 .LoLoStatus, 2-18 .LoStatus, 2-19 .MajorDevPct, 2-19 .MajorDevStatus, 2-20 .MinorDevPct, 2-25 .MinorDevStatus, 2-26 .Normal, 2-30 .ROCPct, 2-41 .ROCStatus, 2-42 .Unack, 2-52 Alarmów zmienne systemowe $AlarmLogging, 1-3 $AlarmPrinterError, 1-3 $AlarmPrinterOverflow, 1-5 $NewAlarm, 1-12 $System, 1-15 almAckAll(), 3-3 almAckDisplay(), 3-4 almAckRecent(), 3-4 almAckSelect(), 3-5 almDefQuery(), 3-5 almMoveWindow(), 3-6 almQuery(), 3-7 almSelectAll(), 3-7 almSelectItem(), 3-8 almShowStats(), 3-8 Aplikacji zmienne systemowe $ApplicationChanged, 1-5 $ApplicationVersion, 1-6 ArcCos(), 3-8 ArcSin(), 3-9 ArcTan(), 3-9 C ChangePassword(), 3-10 ConnectionID Zmienna, 3-68 ConnectString Zmienna, 3-68 Cos(), 3-10 D DDE Control. porównać WWControl() Execute. porównać WWExecute() Poke. porównać WWPoke() Request. porównać WWRequest() DialogStringEntry(), 3-11 DialogValueEntry(), 3-12 DText(), 3-13 E ErrorCode, A-3 ErrorNumber, A-2 Exp(), 3-14 F FileCopy(), 3-14 FileDelete(), 3-15 FileMove(), 3-16 FileReadFields(), 3-17 FileReadMessage(), 3-18 FileWriteFields(), 3-19 FileWriteMessage(), 3-20 Funkcje Abs(), 3-2 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Index Ack(), 3-2 ActivateApp(), 3-3 almAckAll(), 3-3 almAckDisplay(), 3-4 almAckRecent(), 3-4 almAckSelect(), 3-5 almDefQuery(), 3-5 almMoveWindow(), 3-6 almQuery(), 3-7 almSelectAll(), 3-7 almSelectItem(), 3-8 almShowStats(), 3-8 ArcCos(), 3-8 ArcSin(), 3-9 ArcTan(), 3-9 ChangePassword(), 3-10 Cos(), 3-10 DialogStringEntry(), 3-11 DialogValueEntry(), 3-12 DText(), 3-13 Exp(), 3-14 FileCopy(), 3-14 FileDelete(), 3-15 FileMove(), 3-16 FileReadFields(), 3-17 FileReadMessage(), 3-18 FileWriteFields(), 3-19 FileWriteMessage(), 3-20 GetNodeName(), 3-20 GetPropertyD(), 3-21 GetPropertyI(), 3-21 GetPropertyM(), 3-22 Hide(), 3-22 HideSelf(), 3-22 HTGetLastError(), 3-23 HTGetPenName(), 3-24 HTGetTimeAtScooter(), 3-24 HTGetTimeStringAtScooter(), 3-25 HTGetValue(), 3-26 HTGetValueAtScooter(), 3-27 HTGetValueAtZone(), 3-28 HTScrollLeft(), 3-29 HTScrollRight(), 3-29 HTSelectTag(), 3-30 HTSetPenName(), 3-30 HTUpdateToCurrentTime(), 3-31 HTZoomIn(), 3-31 HTZoomOut(), 3-32 InfoAppActive(), 3-32 InfoAppTitle(), 3-33 InfoDisk(), 3-34 InfoFile(), 3-35 InfoInTouchAppDir(), 3-35 InfoResources(), 3-36 Int(), 3-37 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware IOSetAccessName(), 3-38 IOSetItem(), 3-39 IsAnyAsyncFunctionBusy(), 3-40 Log(), 3-41 LogMessage(), 3-41 LogN(), 3-42 Pi(), 3-42 PlaySound(), 3-43 PrintHT(), 3-43 PrintWindow(), 3-44 RecipeDelete(), 3-46 RecipeGetMessage(), 3-46 RecipeLoad(), 3-47 RecipeSave(), 3-48 RecipeSelectNextRecipe(), 3-49 RecipeSelectPreviousRecipe(), 3-50 RecipeSelectRecipe(), 3-51 RecipeSelectUnit(), 3-52 RestartWindowViewer(), 3-53 Round(), 3-53 SendKeys(), 3-54 SetDDEAppTopic(), 3-55 SetDDEItem(), 3-55 SetPropertyD(), 3-56 SetPropertyI(), 3-56 SetPropertyM(), 3-57 Sgn(), 3-57 Show(), 3-58 ShowAt(), 3-58 ShowHome(), 3-59 ShowTopLeftAt(), 3-59 Sin(), 3-59 SPCConnect(), 3-60 SPCDisconnect(), 3-60 SPCDisplayData(), 3-61 SPCLocateScooter(), 3-61 SPCMoveScooter(), 3-61 SPCSaveSample(), 3-62 SPCSelectDataset(), 3-62 SPCSelectProduct(), 3-62 SPCSetControlLimits(), 3-63 SPCSetMeasurement(), 3-63 SPCSetProductCollected(), 3-64 SPCSetProductDisplayed(), 3-64 SPCSetRangeLimits(), 3-64 SPCSetSpecLimits(), 3-65 SQLAppendStatement(), 3-65 SQLClearParam(), 3-65 SQLClearStatement(), 3-66 SQLClearTable(), 3-66 SQLCommit(), 3-67 SQLConnect(), 3-68 SQLCreateTable(), 3-69 SQLDelete(), 3-70 SQLDisconnect(), 3-71 I-3 I-4 Index SQLDropTable(), 3-71 SQLEnd(), 3-71 SQLErrorMsg(), 3-72 SQLExecute(), 3-72 SQLFirst(), 3-73 SQLGetRecord(), 3-73 SQLInsert(), 3-74 SQLInsertEnd(), 3-74 SQLInsertExecute(), 3-75 SQLInsertPrepare(), 3-75 SQLLast(), 3-76 SQLLoadStatement(), 3-76 SQLManageDSN(), 3-77 SQLNext(), 3-77 SQLNumRows(), 3-77 SQLPrepareStatement(), 3-78 SQLPrev(), 3-78 SQLRollback(), 3-79 SQLSelect(), 3-80 SQLSetParamChar(), 3-82 SQLSetParamDate(), 3-82 SQLSetParamDateTime(), 3-83 SQLSetParamDecimal(), 3-83 SQLSetParamFloat(), 3-84 SQLSetParamInt(), 3-84 SQLSetParamLong(), 3-84 SQLSetParamNull(), 3-85 SQLSetParamStatement(), 3-86 SQLSetParamTime(), 3-85 SQLTransact(), 3-86 SQLUpdate(), 3-87 SQLUpdateCurrent(), 3-88 Sqrt(), 3-88 StartApp(), 3-89 StringASCII(), 3-89 StringChar(), 3-90 StringFromIntg(), 3-90 StringFromReal(), 3-91 StringFromTime(), 3-92 StringInString(), 3-93 StringLeft(), 3-93 StringLen(), 3-94 StringLower(), 3-94 StringMid(), 3-95 StringReplace(), 3-96 StringRight(), 3-97 StringSpace(), 3-97 StringTest(), 3-98 StringToIntg(), 3-98 StringToReal(), 3-99 StringTrim(), 3-99 StringUpper(), 3-100 Tan(), 3-100 Text(), 3-101 Troubleshooting, A-1 Trunc(), 3-101 wcAddItem(), 3-102 wcClear(), 3-102 wcDeleteItem(), 3-103 wcDeleteSelection(), 3-103 wcErrorMessage(), 3-104 wcFindItem(), 3-105 wcGetItem(), 3-106 wcGetItemData(), 3-107 wcInsertItem(), 3-108 wcLoadList(), 3-108 wcLoadText(), 3-109 wcSaveList(), 3-110 wcSaveText(), 3-111 wcSetItemData(), 3-112 WWControl(), 3-113 WWExecute(), 3-114 WWPoke(), 3-115 WWRequest(), 3-116 Funkcje matematyczne Abs(), 3-2 ArcCos(), 3-8 ArcSin(), 3-9 ArcTan(), 3-9 Cos(), 3-10 DText(), 3-13 Exp(), 3-14 Int(), 3-37 Log(), 3-41 LogN(), 3-42 Pi(), 3-42 Round(), 3-53 Sgn(), 3-57 Sin(), 3-59 Sqrt(), 3-88 Tan(), 3-100 Trunc(), 3-101 Funkcje o różnym przeznaczeniu DialogStringEntry(), 3-11 DialogValueEntry(), 3-12 GetPropertyD(), 3-21 GetPropertyI(), 3-21 GetPropertyM(), 3-22 Hide(), 3-22 HideSelf(), 3-22 HTSelectTag(), 3-30 IOSetAccessName(), 3-38 IOSetItem(), 3-39 LogMessage(), 3-41 PlaySound(), 3-43 PrintWindow(), 3-44 SendKeys(), 3-54 SetDDEAppTopic(), 3-55 SetDDEItem(), 3-55 SetPropertyD(), 3-56 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Index SetPropertyI(), 3-56 SetPropertyM(), 3-57 Show(), 3-58 ShowAt(), 3-58 ShowHome(), 3-59 ShowTopLeftAt(), 3-59 Funkcje skryptowe obiektów sterujących Error Messages, A-2 Funkcje skryptowe QuickScript. Porównać Funkcje Funkcje systemowe ActivateApp(), 3-3 FileCopy(), 3-14 FileDelete(), 3-15 FileMove(), 3-16 FileReadFields(), 3-17 FileReadMessage(), 3-18 FileWriteFields(), 3-19 FileWriteMessage(), 3-20 GetNodeName(), 3-20 InfoAppActive(), 3-32 InfoAppTitle(), 3-33 InfoDisk(), 3-34 InfoFile(), 3-35 InfoInTouchAppDir(), 3-35 InfoResources(), 3-36 IsAnyAsyncFunctionBusy(), 3-40 RestartWindowViewer(), 3-53 StartApp(), 3-89 Funkcje tekstowe StringASCII(), 3-89 StringChar(), 3-90 StringFromIntg(), 3-90 StringFromReal(), 3-91 StringFromTime(), 3-92 StringInString(), 3-93 StringLeft(), 3-93 StringLen(), 3-94 StringLower(), 3-94 StringMid(), 3-95 StringReplace(), 3-96 StringRight(), 3-97 StringSpace(), 3-97 StringTest(), 3-98 StringToIntg(), 3-98 StringToReal(), 3-99 StringTrim(), 3-99 StringUpper(), 3-100 Text(), 3-101 Funkcje trendów historycznych HTGetLastError(), 3-23 HTGetPenName(), 3-24 HTGetTimeAtScooter(), 3-24 HTGetTimeStringAtScooter(), 3-25 HTGetValue(), 3-26 HTGetValueAtScooter(), 3-27 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware HTGetValueAtZone(), 3-28 HTScrollLeft(), 3-29 HTScrollRight(), 3-29 HTSetPenName(), 3-30 HTUpdateToCurrentTime(), 3-31 HTZoomIn(), 3-31 HTZoomOut(), 3-32 PrintHT(), 3-43 G GetNodeName(), 3-20 GetPropertyD(), 3-21 GetPropertyI(), 3-21 GetPropertyM(), 3-22 GOT - Funkcje GetPropertyD(), 3-21 GetPropertyI(), 3-21 GetPropertyM(), 3-22 SetPropertyD(), 3-56 SetPropertyI(), 3-56 SetPropertyM(), 3-57 Grupa obiektów sterujących okien - Właściwości .Caption, 2-65 .Enabled, 2-66 .ListCount, 2-67 .ListIndex, 2-68 .NewIndex, 2-69 .ReadOnly, 2-70 .TopIndex, 2-71 .Value, 2-72 .Visible, 2-73 H Hide(), 3-22 HideSelf(), 3-22 HTGetLastError(), 3-23 HTGetPenName(), 3-24 HTGetTimeAtScooter(), 3-24 HTGetTimeStringAtScooter(), 3-25 HTGetValue(), 3-26 HTGetValueAtScooter(), 3-27 HTGetValueAtZone(), 3-28 HTScrollLeft(), 3-29 HTScrollRight(), 3-29 HTSelectTag(), 3-30 HTSetPenName(), 3-30 HTUpdateToCurrentTime(), 3-31 HTZoomIn(), 3-31 HTZoomOut(), 3-32 I I/O Typy zmiennych, 2-3 I-5 I-6 Index InfoAppActive(), 3-32 InfoAppTitle(), 3-33 InfoDisk(), 3-34 InfoFile(), 3-35 InfoInTouchAppDir(), 3-35 InfoResources(), 3-36 Int(), 3-37 IOSetAccessName(), 3-38 IOSetItem(), 3-39 IsAnyAsyncFunctionBusy(), 3-40 K Kody błędów dla poszczególnych baz danych dBASE, A-18 Oracle, A-17 Sybase lub Microsoft SQL Server, A-18 Kody komunikatów o błędach, A-15 Komunikaty kodów błędów, A-4 Komunikaty o błędach Funkcji dla alarmów rozproszonych, A-2 Funkcji skryptowych obikektów sterujących okien, A-2 Komunikaty o błędach i ich opis, A-3 L Log(), 3-41 LogMessage(), 3-41 LogN(), 3-42 N Nazwy pozycji Nazwy pozycji DDE SPC, A-5 Pozycje DDE bieżącej próbki SPC, A-7 Pozycje DDE ręcznego wprowadzania SPC, A-10 Pozycje DDE wyświetlania i sterowania, A-5 Pozycje DDE Zaznaczania SPC, A-12 O Obiekty sterujące okien - Funkcje wcAddItem(), 3-102 wcClear(), 3-102 wcDeleteItem(), 3-103 wcDeleteSelection(), 3-103 wcErrorMessage(), 3-104 wcFindItem(), 3-105 wcGetItem(), 3-106 wcInsertItem(), 3-108 wcLoadList(), 3-108 wcLoadText(), 3-109 wcSaveList(), 3-110 wcSaveText(), 3-111 wcSetItemData(), 3-112 P Pi(), 3-42 PlaySound(), 3-43 Pola trendów historycznych .ChartLength, 2-11 .ChartStart, 2-12 .DisplayMode, 2-13 .MaxRange, 2-22 .MinRange, 2-27 .Pen1-.Pen8, 2-32 .ScooterLockLeft, 2-43 .ScooterLockRight, 2-44 .ScooterPosLeft, 2-45 .ScooterPosRight, 2-46 .TagID, 2-47 .UpdateCount, 2-53 .UpdateInProgress, 2-54 .UpdateTrend, 2-55 Pola zmiennych .Comment, 2-12, 2-34 .EngUnits, 2-14 .MaxEU, 2-21 .MaxRaw, 2-23 .MinEU, 2-24 .MinRaw, 2-28 .Name, 2-29 .OffMsg, 2-31 .OnMsg, 2-31 .Quality, 2-34 .QualityLimit, 2-36 .QualityLimitString, 2-36 .QualityStatus, 2-37 .QualitySubstatus, 2-38 .QualitySubstatusString, 2-38 .RawValue, 2-39 .Reference, 2-40 .ReferenceComplete, 2-40 .TagID, 2-47 .TimeDate, 2-48 .TimeDateString, 2-48 .TimeDateTime, 2-48 .TimeDay, 2-49 .TimeHour, 2-49 .TimeMinute, 2-49 .TimeMonth, 2-50 .TimeMsec, 2-50 .TimeSecond, 2-50 .TimeTime, 2-51 .TimeTimeString, 2-51 .TimeYear, 2-51 .Value, 2-56 PrintHT(), 3-43 PrintWindow(), 3-44 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Index R RecipeDelete(), 3-46 RecipeGetMessage(), 3-46 RecipeGetMessages, A-4 RecipeLoad(), 3-47 RecipeLoad, A-3 RecipeSave(), 3-48 RecipeSelectNextRecipe(), 3-49 RecipeSelectPreviousRecipe(), 3-50 RecipeSelectRecipe(), 3-51 RecipeSelectUnit(), 3-52 RestartWindowViewer(), 3-53 ResultCode, A-15 Round(), 3-53 Rozproszone alarmy - Funkcje almAckAll(), 3-3 almAckDisplay(), 3-4 almAckRecent(), 3-4 almAckSelect(), 3-5 almDefQuery(), 3-5 almMoveWindow(), 3-6 almQuery(), 3-7 almSelectAll(), 3-7 almSelectItem(), 3-8 almShowStats(), 3-8 Rozproszone alarmy - Funkcje skryptowe Komunikaty o błędach, A-2 Rozproszone grupy alarmowe - Właściwości .AlarmGroup, 2-57 .NextPage, 2-57 .NumAlarms, 2-58 .PageNum, 2-58 .PrevPage, 2-59 .PriFrom, 2-59 .PriTo, 2-60 .ProvidesReg, 2-60 .ProvidesRet, 2-61 .QueryState, 2-62 .QueryType, 2-63 .Successful, 2-64 .TotalPages, 2-64 S SendKeys(), 3-54 SetDDEAppTopic(), 3-55 SetDDEItem(), 3-55 SetPropertyD(), 3-56 SetPropertyI(), 3-56 SetPropertyM(), 3-57 Sgn(), 3-57 Show(), 3-58 ShowAt(), 3-58 ShowHome(), 3-59 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware ShowTopLeftAt(), 3-59 Sin(), 3-59 Skryptowe funkcje RecipeDelete(), 3-46 RecipeGetMessage(), 3-46 RecipeLoad(), 3-47 RecipeSave(), 3-48 RecipeSelectNextRecipe(), 3-49 RecipeSelectPreviousRecipe(), 3-50 RecipeSelectRecipe(), 3-51 RecipeSelectUnit(), 3-52 SPC - Funkcje SPCConnect(), 3-60 SPCDisconnect(), 3-60 SPCDisplayData(), 3-61 SPCLocateScooter(), 3-61 SPCMoveScooter(), 3-61 SPCSaveSample(), 3-62 SPCSelectDataset(), 3-62 SPCSelectProduct(), 3-62 SPCSetControlLimits(), 3-63 SPCSetMeasurement(), 3-63 SPCSetProductCollected(), 3-64 SPCSetProductDisplayed(), 3-64 SPCSetRangeLimits(), 3-64 SPCSetSpecLimits(), 3-65 SPC - Nazwy pozycji, A-5 SPC - Pola .SPCStatus, 2-47 SPCConnect(), 3-60 SPCDisconnect(), 3-60 SPCDisplayData(), 3-61 SPCLocateScooter(), 3-61 SPCMoveScooter(), 3-61 SPCSaveSample(), 3-62 SPCSelectDataset(), 3-62 SPCSelectProduct(), 3-62 SPCSetControlLimits(), 3-63 SPCSetMeasurement(), 3-63 SPCSetProductCollected(), 3-64 SPCSetProductDisplayed(), 3-64 SPCSetRangeLimits(), 3-64 SPCSetSpecLimits(), 3-65 SQL - Funkcje SQLAppendStatement(), 3-65 SQLClearParam(), 3-65 SQLClearStatement(), 3-66 SQLClearTable(), 3-66 SQLCommit(), 3-67 SQLConnect(), 3-68 SQLCreateTable(), 3-69 SQLDelete(), 3-70 SQLDisconnect(), 3-71 SQLDropTable(), 3-71 SQLEnd(), 3-71 I-7 I-8 Index SQLErrorMsg(), 3-72 SQLExecute(), 3-72 SQLFirst(), 3-73 SQLGetRecord(), 3-73 SQLInsert(), 3-74 SQLInsertEnd(), 3-74 SQLInsertExecute(), 3-75 SQLInsertPrepare(), 3-75 SQLLast(), 3-76 SQLLoadStatement(), 3-76 SQLManageDSN(), 3-77 SQLNext(), 3-77 SQLNumRows(), 3-77 SQLPrepareStatement(), 3-78 SQLPrev(), 3-78 SQLRollback(), 3-79 SQLSelect(), 3-80 SQLSetParamChar(), 3-82 SQLSetParamDate(), 3-82 SQLSetParamDateTime(), 3-83 SQLSetParamDecimal(), 3-83 SQLSetParamFloat(), 3-84 SQLSetParamInt(), 3-84 SQLSetParamLong(), 3-84 SQLSetParamNull(), 3-85 SQLSetParamStatement(), 3-86 SQLSetParamTime(), 3-85 SQLTransact(), 3-86 SQLUpdate(), 3-87 SQLUpdateCurrent(), 3-88 SQLAppendStatement(), 3-65 SQLClearParam(), 3-65 SQLClearStatement(), 3-66 SQLClearTable(), 3-66 SQLCommit(), 3-67 SQLConnect(), 3-68 SQLCreateTable(), 3-69 SQLDelete(), 3-70 SQLDisconnect(), 3-71 SQLDropTable(), 3-71 SQLEnd(), 3-71 SQLErrorMsg(), 3-72 SQLErrorMsg, A-15 SQLExecute(), 3-72 SQLFirst(), 3-73 SQLGetRecord(), 3-73 SQLInsert(), 3-74 SQLInsertEnd(), 3-74 SQLInsertExecute(), 3-75 SQLInsertPrepare(), 3-75 SQLLast(), 3-76 SQLLoadStatement(), 3-76 SQLManageDSN(), 3-77 SQLNext(), 3-77 SQLNumRows(), 3-77 SQLPrepareStatement(), 3-78 SQLPrev(), 3-78 SQLRollback(), 3-79 SQLSelect(), 3-80 SQLSetParamChar(), 3-82 SQLSetParamDate(), 3-82 SQLSetParamDateTime(), 3-83 SQLSetParamDecimal(), 3-83 SQLSetParamFloat(), 3-84 SQLSetParamInt(), 3-84 SQLSetParamLong(), 3-84 SQLSetParamNull(), 3-85 SQLSetParamTime(), 3-85 SQLSetStatement(), 3-86 SQLTransact(), 3-86 SQLUpdate(), 3-87 SQLUpdateCurrent(), 3-88 Sqrt(), 3-88 StartApp(), 3-89 StringASCII(), 3-89 StringChar(), 3-90 StringFromIntg(), 3-90 StringFromReal(), 3-91 StringFromTime(), 3-92 StringInString(), 3-93 StringLeft(), 3-93 StringLen(), 3-94 StringLower(), 3-94 StringMid(), 3-95 StringReplace(), 3-96 StringRight(), 3-97 StringSpace(), 3-97 StringTest(), 3-98 StringToIntg(), 3-98 StringToReal(), 3-99 StringTrim(), 3-99 StringUpper(), 3-100 System rejestrowania danych historycznych - Zmienne $HistoricalLogging, 1-9 Systemowe zmienne informacyjne $Date, 1-7 $DateString, 1-8 $DateTime, 1-8 $Day, 1-8 $Hour, 1-9 $LogicRunning, 1-11 $Minute, 1-11 $Month, 1-11 $Msec, 1-12 $ObjHor, 1-12 $ObjVer, 1-13 $Second, 1-15 $StartDdeConversations, 1-15 $Time, 1-16 $TimeString, 1-16 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware Index $Year, 1-16 T Tabela typów zmiennych, 2-4 Tan(), 3-100 Text(), 3-101 Trunc(), 3-101 Typ zmiennej a dostępne pola, 2-4 Typy zmiennych, 2-2 I/O, 2-3 I/O Discrete, 2-3 I/O Integer, 2-3 I/O Real, 2-3 Indirect, 2-3 Memory, 2-2 Memory Discrete, 2-2 Memory Integer, 2-2 Memory Message, 2-2 Memory Real, 2-2 Różne, 2-4 Group Var, 2-4 Hist Trend, 2-4 Indirect Analog, 2-3 Indirect Discrete, 2-3 Indirect Message, 2-3 SuperTag, 2-4 Tag ID, 2-4 U Usuwanie zakłóceń dla funkcji skryptowych receptur, A-3 Usuwanie zakłóceń dla funkcji skryptowych SQL, A-15 Usuwanie zakłóceń dla funkcji skryptowych, A-1 Usuwanie zakłóceń, A-1 Skryptowe funkcje, A-3 SQL funkcje, A-15 W wcAddItem(), 3-102 wcClear(), 3-102 wcDeleteItem(), 3-103 wcDeleteSelection(), 3-103 wcErrorMessage(), 3-104 wcErrorMessage, A-2 wcFindItem(), 3-105 wcGetItem(), 3-106 wcGetItemData(), 3-107 wcInsertItem(), 3-108 wcLoadList(), 3-108 wcLoadText(), 3-109 wcSaveList(), 3-110 wcSaveText(), 3-111 wcSetItemData(), 3-112 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware I-9 Wewnętrzne zmienne systemowe. Porównać Zmienne systemowe WWControl(), 3-113 WWDDE Functions WWControl(), 3-113 WWExecute(), 3-114 WWPoke(), 3-115 WWRequest(), 3-116 WWExecute(), 3-114 WWPoke(), 3-115 WWRequest(), 3-116 Z Zabezpieczające funkcje ChangePassword(), 3-10 Zabezpieczające zmienne systemowe $AccessLevel, 1-2 $ChangePassword, 1-6 $ConfigureUsers, 1-7 $InactivityTimeout, 1-10 $InactivityWarning, 1-10 $Operator, 1-13 $OperatorEntered, 1-14 $PasswordEntered, 1-14 Zmienne systemowe $AccessLevel, 1-2 $AlarmLogging, 1-3 $AlarmPrinterError, 1-3 $AlarmPrinterNoPaper, 1-4 $AlarmPrinterOffline, 1-4 $AlarmPrinterOverflow, 1-5 $ApplicationChanged, 1-5 $ApplicationVersion, 1-6 $ChangePassword, 1-6 $ConfigureUsers, 1-7 $Date, 1-7 $DateString, 1-8 $DateTime, 1-8 $Day, 1-8 $HistoricalLogging, 1-9 $Hour, 1-9 $InactivityTimeout, 1-10 $InactivityWarning, 1-10 $LogicRunning, 1-11 $Minute, 1-11 $Month, 1-11 $Msec, 1-12 $NewAlarm, 1-12 $ObjHor, 1-12 $ObjVer, 1-13 $Operator, 1-13 $OperatorEntered, 1-14 $PasswordEntered, 1-14 $Second, 1-15 I-10 Index $StartDdeConversations, 1-15 $System, 1-15 $Time, 1-16 $TimeString, 1-16 $Year, 1-16 Astor Sp. z o.o. – Autoryzowany Dystrybutor Wonderware