Icarus - Enkelt Skript Manual revision 1.3, Keylogic AB.

Relevanta dokument
Icarus - Enkelt Skript. Manual revision 1.2, Keylogic AB.

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

i LabVIEW. Några programmeringstekniska grundbegrepp

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Klassdeklaration. Metoddeklaration. Parameteröverföring

Extramaterial till Matematik Y

Användarhandledning Version 1.2

Språket Python - Del 1 Grundkurs i programmering med Python

Grunderna i stegkodsprogrammering

Att hämta organisationers publikationsposter ur DiVA

TDDC77 Objektorienterad Programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

Grunderna i SQL del 1

Föreläsning 3: Booleans, if, switch

1. Gå till redigeringsläge i Episerver, klicka på den sida som du vill ha ett formulär på. 2. Klicka på fliken Formulär.

Objektorienterad programmering Föreläsning 4

Beräkningsvetenskap föreläsning 2

Logik och kontrollstrukturer

Föreläsning 3.1: Datastrukturer, en översikt

SMD 134 Objektorienterad programmering

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Programmering A. Johan Eliasson

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Skapa Aktiviteter, Möten, Affärsmöjligheter, Offert-/Orderrader samt Leveranser (utöver Företag och Kontaktpersonsdata).

Pascal... Pascal. Pascal... Pascal...

kl Tentaupplägg

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Visual Basic, en snabbgenomgång

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Från vilka klasser hämtas eleverna till undervisningsgrupperna? Vilka undervisningsgrupper kan schemaläggas samtidigt?

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Programmeringsteknik med C och Matlab

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

TDIU01 - Programmering i C++, grundkurs

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel:

INTERNET Adress: fc.enkoping.se (obs! ej www i början) Då kommer du till denna sida. Logga in. Fyll i ditt Användarnamn och Lösenord.

TDIU01 - Programmering i C++, grundkurs

Manual för Typo3 version 4.2

Objektorienterad programmering D2

Objektorienterad Programmering (TDDC77)

STOCKHOLMS UNIVERSITET. Handbok 2. Funktionaliteter moveon 4

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Snabbguide till First Class

Ersätta text, specialtecken och formatering

Tio vanliga Excel-problem

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

E-post. A. Windows Mail. Öppna alternativ. Placera ikonen på skrivbordet.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Administration av asrp.se

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Objektorienterad programmering i Java I

Guide för behörighetssystemet i Matilda

PHOCA GALLERY (v 3.2.3)

Användarguide Rapporter. För systemadministratörer

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Tentamen, EDAA10 Programmering i Java

1 Översikt Vad är kontokoder? Konto/Mapp uppbyggnad Tillgång till Kontokoder Område Kontokoder...5

Uppgift 1 ( Betyg 3 uppgift )

Skriv före adressen och lämna bort www enligt modellen:

Skoladmin kom igång! Innehåll

Om eleven glömmer sitt lösenord, kan lösenordet bytas med hjälp av det allmänna lösenordet.

Innehåll. 9. Hur vet jag vilken storlek på licensen jag har?... 16

Om Mappar Uppgift 1: Skapa en mapp på Skrivbordet... 2 Om enheter... 3 Uppgift 2: Byt namn på din nya Höst -mapp till Vår...

Tips och tricks 1 Cadcorp SIS

I dokumentet beskrivs hur man i medlemsregistret (MiRiaM) utför en så kallad avancerad sökning.

JavaScript del 3 If, Operatorer och Confirm

Övningsuppgifter till föreläsning 2 Variabler och uttryck

GroupWise 6.5 för Malmö Högskola av Mikael Carlsson

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

ENKEL Programmering 3

Beställa varor från webbutiken för provtagningsmateriel, remisser och övrigt materiel.

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

Flytt av. Vitec Mäklarsystem

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

ANVÄNDARMANUAL, INTERAXO

Uppgift 1 ( Betyg 3 uppgift )

Lathund för BankID säkerhetsprogram

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Texten är en omarbetning av en text skriven av Rikard Bögvad för kursen Matematik I (30 hp).

