ЖУРНАЛ СТА №4/1999
64 4/99 В ЗАПИСНУЮ КНИЖКУ ИНЖЕНЕРА ВОРОСЫ–ОТВЕТЫ Sub PRE_TASK1() ch% = DDEInitiate("matlab","Engine") DDEExecute ch%,_ "%================================================== "& Chr$(13) &_ "% Инициализация параметров идентификации "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "Lambda =0.99; % Фактор забывания РМНК "& Chr$(13) &_ "n = 3; % Порядок модели "& Chr$(13) &_ "d = 1; % Запаздывание модели "& Chr$(13) &_ "M = 2*(n+1); % Колво параметров модели"& Chr$(13) &_ "Alpha = 1.0e11; % ***Инициализация матриц*** "& Chr$(13) &_ "P = Alpha*eye(M); % Обратная матрица ковариаций"& Chr$(13) &_ "Teta = zeros(M,1); % Векторстолбец параметров "& Chr$(13) &_ "Psi = zeros(1,M); % Векторстрока измерений "& Chr$(13) &_ "Psi(M) = 1; % "& Chr$(13) &_ "y = zeros(1,2); % Вспомогательные "& Chr$(13) &_ "u = zeros(1,d+1); % векторы "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "% Инициализация параметров регулятора "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "MR = M1+d; % Размерность уравнения регрессии "& Chr$(13) &_ "PsiR = zeros(1,M); % "& Chr$(13) &_ "U_Hi = 100; % Ограничения выхода "& Chr$(13) &_ "U_Lo = 0; % регулятора "& Chr$(13) &_ "Uk = U_Lo; % Инициализация выхода регистра "& Chr$(13) &_ "%================================================== "& Chr$(13) DDETerminate ch% End Sub Предварительный сценарий Sub SCR1() Dim Xk As Tag Dim Yk As Tag Dim Key As Tag Set Xk = GetTag("DISP1","SPIN1") Set Yk = GetTag("TASK1","AI1") Set Key = GetTag("DISP1","BBTN1") ch% = DDEInitiate("matlab","Engine") DDEExecute ch%, _ "%================================================== "& Chr$(13) &_ "% Входные параметры "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "Xk=" & Xk & Chr$(13) &_ "Yk=" & Yk & Chr$(13) &_ "Key=" & Key & Chr$(13) DDEExecute ch%, _ "%================================================== "& Chr$(13) &_ "% Блок идентификации модели "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "y = [Yk y(1)]; "& Chr$(13) &_ "u = [Uk u(1:d)]; "& Chr$(13) &_ "Psi(1:n) = [y(2) Psi(1:n1)]; "& Chr$(13) &_ "Psi(n+1:M1) = [u(d+1) Psi(n+1:M2)]; "& Chr$(13) &_ "Q = Psi*P; "& Chr$(13) &_ "L = (P*Psi')/(Lambda+Q*Psi'); "& Chr$(13) &_ "Teta = Teta+L*(y(1)Psi*Teta); "& Chr$(13) &_ "P = (PL*Q)/Lambda; "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "% Блок регулятора "& Chr$(13) &_ "%================================================== "& Chr$(13) &_ "if Key == 1 "& Chr$(13) &_ " Ek = XkYk; % "& Chr$(13) &_ " A = [1 Teta(1:n)]; % Параметры передаточной "& Chr$(13) &_ " B = Teta(n+1:M1); % функции обьекта "& Chr$(13) &_ " q0 = sum(B); % "& Chr$(13) &_ " TetaR = [q0*[zeros(1,d) B] q0*A]; "& Chr$(13) &_ " PsiR = [[Uk PsiR(1:n+d1)] [Ek PsiR(n+d+1:MR1]]; "& Chr$(13) &_ " Uk = TetaR*PsiR'; % Выход регулятора "& Chr$(13) &_ "else "& Chr$(13) &_ " Uk = Xk; "& Chr$(13) &_ "if Uk > U_Hi "& Chr$(13) &_ " Uk = U_Hi; "& Chr$(13) &_ "end "& Chr$(13) &_ "if Uk < U_Lo "& Chr$(13) &_ " Uk = U_Lo; "& Chr$(13) &_ "end "& Chr$(13) &_ "%================================================== "& Chr$(13) outputs 0,DDERequest$(ch%,"Uk") DDETerminate ch% End Sub Сценарий BASICscript SCR1
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy