NEWS
Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?
-
Hallo zusammen,
mit dem Blockly will ich bei meiner Spülmaschine die Durchgänge zählen (s.Diagramm): Ein Durchgang wäre dann Low --> High --> Low (wobei Low & High natürlich Zahlenwerte sind).
Exemplarisch habe ich erstmal eine Testvariable (Example State) genommen um die Durchgänge zu simulieren. Diese werden dann durch eine interne Variable (Zähler) gezählt und sollten am Ende per Debug ausgegeben werden.
Wenn ich jetzt z. B. für Example State 99 --> 101 --> 99 eingebe steht der Zähler auf 1 anstatt auf 2.
Wo ist der Denkfehler? Stehe gerade auf dem Schlauch :-)


<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</variable> <variable id="w?2J9;8w#u;O01y_~LvX">Zähler</variable> <variable type="interval" id="Intervall">Intervall</variable> </variables> <block type="variables_set" id="cXQW,Ma[_m_0nKx1gM]!" x="-912" y="12"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="]}N:KMi@/m63{P%`Q2R@"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="+5D[c;+Aa~[||)ZfCw|p"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="VALUE"> <block type="math_number" id="HyPuonhr-ZTnYkf_Utm-"> <field name="NUM">0</field> </block> </value> <next> <block type="on" id="r25Ft/_.BXH_b^.e]A2V"> <field name="OID">0_userdata.0.example_state</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="0kRkMm+6Yz5)#,3C/.[."> <value name="IF0"> <block type="logic_operation" id="3)6HydkV|~PMF-`lv20}"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="7yw{3I;l^DFiZAOe#qW%"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="yEW)-z:~Fm~4!{$7u*Z`"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="DT4L!@e`Nb|s[3y1Dy7X"> <field name="NUM">100</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="Z,S(kV05**c0%Zz|QpW`"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="GuF3Ll,HHLSzt`i~uyB0"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="DELTA"> <shadow type="math_number" id=";GkR$oslgHDr$6%3?Zw}"> <field name="NUM">1</field> </shadow> </value> <next> <block type="variables_set" id="ZCy2PfYRHjVw7X5`sGYT"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="RkhAf|M|fCm0jfVD3Pzl"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="timeouts_setinterval" id="+F(=`c:07x;Ags(qq7eJ"> <field name="NAME">Intervall</field> <field name="INTERVAL">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="controls_if" id="-f}e|WC3ugmMPi;2Y|Hj"> <value name="IF0"> <block type="logic_compare" id="BusTEFs1+b((z(_D!8PG"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="1r`]yZXtsQVE`0r;N!i]"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.example_state</field> </block> </value> <value name="B"> <block type="math_number" id="RG.d76oA6?:3+ZafMvw("> <field name="NUM">100</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="1YU89;i/(9bk.H(,mFNE"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="DELTA"> <shadow type="math_number" id="3G4+6%sy7)$5l,*pbpX!"> <field name="NUM">1</field> </shadow> </value> <next> <block type="variables_set" id="i0Pu.q~5tJw]doY$gv=^"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="4|7k/%X-D~^Bk{`L%Xkz"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="timeouts_clearinterval" id="kzqn:GwZ^u|0xySKcC@Q"> <field name="NAME">Intervall</field> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="debug" id="=pT*^!-(5^mB~~A4[Go;"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="sTj.D^WPJ_m9oz5?x7~~"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </xml> -
Hallo zusammen,
mit dem Blockly will ich bei meiner Spülmaschine die Durchgänge zählen (s.Diagramm): Ein Durchgang wäre dann Low --> High --> Low (wobei Low & High natürlich Zahlenwerte sind).
Exemplarisch habe ich erstmal eine Testvariable (Example State) genommen um die Durchgänge zu simulieren. Diese werden dann durch eine interne Variable (Zähler) gezählt und sollten am Ende per Debug ausgegeben werden.
Wenn ich jetzt z. B. für Example State 99 --> 101 --> 99 eingebe steht der Zähler auf 1 anstatt auf 2.
Wo ist der Denkfehler? Stehe gerade auf dem Schlauch :-)


