Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
However, this page did not exist in the previous stable version.
bloc2exp
преобразование блок-схемы в символьное выражение
Последовательность вызова
[str]=bloc2exp(blocd) [str,names]=bloc2exp(blocd)
Аргументы
- blocd
список
- str
строка
- names
строка
Описание
Для указанной блок-схемы элемента линейной системы списка bloc2exp
возвращает её символьное вычисление. Первый элемент
списка blocd
должен быть строкой 'blocd'
.
Остальные элементы этого списка
(blocd(2),blocd(3),...)
сами по себе являются списком одного из следующих типов:
list('transfer','name_of_linear_system')
list('link','name_of_link', [number_of_upstream_box,upstream_box_port], [downstream_box_1,downstream_box_1_portnumber], [downstream_box_2,downstream_box_2_portnumber], ...)
Строки 'transfer'
и 'link'
являются
ключевыми словами, которые указывают тип элемента в блок-схеме.
Случай 1: второй параметр списка является символьной строкой, которая может
ссылаться (для возможного последующего выполнения) на Scilab-имя линейной системы,
заданной в представлении пространства состояний (syslin
список)
или передаточную форму (матрица рациональных дробей).
Каждому передаточному блоку присвоено целое число. Каждому входу и выходу передаточного блока также присвоено целое число (см. примеры).
Случай 2: второй вид элемента в представлении блок-схемы - это связь (link).
Связь связывает один выход блока, представленного парой
[number_of_upstream_box,upstream_box_port]
(т.е.
[номер_предшествующего_блока,порт_предшествующего_блока]
) с
различными другими блоками. Каждый такой вход представлен парой
[downstream_box_i,downstream_box_i_portnumber]
(т.е. [последующий_блок_i,номер_порта_последующего_блока_i]
).
Различные элементы блок-схемы могут быть определены в произвольном порядке.
Например
[1] S1*S2
с обратной связью блока.
Есть 3 передаточных звена S1
(число n_s1=2
),
S2
(число n_s2=3
) и сумматор
(число n_add=4
) с символьной передаточной функцией
['1','1']
.
Есть 4 связи. Первая (названная 'U'
) связывает вход (порт 0 условного блока -1 не рассматривается) с портом 1 сумматора. Вторая и третья связи
соответственно (выходной) порт 1 сумматора с (входным) портом 1 системы
S1
, а (выходной) порт 1 S1
с (входным) портом
1 S2
. Четвёртая связь (названная 'Y'
)
связывает (выходной) порт 1 S2
с выходом (порт 0 условного блока
-1 не рассматривается) и с (входным) портом 2 сумматора.
//Инициализация syst=list('blocd'); l=1; //Системы l=l+1;n_s1=l;syst(l)=list('transfer','S1'); //Система 1 l=l+1;n_s2=l;syst(l)=list('transfer','S2'); //Система 2 l=l+1;n_adder=l;syst(l)=list('transfer',['1','1']); //сумматор //Связи // входы -1 --> вход 1 l=l+1;syst(l)=list('link','U',[-1],[n_adder,1]); // Внутренние l=l+1;syst(l)=list('link',' ',[n_adder,1],[n_s1,1]); l=l+1;syst(l)=list('link',' ',[n_s1,1],[n_s2,1]); // Выходы // -1 -> выход 1 l=l+1;syst(l)=list('link','Y',[n_s2,1],[-1],[n_adder,2]); //Вызов выполнения w=bloc2exp(syst);
Результатом является символьная строка: w=-(s2*s1-eye())\s2*s1
.
Заметим, что вызов с двумя выходными аргументами [str,names]=blocd(syst)
возвращает в names
список символьных имён наименованных связей.
Это полезно для установки имён входам и выходам.
[2] второй пример
//Инициализация syst=list('blocd'); l=1; //Система (установка блоков 2x2) l=l+1;n_s=l;syst(l)=list('transfer',['P11','P12';'P21','P22']); //Контроллер l=l+1;n_k=l;syst(l)=list('transfer','k'); //Связи l=l+1;syst(l)=list('link','w',[-1],[n_s,1]); l=l+1;syst(l)=list('link','z',[n_s,1],[-1]); l=l+1;syst(l)=list('link','u',[n_k,1],[n_s,2]); l=l+1;syst(l)=list('link','y',[n_s,2],[n_k,1]); //Вызов вычисления w=bloc2exp(syst);
В этом случае результатом является формула, эквивалентная обычной формуле:
P11+P12*invr(eye()-K*P22)*K*P21;
Смотрите также
- bloc2ss — преобразование блок-схемы в пространство состояний
Report an issue | ||
<< Сигнальная обработка | Сигнальная обработка | bloc2ss >> |