Содержание
Моделирование линейных непрерывных систем
Численное решение дифференциальных уравнений
Замена непрерывной передаточной функции дискретной
Моделирование линейных замкнутых систем
LabVIEW (LaboratoryVirtualInstrumentEngineeringWorkbench) позволяет разрабатывать прикладное программное обеспечение для организации взаимодействия с измерительной и управляющей аппаратурой, сбора, обработки и отображения информации и результатов расчетов, а также моделирования как отдельных объектов, так и автоматизированных систем в целом. Разработчиком LabVIEW является американская компания National Instruments.
LabVIEW является открытой системой программирования и имеет встроенную поддержку всех применяемых в настоящее время программных интерфейсов, таких как Win32 DLL, COM.net, DDE, сетевых протоколов на базе IP, DataSocket и др. В состав LabVIEW входят библиотеки управления различными аппаратными средствами и интерфейсами, такими как PCI, CompactPCI/PXI, VME, VXI, GPIB (КОП), PLC, VISA, системами технического зрения и др. Программные продукты, созданные с использованием LabVIEW, могут быть дополнены фрагментами, азработанными на традиционных языках программирования, например C/С++, Pascal, Basic, FORTRAN. И наоборот можно использовать модули, разработанные в LabVIEW в проектах, создаваемых в других системах программирования. Таким образом, LabVIEW позволяет разрабатывать практически любые приложения, взаимодействующие с любыми видами аппаратных средств, поддерживаемых операционной системой компьютера.
среда программирование дифференциальное уравнение
При цифровом моделировании непрерывных систем необходимо обеспечить близость процессов в моделируемой непрерывной системе и в ее цифровой модели. Несовпадение этих процессов связано с двумя причинами:
1) заменой непрерывного входного процесса цифровым и 2) использованием численных методов анализа. Ошибки, связанные с заменой непрерывного процесса цифровым, были рассмотрены в предыдущей лабораторной работе. Остановимся на второй причине.
Математическая модель непрерывной системы представляет собой или нелинейное дифференциальное уравнение или совокупность соединенных между собой линейных и нелинейных блоков. В зависимости от принятой математической модели используются различные подходы к формированию цифровой модели.
Разработано большое количество методов численного решения дифференциальных уравнений. Рассмотрим, как производится численное решение на примере нелинейного дифференциального уравнения первого порядка
du/dt= f (u,x,t). (1)
Здесь x= x (t) - независимая функция (входной процесс), u= u (t) - решение уравнения (выходной процесс).
Численное решение находится для дискретных значений аргумента t, отличающихся на шаг интегрирования Dt. В одношаговых разностных методах для нахождения следующего значения uк = u (tк) требуется информация только об одном предыдущем шаге. Из одношаговых методов наибольшую известность получили методы Рунге-Кутта. В основу метода Рунге-Кутта первого порядка, называемого также явным или прямым методом Эйлера, положено разложение функции u (t) в ряд Тейлора в окрестности точки A (tk-1,, uk-1):
u (t) = S0 + S1 (t - tk - 1) + S2 (t - tk - 1) 2 + …, (5.2)
где S0 = u (tk - 1) = uk - 1,Si = (1/i!) du (t) /dt при t = tk - 1.
В методах Эйлера (и Рунге-Кутта тоже) ограничиваются только двумя первыми членами разложения в ряд. Запишем значение uk= u (tk), приняв в выражении (5.2) t= tkи ограничившись двумя первыми членами ряда:
uk = uk - 1 + S1 (tk - tk - 1) = uk - 1 + S1Δt
Учитывая, что производная du (t) /dtравна правой части дифференциального уравнения (1), имеем S1 = f (uk - 1, xk - 1, tk - 1) и окончательно получим:
uk= uk - 1 + Δtf (uk - 1, xk - 1, tk - 1). (3)
Это выражение является приближенным решением дифференциального уравнения (1) прямым методом Эйлера. Оно рекуррентное и позволяет найти значение выходного процесса ukпо значениям выходного и входного процессов в предыдущем такте.
На рис. 1 а) проиллюстрировано решение прямым методом Эйлера.
а) | б) |
Рис.1 |
Видим, что при использовании этого метода используется линейная экстраполяция и тангенс угла наклона экстраполирующей прямой равен производной функции u (t) в точке А. Экстраполированное значение ukотличается от точного на величину ошибки.
Неявный (обратный) метод Эйлера основан на разложении функцииu (t) в ряд Тейлора в окрестности точки В (uk,, tk) (см. рис.1 б):
u (t) = uk + S1 (t - tk) + S2 (t - tk) 2 + …,
Приняв в этом выражении t= tk - 1 и ограничившись двумя первыми членами ряда, получим
uk - 1 = uk - Δtf (uk, xk, tk).
Откуда
uk= uk - 1 + Δtf (uk, xk, tk). (5.4)
Искомое значение процесса ukвходит и в левую, и в правую части уравнения, и если не удается найти ukв явном виде, то приходится использовать приближенные методы решения этого уравнения.
Применим методы Эйлера для расчета переходной характеристики интегрирующей цепи. Передаточная функция интегрирующей цепи:
K (p) = 1/ (1 + pT).
Отсюда дифференциальное уравнение в операторной форме:
(pT+ 1) y= x
и в канонической форме:
Tdy/dt+ y= x.
Перепишем его в виде (1):
dy/dt= (1/T) (x - y).
Запишем рекуррентную формулу для прямого метода Эйлера в соответствии с (5.3)
yk= yk - 1 + (Δt/T) (xk - 1 - yk - 1), (5.5) или yk= (1 - Δt/T) yk - 1 + Δt/Txk - 1.
Формула для обратного метода Эйлера запишется в соответствии с (4)
yk= yk - 1 + (Δt/T) (xk - yk).
Так как уравнение линейное, то значение ykвычисляется в явной форме:
yk= (yk - 1 + (Δt/T) xk) / (1 + Δt/T). (6)
Методы Эйлера обладают низкой точностью. В более точных методах используются различные способы определения угла наклона экстраполирующей прямой, чтобы она прошла ближе к точному решению. Хорошей точностью обладает метод Рунге-Кутта четвертого порядка, который обычно и используется. Программы для численного решения дифференциальных уравнений имеются практически в любом пакете прикладных программ, в том числе и в LabVIEW.
Для вычислений по формулам (5.5) и (5.6) используем структуру FormulaNode. Внутри этой структуры запишем точное выражение для переходной характеристики:
z= 1 - e-iΔt/T,
и выражения для переходной характеристики, полученные прямым методом Эйлера:
y= y1 + (Δt/T) (1 - y1)
и обратным методом Эйлера:
v= (v1 + (Δt/T)) / (1 + Δt/T)
при нулевых начальных условиях: y (0) = 0, v (0) = 0.
В этих выражениях использованы различные обозначения для выходных переменных и принято x= 1 (t) = 1, так как t> 0.
На рис.2 показана эта структура. В формулах Δtобозначена как dt.
Рис.2 | Рис.3 |
Напомним, что для образования входных и выходных терминалов нужно щелкнуть ПКМ на границе структуры в предполагаемом месте терминала и в раскрывшемся меню выбрать AddInputили AddOutput.
Для формирования массивов выходных переменных структура FormulaNodeпомещается внутрь структуры ForLoop, при этом задержанные на интервал дискретизации отсчеты выходных переменных y1 и v1 получаются с помощью регистра сдвига (рис.3).
Прямой метод Эйлера при большом интервале дискретизации может дать неустойчивое решение. Это случится, если отклонение решения от входного процесса xk - 1 - yk - 1 (см формулу (5)) даст такое значение yk. что отклонение на следующем шаге xk - ykбудет той же величины, что и предыдущее, но обратным по знаку. Решение будет колебательным незатухающим.
Рис.4 |