Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum

Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.

Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.

Lua Programmierung / Feinheiten und Verständnis

Hard- und Softwarefragen rund Domiq-Module fürs LCN-System
Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5293
Registriert: Mi 10. Jan 2007, 18:49
Hat sich bedankt: 4 Mal
Danksagung erhalten: 15 Mal
Kontaktdaten:

#1 Lua Programmierung / Feinheiten und Verständnis

Beitragvon Beleuchtfix » Di 1. Jan 2013, 14:20

Ich habe eine Verständnisfrage zu LUA,

Ich benutze häufig zum Setzen von Tabellen-Variablen die Syntax
set('Variable.Name',Wert) was oft geht, aber manchmal auch zu ungewünschten Ergebnissen führt.

Nachtrag:

Code: Alles auswählen

VAR.soll2_text:set 'Test'
set ('VAR.soll1_text','n/a')

Die erste Zeile geht nicht,[zitat]ERROR: [string "-- 01.01.2013 13:42:01..."]:46: attempt to index global 'VAR' (a nil value)[/zitat] aber die Zweite
Kann mir da jemand den Unterschied erklären?

Code: Alles auswählen

testwert = use 'LCN.output.0.120.1'
function test(x)
   print ('Eingang :'..testwert.value)   
   if testwert.value == 100 then
--      set ('testwert',0)
      testwert:set ('0')
   else
--      set ('testwert',100)
      testwert:set ('100')
   end
   print ('Ende: '..testwert.value)
end

Die auskommentierten Zeilen funktionieren z.B. nicht, obwol ich z.B. mit set ('VAR.soll1_text', display_regulator(t_eg_soll.value)) die variable im Display anzeigen lassen kann.

Zusätzlich verstehe ich nicht, wieso der 2. Print Wert (Ende) den gleichen Wert anzeigt wie der Eingangswert war. Meine Lampe wird geschaltet und beim nächsten Mal habe ich den richtigen Eingangswert.

Kann mir jemand diese Feinheiten erklären?
Gruß
Florian


twinkelm
Neues Mitglied
Neues Mitglied
Beiträge: 16
Registriert: Mo 23. Mai 2011, 08:54

#2 RE: Lua Programmierung / Feinheiten und Verständnis

Beitragvon twinkelm » Di 1. Jan 2013, 16:29

Hallo Florian,

mit testwert = use 'LCN.output.0.120.1' erzeugst Du ein Table-Objekt in LUA. Dieses Objekt hat die Methode :set, die Du dann aufrufen kannst.

Code: Alles auswählen

function dump(o)
    if type(o) == 'table' then
        local s = '{ '
        for k,v in pairs(o) do
                if type(k) ~= 'number' then k = '"'..k..'"' end
                s = s .. '['..k..'] = ' .. dump(v) .. ','
        end
        return s .. '} '
    else
        return tostring(o)
    end
end

testwert = use 'LCN.relay.0.80.3'
print('testwert ist ein ' .. type(testwert))
print('und hat die funktionen '.. dump(testwert))


gibt Dir

Code: Alles auswählen

INFO: SCRIPT RELOADED AT 16:06
testwert ist ein table
und hat die funktionen { ["off"] = function: 0x33ad04,["age"] = function: 0x26c980,["set"] = function: 0x2d7cc4,["toggle"] = function: 0x2c0154,["channel"] = function: 0x39d29c,["on"] = function: 0x2d52c4,["get"] = function: 0x3a1430,}


Mein Verständnis ist, dass die "alleinstehenden, globalen" Funktionen wie set, use usw. von der Domiq-Lua-Implementierung bereitgestellt werden. (maybe Filip can confirm / explain this).

Daher - VAR.soll2_text:set 'Test' -> macht keinen Sinn, wenn Du Dir vorher kein Objekt geholt hast (mit use, siehe oben)
set ('VAR.soll1_text','n/a') -> geht, da die "globale" Set-Funktion eben genau die von Dir richtig angegeben Parameter erwartet.

Happy new year!

Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5293
Registriert: Mi 10. Jan 2007, 18:49
Hat sich bedankt: 4 Mal
Danksagung erhalten: 15 Mal
Kontaktdaten:

#3 RE: Lua Programmierung / Feinheiten und Verständnis

Beitragvon Beleuchtfix » Di 1. Jan 2013, 16:48

Vielen Dank, dass muss ich mir gaanz laaaangsam durch den Kopf gehen lassen ;-)
Das mit dem erst Erstellen und dann Benutzen verstehe ich langsam.
Kannst du mir auch sagen, warum:

Code: Alles auswählen

soll1_text = use 'VAR.soll1_text'
set ('VAR.soll1_text','n/a')
soll1_text:set 'n/a'
bei beiden Zeilen richtig ist, aber

Code: Alles auswählen

soll1_text = use 'VAR.soll1_text'
set ('soll1_text','n/a')
VAR.soll1_text:set 'n/a'
bei beiden Zeilen falsch ist?
Gruß
Florian


twinkelm
Neues Mitglied
Neues Mitglied
Beiträge: 16
Registriert: Mo 23. Mai 2011, 08:54

#4 RE: Lua Programmierung / Feinheiten und Verständnis

Beitragvon twinkelm » Di 1. Jan 2013, 17:02

Code: Alles auswählen

soll1_text = use 'VAR.soll1_text'
soll1_text:set 'n/a'

und

Code: Alles auswählen

set ('VAR.soll1_text','n/a')

machen letztendlich dasselbe - setzen im Domiq-Modul die Variable VAR.soll1_text auf den Wert 'n/a'.

Zum zweiten Teil -
soll1_text = use 'VAR.soll1_text' <--- ist in Ordnung, erzeugt das soll1_text Objekt mit den Methoden :set, :get usw.
set ('soll1_text','n/a') <--- macht m.E. keinen Sinn, da im Domiq die Variable 'soll1_text' nicht bekannt ist (sondern nur VAR.soll1_text, MEM.soll1_text usw)
VAR.soll1_text:set 'n/a' <-- macht auch keinen Sinn, da Du oben das erzeugte Objekt soll1_text genannt hast (und nicht 'VAR.soll1_text').

Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5293
Registriert: Mi 10. Jan 2007, 18:49
Hat sich bedankt: 4 Mal
Danksagung erhalten: 15 Mal
Kontaktdaten:

#5 RE: Lua Programmierung / Feinheiten und Verständnis

Beitragvon Beleuchtfix » Di 1. Jan 2013, 17:30

Puh :confused: ich denke drüber nach.

Danke, Gruß
Florian


DOMIQ
Fleißiges Mitglied
Fleißiges Mitglied
Beiträge: 252
Registriert: Sa 25. Apr 2009, 11:16
Kontaktdaten:

#6 RE: Lua Programmierung / Feinheiten und Verständnis

Beitragvon DOMIQ » Di 8. Jan 2013, 14:54

Hi, set(name,value) is nicer if you programatically write or read (with get) large number of channels. With "use" approach it would take excessive amount of memory.


Zurück zu „Domiq-Module - DOMIQ Sp. z o.o.“

Wer ist online?

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