Add OPC-UA simple synchronous client extension.
This extension uses python-opcua to growse server nodes, and generates runtime C code that use open62541.
- python-opcua must be available in python path (i.e. "import opcua" must succeed). Can be installed from pypi with "python2 -m pip install opcua --user" .
- at build time, open62541 is expected to be build in "open62541" directory, aside "beremiz" directory.
// widget_animaterotation.ysl2
widget_desc("AnimateRotation") {
longdesc
||
AnimateRotation - DEPRECATED, do not use.
Doesn't follow WYSIWYG principle, and forces user to add animateTransform tag in SVG (using inkscape XML editor for exemple)
||
shortdesc > AnimateRotation - DEPRECATED
path name="speed" accepts="HMI_INT,HMI_REAL" > speed
}
widget_class("AnimateRotation") {
||
frequency = 5;
speed = 0;
widget_center = undefined;
dispatch(value) {
this.speed = value / 5;
//reconfigure animation
this.request_animate();
}
animate(){
// change animation properties
// TODO : rewrite with proper es6
for(let child of this.element.children){
if(child.nodeName == "animateTransform"){
if(this.speed > 0){
child.setAttribute("dur", this.speed+"s");
child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
child.setAttribute("to", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
}
else if(this.speed < 0){
child.setAttribute("dur", (-1)*this.speed+"s");
child.setAttribute("from", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
}
else{
child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
}
}
}
}
init() {
let widget_pos = this.element.getBBox();
this.widget_center = [(widget_pos.x+widget_pos.width/2), (widget_pos.y+widget_pos.height/2)];
}
||
}