[Lua] Skripte unter Windows testen

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

Re: Skripte unter Windows testen

Beitragvon c_joerg » 23.03.2015, 14:13

Hallo msl,

die Simulation verhält sich etwas anders, als auf der Kamera:

Code: Alles auswählen
--[[
@title parameter test
@chdk_version 1.4
#ui_shots=8 "Shots (0 = unlimited)"
-- Code von reyalp
-- Funktioniert auf der Kamera; hostlua ==> number: nil

-- #ui_shots=8 "Shots (0 = unlimited)" [-250 500]
-- Funktioniert auf der Kamera; hostlua ==> number: nil

-- #ui_shots=8 "Shots" [-250 500]
-- hostlua ==> number: 8

-- #ui_shots=8 "Shots"
-- Funktioniert auf der Kamera; hostlua ==> number: nil
]]

print("number:",ui_shots)
print("End")



Dein Testcode ergibt in der Simulation:

Code: Alles auswählen
--[[
@title parameter test
#test_number=250 "numbers" [-500 500]
#test_long=1000000 "big numbers" long
#test_value_id=0 "value id" {val_1 val_2 val_3}
#test_bool=1 "bool" bool
#test_table=0 "table" {label1 label2 label3} table
]]

print("number:", test_number)
print("big number:", test_long)
print("value id:", test_value_id)
print("bool:", test_bool)
print("table:", test_table.value, test_table[test_table.value])



=== CHDK LUA local ===
Starte Skript: "Test_Para2.lua"
===================================
bin\lua.exe: bin\emu.lua:331: error running D:\Temp\hostlua\A\CHDK\SCRIPTS\Test_Para2.lua D:\Temp\hostlua\A\CHDK\SCRIPTS\Test_Para2.lua:14: attempt to index global 'test_table' (a nil value)
stack traceback:
[C]: in function 'error'
bin\emu.lua:331: in main chunk
[C]: ?
title: parameter test
#number test_number 250 [-500 500]
#long test_long 1000000
#values test_value_id 0 {val_1 val_2 val_3}
#bool test_bool 1
warning, wrong default value for values! line: 7

number: 250
big number: 1000000
value id: 0
bool: 1
===================================


Fehlt noch mehr?

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 23.03.2015, 14:31

Hallo Jörg,

ich denke, dein Testskript ist veraltet. Zwischenzeitlich wurde der Startindex von 0 auf 1 geändert. Ein Null-Index führt nun zu einem Fehler.
Code: Alles auswählen
--[[
@title parameter test
@chdk_version 1.4
#test_number=250 "numbers" [-500 500]
#test_long=1000000 "big numbers" long
#test_value_id=0 "value id" {val_1 val_2 val_3}
#test_bool=1 "bool" bool
#test_table=1 "table" {label1 label2 label3} table
]]

set_console_layout(0,0,25,10)

print("number:", test_number)
print("big number:", test_long)
print("value id:", test_value_id)
print("bool:", test_bool)
print("table:", test_table.index, test_table.value, test_table[test_table.index])
Das Ergebnis für den lokalen Test sieht dann bei mir so aus:
Code: Alles auswählen
NPP_EXEC: "CHDK LUA local"
"D:\CHDK\hostlua\bin\hostlua.cmd" "D:\Download\parmtest.lua"
Process started >>>
-LUA-SYNTAX-CHECK------------------
-----------------------------------

=== CHDK LUA local ===
 Starte Skript: "parmtest.lua"
===================================
title: parameter test
version: 1.4
#number test_number 250 [-500 500]
#long   test_long 1000000
#values test_value_id 0 {val_1 val_2 val_3}
#bool   test_bool 1
#values test_table 1 {label1 label2 label3} table

>change console layout< 0 0 25 10
number: 250
big number: 1000000
value id: 0
bool: 1
table: 1 label1 label1
===================================

<<< Process finished. (Exit code 0)
================ READY ================


Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 23.03.2015, 15:46

Hallo msl,

ok, bei deinem Testcode bekomme ich jetzt die gleichen Ergebnisse.

Aber was kommt bei dieser Zeile bei dir raus:

Code: Alles auswählen
#ui_shots=8 "Shots (0 = unlimited)"

(Steht so im Code von reyalp)
oder

Code: Alles auswählen
#ui_shots=8 "Shots (0 = unlimited)" [-250 500]


Auf der Kamera funktioniert es. Ich bekomme in beiden Fällen mit hostlua nil.

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 23.03.2015, 21:48

Hallo Jörg,

ich bekomme die gleichen Ergebnisse. Da muss wohl noch etwas an der Emulation gefeilt werden. Mal schauen, was sich machen lässt. Im Augenblick sehe ich aber keine kurzfristige Lösung.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 24.03.2015, 07:18

Hallo msl,

Augenblick sehe ich aber keine kurzfristige Lösung.


kein Problem. Zumindest liegt es dann nicht an meiner Installation...

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 24.03.2015, 14:13

Hallo Jörg,

ich konnte den Fehler jetzt einkreisen. Prinzipiell funktioniert emu.lua. Der Emulator versteht aber nicht alle Konventionen. Für die Parameterbeschreibung sind nur Buchstaben und Leerzeichen zulässig. Außerdem wird eine Range-Angabe erwartet. Lässt man diese weg oder setzt in der Beschreibung z.B. eine Zahl, erhält der Parameter den Wert nil.

In derangehängten neuen Version von emu.lua habe ich versucht, diese Probleme zu lösen. Allerdings ist der Lösungsweg eher 'quick & dirty', da reguläre Ausdrücke nicht gerade mein Steckenpferd sind. :cry:

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 24.03.2015, 15:38

Hallo msl,

super, danke, geht jetzt zumindest alles so weit.....

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 25.03.2015, 12:03

Hallo,

rudi hatte ebenfalls die Emulationsdatei überarbeitet - mit ähnlicher Strategie. Zusätzlich werden jetzt auch einfache boolesche Variablen berücksichtigt:
Code: Alles auswählen
#schalter=true "Schalter ein/aus"
Außerdem können jetzt bis auf Anführungsstriche alle anderen Zeichen in Beschreibung benutzt werden.

rudi bat mich, seine Version hier zu veröffentlichen. Sie enthält noch ein paar formale Änderungen von mir.

Testergebnisse sind erwünscht. Sollte es keine größeren Probleme geben, würde ich die Datei dann in das CHDK-Repositorium hochladen.

Gruß msl

edit: Anhang gelöscht.
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 25.03.2015, 15:39

Hallo msl,

ich konnte bisher keine Fehler finden.
Wie ist das eigentlich mit der camera_funcs.lua. Wird die auch gepflegt?
In meiner Fehlen z.b set_mf und get_focus_state.

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 25.03.2015, 21:35

Hallo Jörg,

so richtig gepflegt wird die Datei nicht. Ich hänge mal meine genutzte Datei an. Die enthält u.a. die von dir vermissten Funktionen. Prinzipiell braucht man ja für fehlende Funktionen nur eine entsprechende Dummy-Funktion in der Datei zu ergänzen.

Ich überlege aber gerade, ob es möglich ist, mit Hilfe von chdkptp die PC-Tastatur als Ersatz für Tastatureingaben zu nutzen. Das wäre eine richtige Bereicherung der Testumgebung.

Gruß msl


Anhang entfernt
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 26.03.2015, 07:53

Hallo msl,

Prinzipiell braucht man ja für fehlende Funktionen nur eine entsprechende Dummy-Funktion in der Datei zu ergänzen.


habe ich bisher auch so gemacht….

Ich überlege aber gerade, ob es möglich ist, mit Hilfe von chdkptp die PC-Tastatur als Ersatz für Tastatureingaben zu nutzen. Das wäre eine richtige Bereicherung der Testumgebung.


An einigen Stellen ist es sehr wünschenswert, wenn man z.B. eine Schleife mit der Menu – Taste abbrechen will. Die Frage ist nur, wie hoch der Aufwand für die Realisierung ist..


Ich habe auch noch einige Funktionen erweitert.
Damit z.B. der Simulator nicht in der folgenden Schleife hängen bleibt

Code: Alles auswählen
  count = get_exp_count()
  press("shoot_full_only")
  repeat sleep(10) until get_exp_count() ~= count


habe ich get_exp_count() wie folgt erweitert:

Code: Alles auswählen
function camera_funcs.get_exp_count()
    camera_state.image_counter = camera_state.image_counter + 1
    return camera_state.image_counter
end


Ich habe in reyalp‘s Code noch einiger Initialisierungen wie diese gefunden

Code: Alles auswählen
#ui_draw_meter_t=0 " Meter area" {None Corners Box} table


Das führt auf der Camera aber erstmal zu keinem Absturz. Wenn ich allerdings den Code auf einem neu installierten CHDK starte, dann hat der Parameter immer irgendwelche zufälligen Werte und nicht nil.
Ich sollte ihn mal darauf hinweisen…

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 26.03.2015, 16:05

Hier habe ich noch etwas gefunden, was nicht geht....

Code: Alles auswählen
--[[
@description test
@chdk_version 1.4
#ev_shift_2=10 "Ev shift" {-2.1/2 -2.1/4 -2 -1.3/4  -1.1/2 -1.1/4 -1 -3/4 -1/2 -1/4 0 1/4 1/2 3/4 1 1.1/4 1.1/2 1.3/4 2 2.1/4 2.1/2}
]]

print("Shift:",ev_shift_2)
print("End")
 


Code: Alles auswählen
=== CHDK LUA local ===
 Starte Skript: "Test_Para.lua"
===================================
version: 1.4

Shift: nil
End
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 26.03.2015, 21:52

Hallo Jörg,

Danke fürs Testen. Der letzte Fehler ist 2-teilig. Bei den Variablennamen fehlen die Ziffern und bei den Wertezuweisungen fehlen die Interpunktionszeichen bei der Erkennung. Mit der angehängten Version von emu.lua sollte es nun funktionieren.

Die restlichen zuletzt veröffentlichten emu.lua-Dateien habe ich gelöscht, damit es übersichtlich bleibt.

Gruß msl

Anhang entfernt
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Skripte unter Windows testen

Beitragvon c_joerg » 27.03.2015, 09:46

Hallo msl

Danke fürs Testen


Ich muss für die schnelle Anpassung danken….
Geht so weit alles….

Ich weiß nicht, wie es anderen geht, aber ich komme immer wieder mit den Indices durcheinander. Man häte die tabeles auch 0 basiert lassen sollen.

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 456
Registriert: 14.08.2014, 06:50
Wohnort: Bremen
Kamera(s): S110 103a
S45
2 * G1X 101a, 100e
G9xII 1.00c,
SX230 101a
SX50hs 100c
EOS M3 101a
EOS M100 100a

Re: Skripte unter Windows testen

Beitragvon msl » 27.03.2015, 12:24

Hallo Jörg,

c_joerg hat geschrieben: Man häte die tabeles auch 0 basiert lassen sollen.
Das würde dann aber nicht den Lua-Konventionen entsprechen. Deshalb hatte ich bei der Entwicklung der Hash-Parameter auch darum gebeten, den Startindex zu ändern. Der ursprüngliche Startindex 0 entstand aus der typischen C-Programmierung. Der Lua-Entwickler Roberto Ierusalimschy schreibt in seinem Buch "Programmieren mit Lua, 2. Auflage" folgendes:
Da Sie eine Tabelle mit beliebigen Werten indizieren können, können Sie bei den Indices eines Arrays mit einer beliebigen Zahl anfangen. In Lua ist es allerdings üblich, Arrays bei 1 anfangen zu lassen (und nicht bei 0, wie in C) eine Konvention, an die sich mehrere Mechanismen halten.
Hat man beispielsweise eine leere Tabelle erstellt und füllt diese mit table.insert(), beginnt Lua mit dem Index 1. Das sollte dann auch für benutzerdefinierte Funktionen wie den Hash-Parametern gelten. U.a. ist dies hilfreich, wenn man mit Hilfe des Längenoperators # eine Tabelle auslesen möchte.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

VorherigeNächste

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron