Рассмотрены отличительные особенности команд пакетов MATLAB 6.5 и MATLAB7.11 при использовании их как серверов OLE автоматизации при решении задач автоматического управления. Приведены конкретные рабочие примеры, которые легко можно повторить.
Принято считать, что новые версии пакетов, предназначенных для разработки прикладного программного обеспечения, должны полностью поддерживать программы, разработанные в предыдущих версиях. Как правило, меняется интерфейс, улучшаются алгоритмы обработки, и добавляются новые функции и команды, расширяющие возможности пакета. Так обстоит дело с MS Excel, Delphi и другими пакетами.
В свое время я написал модуль для связи Delphi и MATLAB 6.5 и во многих прикладных программах на Delphi применял MATLAB как сервер OLE автоматизации, используя его вычислительные возможности.
После установки MATLAB 7.11 начались проблемы.
Рассмотрим несколько примеров.
Пример 1
Необходимо получить коэффициенты числителя и знаменателя передаточной функции. Для этого выполним следующий фрагмент кода:
W1=tf([10 1], [50 20 1]);
[PB, PA]=tfdata(W1)
В результате, независимо от версии в командном окне выведутся только размеры матриц:
PB = [1x3 double]
PA = [1x3 double]
Чтобы получить сами матрицы в MATLAB 6.5 можно выполнить команду tfdata следующим образом:
[PB, PA]=tfdata(W1,1).
В результате получим:
PB = 0 10 1; PA =50 20 1
В MATLAB 7.11 такая команда не сработает. Сработает только команда, как указано в Help
[PB, PA]=tfdata(W1,’v’)
Необходимо сказать, что и MATLAB 6.5 воспринимает такую команду.
Пример 2
Необходимо в одном графическом окне вывести реакцию на единичный скачок двух передаточных функций заданными цветами.
Для этого напишем следующий фрагмент кода:
hold on;
T=linspace(0,200,100)';
W1=tf([10 1], [50 20 1]);
W2=tf([1], [50 30 1]);
step(W1,T,'r'); step(W2,T,'b');
grid on;
Хотя у нас явно указаны красный и синий цвета, графики выводятся, независимо от этого синим и зеленым цветом по умолчанию. Это аналогично выводу без указания цветов:
step(W1,T); step(W2,T);
Чтобы каждый график выводился указанным цветом, выводим графики следующим образом:
step(W1,'r',T,'r'),grid on; step(W2,'b',T,'b'),grid on;
В этом случае все работает как надо. Если перенести данный фрагмент в MATLAB 7.11, то, как ни странно, MATLAB вообще не воспринимает такой формат команд и выдает ошибку:
??? Error using ==> DynamicSystem.step at 84
Invalid syntax for time or frequency response command.
See help the for the relevant command.
Вводим строку helpstep. Смотрим справку и никаких отличий в описании данных команд не видим. Опять же в MATLAB 7.11 корректно работает фрагмент:
step(W1,T,'r'); step(W2,T,'b');
и каждый график выводится указанным цветом.
Пример 3
Чтобы получить массивы годографа Найквиста в MATLAB 6.5 необходимо выполнить следующий фрагмент кода:
1. SysW=tf([1], [50 20 1])
2. SysT=logspace(-3,1,100)';
3. [X,Y]=NYQUIST(SysW,SysT);
4. X(:,1)= [];
5. Y(:,1)= [];
6. plot(X,Y),grid
Строки 4 и 5 необходимы для того, чтобы удалить из массивов необходимые столбцы, так как изначально предполагается, что система многомерная, и значение, например X, представлено в виде:
X(:,:,528) =-0.0465
X(:,:,529) =-0.0464
X(:,:,530) =-0.0463
X(:,:,531) =-0.0462
Построить график по таким значениям нельзя.
В MATLAB 7.11 приведенный выше фрагмент работать не будет, так как изначально возвращаются одномерные массивы. Следовательно, для построения графика в MATLAB 7.11 строки 4 и 5 вышеприведенного кода необходимо исключить.
Это только то, что удалось выявить. Скорее всего, таких нюансов много. Так что, если у Вас разработаны серьезные приложения с использованием MATLAB как сервера OLE автоматизации, не торопитесь менять старую версию на новую. Многое придется переписывать заново, но еще сложнее будет отыскать эти фрагменты и выяснить, в результате чего они не хотят работать.
Литература:
1. Ануфриев И. Е. MATLAB 7. — СПб.: БХВ-Петербург, 2005.– 1104 с.
2. Черных И. В. Моделирование электротехнических устройств в MATLAB, SimPowerSystem и Simulink. Питер ДМК, 2008..– 286 с.
3. Бильфельд Н. В. Моделирование систем с использованием блока чистого запаздывания. — Молодой ученый. Ежемесячный научный журнал. Чита 2013.-№ 6 С. 25–30
4. Бильфельд Н.В Использование пассивного эксперимента при идентификации объектов управления с изменяющимися свойствами. — Молодой ученый. Ежемесячный научный журнал. Чита 2013.-№ 8 С. 77–82