NEWS
eigene Funktion in Blockly (widerkehrende Funktion)
-
erstmal vielen Dank für die Antwort, sicherlich ist es auf Dauer einfacher es direkt in JS zu machen, aber leider habe ich aktuell keinen Plan.
Das dieses script in JS sein muss habe ich gelesen, das habe ich so versucht, siehe Test_B. Auch habe ich gelesen das es in jedem Script quasi reinkopiert wird.Das mit einer Bibliothek, so mache ich es bei SPS Steuerungen ja auch hört sich interessant an.
Ein Script in Blockly zu erstellen und dann in JS zu kopieren ist sicherlich nicht der schönste weg, aber das bekomme ich ja hin.
Allerdings weiß ich jetzt noch gar nicht was "Require" ist, ist das über Blockly aufrufbar?@mike2712 [sagte]: Ein Script in Blockly zu erstellen und dann in JS zu kopieren
Man kann globale Funktionen auch mit Blockly erstellen. Das Problem ist der Aufruf von globalen Funktionen aus einem Blockly, denn es werden nur Funktionsaufrufe für im gleichen Skript erstellte Funktionen angeboten. Deshalb ist der Umweg über eine Javascript-Funktion erforderlich, wobei die Bezeichner der Funktionen (global / lokal) unterschiedlich sein müssen.
-
In einem globalen Script habe ich folgendes deklariert:

In jedem Blockly Script kann ich nun folgendes machen:
-
Eine JS-Funktion, die das ganze kapselt


-
... und deren Aufruf

Funktioniert wie erwartet
javascript.0 18:04:55.950 info start JavaScript (Blockly) javascript.0 18:04:55.952 info Blubb42 javascript.0 18:04:55.952 info registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptionsDen Aufruf der Funktion kann jetzt selbstverständlich mehrmals im Blockly vorkommen. Mit jeweils anderen Parametern.
Schön geht aber anders

@Codierknecht das ist ja eigentlich das was ich erreichen möchte, ich bekomme nur meine 3 unterschiedlichen Parameter nicht übergeben, er löscht das immer bis auf 1 weg
-
-
@mike2712 [sagte]: Ein Script in Blockly zu erstellen und dann in JS zu kopieren
Man kann globale Funktionen auch mit Blockly erstellen. Das Problem ist der Aufruf von globalen Funktionen aus einem Blockly, denn es werden nur Funktionsaufrufe für im gleichen Skript erstellte Funktionen angeboten. Deshalb ist der Umweg über eine Javascript-Funktion erforderlich, wobei die Bezeichner der Funktionen (global / lokal) unterschiedlich sein müssen.
@mike2712 [sagte]: Ein Script in Blockly zu erstellen und dann in JS zu kopieren
Man kann globale Funktionen auch mit Blockly erstellen. Das Problem ist der Aufruf von globalen Funktionen aus einem Blockly, denn es werden nur Funktionsaufrufe für im gleichen Skript erstellte Funktionen angeboten. Deshalb ist der Umweg über eine Javascript-Funktion erforderlich, wobei die Bezeichner der Funktionen (global / lokal) unterschiedlich sein müssen.
ich kapier es nicht, ich bekomme kein globales Script irgendwo in einem lokalen eingebunden
-
Ich habe mal "globale funktion in blockly" gegoogelt und folgende Antwort bekommen.
Habe einiges gegoogelt und hier im Forum gelesen, ich bekomme es einfach in Blockly nicht hin, obwohl es ziemlich sicher gehen müsste.


Sobald ich es einmal zuklappe....sind die anderen beiden Parameter verloren

@mike2712 [sagte]: Sobald ich es einmal zuklappe....sind die anderen beiden Parameter verloren
Du hast offenbar einen Fehler in den Javascript-Funktionen in der aktuellen Version (10.1.3) des JS-Adapters entdeckt, denn mir gelingt es auch nicht, mehrere Parameter zu übergeben.
Die Javascript-Blöcke spinnen total.EDIT: In Version 10.2.3 (Beta) funktionieren die Javascript-Funktionen wieder.
Globales Skript:

Lokales Blockly:

