Программа цифрового управления двумерным объектом с помощью типовых ПИ и ПИД алгоритмов
Line (tврz2, 470-v24, tвр2, 470-v24); Line (tврz1, 470-vz14, tвр1, 470-v4); Line (tврz1, 400-yz14, tвр1, 400-y4); Float REG2: compute (float x, float xz). Float REG1: compute (float x, float xz). Line (tврz1, 470-v4, tвр1, 470-v4); If (tвр1== tвр2&& tвр1≥620-dt). If (S==krat) {pidp1. АУ1(). S=0; }. Define ZERO_INIT (Object) memset ///. Printf (v2=%. 1f y2=%. 1f, v2, y2); Float y, x, xz=40… Читать ещё >
Программа цифрового управления двумерным объектом с помощью типовых ПИ и ПИД алгоритмов (реферат, курсовая, диплом, контрольная)
#include.
#include.
#include.
#include.
#include.
#include.
#include.
#include.
#include «drv-pb.cpp» .
#define ZERO_INIT (Object) memset ///.
long TK=1;
int krat=4; //Следующий канал будет опрашиваться в 4 раза реже, чем.
//предыдущий.
float tк=TK/18.2;
char ch2=0;
float y, x, xz=40, xz2=50, y2, v2;
int tвр=0, tвр1=0, tврz1=0, tвр2=0, tврz2=0;
int dt=1;
class REG1 {.
public:
float vz1, yz1, x1, x2, x3, x4, l1, Kp, ti, td, l, vz;
void init (float, float, float, float, float, float);
float compute (float, float);
int AУ ();
} ;
void REG1: init (float_vz, float_x, float_Kp, float_ti, float_td, float_l).
{ZERO_INIT (REG1);
vz=_vz, Kp=_Kp, ti=_ti;
td=_td, l=_l;
x1=x2=x3=x3=x;
}.
float REG1: compute (float x, float xz).
{И + ПД — закон}.
int REG1: АУ1 () {.
update ();
y=getADC (1);
v=compute (y, xz);
set DAC (v, 2).
tвр1= tвр1+kratdt;
setcolor (14);
line (tврz1, 470-vz14, tвр1, 470-v4);
line (tврz1, 470-v4, tвр1, 470-v4);
vz1=v;
setcolor (9);
line (tврz1, 400-yz14, tвр1, 400-y4);
yz1=y;
tврz1=tвр1;
if (tвр1== tвр2&& tвр1>=620-dt).
{ tвр2=0; tвр1=0;
tврz2=0; tврz1=0;
cleardevise (); }.
gotoxy (50, 2);
printf (v1=%. 1f y1=%. 1f, v, y);
return 0;
}.
class REG2 {.
public:
float vz2, yz2, x1, x2, x3, x4, l1, Kp, ti, td, l, vz;
void init (float, float, float, float, float, float);
float compute (float, float);
int AУ2 ();
}.
void REG2: init (float_vz, float_x, float_Kp, float_ti, float_td, float_l).
{ZERO_INIT (REG2);
vz=_vz, Kp=_Kp, ti=_ti;
td=_td, l=_l;
x1=x2=x3=x3=x;
}.
float REG2: compute (float x, float xz).
{И + ПД — закон}.
int REG2: АУ2 () {.
update ();
tвр ++;
yz=getADC (0);
vz=compute (y2, xz2);
set DAC (v2, 3).
tвр2= tвр2+dt;
setcolor (15);
line (tврz2, 470-vz24, tвр2, 470-v24);
line (tврz2, 470-v24, tвр2, 470-v24);
vz2=vz;
setcolor (11);
line (tврz2, 400-yz24, tвр2, 400-y24);
yz2=yz;
tврz2=tвр2;
gotoxy (50, 3);
printf (v2=%. 1f y2=%. 1f, v2, y2);
if (kbhit ()).
{ ch2=getch ();
switch (ch2);
case x:
case x:
cout << h yz1= ;
cin >> xz;
cout << h yz2= ;
cin >> xz2;
bty=TK+biostime (0, OL);
break;
}}.
return 0;
}.
int main () {.
int S=0;
int gdriver=DETECT, gmode;
init graph (& gdriver, & gmode, c: BC31BGI);
clrset ();
inicial ();
class REG1 pidp1;
REG2 pidp 2;
update ();
pidp 1_init (40, getADC (1), 2/tк, 0, 0);
pidp 2_init (40, getADC (0), 14, 9, 3, 68/tк, 0, 0);
bty=TK+biostime (0, 0L);
mm:
if (bty-biostime (0,0L) {.
bty=TK+biostime (0, 0L);
S++;
if (S<=krat) pidp2. АУ2().
if (S==krat) {pidp1. АУ1(). S=0; }.
}.
if (ch2=27 return 0;
goto mm;
return 0;
}.
Особенности программы В программе имеются два канала управления:
- 1) медленный — работает с периодом ТКkrat, т. е.
- 14=4 тика
- (в нашем случае;
- 2) быстродействующий — работает с периодом ТК, т. е. 1 тик.
В обоих случаях реализованы типовые ПИД-регуляторы, работающие по схеме И+ПД: И-составляющая — идет по ошибке, а Пи Д-состаляющие — по выходному сигналу, что исключает броски выходного сигнала пр смене задания (плавные переходные процессы).
Алгоритм позволяет изменять задания по обоим каналам, причем реализация этого осуществляется в блоке АУ2, работающем с периодом ТК.
Выход из режима непосредственного цифрового управления осуществляется по клавише ESC.