Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

В табл. 1 и 2 представлены программы рекурсивного цифрового фильтра второго порядка. Они написаны на языках C++ и Паскале в средах разработки Borland C++Builder 4 и Borland Delphi 4 в соответствии с технологией создания моделей пользователя для программы VisSim. При трансляции получается файл pid.dll, главная функция которого "zW" может быть включена в модель программы VisSim с помощью блока "userFunction" (см. рис. 7). При записи коэффициентов РУ (*) в параметры блока и стробировании частотой 2000

Гц — это и будет модель искомого дискретного ПИД-регулятора.

Таблица 1

Файл pid.cpp

#include <math.h>

#include <condefs.h>

#pragma hdrstop

#define EXPORT32 declspec(dllexport)

//-----------

struct z TF_INFO {

double k; // коэффициент усиления double

double b0,b1,Ь2; // коэффициенты полинома числителя

double a0, a1, a2; //коэффициенты полинома знаменателя

};

//----------

extern "С" {

double buffer_x[2]={0,0}, buffer_y[]={0,0};

double с, help_y;

//*** функция размещения параметров ***

//*** Вызывается VisSim-ом при создании блока ****

EXPORT32 long WINAPI zWPA(short FAR *ppCount){

*ppCount=7; // число записываемых в файл vsm параметров модели пользователя

return sizeof(z_TF_INFO);

}

//*** Процедура инициализации параметров ***

//*** Вызывается VisSim-ом после РА функции ***

XPORT32 void WINAPI zWPI(z_TF_INFO *zTF){

zTF->k=31.9016459416667;

zTF->b0=1;

zTF->b1=-1.9894401341982;

zTF->b2=0.98945592544195;

zTF->a0=1;

zTF->a1=-1.3333333333333;

zTF->a2=0.33333333333333;

}

//*** функция изменения параметров ***

//*** Вызывается VisSim-ом при нажатии правой клавиши мыши ***

EXPORT32 LPSTR WINAPI zWPC(z_TF_INFO *zTF){

return "k;Ь0;b1;b2;a0;a1;a2";

}

//*** Процедура Simulation Start ***

//*** Вызывается VisSim-ом на первом шаге моделирования ***

EXPORT32 long WINAPI zWSS(z_TF_INFO *zTF, long *runCount){

buffer_x[0]=0; buffer_x[1]=0;

buffer_y[0]=0; buffer_y[1]=0;

help_y=0; c=0;

return 0;

}

//*** Процедура Simulation End ***

//*** Вызывается VisSim-ом на последнем шаге моделирования ***

EXPORT32 long WINAPI zWSE(z_TF_INFO *zTF, long *runCount){

return 0;

}

//*** Это базовая процедура в DLL ***

//*** Вызывается VisSim-ом на каждом шаге моделирования ***

EXPORT32 void WINAPI zW(z_TF_INFO *zTF, double FAR x[], double FAR y[])

{ if (x[0]==1 && c==0) {

//Непосредственный

алгоритм с двумя буферами

help_y=(zTF->k*(х[1]*zTF->b0+buffer_x[0]*zTF->b1+buffer_x[1]*zTF->b2)

— (buffer_y[0]*zTF->a1+buffer_y[1]*zTF->a2)) / zTF->a0;

buffer_x[1]=buffer_x[0]; buffer_x[0]=x[1];

buffer_y[1]=buffer_y[0]; buffer_y[0]=help_y;

//Непосредственный алгоритм с одним буфером

/* double help;

help=(x[1]-(buffer_xf0/*zTF->a1+buffer_xfх[1]*zTF->a2))/zTF->aO;

help_y=(help*zTF->b0+buffer_x[0]*zTF->b1+buffer_x[1]*zTF->b2) *zTF->k; buffer_x[l]=buffer_x[0]; buffer_x[0]=help; */

}

у[0]=help_y;

c=x [0]; // организованна синхронизация блока no фронту

};

//----------

}//end extern "С" {

//----------

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*){

return 1;

}

Таблица 2

Файл pid.dpr

library PID;

type

InVector = array [0..9] of Double; {тип входной переменной: входов — 10}

OutVector = array [0..9] of Double; {тип выходной переменной: выходов — 10}

Global = record {запись параметров, и координат "dll"-модели}

k: double;

Ь0, b1 Ь2: double;

а0, a1, а2: double;

end;

var buffer_x, buffer_y: array [0..1] of double;

c, help_y: double;

{/*** базовая процедура в DLL ****/}

{/*** Вызывается VisSim-ом на каждом шаге моделирования ***/}

procedure zW(var zTF: Global; var x: InVector; var у: OutVector); export; stdcall;

var help: double;

begin

if (x[0]=l)and(c=0) then

begin

{Непосредственный алгоритм с двумя буферами}

help_y:=(zTF.k*(х[1]*zTF.b0+buffer_x[0]*zTF.b1+buffer_x[1]*zTF.Ь2)

— (buffer_y[0]*zTF.a1+buffer_y[1]*zTF.a2))/zTF.a0;

buffer_x[1]:=buffer_x[0]; buffer_x[0]:=x[l];

buffer_y[1]:=buffer_y[0]; buffer_y[0]:=help_y;{}

{Непосредственный алгоритм с одним буфером}

{help:=(x[1]-(buffer_x[0]*zTF.a1+buffer_x[1]*zTF.a2))/zTF.a0;

help_y:=(help*zTF.b0+buffer_x[0]*zTF.b1+buffer_x[1]*zTF.b2)*zTF.k;

buffer_x[1]:=buffer_x[0]; buffer_x[0]: =help;{}

end;

У[0]:=help_y;

с: =x [0]; {организованна синхронизация блока no фронту}

end;

{/***функция размещения параметров***/}

Поделиться:
Популярные книги

Я все еще князь. Книга XXI

Дрейк Сириус
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще князь. Книга XXI

Боярышня Дуняша

Меллер Юлия Викторовна
1. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Дуняша

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Крещение огнем

Сапковский Анджей
5. Ведьмак
Фантастика:
фэнтези
9.40
рейтинг книги
Крещение огнем

Пипец Котенку!

Майерс Александр
1. РОС: Пипец Котенку!
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Пипец Котенку!

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Если твой босс... монстр!

Райская Ольга
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Если твой босс... монстр!

Де Виан Рейн. Хозяйка Инс-Айдена

Арниева Юлия
2. Делия де Виан Рейн
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Де Виан Рейн. Хозяйка Инс-Айдена

Пистоль и шпага

Дроздов Анатолий Федорович
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Пистоль и шпага

Сотник

Ланцов Михаил Алексеевич
4. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Сотник