Komma igång med 3L Pro Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB

Instruktion fo r inrapportering

Uppgift 1 ( Betyg 3 uppgift )

Översikt över Visual Basic

Infobric Ease Snabbguide

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Extramaterial till Matematik Y

Innehåll. 7. Hur vet jag vilken storlek på licensen jag har?... 19

Transkript:

Icarus - Enkelt Skript Manual revision 1.3, Keylogic AB. 1

Innehållsförteckning Innehållsförteckning... 2 Allmänt... 3 Några grundläggande begrepp.... 3 Att komma igång, steg för steg exempel.... 3 Steg 1 Förarbete Skapa en skiss för uppgiften.... 4 Steg 2 Skapa ett skript... 5 Steg 3 Lägg till första posten... 5 Steg 4 Lägg till resten av posterna.... 9 Steg 5 Testa... 10 En variant på steg för steg skriptet.... 11 Ändra text... 14 Exempel... 14 Vanliga uttryck... 15 SpecialTecken... 15 Uttryck... 16 Data typer och hur dess värden anges... 16 Funktioner... 17 Operationer... 17 Ändra flaggor... 20 Mer om villkor i en post... 21 Attribut... 21 Test mot text... 22 Test om attribut saknas... 22 Test mot flaggor (Booleskuttryck)... 23 Tips och trix... 24 2

Allmänt Med enkelt skript i Icarus kan man skriva större larmstyrningar på ett enklare sätt än genom att använda flera filter. Skriptet kan liknas med ett matrecept skrivet i flera punkter, Icarus kommer att börja överst och sedan följa receptets punkter neråt. Några grundläggande begrepp. Post En post är ett kommando i scriptet. När man skapar eller ändrar i skriptet så är det poster man jobbar med. Posterna är numrerade från ett och uppåt. Poster testar oftast om det meddelande som hanteras uppfyller visa krav, resultatet av testet kan användas för att t.ex. skicka meddelandet till olika personsökare, resultatet kan även användas för att avgöra vilken post som skall användas härnäst. Villkor En post kan innehålla villkor. Om postens samtliga villkor uppfylls hos det meddelande som hanteras så har postens test uppfyllts. Destination Som vanlig i Icarus kan destinationer vara fysiska eller logiska. En fysisk destination är t.ex. ett mobiltelefonnummer (tjänster), logiska destinationer är de namn som lagts upp i Icarus som funktionsblock (pseudonymer). Flera destinationer kan anges i samma fält genom att separera dem med kommatecken. I en post har du möjlighet att ange olika destinationer för de fall då testet uppfylls eller då testet inte uppfylls. Att komma igång, steg för steg exempel. För att beskriva skriptverktyget visas hur en lösning tas fram för följande påhittade situation; På företaget X så har man två byggnader som sköts av ett automationssystem, en större byggnad (hus H1) och en lite mindre (hus H2). För att sköta underhållet av husen så vill man få alla viktiga larm skickade till driftpersonalens personsökare. Fyra personer arbetar i driftcentralen; Person A Person B Person C Person D : Sköter allt i den mindre byggnaden. : Sköter alla larm som berör ventilationen i den större byggnaden. : Sköter alla larm i den större byggnaden som inte Person B sköter. : Är ansvarig och vill se alla larm. På företaget X är man bara intresserad av att få den viktigaste informationen utskickad, därför önskar man bara att få meddelanden till personsökarna när larm löser ut och om de i automationssystemet har markerats som viktiga (prioritet 1). 3

