Помощь в учёбе, очень быстро...
Работаем вместе до победы

Программа цифрового управления двумерным объектом с помощью типовых ПИ и ПИД алгоритмов

РефератПомощь в написанииУзнать стоимостьмоей работы

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.

Показать весь текст
Заполнить форму текущей работой