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 for Base (transferiert aus anderer Themenkette - von Nils zur besseren Übersicht)

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

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

#1 LUA for Base (transferiert aus anderer Themenkette - von Nils zur besseren Übersicht)

Beitragvon DOMIQ » Mi 22. Sep 2010, 22:22

Larger example - I'm attaching two files (well, I tired, results below), that should be loaded to scripts directory on the Base. They can later be loaded by "import" call. Latest modules have those files by default.
[warn]pwm.lua ist kein erlaubter Dateityp.
pid.lua ist kein erlaubter Dateityp.[/warn]
  • pwm.lua implements PWM modulation for outputs, that lets use PWM with older LCN modules and simple radiator regulators.
  • pid.lua implements PID regulator, I actually use it at home instead of built-in proportional regulators of LCN modules. For now mostly because of PWM
This is how to use both together:

Code: Alles auswählen

import 'pid'
import 'pwm'


pid {
  kp = 10, trace=true,
  positive = pwm { output = use "LCN.output.0.110.2", period = 360},
  value = use "LCN.value.0.110.r1",
  regulator = use "LCN.regulator.0.110.1"
}


Above code configures PWM output on module 110, output 2 with full cycle equal to 6 minutes. It uses temperature from R1 on module 110 as current temperature, and regulator 1 setting on module 110 as setpoint value.

There are more options to setup, like integration and derivation constants. I need to extend pid.lua with regulator autotuning...

Another option, that could have nice results (I will check this winter) would be to use LCN regulator to control temperature of the radiator in the room and then use above PID regulator (with small changes) to vary temperature of the radiator by changing setpoint inside LCN module. This of course would require two temperature sensors per room, one like now and second stuck to the radiator.

Such setup is frequently used in automation, and should make temperature stabilization much better. And get rid of "cool flow" of air from the windows to floor, which for me is major issue with current LCN setup, especially that "standard" way of radiator control doesn't suffer that problem.


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

#2 RE: LUA for Base (transferiert aus anderer Themenkette - von Nils zur besseren Übersicht)

Beitragvon DOMIQ » Mi 22. Sep 2010, 22:29

This is pwm.lua, so you can see how it looks like. pid.lua is much longer, but generally doesn't use anything different.

Code: Alles auswählen

--
-- PWM Output Module
--
-- Copyright 2010 DOMIQ Sp. z o.o.
--

function pwm(tab)
        local dev = {}
        local out = assert(tab.output)
        local per = assert(tab.period)

        local ontime = 0
        local pertime = 0
        local curtime = 0

        dev.value = 0
        dev.trace = tab.trace

        function out:ontick()
                curtime = curtime + 1
                if curtime > per then curtime = 0 end
                ontime = (dev.value * per)/100
                if ontime  per then ontime = per end
                if dev.trace then
                        print(string.format("PWM: out=%d curtime=%d ontime=%d period=%d",out.value,curtime,ontime,per))
                end
                if curtime  ontime and out.value > 0 then out:off() return end
        end

        function dev:set(val)
                print("PWM: value="..val)
                local v
                if val == "on" then
                        v = 100
                elseif val == "off" then
                        v = 0
                else
                        v = tonumber(val)
                end
                assert(v >= 0)
                assert(v <= 100)
                if dev.value == 0 then
                        curtime = 0
                end
                dev.value = val
        end

        function dev:get()
                return dev.value
        end

        out:off()

        return dev
end

Benutzeravatar

Nils
Administrator
Administrator
Beiträge: 1053
Registriert: Mi 22. Mai 2002, 22:08
Hat sich bedankt: 4 Mal
Danksagung erhalten: 15 Mal
Kontaktdaten:

#3 RE: LUA for Base (transferiert aus anderer Themenkette - von Nils zur besseren Übersicht)

Beitragvon Nils » Do 23. Sep 2010, 07:57

Hi Filip,
I transfered this new theme for a better overview ;-)

The upload didn't work because of wrong ending. Please send me the files per mail ans I will add them.

Regards
Beste Grüße
Nils (Gresbrand)
Bus-Profi

Der Bus-Profi ist Partner für LCN, KNX, myGEKKO, Comexio und SONOS-Installer sowie Distributor für Domiq
Fahrtenbuchlösung von VIMCAR: http://aklam.io/yUTckn


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

#4 RE: LUA for Base (transferiert aus anderer Themenkette - von Nils zur besseren Übersicht)

Beitragvon DOMIQ » Fr 22. Apr 2011, 22:46

How to act on change:

Code: Alles auswählen

sth = use 'LCN.output.0.20.1'

function sth:onchange(new,old)
  print("New value",new,"Old value",old)
end

If you don't need old or new value, you might ignore it. Also, if you need to monitor number of values for change, do it like that:

Code: Alles auswählen

val1 = use 'LCN.relay.0.20.1'
val2 = use 'LCN.relay.0.20.2'

function changed()
  if val1.value == 1 and val2.value == 1 then
    print("Both are ON")
  end
end

val1.onchange = changed
val2.onchange = changed


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

Wer ist online?

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