Steg 1 Förarbete Skapa en skiss för uppgiften. För att lösa uppgiften så behöver skriptet utföra följande uppgifter (skrivet som ett recept) på alla inkommande meddelanden från automationssystemet. 1. Om prioritet 1 och är ett utlöst larm från hus H2 så skicka till Person A s personsökare. 2. Om prioritet 1 och är ett utlöst larm från hus H1 och berör ventilation så skicka till person B s personsökare, 3. Om prioritet 1 och är ett utlöst larm från hus H1 och inte berör ventilation så skicka till person C s personsökare. 4. Om prioritet 1 och är ett utlöst larm så skicka till Person D s personsökare. Det finns andra recept som fungerar lika bra; 1. Om inte prioritet 1 eller om inte ett utlöst larm så gör inget mer. 2. Om från hus H2 så gå skicka till person A s personsökare och gå till punkt 5. 3. Om från hus H1 så gå till punk 4 annars gå till punkt 5. 4. Om berör ventilation så skicka till person B s personsökare, annars skicka till person C s personsökare. 5. Skicka till Person D s personsökare. 1. Om inte prioritet 1 eller om inte ett utlöst larm så gör inget mer. 2. Skicka till Person D s personsökare. 3. Om från hus H2 så skicka till Person A s personsökare och gör inget mer. 4. Om berör ventilation så skicka till person B s personsökare och gör inget mer. 5. Skicka till person C s personsökare. Det finns många fler sätt att lösa uppgiften, detta dokument kommer att främst illustrera det första exemplet och därefter kort visa den andra varianten. 4

Steg 2 Skapa ett skript Skapa en ny pseudonym i Icarus server. Välj att funktionen skall vara Enkelt Skript. Verktyget för att jobba med skript visas. Eftersom skriptet är helt nytt så är det en tom arbetsyta. Steg 3 Lägg till första posten Klicka på lägg till för att skapa den första posten. 5

Ett nytt fönster presenteras. Det är i detta fönster som man kan redigera poster. Följande villkor skall sättas upp för denna post: Prioriteten skall vara 1 Det skall vara en larmutlösning. Larmet skall komma från huset H2 Det har ingen betydelse i vilken ordning vi anger dessa villkor. Klicka på Lägg till för att lägga till det första villkoret. En tom rad läggs till i den tidigare tomma listan över villkor. 6

Gå till det första tomma fältet i den nya raden och klicka. Välj "Om" i listan Klicka på nästa tomma fält. Välj "prioritet". Ett nytt fält visas på raden. Skriv siffran 1 i fältet. Första villkoret är nu klart. Klicka igen på Lägg till, välj Om och Tillstånd. Följande rad skall då finnas. Det går inte att skriva i det sista fältet, däremot kan man klicka på knappen till höger, en lista visas då, kryssa i Utlöst i listan, klicka sedan direkt på Lägg till knappen för att börja med det tredje villkoret. För det tredje villkoret så skall det avgöras om meddelandet härstammar från huset H1. I företaget X s automationssystem så har alla larm ett logiskt namn, detta logiska namn är konstruerat enligt följande; [BYGGNAD]-[SYSTEM]-[AGGREGAT NR]-[LARMPUNKT] T.ex. H2-VE-01-VVX:FEL, H2-VVS-01-P1:MF Det logiska namnet för larmet sparar Icarus (för de flesta automationssystem) i ett attribut som kallas för logiskt namn. När man skriver villkor mot text (logiska namn är text till skillnad från till exempel prioriteter som är ett heltal) så är det möjligt att använda speciella tecken för att ersätta godtyckliga andra tecken. Specialtecknen gör att man inte i villkoret behöver rada upp alla i automationssystemet existerande larmpunkter. Specielltecknen är * och?, de fungerar så att * kan ersätta noll, en eller flera tecken, medan? alltid ersätter exakt ett godtyckligt tecken. För att hitta alla meddelanden från huset H2 så testas logiskt namn mot H2-* Välj Om, sedan Logiskt namn och slutligen skriv i sista fältet: H2-* 7

Det skall nu se ut såhär; Klicka nu på Nästa. Formuläret byter skepnad för att ge möjlighet att ange vad posten skall utföra beroende på om alla villkor mot ett meddelande uppfylls eller om inga eller bara några uppfylls. Under Om test uppfylls så ange i fältet Destination att meddelandet skall sändas till Person A. Här kan direkt t.ex. Minicall eller GSM nummer anges, men i exemplet har vi valt att använda en pseudonym kallad 8

Person A för att förenkla hanteringen ifall Person A byter sökare eller går på semester. Den första posten är nu klar! Klicka på Ok. Fönstret för att jobba med posten stängs och resultatet kan ses i verktyget för att jobba med script. Posten presenteras som läsbar text. Vi kan se att oavsett om postens villkor uppfylls eller inte så vill den testa nästa post, nu finns det ingen mer post, men det är helt OK, när inga poster finns kvar så betraktar Icarus det enkla scriptet som färdigt. Steg 4 Lägg till resten av posterna. De resterade tre posterna läggs till på samma sätt som den första. Om prioritet 1 och är ett utlöst larm från hus H1 och berör ventilation så skicka till person B s personsökare, Om prioritet 1 och är ett utlöst larm från hus H1 och inte berör ventilation så skicka till person C s personsökare. Om prioritet 1 och är ett utlöst larm så skicka till Person D s personsökare. 9

I paritet med hur villkor skrevs för att hitta meddelanden från huset H1, så kan man finna ventilationslarm genom att testa mot *-VE-*. När alla poster är inmatade så ser verktyget för redigering av skript ut såhär; Skriptet är nu klart! Klicka på "OK". Steg 5 Testa Testa alltid skript genom att lösa ut larm i det verkliga automationssytemet. För att se vart ett meddelande har skickats kan man i Icarus server markera meddelandet och välja detaljer. 10

En variant på steg för steg skriptet. I skript kan man välja att gruppera poster så att valda poster endast används förutsatt att en tidigare posts test uppfyllts (eller inte uppfyllts). Testresultatet mellan ett meddelande och en post kan användas för att låta Icarus avsluta skriptet utan att testa fler poster. Med dessa möjligheter kan det tidigare steg för steg exemplet skrivas om så att resultatet blir följande: Den första posten används för att se till att bara viktiga meddelanden får sändas, därför behöver inte samma villkor upprepas på de övriga raderna. 11

För att välja om en post skall starta en gruppering eller avsluta skriptet bockar man för lämpliga valrutor i postverktyget. En del val omöjliggör andra val, dessa blir då gråmarkerade. När en post har givits egenskapen Testa poster i undergrupp, så kan man lägg in en post i undergruppen genom att flytta posten så att den är placerad som posten direkt efter, markera posten och klicka på Flytta in i grupp. Post 3 använder undergrupp, men är inkomplett eftersom ingen undergrupp ännu finns. 12

Post 4 har flyttats in i undergruppen. 13

Ändra text Larmtext kan ändra som resultat att test uppfylls eller inte uppfylls. Observera att den ändrade texten inte kommer visas i Icarus larmlista/detaljinformation, men däremot användas på de destinationer som scriptet slutligen förgrenar sig vidare till. Observera att om du ändra text flera ggr så sker det uppifrån ner och det sker alltid innan meddelandet går vidare till destinationer. I följande exempel Så kommer destinationen test@test.se få den ändrade texten trotts att den sänds på en rad ovanför larmtext ändringen. I texten kan man ange uttryck inom klamrar { }. Dessa uttryck löser Icarus automatiskt och ersätter med resultatet. Det finns uttryck för att hantera all information om meddelandet (t.ex. prioritet, fysisk ID.. ). Du kan dessutom använda uttrycken för att förkorta, plocka ut vissa delar av larmets text och mycket mer. Exempel lägg till text i början och slutet Detta kommer först {msg.formatedtext} Detta kommer sist Bara logiskt-id och larmtext {msg.logicalpoint} {msg.freetext} 14

