ZoRaC Skrevet 25. november 2016 Skrevet 25. november 2016 (endret) Noen som har et enkelt script for å få en timer til å telle nedover (i HSTouch)? Ser for meg man kanskje må ha en device å lagre til og hvert sekund ta starttid-nåværende timerverdi? Noen som har laget en enkel og grei løsning på dette? Endret 26. november 2016 av ZoRaC Løst! :D Siter
Moskus Skrevet 25. november 2016 Skrevet 25. november 2016 Du kan bruke en Counter med tilhørende kommando Decrease, samt et Event som trigger hvert sekund. 1 Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 Hørtes jo alt for enkelt ut! Jeg skal telle ned 3 timer, så jeg må formatere visningen litt (lav WAF å telle ned 10800 sekunder ). Finner sikkert en "SecondsToPrettyTime"-funksjon som kan benyttes til det. Siter
Moskus Skrevet 25. november 2016 Skrevet 25. november 2016 Et øyeblikk siden, ZoRaC skrev: Finner sikkert en "SecondsToPrettyTime"-funksjon som kan benyttes til det. Scripting it is! Du kan lagre sekund-verdien i en device, og så oppdatere Device String'en til denne devicen slik: hs.SetDeviceString(YOUR_DEVICE_REF, TimeSpan.FromSeconds(hs.DeviceValue(YOUR_DEVICE_REF)).ToString("HH:mm:ss"), False) 1 Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 Genialt! Trodde jeg måtte ha en egen funksjon som kalkulerte timer/min/sek, men dette så jo veldig enkelt ut. Vil ikke counteren være antall sekunder? Så jeg kan ta verdien av den i stedet? Kan jeg kanskje sette counterens devicestring, så slipper jeg en ekstra device helt? Siter
Moskus Skrevet 25. november 2016 Skrevet 25. november 2016 9 minutter siden, ZoRaC skrev: Vil ikke counteren være antall sekunder? Så jeg kan ta verdien av den i stedet? Jepp! Endre den "midterste" YOUR_DEVICE_REF til counteren sin device ref. 9 minutter siden, ZoRaC skrev: Kan jeg kanskje sette counterens devicestring, så slipper jeg en ekstra device helt? Jo, det kan du kanskje. Counteren viser nok bare value, og ingen Device String. Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 1 time siden, Moskus skrev: hs.SetDeviceString(YOUR_DEVICE_REF, TimeSpan.FromSeconds(hs.DeviceValue(YOUR_DEVICE_REF)).ToString("HH:mm:ss"), False) Hm, den delen med "TimeSpan" feiler: "Running script /tmp/K5.vb :Exception has been thrown by the target of an invocation.Input string was not in a correct format." hs.SetDeviceString("122", "test", False) fungerer. Forslag? Og hvordan setter jeg startverdien til counteren? Den starter jo på 0 og jeg finner ikke noe sted å endre startverdi? Siter
Moskus Skrevet 25. november 2016 Skrevet 25. november 2016 OK, da kan det være at du må putte det i en egen script-fil. UpdateTime.vb Sub Main(byval param as Object) hs.SetDeviceString(YOUR_DEVICE_REF, TimeSpan.FromSeconds(hs.DeviceValue(YOUR_DEVICE_REF)).ToString("HH:mm:ss"), False) End Sub Hvis ikke det fungerer, så prøv å legg "System." (med punktum, ja) rett foran ordet "TimeSpan". Hvis ikke DET fungerer, må vi gjøre det på den tungvindte måten. Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 Fant ut at det - man må escape ":" i format-spesifiseringen i tillegg til at det skal være lowercaps, så da virker det som immediate-script også. &hs.SetDeviceString("122", TimeSpan.FromSeconds(hs.DeviceValue("111")).ToString("hh\:mm"), False) I stedet for å blandet inn en counter, hadde det ikke vært enklere å benytte timer-devicen likevel? Den er jo lettere å starte/stoppe/resume/resette/osv. I stedet for å lage event som må kjøre hvert sekund for å decrementere en counter. Timeren har jo en value som er sekunder. Hvis jeg da tar antall sekunder minus timer-value, så får jeg jo antall sekunder som er igjen. Hvis jeg kjører det hvert sek og heller bare henter verdien fra den og oppdaterer en annen device-string, så er det kanskje enklere? Siter
Moskus Skrevet 25. november 2016 Skrevet 25. november 2016 3 minutter siden, ZoRaC skrev: Fant ut at det - man må escape ":" i format-spesifiseringen i tillegg til at det skal være lowercaps, så da virker det som immediate-script også. Øh... jaha? Det var rart! Kjører du på Linux, kanskje? 4 minutter siden, ZoRaC skrev: I stedet for å blandet inn en counter, hadde det ikke vært enklere å benytte timer-devicen likevel? Den er jo lettere å starte/stoppe/resume/resette/osv. I stedet for å lage event som må kjøre hvert sekund for å decrementere en counter. Ja, gjerne det. Men du må ha en trigger som oppdaterer utregningen uansett, og om det er i et rent Event, eller et Event knyttet til Timeren er jo akkurat det samme. Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 1 minutt siden, Moskus skrev: Øh... jaha? Det var rart! Kjører du på Linux, kanskje? Jepp. Men, tror ikke det var Linux-spesifikt, fant det i dokumentasjonen: https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx 1 minutt siden, Moskus skrev: Ja, gjerne det. Men du må ha en trigger som oppdaterer utregningen uansett, og om det er i et rent Event, eller et Event knyttet til Timeren er jo akkurat det samme. Hmm, sant det... Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 Det ser ikke ut til at det er mulig å sette en counter til en gitt verdi, verken "manuelt" eller med script... Da vil jo ikke det fungere. Må nok hente sekunder fra timeren og oppdatere en annen device med "formatert" tid likevel da. Siter
Moskus Skrevet 25. november 2016 Skrevet 25. november 2016 1 time siden, ZoRaC skrev: Det ser ikke ut til at det er mulig å sette en counter til en gitt verdi, verken "manuelt" eller med script... Da vil jo ikke det fungere. Joda. Bare bruk hs.SetDeviceValueByRef hvis du bruker script, eller bruk Setup -> Global Variables, Timers, Counters -> Counters. 2 timer siden, ZoRaC skrev: Men, tror ikke det var Linux-spesifikt, fant det i dokumentasjonen: https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx Ja, jøss! Rart siden alle andre ToString-formater vanligvis kan brukes vanlig HH:mm:ss. De er jo standardiserte, og jeg bruker "HH:mm:ss" i andre prosjekter... ? Siter
ZoRaC Skrevet 25. november 2016 Forfatter Skrevet 25. november 2016 (endret) 11 minutter siden, Moskus skrev: Joda. Bare bruk hs.SetDeviceValueByRef hvis du bruker script, eller bruk Setup -> Global Variables, Timers, Counters -> Counters. Ah, jeg prøvde bare setDeviceValue, det gikk ikke. Via GUI får jeg også bare til å øke/minke med 1, selv om jeg skriver noe annet i "boksen" ved siden av som visstnok skal endre på det... Endte med å gjøre det slik, som fungerer strålende Sub Main(ByVal theDevice As String) Dim seconds seconds = cint(hs.DeviceValue(theDevice)) seconds = 10800 - seconds hs.SetDeviceString(124, TimeSpan.FromSeconds(seconds).ToString("hh\:mm"), True) End Sub Hvordan kan jeg endre denne til at jeg kan sende inn flere parametere? Jeg ville kunne kalle denne med "111,124,10800,hh\:mm" (111=timerdevice, 124=virtuell device, 10800=sekunder, formatet til slutt). Liker å kunne gjenbruke ting senere Endret 25. november 2016 av ZoRaC Siter
Moskus Skrevet 26. november 2016 Skrevet 26. november 2016 9 timer siden, ZoRaC skrev: Hvordan kan jeg endre denne til at jeg kan sende inn flere parametere? Jeg ville kunne kalle denne med "111,124,10800,hh\:mm" (111=timerdevice, 124=virtuell device, 10800=sekunder, formatet til slutt). Liker å kunne gjenbruke ting senere Gjenbruk av kode er alltid en god ide! Det er mulig å sende flere parametere, men du må ta en omvei. Som du ser tar en sub eller funksjon kun én parameter, men siden dette er en string så kan vi herje litt med den. Legg dette til i begynnelsen under Sub Main(Byval params as Object) (main krever i utgangspunktet et object som parameter-type): Dim parameters() as String = params.ToString.Split(",") Dim timerDeviceRef as Integer = parameters(0) Dim virtualDeviceRef as Integer = parameters(1) Dim totalSeconds as Integer = parameters(2) Dim timeFormat as String = parameters(3) 1 Siter
ZoRaC Skrevet 26. november 2016 Forfatter Skrevet 26. november 2016 Jeg prøvde noe lignende selv, men fikk kompileringsfeil - sikkert bommet litt på syntax. Med dine linjer fungerer det utmerket! Sub Main(Byval params as Object) Dim parameters() as String = params.ToString.Split(",") Dim timerDeviceRef as Integer = parameters(0) Dim virtualDeviceRef as Integer = parameters(1) Dim totalSeconds as Integer = parameters(2) Dim timeFormat as String = parameters(3) Dim seconds seconds = cint(hs.DeviceValue(timerDeviceRef)) seconds = totalSeconds - seconds hs.SetDeviceString(virtualDeviceRef, TimeSpan.FromSeconds(seconds).ToString(timeFormat), True) End Sub Siter
Moskus Skrevet 26. november 2016 Skrevet 26. november 2016 19 minutter siden, ZoRaC skrev: Med dine linjer fungerer det utmerket! Så bra! seconds-linjene dine fungerer, men ser litt snåle ut. Jeg hadde gjort det slik: Dim seconds As Integer = totalSeconds - hs.DeviceValue(timerDeviceRef) ... men alt fungerer! 1 Siter
ZoRaC Skrevet 26. november 2016 Forfatter Skrevet 26. november 2016 2 timer siden, Moskus skrev: Så bra! seconds-linjene dine fungerer, men ser litt snåle ut. Jeg hadde gjort det slik: Dim seconds As Integer = totalSeconds - hs.DeviceValue(timerDeviceRef) ... men alt fungerer! Jeg strevde litt med syntax'en, så det endte til slutt opp slik Jeg kan PHP, Javascript, Java og PowerShell - strever litt med å lære meg syntaxen her, siden alle har forskjellig... Endret til ditt forslag nå, funket det også! 1 Siter
Anbefalte innlegg
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.