ProfiLab + Lua = ProfiLua

Antworten
ASkr
Beiträge: 5
Registriert: Montag 6. Dezember 2010, 02:18

ProfiLab + Lua = ProfiLua

Beitrag von ASkr » Montag 6. Dezember 2010, 02:23

Oder: DLLs für Alle =)


Tag Zusammen,

wer schon immer mal eine ProfiLab-DLL erstellen wollte, sich aber bislang
nie getraut hat, kann das jetzt auf anderem Wege nachholen: Mit Lua.
(Alle anderen dürfen das natürlich auch tun...)

Ich bin so frei und biete einfach mal meinen kleinen, ProfiLab-internen
Lua-Interpreter an, "ProfiLua".

Statt wie wild DLLs zu kompilieren und bei jeder Änderung Dateien
kopieren zu müssen, was letztendlich auch immer das Verlassen ProfiLabs
mit sich zieht, kann man jetzt ganz gemütlich ein Lua Script einbinden.
Abgesehen davon hat Lua eine ganze Menge anderer Sachen zu bieten,
die man in anderen "Sprachen" vergeblich sucht.

ProfiLua, ein paar Bleistifte, source code und ne Menge Orange, gibts hier:

http://www.askrprojects.net/software/profilua

Würde mich wirklich interessieren, ob außer mir noch etwas damit anfangen kann.
(Bei mir gibts inzwischen kein ProfiLab-Projekt mehr ohne ProfiLua 8-)

Bei Fragen, fragen!
Aber - denkt dran: Ich bin keine 24h Hotline...


Gruß
ASkr


P.S.:
- Ja, die Seite glänzt nicht gerade durch ihre Übersichtlichkeit.
- Nein, ich spreche kein Deutsch ;-)

Florian.Herthel
Beiträge: 31
Registriert: Dienstag 13. April 2010, 11:11
Wohnort: Kleinmachnow

Re: ProfiLab + Lua = ProfiLua

Beitrag von Florian.Herthel » Dienstag 7. Dezember 2010, 08:28

Hallo ASkr,
das mit dem Skript ist ein wirklich klasse Ansatz.
Habe mal Deine Beispiele durchprobiert und es ist wirklich sehr einfach.
Auch wenn "Lua" etwas "gewöhnungsbedürftig" ist.

Florian

Mike D
Beiträge: 502
Registriert: Dienstag 14. Oktober 2008, 14:48
Wohnort: Elbe- Weser-Dreieck

Re: ProfiLab + Lua = ProfiLua

Beitrag von Mike D » Dienstag 7. Dezember 2010, 11:37

Hey ASkr,
DLL-Skripting in Profilab ist eine sehr interessant Sache. Von Lua hatte ich vorher nie etwas gehört.
Ich habe mir deine Seite zweimal durchgelesen und möchte dir in einem Punkt wiedersprechen.
"gPUser[]" corresponds to the C-array "PUser[]", but is not useful. It is just here for future compatibility reasons. Until then, only "gPUser[101]" contains a value that might be required: The number of the ProfiLab DLL, this instance of ProfiLua was invoked with.
PUser ist der Weg um Zustände und Werte von einem zum nächsten Aufruf von gCalculate zu speichern. Da jede Instanz der DLL sein eigenes PUser-Array hat, kann man mehrere Instanzen der gleichen DLL laufen lassen, ohne dass sie die gleichen globalen Variablen brauchen. Dies gilt leider nicht für Strings.
NOTE #1: Two string in- and outputs must not be in the same row:
Das ist glaube ich nicht nötig, wenn man explizit dafür sorgt, dass jeder Stringausgang bei JEDEM Aufruf von gCalculate neu gesetzt wird, weil bei den Strings das Eingangs- und Ausgangsarray identisch ist. Die normalen Ein- und Ausgänge haben eigene Arrays, die Werte des Ausgangsarrays bleiben erhalten und müssen nur bei Änderungen neu gesetzt werden.

Tolle Sache, ich hoffe ich habe in Kürze Zeit damit zu experimentieren.

Mike

BTW your German is excellent.;-)

Mike D
Beiträge: 502
Registriert: Dienstag 14. Oktober 2008, 14:48
Wohnort: Elbe- Weser-Dreieck

Re: ProfiLab + Lua = ProfiLua

Beitrag von Mike D » Dienstag 7. Dezember 2010, 16:01

Beispiel 2, der Script modifiziert, statt globaler Variablen wird PUser benutzt.

Mike
Dateianhänge
ProfiLua_Ex2.zip
Example 2, modified
(81.38 KiB) 304-mal heruntergeladen

ASkr
Beiträge: 5
Registriert: Montag 6. Dezember 2010, 02:18

Re: ProfiLab + Lua = ProfiLua

Beitrag von ASkr » Dienstag 7. Dezember 2010, 22:25

Mike D hat geschrieben: Beispiel 2, der Script modifiziert, statt globaler Variablen wird PUser benutzt.
Mike

Hi Mike,

das ist ein gutes Beispiel - für die Redundanz von gPUser (zumindest innerhalb ProfiLuas) ;)

Alle global angelegten Variablen bleiben erhalten.
Statt gPUser[] kannst Du auch Kekse[], "Handfeuermelder" oder sonst etwas anlegen, es
gibt keinen Unterschied.

Z.B.:

