Subsections
Scope
Sinks
| Set Scope parameters |
|
Color ( 0) or mark ( 0) vector (8 entries) |
1 3 5 7 9 11 13 15 |
| Output window number (-1 for automatic) |
-1 |
| Output window position |
[] |
| Output window sizes |
[600;400] |
| Ymin |
-15 |
| Ymax |
15 |
| Refresh period |
30 |
| Buffer size |
2 |
| Accept herited events 0/1 |
0 |
| Name of Scope (label&Id) |
|
- Color : a vector of integers. The i-th element is the color
number (
) or dash type (
) used to draw the evolution of the i-th
input port signal. See plot2d for color (dash type) definitions.
- Output window number :The number of graphic window used for
the display. It is often good to use high values to avoid conflict
with palettes and Super Block windows. If default value is used (1), Scicos define the output window number.
- Output window position:a 2 vector specifying the coordinates
of the upper left corner of the graphic window. Answer [] for
default window position.
- Output window sizes: a 2 vector specifying the coordinates of
the upper left corner of the graphic window. Answer [] for default
window position.
- Ymin: Minimum values of the input; used to set up the Y-axis
of the plot in the graphics window.
- Ymax: Maximum values of the input; used to set up the Y-axis
of the plot in the graphics window.
- Refresh period: Maximum value on the X-axis (time). The plot
is redrawn when time reaches a multiple of this value.
- Buffer size:To improve efficiency it is possible to buffer the
input data. The drawing is only done after each Buffer size
call to the block.
- Accept herited events 0/1: if 0 CSCOPE_f draws a new point
only when an event occurs on its event input port. if 1 CSCOPE_f
draws a new point when an event occurs on its event input port and
when it's regular input changes due to an event on an other upstrem
block (herited events).
- Name of Scope : Name/label of the block.
- always active: no
- direct-feedthrough: yes
- zero-crossing: no
- mode: no
- number/sizes of inputs: 1 / -1
- number/sizes of outputs: 0 /
- number/sizes of activation inputs: 1 / 1
- number/sizes of activation outputs: 0 /
- continuous-time state: no
- discrete-time state: yes
- name of computational function: cscope
scilab/macros/scicos_blocks/sinks/CSCOPE.sci
#include "scicos_block.h"
#include <math.h>
#include "../machine.h"
#if WIN32
#define NULL 0
#endif
static int c__1 = 1;
static int c__0 = 0;
static int c_n1 = -1;
static int c__4 = 4;
static int c__21 = 21;
static int c__3 = 3;
static double c_b84 = 0.;
void cscope(scicos_block *block,int flag)
{
double t;
double *z__;
double *rpar;
int *ipar, nipar,nu,kfun;
/* Initialized data */
static double frect[4] = { 0.,0.,1.,1. };
static int cur = 0;
static int verb = 0;
int i__1,i;
static double rect[4];
extern int C2F(getlabel)(), C2F(dset)();
static double ymin, ymax;
static int i__, k, n, v;
static double tsave;
static int n1, n2;
extern int C2F(plot2d)(), C2F(setscale2d)();
static int na;
extern int C2F(dr)();
static double dt, dv;
static int nxname;
extern int C2F(sciwin)(), C2F(dr1)(), C2F(scicosclip)();
static char buf[40];
static int wid, iwd;
static double per;
static int nax[4], iwp;
/* Copyright INRIA */
/* Scicos block simulator */
/* ipar(1) = win_num */
/* ipar(2) = 0/1 color flag */
/* ipar(3) = buffer size */
/* ipar(4:11) = line type for ith curve */
/* ipar(12:13) : window position */
/* ipar(14:15) : window dimension */
/* rpar(1)=dt */
/* rpar(2)=ymin */
/* rpar(3)=ymax */
/* rpar(4)=periode */
nu=block->insz[0];
if (nu>8) {nu=8;}
rpar=block->rpar;
ipar=block->ipar;
nipar=block->nipar;
t=get_scicos_time();
/* character*(4) logf */
/* Parameter adjustments */
--ipar;
--rpar;
iwp = nipar - 3;
iwd = nipar - 1;
wid = ipar[1];
if(wid==-1){
wid=20000+get_block_number();
}
if (flag == 2) {
z__=*block->work;
--z__;
dt = rpar[1];
ymin = rpar[2];
ymax = rpar[3];
per = rpar[4];
n = ipar[3];
k = (int) z__[1];
if (k > 0) {
n1 = (int) (z__[k + 1] / per);
if (z__[k + 1] < 0.) {
--n1;
}
} else {
n1 = 0;
}
tsave = t;
if (dt > 0.) {
t = z__[k + 1] + dt;
}
n2 = (int) (t / per);
if (t < 0.) {
--n2;
}
/* add new point to the buffer */
++k;
z__[k + 1] = t;
for (i = 0; i < nu; ++i) {
z__[n + 1 + i * n + k] = block->inptr[0][i];
/* L1: */
}
z__[1] = (double) k;
if (n1 == n2 && k < n) {
t = tsave;
return ;
}
/* plot 1:K points of the buffer */
C2F(dr1)("xget\000", "window\000", &verb, &cur, &na, &v, &v, &v, &dv, &dv,
&dv, &dv);
if (cur != wid) {
C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv,
&dv, &dv);
}
C2F(dr1)("xsetdr\000", "Rec\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
dv);
if (k > 0) {
C2F(scicosclip)(&c__1);
for (i__ = 0; i__ < nu; ++i__) {
C2F(dr1)("xpolys\000", "v\000", &v, &v, &ipar[i__ + 4], &c__1, &k,
&v, &z__[2], &z__[n + 2 + i__ * n], &dv, &dv);
}
C2F(scicosclip)(&c__0);
}
/* shift buffer left */
z__[2] = z__[k + 1];
for (i__ = 0; i__ < nu; ++i__) {
z__[n + 1 + i__ * n + 1] = z__[n + 1 + i__ * n + k];
}
z__[1] = 1.;
if (n1 != n2) {
/* clear window */
nax[0] = 2;
nax[1] = 10;
nax[2] = 2;
nax[3] = 10;
C2F(dr1)("xclear\000", "v\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv,
&dv);
C2F(dr1)("xset\000", "use color\000", &ipar[2], &c__0, &c__0, &c__0, &
c__0, &v, &dv, &dv, &dv, &dv);
C2F(dr)("xstart\000", "v\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, &
dv, &dv);
rect[0] = per * (n1 + 1);
rect[1] = ymin;
rect[2] = per * (n1 + 2);
rect[3] = ymax;
C2F(dr1)("xset\000", "dashes\000", &c__0, &c__0, &c__0, &c__0, &c__0,
&v, &dv, &dv, &dv, &dv);
C2F(plot2d)(rect, &rect[1], &c__1, &c__1, &c_n1, "011", buf, rect, nax,
&c__4, &c__21);
}
t = tsave;
} else if (flag == 4) {/* the workspace is used to store buffer
*/
if ((*block->work=
scicos_malloc(sizeof(double)*(1+ipar[3]*(1+nu))))== NULL ) {
set_block_error(-16);
return;
}
z__=*block->work;
--z__;
z__[1]=-1.0;
n = ipar[3];
ymin = rpar[2];
ymax = rpar[3];
per = rpar[4];
nax[0] = 2;
nax[1] = 10;
nax[2] = 2;
nax[3] = 10;
n1 = (int) (t / per);
if (t <= 0.) {
--n1;
}
C2F(sciwin)();
C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, &
dv, &dv);
C2F(dr1)("xsetdr\000", "Rec\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
dv);
if (ipar[iwp] >= 0) {
C2F(dr1)("xset\000", "wpos\000", &ipar[iwp], &ipar[iwp + 1], &v, &v, &
v, &v, &dv, &dv, &dv, &dv);
}
if (ipar[iwd] >= 0) {
C2F(dr1)("xset\000", "wdim\000", &ipar[iwd], &ipar[iwd + 1], &v, &v, &
v, &v, &dv, &dv, &dv, &dv);
/* to force dimensions update */
C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv,
&dv, &dv);
}
rect[0] = per * (n1 + 1);
rect[1] = ymin;
rect[2] = per * (n1 + 2);
rect[3] = ymax;
C2F(setscale2d)(frect, rect, "nn\000");
C2F(dr1)("xset\000", "use color\000", &ipar[2], &c__0, &c__0, &c__0, &
c__0, &v, &dv, &dv, &dv, &dv);
C2F(dr1)("xset\000", "alufunction\000", &c__3, &c__0, &c__0, &c__0, &c__0,
&v, &dv, &dv, &dv, &dv);
C2F(dr1)("xclear\000", "v\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
dv);
C2F(dr)("xstart\000", "v\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
dv);
C2F(dr1)("xset\000", "dashes\000", &c__0, &c__0, &c__0, &c__0, &c__0, &v,
&dv, &dv, &dv, &dv);
C2F(plot2d)(rect, &rect[1], &c__1, &c__1, &c_n1, "011", buf, rect, nax, &
c__4, &c__21);
C2F(scicosclip)(&c__1);
nxname = 40;
kfun=get_block_number();
C2F(getlabel)(&kfun, buf, &nxname);
if (nxname > 39) {
nxname = 39;
}
i__1 = nxname;
*(buf+i__1)=*"\000";
if ((nxname == 1 && *(unsigned char *)buf == ' ') || (nxname == 0)) {
} else {
C2F(dr)("xname\000", buf, &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &dv);
}
z__[1] = 0.;
z__[2] = t;
i__1 = nu * n;
C2F(dset)(&i__1, &c_b84, &z__[3], &c__1);
} else if (flag == 5) {
z__=*block->work;
--z__;
n = ipar[3];
k = (int) z__[1];
if (k <= 1) {
scicos_free(*block->work);
return ;
}
C2F(dr1)("xget\000", "window\000", &verb, &cur, &na, &v, &v, &v, &dv, &dv,
&dv, &dv);
if (cur != wid) {
C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv,
&dv, &dv);
}
C2F(scicosclip)(&c__1);
for (i__ = 0; i__ < nu; ++i__) {
C2F(dr1)("xpolys\000", "v\000", &v, &v, &ipar[i__ + 4], &c__1, &k, &v,
&z__[2], &z__[n + 2 + i__ * n], &dv, &dv);
}
C2F(scicosclip)(&c__0);
scicos_free(*block->work);
}
}
Ramine Nikoukhah
2004-06-22