Ingångsfördröjningar Tidsloopar Vänta x minuter innan Användning av tid- och datumvariabler i GoogolScript
INNEHÅLLSFÖRTECKNING 1. ALLMÄN BESKRIVNING...3 2. TIDSLOOPAR...3 För tidsloopar på 0-255 sekunder...3 För tidsloopar på 0-255 minuter...4 För tidsloopar på 0-255 timmar...4 Avbryt en tidsloop...5 2.2 FÄRDIGT EXEMPEL I FUNKTIONSBIBLIOTEKET...6 3. ATT STÄLLA VILLKOR MED HJÄLP AV DE VARIABLER SOM FINNS I GOOGOLSCRIPT....7 3.1 STÄLLA KLOCKAN...7 3.2 ANVÄNDNING AV TID- OCH DATUMVARIABLER...8 4. ANVÄNDNINGSOMRÅDEN...10 2
1. Allmän beskrivning Tidshantering är viktig i många sammanhang. I stort sett är det två principer som är bra att känna till vid programmeringen. Det ena handlar om villkor med de variabler som finns tillgängliga i scriptet, som t.ex. YEAR, MONTH, DAY, WEEKDAY, osv (se manualen). Den andra möjligheten handlar om att använda sig av en sekundvariabel, T, som räknas ned med ett varje sekund. Detta används i alla de fall då man vill ha en fördröjning innan något ska hända på x antal sekunder, minuter eller timmar från det ögonblick något börjar hända. Det första som beskrivs nedan är dessa tidsloopar. För tydlighetens skull har nummer lagts till framför programraderna, men de ska inte vara med i programmet. 2. Tidsloopar Det som kommer användas är sekundvariabeln T (kan anta värden mellan 0-255). Denna räknas ned med ett per sekund. Vi delar därför upp fördröjningen i sekunder, minuter respektive timmar. Scenario: T1:an ligger och kontinuerligt känner av telelinjen. Då det inte finns någon telelinje ska ett larm gå iväg via en alternativ uppringningsväg (GSM-modul). Eftersom det är en ganska osäker linje med bortfall lite titt som tätt vill vi ändå ha en fördröjning innan larmet går iväg. Så här skapar man en fördröjning. För tidsloopar på 0-255 sekunder 1 LET T=55 ;Här sätter vi tidsfördöjningen till 55 sekunder 2 :SLINGA ;Skapa en plats för vår tidsslinga 3 IF T>0 GOTO SLINGA ;T kommer att räknas ned med ett steg varje sekund, med början på 55. Eftersom T då kommer att vara större än noll i 55 sekunder ligger programmet och snurrar mellan 2 & 3. 3
För tidsloopar på 0-255 minuter Eftersom sekundvariabeln T inte kan anta ett större värde än 255, måste vi införa en ny variabel som också kan räknas ner allt eftersom sekunderna räknas ned. I det här fallet införs variabeln A. 1 LET A=10 ;Vi vill ha en fördröjning på 10 minuter 2 :NY_MINUT ;Skapa en plats för minutnedräkning 3 LET T=60 4 :SEKUNDER (se tidsloopar 0-255 sekunder) 5 IF T>0 GOTO SEKUNDER 6 LET A=A-1 ;Då 60 sekunder har gått räknas minutvariabeln A ned med ett 7 IF A>0 GOTO NY_MINUT ;Så länge A är större än noll har inte tiden gått ut utan en ny minut påbörjas uppe på rad 2. För tidsloopar på 0-255 timmar Ibland kan man vilja ha riktigt långa fördröjningar innan något ska hända. T.ex. kanske man vill att ett provlarm ska skickas en gång per dygn. Då kan man antingen välja att ställa tiden på realtidsklockan i T1:an alternativt använda följande slinga 1 LET B=24 ;Vi vill ha en nedräkning på 24 timmar och B är i vårt program en timvariabel. 2 :NY_TIMME ;En programplats skapas som startpunkt för varje ny timme 3 LET A=60 4 :NY_MINUT 5 LET T=60 6 :SEKUNDER (se tidsloopar 0-255 minuter) 7 IF T>0 GOTO SEKUNDER 8 LET A=A-1 9 IF A>0 GOTO NY_MINUT 10 LET B=B-1 ;Timvariabeln B räknas ned med ett 11 IF B>0 GOTO NY_TIMME ;Har B hunnit bli noll? Om inte går det tillbaka upp till platsen NY_TIMME. Har den blivit noll går den vidare i programmet 4
Avbryt en tidsloop Ibland kan det ju också vara aktuellt att avbryta tidsloopen. Det kan ju till exempel vara så att om telelinjen kommer tillbaka så bör ju inte tidsloopen fortsätta utan börja om först nästa gång linjen faller ifrån. Som programmet ser ut nu så är vi tvungna att vänta tills tiden har gått ut och först då fråga oss en gång till om linjen fortfarande är borta. Vad som hänt däremellan vet vi ju egentligen inte. Lösningen är att inuti sekundloopen (0-255 sekunder) lägga in ett villkor så att den också varje sekund kollar av om telelinjen kommit tillbaka, ingången återgått eller vad det nu är som vi testar. Det kommer se ut som: 1 LET T=55 2 :SLINGA 3 IF LINESTAT > 0 GOTO START 4 IF T>0 GOTO SLINGA ;Om linjestatusen har förändrats går vi ur tidsloopen och hoppar upp till START (början på programmet). ;På samma sätt går det givetvis att lägga in att ett värde på en ingång har ändrats, en knapp har tryckts in eller vad som helst 5
2.2 Färdigt exempel i funktionsbiblioteket Ett färdigt funktionsexempel i funktionsbiblioteket, som använder sig av dessa slingor är Provlarm 1/dygn. Det visas nedan och principerna är beskrivna ovan. 6
3. Att ställa villkor med hjälp av de variabler som finns i GoogolScript. T1:an har en intern realtidsklocka, men ingen batteribackup på klockan vilket innebär att den måste ställas på nytt efter varje omstart. Lyckligtvis finns det olika sätt att på smidigt sätt ställa klockan och det kan även skötas per automatik så att man inte behöver åka ut och ställa klockan varje gång ett spänningsbortfall inträffat. 3.1 Ställa klockan De olika sätt varpå man kan ställa klockan är: 1) Genom att ansluta en PRO-06 programmeringsdosa och trycka *. Därefter matas tid och datum in enligt formatet YYMMDDHHMMSSW - År, Månad, Dag, Timme, Minut, Sekund och Veckodag, där veckodagen är 0-6 med början på söndag. 2) Om det finns en GSM-modul ansluten kan tiden ställas genom att skicka in ett SMS till T1:an med formatet Accesskod följt av skiljetecken och därefter TYYMMDDHHMMSSW se punkt 1) 3) Gör ett litet program där T1:an börjar med att ringa en mottagart1:a och skicka en kortare text med GoogolProtokollet. Det den samtidigt gör då är att den ställer klockan automatiskt mot mottagarens internklocka. Programmet kan bestå endast av tre rader: DIAL T01 K01 Googol) :LOOP GOTO LOOP snurrar till omstart. ;Ringer iväg kodmall 1 till telefonnummer 1 (använd ;Skapa programplats LOOP ;Går upp till LOOP här ligger den och 4) Via dator kan klockan ställas med hjälp av STX-ETX-protokollet. Kommandot T följt av samma format som ovan (YYMMDDHHMMSSW) ställer realtidsklockan i T1:an. 7
3.2 Användning av tid- och datumvariabler Om klockan väl är inställd korrekt finns det en rad olika tillfällen då det kan vara praktiskt att använda sig av de inbyggda tid- och datumvariablerna. Scenario: På en maskin sitter en T1:a som övervakar att allt går rätt till. För att veta att larmsändaren har linje och är i drift kan den på valfritt klockslag ringa iväg en gång per dygn och berätta att den fungerar som den ska. Vi vill att den skickar ett larm klockan 03:15 varje söndag eftersom maskinen ändå inte är i drift då. Kommer inte larmet bör det ses över innan maskinen sätts i drift på måndag morgon. Denna provlarmsfunktion skulle ha följande rader: 1 :STOP ;Skapar programplatsen STOP 2 IF WEEKDAY!=0 GOTO STOP ;Om veckodagen inte är 0 (söndag) ska den gå tillbaka till STOPP. Den kommer alltså inte vidare om det är någon annan dag. 3 IF HOUR!=03 GOTO STOP ;Är timmen inte 03 kommer den inte förbi det här villkoret heller. Nu måste alltså klockan vara 3 på en söndag. 4 IF MINUTE!=15 GOTO STOP ;Nästa villkor blir att minutvariabeln på T1:an måste vara 15. Den kommer att gå vidare i programmet först om klockan är 03:15 på en söndag. 5 DIAL R10 T01 K01 ;Klockan är 03:15 (söndag) och provlarmet skickas 6 :LOOP ;Återställningsprogramplats 7 IF MINUTE=15 GOTO LOOP ;Så länge minutvariabeln fortfarande är 15 väntar programmet här mellan 6 och 7 8 GOTO STOP ;En minut har gått och programmet kan gå tillbaka upp till början utan att fler larm skickas. 8
På samma sätt kan alla de olika variablerna användas för att ställa villkor. Ett annat fall där liknande programmering används är i fallet av jourpersonal. Då vill man att larmet ska gå till en personal vissa tider på dygnet eller vissa dagar i veckan och till annan personal vid andra tider. Delar ur ett program som kan visa på hur det skulle kunna programmeras. 3 IF WEEKDAY = 3 GOTO LASSE 4 IF WEEKDAY = 4 GOTO PELLE ;Är veckodagen onsdag ska larmet ringas iväg till Lasse ;Är veckodagen torsdag ska larmet ringas iväg till Pelle 15 :LASSE 16 DIAL T01 K02 17 GOTO ÅTERSTÄLLNING 25 :PELLE 26 DIAL T02 K02 27 GOTO ÅTERSTÄLLNING 9
4. Användningsområden Tidsloopar kan användas vid t.ex. Ingångsfördröjningar Undvika kontaktstudsar Undvika spikar/tillfälliga bortfall på spänningen Se till så att inte instabila telelinjer larmar hela tiden Provlarmsändningar med regelbundna intervall Pulsade utgångssignaler (t.ex. på en siren, eller pannvärmare) Variablerna som finns i GoogolScript kan t.ex. användas för Jourpersonalsscheman (sommarschema, helgpersonal, vissa dagar ) Provlarm på valbara klockslag Meddela tid och datum vid larmsändningar 10