beremiz

f48121cf31b6
Parents 64e6f73b9859
Children a6be58a1a8b7
SVGHMI: Added relative changes of HMI value from widgets.
--- a/svghmi/gen_index_xhtml.xslt Tue Oct 22 22:58:55 2019 +0200
+++ b/svghmi/gen_index_xhtml.xslt Thu Oct 24 10:02:07 2019 +0200
@@ -320,16 +320,16 @@
</xsl:text>
<xsl:text>
</xsl:text>
+ <xsl:text>var cache = hmitree_types.map(_ignored =&gt; undefined);
+</xsl:text>
+ <xsl:text>
+</xsl:text>
<xsl:text>function dispatch_value(index, value) {
</xsl:text>
<xsl:text> let widgets = subscribers[index];
</xsl:text>
<xsl:text>
</xsl:text>
- <xsl:text> // TODO : value cache
-</xsl:text>
- <xsl:text>
-</xsl:text>
<xsl:text> if(widgets.size &gt; 0) {
</xsl:text>
<xsl:text> for(let widget of widgets){
@@ -364,6 +364,12 @@
</xsl:text>
<xsl:text> }
</xsl:text>
+ <xsl:text>
+</xsl:text>
+ <xsl:text> cache[index] = value;
+</xsl:text>
+ <xsl:text>
+</xsl:text>
<xsl:text>};
</xsl:text>
<xsl:text>
@@ -622,6 +628,8 @@
</xsl:text>
<xsl:text>
</xsl:text>
+ <xsl:text> cache[index] = value;
+</xsl:text>
<xsl:text>};
</xsl:text>
<xsl:text>
@@ -630,13 +638,39 @@
</xsl:text>
<xsl:text> let op = opstr[0];
</xsl:text>
- <xsl:text> if(op == "=")
+ <xsl:text> let given_val = opstr.slice(1);
+</xsl:text>
+ <xsl:text> let old_val = cache[index]
+</xsl:text>
+ <xsl:text> let new_val;
+</xsl:text>
+ <xsl:text> switch(op){
</xsl:text>
- <xsl:text> return send_hmi_value(index, Number(opstr.slice(1)));
+ <xsl:text> case "=":
+</xsl:text>
+ <xsl:text> eval("new_val"+opstr);
+</xsl:text>
+ <xsl:text> break;
+</xsl:text>
+ <xsl:text> case "+":
</xsl:text>
- <xsl:text>
+ <xsl:text> case "-":
+</xsl:text>
+ <xsl:text> case "*":
+</xsl:text>
+ <xsl:text> case "/":
+</xsl:text>
+ <xsl:text> if(old_val != undefined)
</xsl:text>
- <xsl:text> alert('Change '+opstr+" TODO !!! (index :"+index+")");
+ <xsl:text> new_val = eval("old_val"+opstr);
+</xsl:text>
+ <xsl:text> break;
+</xsl:text>
+ <xsl:text> }
+</xsl:text>
+ <xsl:text> if(new_val != undefined &amp;&amp; old_val != new_val)
+</xsl:text>
+ <xsl:text> return send_hmi_value(index, new_val);
</xsl:text>
<xsl:text>}
</xsl:text>
--- a/svghmi/svghmi.js Tue Oct 22 22:58:55 2019 +0200
+++ b/svghmi/svghmi.js Thu Oct 24 10:02:07 2019 +0200
@@ -1,10 +1,10 @@
// svghmi.js
+var cache = hmitree_types.map(_ignored => undefined);
+
function dispatch_value(index, value) {
let widgets = subscribers[index];
- // TODO : value cache
-
if(widgets.size > 0) {
for(let widget of widgets){
let idxidx = widget.indexes.indexOf(index);
@@ -22,6 +22,9 @@
}*/
}
}
+
+ cache[index] = value;
+
};
function init_widgets() {
@@ -147,14 +150,28 @@
new Uint32Array([index]),
new jstype([value])]);
+ cache[index] = value;
};
function change_hmi_value(index, opstr) {
let op = opstr[0];
- if(op == "=")
- return send_hmi_value(index, Number(opstr.slice(1)));
-
- alert('Change '+opstr+" TODO !!! (index :"+index+")");
+ let given_val = opstr.slice(1);
+ let old_val = cache[index]
+ let new_val;
+ switch(op){
+ case "=":
+ eval("new_val"+opstr);
+ break;
+ case "+":
+ case "-":
+ case "*":
+ case "/":
+ if(old_val != undefined)
+ new_val = eval("old_val"+opstr);
+ break;
+ }
+ if(new_val != undefined && old_val != new_val)
+ return send_hmi_value(index, new_val);
}
var current_page;