Javascript-Funktion:
g_AlexaAnsage(x, y, z); -
@mike2712 [sagte]: Sobald ich es einmal zuklappe....sind die anderen beiden Parameter verloren
Du hast offenbar einen Fehler in den Javascript-Funktionen in der aktuellen Version (10.1.3) des JS-Adapters entdeckt, denn mir gelingt es auch nicht, mehrere Parameter zu übergeben.
Die Javascript-Blöcke spinnen total.EDIT: In Version 10.2.3 (Beta) funktionieren die Javascript-Funktionen wieder.
Globales Skript:

Lokales Blockly:

Javascript-Funktion:
g_AlexaAnsage(x, y, z); -
@mike2712 [sagte]: Sobald ich es einmal zuklappe....sind die anderen beiden Parameter verloren
Du hast offenbar einen Fehler in den Javascript-Funktionen in der aktuellen Version (10.1.3) des JS-Adapters entdeckt, denn mir gelingt es auch nicht, mehrere Parameter zu übergeben.
Die Javascript-Blöcke spinnen total.EDIT: In Version 10.2.3 (Beta) funktionieren die Javascript-Funktionen wieder.
Globales Skript:

Lokales Blockly:

Javascript-Funktion:
g_AlexaAnsage(x, y, z);Vielen Dank, ich dachte schon ich wäre total blöd, funktionieren tut es leider immer noch nicht, aber da schaue ich noch mal in Ruhe.
Eine Allgemeine Frage, Ich persönlich finde diesen Weg, da ich es in der Art aus der SPS technik kenne eigentlich sehr gut, Funktionen die immer wieder benutzt werden in dieser Art abzulegen.
Ist es für das System wesentlich langsamer, durch das kopieren in jedem Script, oder welche anderweitigen Nachteile hat es?So konnte ich es jetzt auf die schnelle bauen, funktioniert aber nicht.

Das ist das Original wie es funktioniert, hier habe ich das Script in allen Adaptern kopiert, da ich zunächst keine Lösung hatte, wo ist mein Fehler in der oberen Version?


avascript.0 20:08:15.688 error Error: ReferenceError: unbenannt is not defined javascript.0 20:08:15.689 error at script.js.Device_EchoDot.Skript_1:25:1 javascript.0 20:08:15.690 error at script.js.Device_EchoDot.Skript_1:32:3 javascript.0 20:08:15.690 error at Script.runInContext (node:vm:149:12) -
Vielen Dank, ich dachte schon ich wäre total blöd, funktionieren tut es leider immer noch nicht, aber da schaue ich noch mal in Ruhe.
Eine Allgemeine Frage, Ich persönlich finde diesen Weg, da ich es in der Art aus der SPS technik kenne eigentlich sehr gut, Funktionen die immer wieder benutzt werden in dieser Art abzulegen.
Ist es für das System wesentlich langsamer, durch das kopieren in jedem Script, oder welche anderweitigen Nachteile hat es?So konnte ich es jetzt auf die schnelle bauen, funktioniert aber nicht.

Das ist das Original wie es funktioniert, hier habe ich das Script in allen Adaptern kopiert, da ich zunächst keine Lösung hatte, wo ist mein Fehler in der oberen Version?


avascript.0 20:08:15.688 error Error: ReferenceError: unbenannt is not defined javascript.0 20:08:15.689 error at script.js.Device_EchoDot.Skript_1:25:1 javascript.0 20:08:15.690 error at script.js.Device_EchoDot.Skript_1:32:3 javascript.0 20:08:15.690 error at Script.runInContext (node:vm:149:12) -
Vielen Dank, ich dachte schon ich wäre total blöd, funktionieren tut es leider immer noch nicht, aber da schaue ich noch mal in Ruhe.
Eine Allgemeine Frage, Ich persönlich finde diesen Weg, da ich es in der Art aus der SPS technik kenne eigentlich sehr gut, Funktionen die immer wieder benutzt werden in dieser Art abzulegen.
Ist es für das System wesentlich langsamer, durch das kopieren in jedem Script, oder welche anderweitigen Nachteile hat es?So konnte ich es jetzt auf die schnelle bauen, funktioniert aber nicht.

Das ist das Original wie es funktioniert, hier habe ich das Script in allen Adaptern kopiert, da ich zunächst keine Lösung hatte, wo ist mein Fehler in der oberen Version?