Code: Alles auswählen

  Today = 7
  Assange = {"Arrested ","in ",Britain"}
  Merksatz = "Weihnachtsgeschenke kaufen!"

  function gCalculate(Args)
    if Args[1] == 321 then
      Assange[4] = ", really!"
    end

    return {0}
  end

  function gSimStop(Args)
    local i
    for _,i in pairs(Assange) do
      io.write(i)
    end
    print("\n"..Merksatz.."\n")
  end

(Anm.: Die Ausgabe wirst Du natürlich nicht zu Gesicht bekommen.
Kurz nach gSimStop() wird die Konsole geschlossen. Ist nur ein Beispiel...)


gPUser ist innerhalb ProfiLuas nichts anderes als eine globale Variable, wie der "Assange", da oben ^^^...

Das ist der Grund, warum ich *PUser, innerhalb ProfiLuas als redundant erachte.
Du kannst anlegen, speichern, berechnen oder verändern was und womit es Dir beliebt ;)

Einzige Ausnahme wäre CCalculate(), weil es innerhalb ProfiLabs schon vor dem Start
des Projekts aufgerufen werden kann und eine Initialisierung von PUser[] erlaubt.


Gruß
ASkr

ASkr
Beiträge: 5
Registriert: Montag 6. Dezember 2010, 02:18

Re: ProfiLab + Lua = ProfiLua

Beitrag von ASkr » Dienstag 7. Dezember 2010, 22:53

Mhh, nach kurzer Bedenkzeit konnte ich mich aber noch dunkel an das hier erinnern.
Aus der "DLL-Hilfe", bezugnehmend auf PUser:

"Die Werte in diesen Variablen werden von ProfiLab mit in der Projektdatei abgespeichert,
und sind so beim nächsten Laden des Projekts wieder verfügbar."
Gilt das nur für CConfigure(), oder auch wenn ich in CSimStop() letztmalig PUser beschreibe?

Mit den besonderen Spitzfindigkeiten:

- Projekt innerhalb Profilabs stoppen, beim Beenden ProfiLabs aber nicht abspeichern
- Stoppen eines kompilierten Projekts

DAS wäre ein Argument gPUser nochmals aus dem Lua Stack zurückzulesen und
innerhalb CSimStop() an PUser[] zu übergeben...

ASkr
Beiträge: 5
Registriert: Montag 6. Dezember 2010, 02:18

Re: ProfiLab + Lua = ProfiLua

Beitrag von ASkr » Mittwoch 8. Dezember 2010, 01:06

Mike,
hast recht ;)

Ich hab das mal schnell eingebaut...

v0.9b: gPUser wird jetzt beim Verlassen des Projekts in PUser zurückgeschrieben.
Siehe http://www.askrprojects.net/software/pr ... ample8.zip

Gruß
ASkr

Lui
Beiträge: 6
Registriert: Sonntag 16. Januar 2011, 13:41

Re: ProfiLab + Lua = ProfiLua

Beitrag von Lui » Sonntag 16. Januar 2011, 13:53

Hallo ASKr

Wie genau funktioniert das einbinden der .dll ins Profilab Programm??
Aus der Beschreibung (link) werde ich nicht ganz schlau.

kannst du mir weiterhelfen
Danke

ASkr
Beiträge: 5
Registriert: Montag 6. Dezember 2010, 02:18

Re: ProfiLab + Lua = ProfiLua

Beitrag von ASkr » Mittwoch 19. Januar 2011, 21:15

Lui hat geschrieben:Wie genau funktioniert das einbinden der .dll ins Profilab Programm??Aus der Beschreibung (link) werde ich nicht ganz schlau.
In Profilab unter "Diverses -> Diverses" einfach den "DLL-Import" Block auswählen, platzieren, Doppelklick darauf und
die DLL mittels "importieren" auswählen.

Gruß
ASkr

Lui
Beiträge: 6
Registriert: Sonntag 16. Januar 2011, 13:41

Re: ProfiLab + Lua = ProfiLua

Beitrag von Lui » Samstag 22. Januar 2011, 09:59

Danke erstmal für die Antwort.
Ich habe wohl die Frage falsch formuliert.

Ich meinte wie mache ich aus einer lua datei eine dll
Die lua Datei kann ich in jedem Editor erstellen??

Danke Lui

Mike D
Beiträge: 502
Registriert: Dienstag 14. Oktober 2008, 14:48
Wohnort: Elbe- Weser-Dreieck

Re: ProfiLab + Lua = ProfiLua

Beitrag von Mike D » Samstag 22. Januar 2011, 15:11

Garnicht
ASKr's DLL enthält den Interpreter der die LUA-Scripte ausführt.

Mike

ankerwolf
Beiträge: 4
Registriert: Samstag 3. Juli 2010, 17:52

Re: ProfiLab + Lua = ProfiLua

Beitrag von ankerwolf » Mittwoch 1. April 2015, 11:57

Hallo,
heute bin ich auf ProfiLua gestoßen, war begeistert und "sofort verwenden wollen".

Grundsätzlich ist der erste Einsatz erfolgreich gewesen, aber ...

Wenn ich aus [Diverses > Diverses > Simulation Stop] verwende und auch betätige, dann kommt folgende Fehlermeldung:
ProfiLua_Error_Stop.png
ProfiLua_Error_Stop.png (3.49 KiB) 5460 mal betrachtet
Wenn ich PL normal über [Stop(ESC)] stoppe, dann kommt keine Fehlermeldung.

ProfiLabExpert 4.0 inkl. Updates inkl. 18.12.2014
+ ProfiLua_V10a.dll

Hat wer eine Idee, wie man das abstellen könnte?

LG Wolfgang
Dateianhänge
Kennlinienmessung.zip
(245.23 KiB) 179-mal heruntergeladen

Antworten

Zurück zu „DLL-Programmierung“