<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</variable> <variable id="w?2J9;8w#u;O01y_~LvX">Zähler</variable> <variable type="interval" id="Intervall">Intervall</variable> </variables> <block type="variables_set" id="cXQW,Ma[_m_0nKx1gM]!" x="-912" y="12"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="]}N:KMi@/m63{P%`Q2R@"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="+5D[c;+Aa~[||)ZfCw|p"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="VALUE"> <block type="math_number" id="HyPuonhr-ZTnYkf_Utm-"> <field name="NUM">0</field> </block> </value> <next> <block type="on" id="r25Ft/_.BXH_b^.e]A2V"> <field name="OID">0_userdata.0.example_state</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="0kRkMm+6Yz5)#,3C/.[."> <value name="IF0"> <block type="logic_operation" id="3)6HydkV|~PMF-`lv20}"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="7yw{3I;l^DFiZAOe#qW%"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="yEW)-z:~Fm~4!{$7u*Z`"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="DT4L!@e`Nb|s[3y1Dy7X"> <field name="NUM">100</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="Z,S(kV05**c0%Zz|QpW`"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="GuF3Ll,HHLSzt`i~uyB0"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="DELTA"> <shadow type="math_number" id=";GkR$oslgHDr$6%3?Zw}"> <field name="NUM">1</field> </shadow> </value> <next> <block type="variables_set" id="ZCy2PfYRHjVw7X5`sGYT"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="RkhAf|M|fCm0jfVD3Pzl"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="timeouts_setinterval" id="+F(=`c:07x;Ags(qq7eJ"> <field name="NAME">Intervall</field> <field name="INTERVAL">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="controls_if" id="-f}e|WC3ugmMPi;2Y|Hj"> <value name="IF0"> <block type="logic_compare" id="BusTEFs1+b((z(_D!8PG"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="1r`]yZXtsQVE`0r;N!i]"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.example_state</field> </block> </value> <value name="B"> <block type="math_number" id="RG.d76oA6?:3+ZafMvw("> <field name="NUM">100</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="1YU89;i/(9bk.H(,mFNE"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="DELTA"> <shadow type="math_number" id="3G4+6%sy7)$5l,*pbpX!"> <field name="NUM">1</field> </shadow> </value> <next> <block type="variables_set" id="i0Pu.q~5tJw]doY$gv=^"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="4|7k/%X-D~^Bk{`L%Xkz"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="timeouts_clearinterval" id="kzqn:GwZ^u|0xySKcC@Q"> <field name="NAME">Intervall</field> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="debug" id="=pT*^!-(5^mB~~A4[Go;"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="sTj.D^WPJ_m9oz5?x7~~"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </xml> -
Fehler gefunden. Lag an der internen Variable. Wenn ich den Zähler an eine externe Variable übergebe (0_userdata.0.xxx), funktioniert es korrekt; wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.
-
Fehler gefunden. Lag an der internen Variable. Wenn ich den Zähler an eine externe Variable übergebe (0_userdata.0.xxx), funktioniert es korrekt; wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.
@qqolli sagte in Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?:
wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.
Dein Blockly löst über einen Trigger aus und die "innere" Variable ist eine LOKALE Variable, die du im Blockly definiert und mit 0 initialisiert hast.
Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr. Und genau deshalb brauchst du eine GLOBALE Variable (z.B. 0.userdata.0.xxx) und deshalb funktioniert es damit auch. -
@qqolli sagte in Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?:
wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.
Dein Blockly löst über einen Trigger aus und die "innere" Variable ist eine LOKALE Variable, die du im Blockly definiert und mit 0 initialisiert hast.
Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr. Und genau deshalb brauchst du eine GLOBALE Variable (z.B. 0.userdata.0.xxx) und deshalb funktioniert es damit auch.@amg_666 sagte in Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?:
@qqolliWenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr. Und genau deshalb brauchst du eine GLOBALE Variable (z.B. 0.userdata.0.xxx) und deshalb funktioniert es damit auch.
Ich glaube nicht, dass das ganz richtig ist, denn dann könnte man Variablen in Blockly nur sehr eingeschränkt nutzen.
Die Ausführungsreihenfolge im Trigger ist:
Block1, Block3 wird gestartet, Block2, Block3, Block3 (sekündlich wiederholend) ...
-
@qqolli sagte in Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?:
wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.
Dein Blockly löst über einen Trigger aus und die "innere" Variable ist eine LOKALE Variable, die du im Blockly definiert und mit 0 initialisiert hast.
Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr. Und genau deshalb brauchst du eine GLOBALE Variable (z.B. 0.userdata.0.xxx) und deshalb funktioniert es damit auch.@amg_666 sagte: die "innere" Variable ist eine LOKALE Variable, die du im Blockly definiert und mit 0 initialisiert hast.
Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr.Die Variable Zähler ist eine globale Variable, deren Werte bis zum nächsten Skript-Start erhalten bleiben.
-
Hallo zusammen,
mit dem Blockly will ich bei meiner Spülmaschine die Durchgänge zählen (s.Diagramm): Ein Durchgang wäre dann Low --> High --> Low (wobei Low & High natürlich Zahlenwerte sind).
Exemplarisch habe ich erstmal eine Testvariable (Example State) genommen um die Durchgänge zu simulieren. Diese werden dann durch eine interne Variable (Zähler) gezählt und sollten am Ende per Debug ausgegeben werden.
Wenn ich jetzt z. B. für Example State 99 --> 101 --> 99 eingebe steht der Zähler auf 1 anstatt auf 2.
Wo ist der Denkfehler? Stehe gerade auf dem Schlauch :-)