Vanliga uttryck Meddelandet text innan ändringen {msg.formatedtext} Om ett larm, så är detta oftast larmtexten {msg.freetext} Ett larms logiska adress {msg.logicalpoint} Ett larms fysiska adress {msg.physicalpoint} Prioritet som 1,2,... {msg.priority} Prioritet som A,B,... {chr(msg.priority.int+64)} Meddelandets text som den togs emot {msg.orgtext} Meddelandets tid i Windows format {msg.time} Meddelandets tid som veckodag + klockslag {formatdatetime('ddd h:nn',msg.time.datetime)} Meddelandets tillstånd msg.type.as('utlöst','kvitterad','återställd','meddelande') Meddelandets unika GUID Unikt ID per larmmeddelande som hanteras i Icarus. GUID behållas även om Icarus startas om. GUID används bl.a. av IcarusDB som databas nyckel. msg.guid t.ex. {3F2504E0-4F89-11D3-9A0C-0305E82C3301} msg.guid2 t.ex. 3F2504E04F8911D39A0C0305E82C3301 SpecialTecken ASCII tecken kan anges som #nnn, t.ex kan CR anges som #013. Behöver man använda # tecknet i texten, ange då #035. 15

Uttryck Icarus har för mer avancerade ändamål en uttrycksberäknare. Den används t.ex. för att kunna bygga upp meddelande text och för att styra larm. Uttryck (engelska - expression) är något som alla programmeringsspråk innehåller, men i uttryck i säg är inget programmeringsspråk, utan bara en delmängd. Trots detta kan vi ibland komma att betrakta uttrycken som ett språk. Vi har valt att utforma uttrycksspråket så att det liknar programmeringsspråket Pascal. Data typer och hur dess värden anges Olika saker måste representeras på olika sätt, detta sker genom datatyper. De flesta programmerings språk har en uppsjö av datatyper, och tillåter oftast att de kombineras för att skapa nya typer, men i uttrycks beräknaren har vi begränsat oss till fyra datatyper. Integer Heltal (-2147483648..2147483647) Real Flyttal (5.0 x 10^-324.. 1.7 x 10^308 med 15 till 16 signifikanta siffror) Boolean Boolska värden (true / false) String Tecken Strängar (0 till 2Gb med tecken) För att skriva ett heltal så kan du bara ange dess värde, t.ex. 5 10-20 500 2*5 1+2*2 (1+2)*2 För att ange ett flyttal så anger du dess värde och använder punkt (.) för att specificera decimal delen. I princip kan du ange dem som man gör på en modern miniräknare, och nästan allt som miniräknaren har, finns även här. Datum och tid anges också i flyttal, då anger heltals delen antal dagar sedan 1899-12-30, och decimal delen anger hur långt av dagen som har passerat (.0 är vid midnatt,.5 är lunch och.99999 är precis innan nästa dag, men oroa dig inte, du behöver oftast inte tänka på detta). exempel. 1.1 2.2 pi sqrt(2) sin(pi/3) 5^2 Strängar är mycket viktiga, meddelanden i Icarus är uppbyggda av strängar och vill ändra hur ett meddelande skall komma ut på en personsökare så måste man jobba med strängar. En sträng skall omges med ' tecken (t.ex. 'pegasoft'). Vill man lägga till special tecken såsom ny rad så kan man använda två olika sätt, den ena är att ange kontrolltecken som ^X, den andra genom #nnn (där nnn är asc-ii kod). Kontrolltecken skall inte vara inom ' ', utan komma direkt efter, strängen kan sedan fortsätta igenom om ' anges igen. Vill man använda ' tecknet i en sträng så skall den anges dubbelt (t.ex. 'PegaSoft''s' ). Som du kan se de kommande exemplen så kan man ange kontrolltecken direkt med #nnn formatet, detta kan man inte med ^X formatet, där man isåfall måste skriva ''^X. exempel: 'hello' 'rad1'^m^j'rad två' 'rad1'#13#10'rad två' #13#10 ''^M^J 'Pega'+'Soft' Observera, i de flesta språk så kan man ta ut ett enskilt tecken i en befintlig sträng genom att använda den som en "array", dvs om "s" är en sträng så skulle man t.ex. kunna skriva s[2] för att få det andra tecknet. Uttrycks beräknaren stödjer inte något sådant skrivsätt, men alternativ finns! (t.ex. funktionen copy) 16

Boolska värden anger om något är sant eller falskt, t.ex. true false (0=0) (1=0) ('pega'='soft') Funktioner En funktion är någon form av beräkning. Ofta tar en funktion ett eller flera argument som den gör en beräkning på för att sedan returnera svaret. t.ex. sin(pi/3) ger tillbaka ett flyttal (närmare bestämmt ca. 0,866). Det är viktigt att tänka på att funktioner tar argument av bestämda datatyper, och returnerar en specifik datatyp. T.ex. sin('pegasoft') eller uppercase(3.14) är inte rimliga, och därför inte heller tilllåtna. Överallt där det förväntas ett flyttal, men ett heltal har angivits, löses detta automatiskt. Det finns också två funktioner vars datatyp beror på argumentet. Detta är abs(x) och sqr(x), där svaret har samma datatyp som x (som bara får vara heltal eller flyttal). (teknisk notis - eftersom uttrycks beräknaren saknar variabler så är även sådant som verkar vara variabler / konstanter i själva verket en funktion, t.ex. pi ) Operationer En operation utför en beräkning, oftast genom att kombinera ett värde till vänster och ett till höger för att beräkna ett nytt värde. Rent tekniskt är de ungefär som funktionerna, men skrivs på ett anorlunda sätt för att motsvara det som vi är vana från matematiska uttryck. exempel #1 5+6 (= 11) exempel #2 5+6*7 (= 47) exempel #3 (5+6)*7 (= 77) exempel #4 5+(6*7) (= 47) exempel #5 5-2+1 (= 4) exempel #6 (5-2)+1 (= 4) exempel #7 5-(2+1) (= 2) Om man tittar på exempel #2 så kan man fråga sig varför svaret blev 47 och inte 77. Detta har att göra med att det finns ett regelverk för i vilken ordning saker skall beräknas, man delar upp operationerna i olika prioriteter. I uttrycks beräknaren används följande prioriteter (där 5 beräknas först) 0 =, <>, >, <, >=, <= 1 +,-,and,or,xor 2 *, /, div, mod, 3 not, ^ (upphöjt till) 4 funktioner 5 paranteser Operationerna och dess prioriteter motsvarar det som programmeringsspråket Pascal använder (dock har vi lagt till ^ och tagit bort lite annat, t.ex. "mängd" och pekareoperationer). Om du är osäker så använd parenteser såsom i exempel #4, då slipper du bli missförstådd av uttrycksberäknaren. Om två operationer är av samma prioritet som i exempel #5, då är det speciellt klurigt vid närmare analys, svaret skulle kunna vara 2 eller 4 beroende på i vilken ordning beräkningen görs (exempel #5 och #6). Lyckligtvis så finns det en regel, och den heter "vänster associativitet", vilket är likvärdigt med att parenteser sätts in från vänster (som i exempel #6). 17

Jämnföresel operationer Resultatet av jämförelser är ett sanningsvärde (true/false) a = b testa om lika a <> b testa om olika Likhets test kan göras mot alla datatyper, men "storleks" test kan bara utföras mot heltal, flyttal och strängar. a < b a > b a <= b a >= b "Storlek" test på strängar sker så att 'a' < 'b' 'a' < 'aa' 'a' < 'bb' ger true ger true ger true Eftersom ascii tabellen är utgångspunkten för detta så kan man finna att 'a' < 'ä' 'B' < 'a' 'Ä' < 'a' ger true ger true ger false Dessutom så är ä mindre än å (ascii ordningen är A..Z a..z ÄÅÖ äåö, och en hel del tecken där mellan...) Studera en ascii tabell så klarnar detta förhållande (som är ett problem som måste special hanteras i alla av mig kända programspråk). Observera, om du är van med programmering i C eller Java, så är du säkert van med att kunna skriva saker som (2>3 or 7<8), detta kan du inte göra i Pascal liknande uttryck. Orsaken är att > operationen har lägre prioritet än "or" operatorn, detta leder till att uttrycket tolkas som ( (2>(3 or 7))<8) vilket skulle i nästa steg beräknas till ( (2>7)<8) sedan till (false<8), och då har vi hamnat i problem, eftersom ett sådant uttryck inte är korrekt med avseende på data typerna. Det korrekta sättet att skriva uttrycket är ( (2>3) or (7<8) ), och detta blir naturligtvis "true". Operator + Fungerat på alla datatyper utan boolean. Exempel 1+1 (2) +1.0 (1.0) 2.0+1.0 (3.0) 2+1.0 (3.0) 'Pega'+'Soft' ('PegaSoft') Operatorer - * ^ Fungerar på flyttal och heltal. Exempel 5-2 (3) -2 (-2) 5.1-2.9 (2.2) 3*3 (9) 3^3 (81) 18

