--[[ 22.12.2016 Leistungsberechnung aus Motorstrom und -spannung P min. und Pmax. wird berechnet Es wird ein Telemetrie Fenster "Lua: Power" erzeugt und kann unter Telemetrieanzeige ausgewält werden. Setup unter Zusatzfunktionen: Auswahl von Strom- u. Spannungssensor für die Power-Berechnung Diese Werte werden im Modellspeicher abgelegt. --]] -------------------------------------------------------------------------------- -- Locals für die Application local lbl1, P_str, Pmin_str, Pmax_str local P, Pmax, Pmin local sensorLalist = {"..."} local sensorIdlist = {"..."} local sensorPalist = {"..."} -------------------------------------------------------------------------------- -- Zeichnet das Telemtrie Fenster für Power local function printTelemetry_P() if (P_str == "-") then lcd.drawText(145 - lcd.getTextWidth(FONT_MAXI,"-"),10,"-",FONT_MAXI) lcd.drawText(145 - lcd.getTextWidth(FONT_MINI,"PWR_Calc"),54,"PWR_Calc",FONT_MINI) lcd.drawImage(1,51, ":graph") else lcd.drawText(145 - lcd.getTextWidth(FONT_MAXI,string.format("%s W", P_str)),10,string.format("%s W", P_str),FONT_MAXI) lcd.drawText(145 - lcd.getTextWidth(FONT_MINI,string.format("%s .. %sW", Pmin_str, Pmax_str)),54,string.format("%s .. %sW", Pmin_str, Pmax_str),FONT_MINI) lcd.drawImage(1,51, ":graph") end end -------------------------------------------------------------------------------- -- Speichert die Daten der gewählten Sensoren im Modellspeicher local function I_sensorChanged(value) Isens=value Isensid=value Isenspa=value system.pSave("Isens",Isens) system.pSave("Isensid",Isensid) system.pSave("Isenspa",Isenspa) Iid = string.format("%s", sensorIdlist[Isensid]) Iparam = string.format("%s", sensorPalist[Isenspa]) if (Iid == "...") then Iid = 0 Iparam = 0 end system.pSave("Iid", Iid) system.pSave("Iparam", Iparam) end local function U_sensorChanged(value) Usens=value Usensid=value Usenspa=value system.pSave("Usens",Usens) system.pSave("Usensid",Usensid) system.pSave("Usenspa",Usenspa) Uid = string.format("%s", sensorIdlist[Usensid]) Uparam = string.format("%s", sensorPalist[Usenspa]) if (Uid == "...") then Uid = 0 Uparam = 0 end system.pSave("Uid", Uid) system.pSave("Uparam", Uparam) end -------------------------------------------------------------------------------- -- Setup Fesnster local function initForm(subform) form.addRow(2) form.addLabel({label= "Motorstrom-Sensor"}) form.addSelectbox(sensorLalist,Isens,true,I_sensorChanged) form.addRow(2) form.addLabel({label= "Motorspann.-Sensor"}) form.addSelectbox(sensorLalist,Usens,true,U_sensorChanged) end --------------------------------------------------------------------------------- -- Runtime Funktionen, lesen Sensoren und berechnen PWR, Pmin and Pmax local function loop() local sensor_U = system.getSensorByID(Uid, Uparam) local sensor_I = system.getSensorByID(Iid, Iparam) system.registerTelemetry(1,lbl1,2,printTelemetry_P) if(sensor_U and sensor_U.valid) then P = sensor_U.value * sensor_I.value if P > Pmax then Pmax = P end if P < Pmin then Pmin = P end P_str = string.format("%.1f", P) Pmin_str = string.format("%.1f", Pmin) Pmax_str = string.format("%.1f", Pmax) else P_str = "-" end end ------------------------------------------------------------------------- -- Application initialization local function init() -- Erafsst einmal alle Sensoren welche vorhanden sind local sensors = system.getSensors() for i,sensor in ipairs(sensors) do if (sensor.label ~= "") then table.insert(sensorLalist, string.format("%s", sensor.label)) table.insert(sensorIdlist, string.format("%s", sensor.id)) table.insert(sensorPalist, string.format("%s", sensor.param)) end end --- Default Werte sind die des Linkvaro (Pro) Isens = system.pLoad("Isens",0) Isensid = system.pLoad("Isensid",107556) Isenspa = system.pLoad("Isenspa",5) Usens = system.pLoad("Usens",0) Usensid = system.pLoad("Usensid",107556) Usenspa = system.pLoad("Usenspa",4) Iid = system.pLoad("Iid",107556) Iparam = system.pLoad("Iparam",5) Uid = system.pLoad("Uid",107556) Uparam = system.pLoad("Uparam",4) lbl1 = "Lua: Power" P_str = "-" Pmax = 0 Pmin = 0 P = 0 system.registerTelemetry(1,lbl1,2,printTelemetry_P) system.registerForm(1,MENU_APPS,"Setup PWR Calc.",initForm) end -------------------------------------------------------------------------------- return {init=init, loop=loop, author="user", version="0.1", name= "PWR_Calc"}