<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</variable> <variable id="w?2J9;8w#u;O01y_~LvX">Zähler</variable> <variable type="interval" id="Intervall">Intervall</variable> </variables> <block type="variables_set" id="cXQW,Ma[_m_0nKx1gM]!" x="-912" y="12"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="]}N:KMi@/m63{P%`Q2R@"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="+5D[c;+Aa~[||)ZfCw|p"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="VALUE"> <block type="math_number" id="HyPuonhr-ZTnYkf_Utm-"> <field name="NUM">0</field> </block> </value> <next> <block type="on" id="r25Ft/_.BXH_b^.e]A2V"> <field name="OID">0_userdata.0.example_state</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="0kRkMm+6Yz5)#,3C/.[."> <value name="IF0"> <block type="logic_operation" id="3)6HydkV|~PMF-`lv20}"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="7yw{3I;l^DFiZAOe#qW%"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="yEW)-z:~Fm~4!{$7u*Z`"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="DT4L!@e`Nb|s[3y1Dy7X"> <field name="NUM">100</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="Z,S(kV05**c0%Zz|QpW`"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="GuF3Ll,HHLSzt`i~uyB0"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="DELTA"> <shadow type="math_number" id=";GkR$oslgHDr$6%3?Zw}"> <field name="NUM">1</field> </shadow> </value> <next> <block type="variables_set" id="ZCy2PfYRHjVw7X5`sGYT"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="RkhAf|M|fCm0jfVD3Pzl"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="timeouts_setinterval" id="+F(=`c:07x;Ags(qq7eJ"> <field name="NAME">Intervall</field> <field name="INTERVAL">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="controls_if" id="-f}e|WC3ugmMPi;2Y|Hj"> <value name="IF0"> <block type="logic_compare" id="BusTEFs1+b((z(_D!8PG"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="1r`]yZXtsQVE`0r;N!i]"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.example_state</field> </block> </value> <value name="B"> <block type="math_number" id="RG.d76oA6?:3+ZafMvw("> <field name="NUM">100</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="1YU89;i/(9bk.H(,mFNE"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> <value name="DELTA"> <shadow type="math_number" id="3G4+6%sy7)$5l,*pbpX!"> <field name="NUM">1</field> </shadow> </value> <next> <block type="variables_set" id="i0Pu.q~5tJw]doY$gv=^"> <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field> <value name="VALUE"> <block type="logic_boolean" id="4|7k/%X-D~^Bk{`L%Xkz"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="timeouts_clearinterval" id="kzqn:GwZ^u|0xySKcC@Q"> <field name="NAME">Intervall</field> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="debug" id="=pT*^!-(5^mB~~A4[Go;"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="sTj.D^WPJ_m9oz5?x7~~"> <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </xml>
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