Operator / Fungerar från heltal eller flyttal, men svaret blir alltid ett flyttal. Exempel 4/2 (2.0) 15/10 (1.5) 3.2/0.8 (4.0) Observera att du aldrig får dividera med 0. Operatorerna div och mod div är en heltalsdivision, och mod är resten av en sådan division. Exempel 5 div 3 (1) 5 mod 3 (2) 6 div 3 (2) 6 mod 3 (0) -2 div 3 (0) -2 mod 3 (-2) Observera att vid (a mod b) eller (a div b) så får aldrig b vara 0. Bitvisa operatorer - not,and,or,xor Fungerar både på sanningsvärden (boolean) och heltal. Dess exakta betydelse kommer inte beskrivas här, men några exempel är: not true (false) not false (true) true and false (false) true or false (true) 12 and 36 (4) 12 or 36 (44) 12 xor 36 (40) 19

Ändra flaggor Flaggor kan sättas som resultat att test uppfylls eller inte uppfylls. Om mer än en flagga skall ändra, använd kommatecken som separator. För att ta bort en flagga, ange minus (-) framför flaggnamnet. För att invertera en flagga, ange ^ framför flaggnamnet. 20

Mer om villkor i en post Attribut Meddelanden i Icarus har ofta flera olika attribut. Exempel på attribut är prioritet, tillstånd, larmnamn, ursprung, originaltext. Vissa attribut tilldelas av Icarus genom den information som automationssystemet presenterar när meddelandet förs över till Icarus. Olika system presenterar olika information, varför vissa system har attribut som andra inte har. För att se ett tydligt exempel, i Icarus, markera ett meddelande som sänts som testmeddelande och välj sedan detaljer, gör sedan samma på ett meddelande från ett automationssystem och se skillnaderna! Följande attribut är tillgängliga att ställa villkor mot: Attribut Beskrivning Typ av test Extratext Formateradtext Fysiskt namn Tillstånd Beskrivning Logiskt namn Originaltext Prioritet Används av Icarus för information som inte passar in bland de övriga attributen. Den text som Icarus vill sända till en personsökare. Är samma som originaltexten eller en uppsnyggad variant. Är oftast det fysiska namn (tekniskt namn) som automationssystemet använder för den punkt som orsakat ett larm. Det larm tillstånd som ett meddelande har. Kan vara utlösningsmeddelande, återställningsmeddelande, kvittensmeddelande. Meddelande som av sin natur inte kan återställas kan istället för utlösningsmeddelande vara märkta med meddelande. Det finns även meddelanden som helt saknar tillstånd. De flesta automationssystem tillåter att larm har en beskrivande text, denna text kanske berättar vad som är fel (t.ex. hög temp) och / eller vart larmet kommer ifrån (t.ex. Hus1 Rum 123) Är oftast det logiska namn (namn för användaren) som automationssystemet använder för den punkt som orsakat ett larm. Den text som automationssystemet gav till Icarus när meddelandet fördes över till Icarus. De flesta automationssystem tillåter att ett larm ges en prioritet eller larmklass. Om larmklass används (t.ex. A B C) så omvandlas klasserna till siffror 1,2,3 Text Text Text Välj bland fem val i lista. Text Text Text Heltal Ursprung Det automationssystem som larmet kommer från. Text Tidkanal Tid då meddelande mottogs i Icarus testas mot en tidkanal. Välj tidkanal ur lista. Fil finns Testa om en fil finns på hårddisken. Ange filnamn inklusive sökväg. Område Larm kan tillhöra ett område Text Flaggor Test på det flaggor som larmet har. Booleskuttryck 21

