Skript/Code funktioniert nicht

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Skript/Code funktioniert nicht

Beitragvon cleeb » 21.10.2012, 18:53

Hallo,

ich hab auf einer A570 IS folgendes (einfache) Skript laufen:
Code: Alles auswählen
o = 1

while 1
 
  q = get_tick_count                                                                  # alle 10 Minuten in eine Log-Datei schreiben, dass die Kamera noch läuft
  if q > (o * 10 * 60 * 1000) then
      t = get_time 2
      u = get_time 1
      v = get_time 0
      m = get_time 3
      n = get_time 4
      s = get_vbatt      
      print m,".",n," - ",t,":",u,":",v," - ",s," Volt - läuft"   
      o = o + 1
  endif
   
  if is_key "remote" then                                                                         #wenn remote => 2 Fotos mit Abstand von zwei Sekunden
      shoot
      sleep 2000
      shoot
      s = get_vbatt
      t = get_time 2
      u = get_time 1
      v = get_time 0
      m = get_time 3
      n = get_time 4      
      print "Foto: ",m,".",n," - ",t,":",u,":",v," - ",s," Volt"        
      sleep 3000
  endif       
 
wend

Soll im Prinzip nur Fotos machen wenn ein Signal über die USB-Schnittstelle kommt und zudem noch alle 10 Minuten in eine Log-Datei schreiben, dass das Skript/die Kamera noch läuft.
Es ist jetzt jedoch schon 3 mal passiert, dass statt alle 10 Minuten alle 0,2 Sekunden ein Log-Eintrag geschrieben wird.
Hat jemand dafür eine Erklärung warum sich die Kamera hier "verrechnet" oder hat jemand schon mal ähnliches beobachtet?

LG
cleeb
cleeb
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 10
Registriert: 13.04.2011, 23:09
Kamera(s): Canon Ixus60 1.00a

Re: Skript/Code funktioniert nicht

Beitragvon rudi » 21.10.2012, 21:28

Hallo cleeb,

get_tick_count gibt die Zeit seit dem Einschalten der Kamera wieder (siehe Handbuch S. 98). Wenn diese schon länger als 10 oder 20 Miunten läuft, dann löst die Schleife auch mehrfach aus. Als Lösung kannst du dir beim Start den Zeitwert merken und dann immer vom aktuellen Zeitwert abziehen.
Beispiel:
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
rem Zeitwert bei Skriptstart
x = get_tick_count
o = 1

while 1
rem aktueller Zeitwert - Zeitwert bei Skriptstart = Zeit seit Skriptstart in ms
  q = get_tick_count - x
.
.
Erstellt in 0.005 Sekunden, mit GeSHi 1.0.8.9

Kommentare müssen mit rem gekennzeichnet werden, # sollte eine Fehlermeldung auslösen.

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: Skript/Code funktioniert nicht

Beitragvon cleeb » 21.10.2012, 21:40

Hallo Rudi,

danke für deine Antwort. Die Kommentare hab ich nur im nachhinein eingefügt, bins vom C-Programmieren so gewöhnt :)
Dass die Schleife mehrfach durchlaufen wird ist ja beabsichtigt.
Das erste mal, wenn q größer als 1 (=o) * 10 * 60 * 1000 = 10 Minuten ist.
Dann wird in der Schleife o um 1 erhöht, das heißt sie wird erst wieder durchlaufen wenn q größer als 2*10*60*1000 = 20min ist, das nächste mal wenns über 30min sind usw usw.
Das Funktioniert auch auch in 99,999% aller Fälle (über einen Zeitraum von 8 Monaten im Dauerbetrieb), nur ab und zu wird die Schleife nicht alle 10minuten, sondern konstant alle 0,2 Sekunden durchlaufen....und das macht nach wie vor keinen Sinn für mich....

LG Cleeb
cleeb
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 10
Registriert: 13.04.2011, 23:09
Kamera(s): Canon Ixus60 1.00a

Re: Skript/Code funktioniert nicht

Beitragvon rudi » 28.10.2012, 21:28

Hallo cleeb,

wenn du die Kamera mit im Dauerbetrieb benutzt, dann musst du auch die Obergrenze für get_tick_count und o*10*60*1000 berücksichtigen. Diese beträgt 2^31 - 1 = 2147483647 (siehe Handbuch S.85). Daher wird get_tick_count nach reichlich 24 Tagen wieder bei Null beginnen und auch die vergleichende Multiplikation läuft ab o=3580 über.
Um 10 Minuten zu warten oder bei Tastendruck zu reagieren würde ich eher wait_click 10*60*1000 benutzen (siehe Hanbuch S.91).
Mehr zu wait_click und is_key und is_pressed kannst du dir hier ansehen.

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste

cron