summaryrefslogtreecommitdiff
path: root/js/Linear/PID.js
blob: 8759a559e18aa4b1d46e23501564a911b12c6514 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/* autogenerated from "macros/Linear/PID.sci" */
function PID() {
    PID.prototype.define = function PID() {
        var scs_m = scicos_diagram(version="scicos4.2",props=scicos_params(wpar=[600,450,0,0,600,450],Title=["PID"],tol=[0.0001,0.000001,1.000e-10,100001,0,0],tf=100000,context=" ",void1=[],options=tlist(["scsopt","3D","Background","Link","ID","Cmap"],list(true,33),[8,1],[1,5],list([5,1],[4,1]),[0.8,0.8,0.8]),void2=[],void3=[],doc=list()));
        scs_m.objs[1-1] = scicos_block(gui="INTEGRAL_m",graphics=scicos_graphics(orig=[318.304,183.11733],sz=[40,40],flip=true,theta=0,exprs=[["0"],["0"],["0"],["1"],["-1"]],pin=7,pout=9,pein=[],peout=[],gr_i=[],id="1/s",in_implicit="E",out_implicit="E"),model=scicos_model(sim=list("integral_func",4),in1=1,in2=1,intyp=1,out=1,out2=1,outtyp=1,evtin=[],evtout=[],state=0,dstate=[],odstate=list(),rpar=[],ipar=[],opar=list(),blocktype="c",firing=[],dep_ut=[false,true],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[2-1] = scicos_block(gui="SUMMATION",graphics=scicos_graphics(orig=[387.97067,172.85067],sz=[40,60],flip=true,theta=0,exprs=[["1"],["[1;1;1]"]],pin=[[10],[9],[11]],pout=19,pein=[],peout=[],gr_i=[],id="",in_implicit=[["E"],["E"],["E"]],out_implicit="E"),model=scicos_model(sim=list("summation",4),in1=[[-1],[-1],[-1]],in2=[[-2],[-2],[-2]],intyp=[[1],[1],[1]],out=-1,out2=-2,outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=[],ipar=[[1],[1],[1]],opar=list(),blocktype="c",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[3-1] = scicos_block(gui="GAINBLK",graphics=scicos_graphics(orig=[321.23733,235.91733],sz=[40,40],flip=true,theta=0,exprs="1",pin=17,pout=10,pein=[],peout=[],gr_i=[],id="",in_implicit="E",out_implicit="E"),model=scicos_model(sim=list("gainblk",4),in1=-1,in2=-2,intyp=1,out=-1,out2=-2,outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=1,ipar=[],opar=list(),blocktype="c",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[4-1] = scicos_block(gui="DERIV",graphics=scicos_graphics(orig=[319.03733,135.45067],sz=[40,40],flip=true,theta=0,exprs=[],pin=8,pout=11,pein=[],peout=[],gr_i=[],id="s",in_implicit="E",out_implicit="E"),model=scicos_model(sim=list("deriv",4),in1=-1,in2=-2,intyp=1,out=-1,out2=-2,outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=[],ipar=[],opar=list(),blocktype="x",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[5-1] = scicos_block(gui="GAINBLK",graphics=scicos_graphics(orig=[255.23733,183.11733],sz=[40,40],flip=true,theta=0,exprs="1",pin=13,pout=7,pein=[],peout=[],gr_i=[],id="",in_implicit="E",out_implicit="E"),model=scicos_model(sim=list("gainblk",4),in1=-1,in2=-2,intyp=1,out=-1,out2=-2,outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=1,ipar=[],opar=list(),blocktype="c",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[6-1] = scicos_block(gui="GAINBLK",graphics=scicos_graphics(orig=[255.23733,135.45067],sz=[40,40],flip=true,theta=0,exprs="1",pin=14,pout=8,pein=[],peout=[],gr_i=[],id="",in_implicit="E",out_implicit="E"),model=scicos_model(sim=list("gainblk",4),in1=-1,in2=-2,intyp=1,out=-1,out2=-2,outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=1,ipar=[],opar=list(),blocktype="c",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[7-1] = scicos_link(xx=[[303.80876],[309.73257]],yy=[[203.11733],[203.11733]],id="drawlink",thick=[0,0],ct=[1,1],from=[5,1,0],to=[1,1,1]);
        scs_m.objs[8-1] = scicos_link(xx=[[303.80876],[310.4659]],yy=[[155.45067],[155.45067]],id="drawlink",thick=[0,0],ct=[1,1],from=[6,1,0],to=[4,1,1]);
        scs_m.objs[9-1] = scicos_link(xx=[[366.87543],[379.39924]],yy=[[203.11733],[202.85067]],id="drawlink",thick=[0,0],ct=[1,1],from=[1,1,0],to=[2,2,1]);
        scs_m.objs[10-1] = scicos_link(xx=[[369.80876],[379.39924],[379.39924]],yy=[[255.91733],[255.91733],[217.85067]],id="drawlink",thick=[0,0],ct=[1,1],from=[3,1,0],to=[2,1,1]);
        scs_m.objs[11-1] = scicos_link(xx=[[367.60876],[379.39924],[379.39924]],yy=[[155.45067],[155.45067],[187.85067]],id="drawlink",thick=[0,0],ct=[1,1],from=[4,1,0],to=[2,3,1]);
        scs_m.objs[12-1] = scicos_block(gui="SPLIT_f",graphics=scicos_graphics(orig=[[234.704],[203.11733]],sz=[0.3333333,0.3333333],flip=true,theta=0,exprs=[],pin=16,pout=[[13],[14]],pein=[],peout=[],gr_i=[],id="",in_implicit="E",out_implicit=[["E"],["E"],["E"]]),model=scicos_model(sim="lsplit",in1=-1,in2=[],intyp=1,out=[[-1],[-1],[-1]],out2=[],outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=[],ipar=[],opar=list(),blocktype="c",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[13-1] = scicos_link(xx=[[234.704],[246.6659]],yy=[[203.11733],[203.11733]],id="drawlink",thick=[0,0],ct=[1,1],from=[12,1,0],to=[5,1,1]);
        scs_m.objs[14-1] = scicos_link(xx=[[234.704],[234.704],[246.6659]],yy=[[203.11733],[155.45067],[155.45067]],id="drawlink",thick=[0,0],ct=[1,1],from=[12,2,0],to=[6,1,1]);
        scs_m.objs[15-1] = scicos_block(gui="SPLIT_f",graphics=scicos_graphics(orig=[[233.97067],[203.11733]],sz=[0.3333333,0.3333333],flip=true,theta=0,exprs=[],pin=21,pout=[[16],[17]],pein=[],peout=[],gr_i=[],id="",in_implicit="E",out_implicit=[["E"],["E"],["E"]]),model=scicos_model(sim="lsplit",in1=-1,in2=[],intyp=1,out=[[-1],[-1],[-1]],out2=[],outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=[],ipar=[],opar=list(),blocktype="c",firing=[],dep_ut=[true,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[16-1] = scicos_link(xx=[[233.97067],[234.704]],yy=[[203.11733],[203.11733]],id="drawlink",thick=[0,0],ct=[1,1],from=[15,1,0],to=[12,1,1]);
        scs_m.objs[17-1] = scicos_link(xx=[[233.97067],[233.97067],[312.6659]],yy=[[203.11733],[255.91733],[255.91733]],id="drawlink",thick=[0,0],ct=[1,1],from=[15,2,0],to=[3,1,1]);
        scs_m.objs[18-1] = scicos_block(gui="OUT_f",graphics=scicos_graphics(orig=[456.5421,192.85067],sz=[20,20],flip=true,theta=0,exprs="1",pin=19,pout=[],pein=[],peout=[],gr_i=[],id="",in_implicit="E",out_implicit=[]),model=scicos_model(sim="output",in1=-1,in2=[],intyp=-1,out=[],out2=[],outtyp=1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=[],ipar=1,opar=list(),blocktype="c",firing=[],dep_ut=[false,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[19-1] = scicos_link(xx=[[436.5421],[456.5421]],yy=[[202.85067],[202.85067]],id="drawlink",thick=[0,0],ct=[1,1],from=[2,1,0],to=[18,1,1]);
        scs_m.objs[20-1] = scicos_block(gui="IN_f",graphics=scicos_graphics(orig=[193.97067,193.11733],sz=[20,20],flip=true,theta=0,exprs="1",pin=[],pout=21,pein=[],peout=[],gr_i=[],id="",in_implicit=[],out_implicit="E"),model=scicos_model(sim="input",in1=[],in2=[],intyp=1,out=-1,out2=[],outtyp=-1,evtin=[],evtout=[],state=[],dstate=[],odstate=list(),rpar=[],ipar=1,opar=list(),blocktype="c",firing=[],dep_ut=[false,false],label="",nzcross=0,nmode=0,equations=list()),doc=list());
        scs_m.objs[21-1] = scicos_link(xx=[[213.97067],[233.97067]],yy=[[203.11733],[203.11733]],id="drawlink",thick=[0,0],ct=[1,1],from=[20,1,0],to=[15,1,1]);
        this.model = scicos_model();
        this.model.sim = new ScilabString(["csuper"]);
        this.model.in = new ScilabDouble([-1]);
        this.model.in2 = new ScilabDouble([-2]);
        this.model.out = new ScilabDouble([-1]);
        this.model.out2 = new ScilabDouble([-2]);
        this.model.intyp = new ScilabDouble([1]);
        this.model.outtyp = new ScilabDouble([1]);
        this.model.blocktype = new ScilabString(["h"]);
        this.model.firing = new ScilabBoolean([false]);
        this.model.dep_ut = new ScilabBoolean([false,false]);
        this.model.rpar = new ScilabDouble([scs_m]);
        var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"PID\",sz(1),sz(2));"]);
        this.x = new standard_define(new ScilabDouble([2,2]),this.model,new ScilabDouble([]),gr_i);
        return new BasicBlock(this.x);
    }
    PID.prototype.details = function PID() {
        return this.x;
    }
    PID.prototype.get = function PID() {
        var ppath = list(0,0,0);
        for (this.i=1;this.i<=length(this.model.rpar.objs);this.i+=1) {
            var o = this.model.rpar.objs[this.i-1];
            if (typeof(o)=="Link") {
                var from = this.model.rpar.objs[o.from[1-1]-1];
                var to = this.model.rpar.objs[o.to[1-1]-1];
                if (from.gui=="GAINBLK") {
                    switch (to.gui) {
                    case "SUMMATION":
                        ppath[1-1] = o.from[1-1];
                    case "INTEGRAL_m":
                        ppath[2-1] = o.from[1-1];
                    case "DERIV":
                        ppath[3-1] = o.from[1-1];
                    }
                } else if (to.gui=="GAINBLK") {
                    switch (from.gui) {
                    case "SUMMATION":
                        ppath[1-1] = o.to[1-1];
                    case "INTEGRAL_m":
                        ppath[2-1] = o.to[1-1];
                    case "DERIV":
                        ppath[3-1] = o.to[1-1];
                    }
                }
                if (and(ppath!=list(0,0,0))) {
                    break;
                }
            }
        }
        var newpar = list();
        var xx1 = this.model.rpar.objs[ppath[1-1]-1];
        exprs[1-1] = xx1.graphics.exprs[1-1];
        var p_old = xx1.model.rpar;
        var xx2 = this.model.rpar.objs[ppath[2-1]-1];
        exprs[2-1] = xx2.graphics.exprs[1-1];
        var i_old = xx2.model.rpar;
        var xx3 = this.model.rpar.objs[ppath[3-1]-1];
        exprs[3-1] = xx3.graphics.exprs[1-1];
        var d_old = xx3.model.rpar;
        var y = 0;
        this.set_param_popup_title = "Set PID parameters";
        var options = {
            p:["Proportional",this.p],
            i:["Integral",this.i],
            d:["Derivation",this.d],
        }
        return options;
    }
    PID.prototype.set = function PID() {
        var ppath = list(0,0,0);
        for (this.i=1;this.i<=length(this.model.rpar.objs);this.i+=1) {
            var o = this.model.rpar.objs[this.i-1];
            if (typeof(o)=="Link") {
                var from = this.model.rpar.objs[o.from[1-1]-1];
                var to = this.model.rpar.objs[o.to[1-1]-1];
                if (from.gui=="GAINBLK") {
                    switch (to.gui) {
                    case "SUMMATION":
                        ppath[1-1] = o.from[1-1];
                    case "INTEGRAL_m":
                        ppath[2-1] = o.from[1-1];
                    case "DERIV":
                        ppath[3-1] = o.from[1-1];
                    }
                } else if (to.gui=="GAINBLK") {
                    switch (from.gui) {
                    case "SUMMATION":
                        ppath[1-1] = o.to[1-1];
                    case "INTEGRAL_m":
                        ppath[2-1] = o.to[1-1];
                    case "DERIV":
                        ppath[3-1] = o.to[1-1];
                    }
                }
                if (and(ppath!=list(0,0,0))) {
                    break;
                }
            }
        }
        var newpar = list();
        var xx1 = this.model.rpar.objs[ppath[1-1]-1];
        exprs[1-1] = xx1.graphics.exprs[1-1];
        var p_old = xx1.model.rpar;
        var xx2 = this.model.rpar.objs[ppath[2-1]-1];
        exprs[2-1] = xx2.graphics.exprs[1-1];
        var i_old = xx2.model.rpar;
        var xx3 = this.model.rpar.objs[ppath[3-1]-1];
        exprs[3-1] = xx3.graphics.exprs[1-1];
        var d_old = xx3.model.rpar;
        var y = 0;
        while (true) {
            var ok = true;
            this.p = arguments[0]["p"];
            this.i = arguments[0]["i"];
            this.d = arguments[0]["d"];
            var exprs0 = [arguments[0]["p"], arguments[0]["i"], arguments[0]["d"]];
            if (!ok) {
                break;
            }
            if (ok) {
                xx1.graphics.exprs = exprs0[1-1];
                xx1.model.rpar = this.p;
                xx2.graphics.exprs = exprs0[2-1];
                xx2.model.rpar = this.i;
                xx3.graphics.exprs = exprs0[3-1];
                xx3.model.rpar = this.d;
                this.model.rpar.objs[ppath[1-1]-1] = xx1;
                this.model.rpar.objs[ppath[2-1]-1] = xx2;
                this.model.rpar.objs[ppath[3-1]-1] = xx3;
                break;
            }
        }
        var needcompile = 0;
        if (!(p_old==this.p&&i_old==this.i&&d_old==this.d)) {
            newpar[size(newpar)+1-1] = ppath[1-1];
            newpar[size(newpar)+1-1] = ppath[2-1];
            newpar[size(newpar)+1-1] = ppath[3-1];
            var needcompile = 2;
        }
        var y = max(y,needcompile);
        var typ = newpar;
        return new BasicBlock(this.x);
    }
    PID.prototype.get_popup_title = function PID() {
        return this.set_param_popup_title;
    }
}