Test mot text Test mot text sker genom mönstermatchning. Följande tecken har då speciell betydelse: Tecken Betyder * Noll, ett eller flera godtyckliga tecken? Ett godtyckligt tecken., Skrivs mellan alternativa sökningar #nnn Sök mot tecken med ASCII koden nnn Exempel: Mönster Text Resultat -VE- H1-VE-01-LARM Falskt *-VE-* H1-VE-01-LARM Sant h?-* H1-VE-01-LARM Sant *h?-* H1-VE-01-LARM Sant *-B?-*,*-G?-* H1-VE-01-LARM Falskt *-B?-*,*-G?-*,*-V?-* H1-VE-01-LARM Sant Som visas i exemplet så gör Icarus ingen skillnad på versaler och gemena (STORA och små bokstäver). Om man behöver söka något av de tecknen som är ett specialtecken i Icarus, använd följande tabell för att definiera dessa tecken. Tecken Skrivs som Inledande eller avslutande mellanslag #032, (komma tecken) #044 # #035 * #042? #063 AscII-tecken nnn #nnn Test om attribut saknas Vid test mot text eller prioritet, så kan (NA) skriva för att testa mot att attributet saknas. T.ex, för att hitta de meddelanden som är av prioritet 1, eller helt saknar prioritet, skriv: 1,(NA) 22

Test mot flaggor (Booleskuttryck) Skrivs som ett booleskuttryck där flaggornas namn används. Om flaggan finns i larmmeddelandet så är den sann om den inte finns så är den falsk. AND, OR, NOT, XOR samt parenteser kan användas i uttrycket. Exempel: viktig AND NOT (brand OR hiss) Som skulle ge alla larm med flaggan viktig men som inte har någon av flaggorna brand, hiss. OBS! Om flaggan innehåller mellanslag i sitt namn, ersätt mellanslag med underscore _. 23

Tips och trix Att lägga upp många rader som liknar varandra. Det enklaste sättet är markera en post, välja kopiera, klistra in så många som man behöver och sedan ändra kopiorna efter behov. Svårt att läsa text i skript verktyget? Under Mer knappen kan större text väljas. Det är även möjligt att skriva ut skriptet till valfri skrivare. Tagit bort en rad av misstag? Använd Ångra. Det är möjligt att ångra i 20 steg. Flytta många rader på en gång. Flera rader kan flyttas på en gång genom att markera flera rader enlig vanlig Windows manér. Att markera många rader är också användbart för klipp & klistra. Kontrollera vart ett specifikt meddelande har skickats. I Icarus Server, i meddelandehistoriken eller bland aktiva meddelanden, markera meddelandet och klicka sedan på detaljer. Testa att meddelande attribut existerar. Meddelanden från vissa automationssystem saknar vissa attribut. I villkor mot prioritet eller texter så kan (NA) skrivas för att testa om attributet finns. För villkor mot meddelandets tillstånd så finns det en kryssruta. Behöver testa om meddelandet kommer från automationssystemet X. Hur gör jag? Skriv ett villkor mot ursprung. För att ta reda på vilken text att testa mot, markera i Icarus ett meddelande från automationssystemet X, välj detaljer och läs av vad systemet kallas av Icarus. Skriva mycket komplexa testvillkor där det inte räcker med * och?. Avancerade textmatchningar kan skrivas med regular expression. Skriv då: (RE)<regular expression> T.ex. (RE) [_a-za-z\d\-\.]+@([_a-za-z\d\-]+(\.[_a-za-z\d\-]+)+) Exemplet testar om det finns en e-post adress. Det är inte tillåtet med kommatecken för att ange flera sökningar i samma fält. Det är inte möjligt att kombinera med (NA). Keylogic ger ingen support för hur man skriver dessa uttryck, men vi kan bistå med viss dokumentation till den som kontaktar oss. 24