avascript.0 20:08:15.688 error Error: ReferenceError: unbenannt is not defined javascript.0 20:08:15.689 error at script.js.Device_EchoDot.Skript_1:25:1 javascript.0 20:08:15.690 error at script.js.Device_EchoDot.Skript_1:32:3 javascript.0 20:08:15.690 error at Script.runInContext (node:vm:149:12)@mike2712 sagte:
Ist es für das System wesentlich langsamer, durch das kopieren in jedem Script, oder welche anderweitigen Nachteile hat es?Langsamer wohl kaum.
Auch der benötigte zusätzliche Speicherplatz dürfte zu vernachlässigen sein.Der (für mich) größte Nachteil: Jede noch so kleine Änderung an einem globalen Script erzwingt einen Neustart der Instanz.
Außerdem ist zu beachten, dass in globalen Scripten Variablen eindeutige Namen haben müssen. Sonst kollidiert das mit den Variablen in den anderen Scripten.
wo ist mein Fehler in der oberen Version?
Ich rate mal: Deine Variablen und die Parameter haben identische Bezeichner.
Ich persönlich würde entweder die Parameter oder die Variablen ändern in "Device", "Tag", "Message".
Und in "Test_A" (dem globalen Script) müssen die wiederum eindeutige Namen tragen. -
@mike2712 sagte:
Ist es für das System wesentlich langsamer, durch das kopieren in jedem Script, oder welche anderweitigen Nachteile hat es?Langsamer wohl kaum.
Auch der benötigte zusätzliche Speicherplatz dürfte zu vernachlässigen sein.Der (für mich) größte Nachteil: Jede noch so kleine Änderung an einem globalen Script erzwingt einen Neustart der Instanz.
Außerdem ist zu beachten, dass in globalen Scripten Variablen eindeutige Namen haben müssen. Sonst kollidiert das mit den Variablen in den anderen Scripten.
wo ist mein Fehler in der oberen Version?
Ich rate mal: Deine Variablen und die Parameter haben identische Bezeichner.
Ich persönlich würde entweder die Parameter oder die Variablen ändern in "Device", "Tag", "Message".
Und in "Test_A" (dem globalen Script) müssen die wiederum eindeutige Namen tragen.Ich danke euch beiden, ja das Problem war das ich auf jeden Fall zu ungeduldig gewesen bin, wegen den Neustart.
Und was ich nicht bedacht hatte, auch irgendwie nicht verstehe, das der Name der Funktion nicht gleich sein darf, ich habe gedacht es muss sogar zwingend gleich sein, nachdem ich dann die Funktion in Buero umbenannt hatte ging es.
Ja das ist das Problem wenn man nur mit halbwissen an so etwas rangeht, ich danke euch für eure Unterstützung.

-
@mike2712 sagte:
Ist es für das System wesentlich langsamer, durch das kopieren in jedem Script, oder welche anderweitigen Nachteile hat es?Langsamer wohl kaum.
Auch der benötigte zusätzliche Speicherplatz dürfte zu vernachlässigen sein.Der (für mich) größte Nachteil: Jede noch so kleine Änderung an einem globalen Script erzwingt einen Neustart der Instanz.
Außerdem ist zu beachten, dass in globalen Scripten Variablen eindeutige Namen haben müssen. Sonst kollidiert das mit den Variablen in den anderen Scripten.
wo ist mein Fehler in der oberen Version?
Ich rate mal: Deine Variablen und die Parameter haben identische Bezeichner.
Ich persönlich würde entweder die Parameter oder die Variablen ändern in "Device", "Tag", "Message".
Und in "Test_A" (dem globalen Script) müssen die wiederum eindeutige Namen tragen.@Codierknecht [sagte: in globalen Scripten Variablen eindeutige Namen haben müssen.
Übergabeparameter an Funktionen sind lokale Variablen innerhalb der Funktion, die Vorrang vor globalen Variablen (mit gleichem Bezeichner) haben.
irgendwie nicht verstehe, das der Name der Funktion nicht gleich sein darf
Funktionsbezeichner sind global im Skript und müssen deshalb unterschiedlich sein.
-
@Codierknecht [sagte: in globalen Scripten Variablen eindeutige Namen haben müssen.
Übergabeparameter an Funktionen sind lokale Variablen innerhalb der Funktion, die Vorrang vor globalen Variablen (mit gleichem Bezeichner) haben.
irgendwie nicht verstehe, das der Name der Funktion nicht gleich sein darf
Funktionsbezeichner sind global im Skript und müssen deshalb unterschiedlich sein.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden