Тип данных string c#. Операции со строками. Операторы класса String

Введение

Настоящие методическое пособие предназначено для изучения раздела «Автоматика» междисциплинарного комплекса МДК 03.01., дисциплин «Основы автоматика», «Системы автоматического управления»

В пособии рассматриваются методы цифрового моделирования систем автоматического управления и программные средства для их проведения, рассматриваются способы построения математических моделей.

В первой части инструкции (Часть 1) приведен способ описания систем дифференциальными уравнениями. В следующей части (Часть 2) инструкции будет представлен способ описания систем как совокупности множества передаточных функций.

Для иллюстрации примера использована версия 7.11 программы MATLAB.

Работа с другими версиями MATLAB аналогична, за исключением вида «окон».

Мы постарались максимально упростить инструкцию и в доступной форме показать как можно пользоваться Simulink

Часть 1. Общие сведения о системе Simulink

Программа Simulink является приложением к пакету MATLAB.

При моделировании с использованием Simulink реализуется принцип визуального программирования, в соответствии с которым, пользователь на экране из библиотеки стандартных блоков создает модель устройства и осуществляет расчеты. При этом, в отличие от классических способов моделирования, пользователю не нужно досконально изучать язык программирования и численные методы математики, а достаточно общих знаний требующихся при работе на компьютере и, естественно, знаний той предметной области, в которой он работает.

Основным понятием системы моделирования Simulink является сигнал. По умолчанию, сигналы – это скалярные безразмерные переменные, связывающие компоненты модели. Однако, существуют и специальные сигналы, например электрические, гидравлические, механические и т.д., которые определенным образом описывают конкретное физическое влияние одних элементов моделируемой системы на другие. Компоненты модели – это элементы библиотеки Simulink или другие модели, которые осуществляют изменения сигналов (например, интегрирование, усиление, сложение двух сигналов и т.д.).

Simulink является достаточно самостоятельным инструментом и при работе с ним совсем не требуется знать сам MATLAB и остальные его приложения. С другой стороны доступ к функциям MATLAB и другим его инструментам остается открытым и их можно использовать в Simulink. Часть входящих в состав пакетов имеет инструменты, встраиваемые в Simulink (например, LTI-Viewer приложения Control System Toolbox – пакета для разработки систем управления).

Имеются также дополнительные библиотеки блоков для разных областей применения (например, Power System Blockset – моделирование электротехнических устройств, Digital Signal Processing Blockset – набор блоков для разработки цифровых устройств и т.д).

При работе с Simulink пользователь имеет возможность модернизировать библиотечные блоки, создавать свои собственные, а также составлять новые библиотеки блоков.

При моделировании пользователь может выбирать метод решения дифференциальных уравнений, а также способ изменения модельного времени

(с фиксированным или переменным шагом). В ходе моделирования имеется возможность следить за процессами, происходящими в системе. Для этого используются специальные устройства наблюдения, входящие в состав библиотеки Simulink. Результаты моделирования могут быть представлены в виде графиков или таблиц.

Преимущество Simulink заключается также в том, что он позволяет пополнять библиотеки блоков с помощью подпрограмм написанных как на языке MATLAB, так и на языках С++, Fortran и Ada.

Для запуска программы необходимо предварительно запустить пакет MATLAB. Основное окно пакета MATLAB показано на рисунке 1. Там же показана подсказка, появляющаяся в окне при наведении указателя мыши на ярлык Simulink в панели инструментов.

После открытия основного окна программы MATLAB нужно запустить программу Simulink. Это можно сделать одним из трех способов:

Рисунок 1- Основное окно программы MATLAB

∙ Нажать кнопку (Simulink) на панели инструментов командного окна MATLAB.

∙ В командной строке главного окна MATLAB напечатать Simulink и нажать клавишу Enter на клавиатуре.

∙ Выполнить команду Open... в меню File и открыть файл модели (mdl - файл).

Последний вариант удобно использовать для запуска уже готовой и отлаженной модели, когда требуется лишь провести расчеты и ненужно добавлять новые блоки в модель. Использование первого и второго способов приводит к открытию окна библиотеки Simulink (рисунок 2).

Рисунок 2- Окно библиотеки Simulink.

Цифрами обозначены: 1 –строка поиска компонентов, 2 – дерево библиотек Simulink, 3 –содержимое библиотеки (разделы или компоненты библиотеки)

На рисунке 2 выделена основная библиотека Simulink (в левой части окна) и показаны ее разделы (в правой части окна). Библиотека Simulink в MATLAB 2010 содержит следующие основные разделы:

0. Commonly Used Blocks – часто используемые компоненты из различных разделов основной библиотеки Simulink.

1. Continuous – компоненты для моделирования систем в непрерывном времени.

2. Discontinuities – компоненты для моделирования негладких и разрывных нелинейных функций.

3. Discrete – компоненты для моделирования систем в дискретном времени.

4. Logic and Bit Operations – компоненты для моделирования ло-

гических (двоичных) операций.

5. Lookup Tables – компоненты для моделирования функциональных и табличных зависимостей.

6. Math Operations – компоненты для моделирования математических операций.

7. Model Verification – компоненты для тестирования и верификации поведения моделей.

8. Model-Wide Utilities – вспомогательные компоненты для документирования и линеаризации моделей.

9. Ports & Subsystems – блоки построения иерархических моделей и подсистем.

10. Signal Attributes – компоненты для преобразования типов сигналов в моделях.

11. Signal Routing – компоненты для коммутации и объединения/разъединения сигналов.

12. Sinks – компоненты для отображения и сохранения сигналов.

13. Sources – источники сигналов и воздействий.

14. User-Defined Functions – компоненты для создания пользовательских функций, реализованных на языке MATLAB.

Список разделов библиотеки Simulink представлен в виде дерева, и правила работы с ним являются общими для списков такого вида:

∙ Пиктограмма свернутого узла дерева содержит символ+, а пиктограмма развернутого содержит символ −.

∙ Для того чтобы развернуть или свернуть узел дерева, достаточно щелкнуть на его пиктограмме левой клавишей мыши.

При выборе соответствующего раздела библиотеки в правой части окна отображается его содержимое (рисунок 3).

Рисунок 3- Компоненты библиотеки Simulink / Continuous.

Пример построения модели в Simulink

В качестве примера использования Simulink для моделирования систем рассмотрим отопление в жилом индивидуальном доме. Пусть для простоты, дом состоит из всего лишь одного помещения, в котором установлено отопление суммарной тепловой мощностью 𝑃 . Температура внутри этого дома 𝑇 𝑖 градусов, температура за окном – 𝑇 𝑜 градусов. Нас интересует каким образом изменяется температура 𝑇 𝑖 при изменении мощности 𝑃 (рисунок 4).

Рисунок 4- Модель отапливаемого помещения по входу-выходу.

Прежде чем составлять модель, рассмотрим интуитивно некоторые ее свойства. Во-первых, вполне очевидно, что если включить отопление, то сначала температура будет расти, а потом стабилизируется – наступит тепловое равновесие между подводимым теплом и рассеиваемым на улицу через щели в окнах, вентиляцию и т.д. Если печку выключить, то температура будет падать и в конце-концов дома будет также холодно, как и на улице. Существенными

параметрами модели является:

∙ температура за окном 𝑇 𝑜 – чем меньше она, тем больше тепла

уходит из дома и тем больше нужна мощность нагревателя, чтобы достичь заданной температуры внутри 𝑇 𝑖 ;

∙ качество теплоизоляции – чем хуже теплоизоляция, тем больше тепла выходит наружу;

∙ масса воздуха внутри дома – чем больше воздуха, тем дольше его нужно нагревать до заданной температуры и тем дольше будет остывать дом при отключении отопления.

В теплотехнике существуют множество моделей, с разной степенью точности моделирующие процессы нагревания и охлаждения тел. Далее мы рассмотрим самый простой из них. Для этого необходимо ввести понятие количества теплоты – энергии, необходимой для изменения термодинамического состояния тела (например, температуры). Из курса физики хорошо известно, что для того, чтобы нагреть тело массой 𝑚 и теплоемкостью 𝑐 от температуры 𝑇 1 до 𝑇 2 необходимо затратить количество теплоты 𝑄 , равное

𝑄 = 𝑐𝑚 (𝑇 2 − 𝑇 1)

Количество теплоты 𝑄 𝑖 , которое поступает от нагревателя мощностью 𝑃 за время 𝜏 – это просто интеграл по времени:

𝑄 𝑖 (𝜏 ) =

Для того, чтобы понять сколько тепла ушло на улицу, необходимо воспользоваться понятием теплового потока 𝑄 0 (t) – количество теплоты, проходящей через поверхность за единицу времени. Если считать, что теплопроводность внутри двух соприкасающихся сред больше, чем теплопроводность между ними, то тепловой поток пропорционален разности их температур:

𝑄 0 (t)= -k(T i (t)–T 0 )

𝑄 0 (𝜏 ) = (T i (t)–T 0 )dt

Запишем уравнение теплового баланса:

𝑄 = 𝑄 𝑖 + 𝑄 𝑜

продифференцировав обе части по времени, можно записать дифференциальное уравнение, связывающее динамику изменения температуры 𝑇 𝑖 (𝑡 ) от мощности нагревателя:

𝑐𝑚 = 𝑘 (𝑇 𝑜 − 𝑇 𝑖 (𝑡 )) + 𝑃 (𝑡 )

Обозначив коэффициент 𝑐𝑚 = a и разделив переменные для интегрирования, можно записать:

Последнее выражение – есть простейшая модель процесса теплообмена при отоплении помещения. Рассмотрим как осуществить моделирование этой системы с помощью Simulink.

Для создания модели в среде Simulink необходимо последовательно выполнить ряд действий.

Для начала необходимо создать новый файл модели с помощью команды File / New / Model, или используя кнопку на панели инструментов (здесь и далее, с помощью символа /, указаны пункты меню программы, которые необходимо последовательно выбрать для выполнения указанного действия). Вновь созданное окно модели показано на рисунке 5.

Рисунок 5- Пустое окно модели.

Далее расположим компоненты библиотеки Simulink в окне модели. Для этого необходимо открыть соответствующий раздел библиотеки (например, Sources – Источники). Далее, указав курсором на требуемый блок и, нажав на левую клавишу мыши, перетащить блок в созданное окно модели. Клавишу мыши нужно держать нажатой.

Рассматривая дифференциальное уравнение модели, можно составить следующий список компонентов, которые изменяют сигналы модели:

∙ в модель необходимо ввести параметр 𝑇 𝑜 , который в начале будет

константой – используем компонент библиотеки Simulink /Commonly Used Blocks / Constant или Simulink / Sources / Constant (это один и тот же компонент);

∙ чтобы получить разность температур 𝑇 𝑜 − 𝑇 𝑖 (𝑡 ) необходимо использовать сумматор (в режиме вычитателя) – компонент библиотеки Simulink / Commonly Used Blocks / Sum или Simulink /

Math Operations / Sum (также один и тот же компонент);

∙ для того, чтобы вычислить произведение разности температур на коэффициент 𝑘 ・ (𝑇 𝑜 − 𝑇 𝑖 (𝑡 )), необходимо использовать блок

усилитель, поскольку такое произведение равнозначно усилению сигнала разности в 𝑘 раз ставим компонент библиотеки Simulink/ Commonly Used Blocks / Gain или Simulink / Math Operations/ Gain;

∙ чтобы получить сумму мощностей 𝑘 (𝑇𝑜 − 𝑇𝑖 (𝑡 )) + 𝑃 (𝑡 ) под интегралом необходимо использовать сумматор – компонент библиотеки Simulink / Commonly Used Blocks / Sum или Simulink /Math Operations / Sum;

∙ чтобы получить количество теплоты из суммы мощностей с помощью интегрирования

𝑇 𝑖 (𝑡 )= (𝑘 (𝑇 𝑜 − 𝑇 𝑖 (𝑡 )) + 𝑃 (𝑡 )) dt

необходимо использовать интегратор – компонент библиотеки Simulink / Commonly Used Blocks / Integrator или Simulink / Continuous / Integrator;

∙ для формирования сигнала внутренней температуры 𝑇 𝑖 (𝑡 ) из интеграла мощности необходимо использовать блок усилитель, домножающий значение интеграла на 1/ 𝑎 – компонент библиотеки

Simulink / Commonly Used Blocks / Gain или Simulink / Math Operations / Gain;

Кроме того, нам необходимо визуализировать зависимость 𝑇 𝑖 (𝑡 ), для этого мы используем осциллограф – компонент библиотеки Simulink / Commonly Used Blocks / Scope или Simulink / Sinks / Scope. А также мы задаем зависимость мощности от времени 𝑃 (𝑡 ) как единичный ступенчатый сигнал с помощью компонента библиотеки Simulink /Sources / Step.

Рисунок 6- Окно модели, содержащее необходимые блоки

На рисунке 6 показано окно модели, содержащее установленные блоки.

Для удаления блока необходимо выбрать блок (указать курсором на его изображение и нажать левую клавишу мыши), а затем нажать клавишу Delete на клавиатуре.

Для изменения размеров блока требуется выбрать блок, установить курсор в один из углов блока и, нажав левую клавишу мыши, изменить размер блока (курсор при этом превратится в двухстороннюю стрелку).

Рисунок 7- Блок, моделирующий интегратор и окно редактирования параметров блока

Следующий шаг – настройка параметров каждого блока. Для этого необходимо дважды щелкнуть левой клавишей мыши, указав курсором на изображение блока. Откроется окно редактирования параметров данного блока. При задании численных параметров следует иметь в виду, что в качестве десятичного разделителя должна использоваться точка, а не запятая. После внесения изменений нужно закрыть окно кнопкой OK. На рисунке 7 в качестве примера показаны блок, моделирующий интегратор и окно редактирования параметров данного блока.

В рассматриваемой модели необходимо установить следующие параметры блоков:

∙ блок Integrator: параметр Initial condition = 20 – интегрирование осуществляется с начальной температуры в помещении 20 градусов;

∙ блок Sum1 (нижний из двух сумматоров): List of signs = |+- – превращает сумматор в вычитатель;

Параметры 𝑎 и 𝑘 модели пока не будем задавать, положив 𝑎 = 1 и 𝑘 = 1. После установки на схеме всех блоков из требуемых библиотек нужно выполнить соединение элементов схемы с помощью сигналов.

Для соединения блоков необходимо указать курсором на выход блока, а затем, нажать и, не отпуская левую клавишу мыши, провести линию к входу другого блока. После чего отпустить клавишу. В случае правильного соединения изображение стрелки на входе блока изменяет цвет. Для создания точки разветвления в соединительной линии нужно подвести курсор к предполагаемому узлу и, нажав правую клавишу мыши, протянуть линию. Для удаления линии требуется выбрать линию (так же, как это выполняется для блока), а затем нажать клавишу Delete на клавиатуре.

С целью удобства понимания модели, можно задать имена не только блокам, но и сигналам. Для этого необходимо дважды щелкнуть по сигналу и ввести имя. Обозначим сигналы, соответствующие переменным 𝑃 , 𝑇 𝑜 , 𝑇 𝑖 , P, T o и T i .

Схема модели, в которой выполнены все соединения между блоками и их настройка, показана на рисунке 8.

Рисунок 8- Окончательная схема модели.

После составления модели необходимо сохранить ее в виде файла на диске, выбрав пункт меню File/Save As... в окне схемы и указа папку и имя файла. При последующем редактировании схемы можно пользоваться пунктом меню File/Save. При повторных запусках программы Simulink загрузка схемы осуществляется с помощью меню File/Open... в окне обозревателя библиотеки или из основного окна MATLAB.

Запуск моделирования выполняется с помощью выбора пункта меню Simulation/Start или нажатием кнопки с треугольником (воспроизведение) на панели инструментов. Рядом в поле ввода указана продолжительность моделирования системы, по умолчанию моделирование останавливается при достижении модельного времени 𝑡 𝑠𝑡𝑜𝑝 = 10. Процесс расчета можно завершить досрочно, выбрав пункт меню Simulation/Stop или кнопку с квадратом (стоп). Расчет также можно остановить (Simulation/Pause) и затем продолжить (Simulation/Continue).

Запустим моделирование. После окончания, дважды щелкнем на блок осциллографа (Scope). На нем должна отображается зависимость 𝑇 𝑖 (𝑡 )

(рисунок 9). Если графика не видно, то необходимо щелкнуть правой кнопкой по черной зоне и выбрать из меню Autoscale, что приведет к автоматическому масштабированию осей графика.

Рисунок 9- Результат моделирования при 𝑃 = 1.

Видно, что температура внутри падает от 20 градусов до температуры, которая выше уличной 𝑇 𝑜 = 1, моделируемой блоком Constant.

Таким образом сказывается действие нагревателя.

Установим в параметрах блока Step, моделирующего зависимость 𝑃 (𝑡 ), большую мощность нагрева. Блок Step выдает на своем выходе константное значение, задаваемое его параметром Final value, и происходит это во время, задаваемое параметром Step time. До этого момента значение на выходе компонента Step равно 0. Установив параметр Final value = 10, запустим моделирование еще раз. Получим зависимость 𝑇 𝑖 (𝑡 ), показанную на рисунке 10.

Рисунок 10- Результат моделирования при 𝑃 = 10.

Отчетливо видно, что температура падает до включения нагревателя при 𝑡 = 1, после чего растет до достижения постоянного значения, соответствующего термодинамическому равновесию между теплом, подводимым нагревателем и отводимым наружу.

Литература

1. А. Борисевич, Теория автоматического управления: элементарное введение

с применением MATLAB , Изд. МГУ, 2011г.

2. А. Ф. Дащенко, В. Х. Кириллов, Л. В. Коломиец, В. Ф. Оробей

MATLAB В ИНЖЕНЕРНЫХ И НАУЧНЫХ РАСЧЕТАХ

Одесса «Астропринт» 2003

3. В. П. Дьяконов MATLAB 7.*/R2006/R2007 Самоучитель

Москва, ДМК, 2008


ВВЕДЕНИЕ В SIMULINK

MATLAB (Matrix Laboratory) – это пакет прикладных программ, предназначенный для решения задач технических вычислений.

Рисунок 1.1 – Логотип MATLAB, выведенный на экран при помощи команды logo

Как язык программирования MATLAB был разработан в конце 1970-х годов Кливом Моулером в университете Нью-Мексико. MATLAB – это высокоуровневый интерпретируемый язык программирования, отличительной особенностью которого является оперирование с векторами и матрицами. На сегодняшний день насчитывается более одного миллиона пользователей

Simulink – это система имитационного блочного моделирования динамических систем, являющаяся подсистемой MATLAB. Средства моделирования Simulink основываются на программных средствах MATLAB, но позволяют обойтись без использования в явном виде языка MATLAB и создавать модели из стандартных блоков в графическом виде. При необходимости дополнительные блоки могут быть написаны пользователем как на языке MATLAB, так и на других языках (С, VHDL и др.). Визуальное представление дает возможность значительно упростить процесс создания модели, поиска ошибок, модификации модели другими пользователями, что в целом позволяет добиваться результатов гораздо быстрее, чем при использовании языка MATLAB в чистом виде. Кроме того, пользователю предоставляется возможность автоматической генерации кода на языках С, VHDL, Verilog по созданной модели, что позволяет переносить модель системы сразу после отладки на кристалл (микроконтроллеры, ПЛИС). Со многими другими возможностями MATLAB и Simulink можно познакомиться на сайте компании TheMathWorks (http://www.mathworks.com/).

1.1 Запуск Simulink

Запустив графический интерфейс MATLAB, выполните команду simulink или запустите Simulink при помощи кнопки на верхней панели (рис. 1.2).

Рисунок 1.2 – Запуск Simulink из MATLAB

При запуске Simulink откроется окно Simulink Library Browser (каталог библиотеки Simulink). В левой панели окна приведен список библиотек Simulink (рис. 1.3). Правая панель содержит три вкладки: Library (Содержание библиотеки),Search Results (Результаты поиска),Most Frequently Used Blocks

(Наиболее часто используемые блоки).

Во вкладке Library отображаются элементы библиотеки, выбранной в левой панели окна. В дальнейшем эти элементы могут быть использованы для создания новой модели.

Для ускоренного поиска нужного блока необходимо использовать поисковую систему (Enter search term ). Результаты поиска отображаются во второй вкладке правой панели (Search Results ).

В процессе работы в Simulink формируется набор наиболее часто используемых блоков, который будет отображаться в третьей вкладке правой панели (Most Frequently Used Blocks ).

Рисунок 1.3 – Каталог библиотеки Simulink

Главное меню окна каталога библиотеки Simulink содержит следующие элементы:

File (Файл) – работа с файлами моделей Simulink:

New (Новый) – создание нового файла модели (Model ) или библиотеки (Library );

Open (Открыть) – открыть ранее созданный файл;

Close (Закрыть) – закрыть окно каталога библиотеки Simulink;Preferences (Настройки по умолчанию) – общие настройки Simulink (параметры шрифтов, настройки отображения графического интерфейса пользователя, начальные настройки вновь создаваемых проектов и другие).

Edit (Редактирование) – добавление в модель выделенного блока (Add Selected Block to a New Model ), поиск блока в библиотеке (Find ).

View (Вид) – настройки отображения элементов библиотеки (размер шрифта, вид значков элементов и др.).

Help (Помощь) – справочная система MATLAB Simulink.

Необходимо отметить, что MATLAB имеет очень хорошую встроенную систему документации, которая постоянно совершенствуется и дополняется новой информацией. Знание технического английского языка и чтение документации MATLAB – это лучший способ разобраться во всем многообразии функций и блоков.

Рисунок 1.4 – Описание элемента стандартной библиотеки Simulink

При двойном нажатии левой кнопкой мыши по интересующему блоку открывается окно параметров, в котором приведено краткое описание блока и перечислены его параметры (рис. 1.4). На данном этапе параметры блока доступны только для чтения. После перемещения блока в модель появится возможность их изменения. При необходимости можно воспользоваться кнопкой Help для открытия подробного описания блока в системе документации

1.2 Создание модели

Для создания новой модели выполните команду главного меню File ,

New ,Model (рис. 1.5) или нажмитеCtrl+N .

Рисунок 1.5 – Создание новой модели

По команде откроется новое безымянное окно (Untitled ) модели (рис.

Рисунок 1.6 – Пустое окно новой модели Simulink

Прежде чем приступать к созданию модели, необходимо настроить параметры моделирования. Выполните команду главного меню Simulation ,Configuration Parameters (Моделирование, Параметры конфигурации) или на-

жмите Ctrl+E .

Рисунок 1.7 – Параметры конфигурации

Процесс настройки заключается в задании параметров решающего мо-

дуля (Solver ):

Simulation time (Время моделирования) – задается временной интервал моделирования в секундах. Левая граница по умолчанию равна нулю, правая может принимать любое значение, в том числе и бесконечность (inf ). В случае, если начальное и конечное значения совпадают, будет выполнен только один шаг моделирования.

Solver Options (Параметры решающего модуля) – параметры модуля, реализующего один из методов численного интегрирования обыкновенных дифференциальных уравнений. Выделяются два типа (Type ) решающих модулей: с фиксированным шагом моделирования (Fixed-step ) и с переменным шагом моделирования (Variable-step ). Выбор второго варианта позволяет системе адаптивно изменять временной шаг моделирования в процессе работы. При этом можно задать величины минимального и максимального шага мо-

делирования, а также начального шага моделирования в секундах (Max step size, Min step size иInitial step size ). При необходимости можно задать относительную и абсолютную погрешности численного метода решения дифферен-

циальных уравнений (Relative tolerance иAbsolute tolerance ). В выпадающем спискеSolver имеется возможность задать тип решающего модуля для моделирования аналоговых систем (ode … ) или выбрать решающий модуль для моделирования дискретных систем (Discrete (no continuous state) ).

На первое время рекомендуется оставить параметры конфигурации по умолчанию, изменяя лишь правую границу времени моделирования. При необходимости можно более подробно ознакомиться с параметрами конфигурации в справочной системе MATLAB Simulink.

Рисунок 1.7 – Результаты поиска по слову «Scope»

Сохраните настройки системы и перейдите к окну библиотеки Simulink. Введите в строке поиска (Enter search term )Scope (осциллограф) и нажмите клавишуEnter. Во вкладкеFound: ‘Scope’ отражаются результаты поиска, сгруппированные по библиотекам (рис. 1.7). В базовой библиотекеSimulink блокScope найден дважды: в разделеCommonly Used Blocks (наиболее часто используемые блоки) иSinks (средства анализа сигналов). Разумеется, это один и тот же блок осциллографа. В списке найденных блоков также присут-

ствует часто используемый блок Spectrum Scope (Анализатор спектра), находящийся в библиотеке цифровой обработки сигналов (Digital Signal Processing ).

Добавить выбранный блок в модель можно несколькими способами: перетащив его на лист модели или выбрав пункт Add To Untitled контекстного меню, нажав правой кнопкой мыши на блоке. Аналогичным образом добавьте блокSine Wave из разделаSources (Источники сигнала).

Соединение блоков между собой может осуществляться двумя способами. Ручной способ: наведя курсор мыши на выход источника сигнала, зажмите левую кнопку мыши и проведите линию до входа осциллографа. Автоматический способ: выделив блок источника сигнала однократным нажатием левой кнопки мыши, зажмите кнопку Ctrl и нажмите левой кнопкой мыши на второй блок, соединение будет выполнено автоматически.

Для настройки параметров генератора синусоидального сигнала двойным щелчком мыши откройте окно параметров блока (рис. 1.9.).

Рисунок 1.9 – Настройка параметров блока Sine Wave

Установите значение параметра Sine type Sample based (Метод формирования сигнала – Дискретное представление). ПараметрSample time определяет период дискретизации сигнала, для примера установим его равным одной секунде. Таким образом, при 10 выборках на один период синусоиды (Samples per period ) и при периоде дискретизации в 1 секунду, период гармонического колебания составит 10 секунд.

Запустите процесс моделирования Simulation, Start (Ctrl+T ) на временном промежутке 0…10 сек. Двойным щелчком мыши откройте окно осциллографа (рис. 1.10).

Рисунок 1.10 – Пример моделирования источника дискретного синусоидального сигнала

Как видно на рисунке 1.10, осциллограмма сигнала соответствует заданным параметрам гармонического колебания в настройках блока Sine Wave . При необходимости можно увеличить участок с требуемым фрагментом сигнала при помощи кнопок управления окнаScope . КнопкаAutoscale позволяет автоматически подобрать масштаб по двум осям для отображения всего накопленного сигнала. При помощи кнопокZoom X – axis иZoom Y – axis имеется возможность изменения масштаба только по одной из координат. В настройках блокаScope можно задать количество входов осциллографа (Number of axis ), параметры децимации входного сигнала (Decimation , прореживание выборок), настройки объема буфера хранения информации (History, Limit data points to last ) и другие.

1.3 Библиотеки Simulink

Формирование сигналов в Simulink осуществляется при помощи генераторов сигналов Sources (рис. 1.11).

Рисунок 1.11 – Библиотека источников сигнала

В библиотеку входят следующие блоки:

Band-Limited White Noise – генератор нормального белого шума с равномерной финитной спектральной плотностью мощности и заданным временем корреляции для аналоговых систем;

Chirp signal – генератор синусоидального колебания с линейно возрастающей мгновенной частотой;

Clock – формирователь аналогового сигнала текущего времени моделирования (в соответствии с шагом моделирования);

Constant – источник постоянного сигнала;

Counter Free-Running – формирователь сигнала на основе N -разрядного счетчика и со сбросом по переполнению;

Counter Limited – формирователь сигнала на основе счетчика с произвольным значением сброса;

Digital Clock – формирователь дискретного сигнала текущего времени моделирования (в соответствии с шагом моделирования);

ВВЕДЕНИЕ

Настоящие методические указания служат пособием для студентов института, выполняющих лабораторные и курсовые работы по теории линейных систем автоматического управления и автоматизированному электроприводу. Целью практикума является закрепление теоретического материала по дифференциальным уравнениям, передаточным функциям, временным и частотным характеристикам звеньев и автоматических систем, их устойчивости, влиянию параметров и структуры систем на показатели качества процессов управления в переходном и установившемся режимах функционирования, исследованию систем с запаздыванием.

Особенностью данного практикума является его выполнение на персональных компьютерах с использованием системы MATLAB - Simulink, позволяющей автоматизировать процесс анализа систем управления, представленных в виде структурных динамических схем.

Практикум предусматривает выполнение шести лабораторных работ для приобретения практических навыков при анализе основных свойств линейных систем управления во временной и частотной областях.

ЛАБОРАТОРНАЯ РАБОТА № 1 ИЗУЧЕНИЕ СИСТЕМЫ ИМИТАЦИОННОГО МОДЕЛИРОВАНИЯ

MATLAB - SIMULINK

Цель работы

Ознакомление с системой MATLAB, приобретение практических навыков исследования систем автоматического управления (САУ) с помощью приложения MATLAB – системой имитационного моделирования Simulink.

1.1. Основные сведения

MATLAB - это язык программирования сверхвысокого уровня, предназначенный для технических вычислений. Он включает в себя вычисления, визуализацию и программирование в легкой для использования среде, где задачи и решения представлены в общей математической форме. MATLAB является интерактивной системой, в которой основные элементы данных представлены массивами, не требующими предварительного задания размерности. Это позволяет решать множество технических задач, особенно в матричной и векторной форме, а также писать программу на традиционных скалярных языках, таких как Си или Фортран.

Название "MATLAB" произошло от сокращения слов "matrix laboratory". Система MATLAB состоит из пяти основных частей:

1. Язык программирования MATLAB. Это матрично-массивный язык высокого уровня с управлением состоянием, функциями, структурами данных, входом/выходом, и объектно-ориентированным программированием.

2. Рабочая среда MATLAB. Это графический интерфейс, с которым работает пользователь. Включает рабочий стол MATLAB, командное окно, редактор и отладчик файлов MATLAB, справочный броузер.

3. Графическая система MATLAB. Содержит команды высокого уровня для двухмерного и трехмерного представления данных, обработки изображений, анимации. Также содержит набор команд низкого уровня, позволяющих пользователю построить собственный интерфейс.

4. Библиотека математических функций MATLAB. Содержит набор вычислительных алгоритмов, начиная с элементарных арифметических функций (сложение/вычитание, тригонометрические функции) и заканчивая сложными функциями, такими как обращение матриц и преобразования Фурье.

5. Интерфейс прикладных программ MATLAB. Эта библиотека позволяет писать программы на языках Си и Фортран, взаимодействующие с MATLAB. Включает в себя устройства вызова из MATLAB (динамической связи), вызова MATLAB как вычислительного механизма, и для работы с MAT-файлами.

Simulink является программой для имитационного моделирования и анализа динамических систем, входящей в состав пакета MATLAB. Simulink позволяет производить построение модели в виде унифицированных блоков на экране компьютера и может работать с линейными, нелинейными, непрерывными, дискретными моделями или их сочетаниями с большим числом переменных.

1.2. Порядок выполнения работы

1. Включите компьютер.

2. Находясь в ОС Windows, запустите MATLAB двойным щелчком левой кнопки "мыши" по соответствующей иконке на рабочем столе. В результате открывается основное окно MATLAB.

3. Для запуска Simulink нажмите в основном окне MATLAB на кнопку с всплывающей подписью Simulink Library Browser . В результате

открывается окно библиотеки блоков Simulink.

4. Для построения новой модели в окне Simulink Library Browser нажмите на кнопку с всплывающей подписьюNew model . Программа откроет

окно с "чистым листом" без имени (untitled). Для открытия существующей модели в окне библиотеки блоков или в командном окне нажмите на кнопку с всплывающей подписью Open a model , и в появившемся окне выберите

требуемый файл (файлы, созданные в Simulink, имеют расширение .mdl ).

5. Создайте структурную схему, приведенную на рис. 1.1 и задайте указанные преподавателем значения ее параметров.

Рис. 1.1. Структурная схема (а) и модель в Simulink (б) исследуемой системы

Набор структурной схемы осуществляется путем выбора требуемых блоков в окне Simulink Library Browser и перетаскивания их при

помощи мыши в окно, где осуществляется построение модели. Для удобства пользования все блоки разделены на группы. В данной лабораторной работе использованы блоки группы Simulink с подгруппамиContinuous

(непрерывные звенья), Math Operations (математические блоки),Sinks (приемники данных),Sources (источники сигналов). Имена блоков указаны

на рис. 1.1,б.

Редактирование параметров блока осуществляется двойным щелчком левой кнопки мыши по требуемому блоку. При этом открывается окно параметров блока, вид которого зависит от вида блока.

Для соединения блоков достаточно указать курсором мыши на выход блока-источника сигнала и затем при нажатой кнопке мыши протянуть соединение на вход блока-приемника сигнала. Соединение блоков можно также осуществлять выделением левой кнопкой мыши требуемых блоков при нажатой клавишеCtrl . Для создания отвода необходимо указать правой

кнопкой мыши на место отвода соединения и при нажатой кнопке протянуть отвод на вход требуемого блока.

Для вывода результатов моделирования к выходам требуемых блоков необходимо присоединить блоки-приемники сигналов (см. п. 9).

Удаление ненужных блоков и соединений происходит путем выделения соответствующего объекта и нажатия клавиши Delete клавиатуры.

Дополнительную информацию по построению моделей, а также по работе с MATLAB в целом можно найти в меню Help Desk , а также в .

6. Сохраните созданную модель.

7. Задайте параметры для процесса численного интегрирования модели. Для этого в меню окна модели откройте Simulation -Parameters . В

появившемся окне выставляются указанные преподавателем время начала и окончания расчета, точность расчета и метод.

8. Рассчитайте полученную модель. Запуск расчета (интегрирования) модели в меню Simulation кнопкойStart . Процесс расчета модели

отображается прогрессивной шкалой в нижней части окна. При необходимости

вернитесь на предыдущий этап и поменяйте время окончания расчета так, чтобы обеспечить стабилизацию выходной переменной (окончание переходного процесса).

9. По окончании расчета получите требуемые результаты с помощью блоков-приемников данных. Просмотр и печать графиков переходных процессов осуществляется с помощью блокаScope . Просмотр численных

значений переменной в ходе моделирования осуществляется блоком Display .

Для редактирования полученных графиков или сохранения их в формате графического файла, необходима установка выходных блоков То Workspace .

В параметрах этих блоков указывается имя выводимой переменной Variable name и формат данныхSave format (Array) . Далее в командном окне MATLAB или редакторе М-файлов, вызываемого командой менюNew M- file , записывается команда построения графиков. В простейшем случае она

имеет вид: plot(x,y);

где x ,y – имена выводимых переменных.

При построении нескольких графиков в одних осях команда примет вид: plot(x,y,x,z,..);

где x – имя общей (независимой) переменной,y,z – зависимые переменные.

Примечание: команды, набранные в командной строке, выполняются после нажатия клавиши Enter . Для выполнения команд, набранных в редакторе М-

Вывод нескольких переменных в один блок-приемник данных, осуществляется с помощью блока объединения сигналов в общую шинуMux .

Переменная времени в MATLAB обозначена как tout . После сохранения (редактор генерирует файл с расширением.m ) и запуска программы (командаRun менюTools редактора), последняя строит график в окнеFigure ,

который может быть обработан имеющимися в меню окна инструментами. Сохранение графика происходит либо как файла с расширением .fig (команда

Save менюFile окна графика), в этом случае он будет доступен только из MATLAB, либо как графического файла с расширениями.bmp ,.jpg и прочими по выбору (командаExport менюFile окна графика). В последнем

случае график может быть вставлен в документ отчета по лабораторной работе, написанного, например, в редакторе Word.

10. Для построения логарифмических частотных и амплитудно-фазовых частотных характеристик (ЛЧХ и АФЧХ) по полиному передаточной функции необходимо в командном окне или в М-файле ввести соответственно команды

знаменателя передаточной функции системы, записываемые через пробел. В

случае наличия двух и более коэффициентов в полиноме, последние записываются в квадратных скобках через пробел. Например, для построения

ЛЧХ колебательного звена с передаточной функции W (p ) = 0,01 p 2 + 5 0,2 р + 1 ,

необходимо набрать следующую команду: bode(tf(5,));

Для построения частотных характеристик по модели, в Simulink с помощью блоков In иOut необходимо указать соответственно вход и выход

линеаризация исследуемой модели и построение её ЛЧХ или АФЧХ. Синтаксис

Linmod("имя файла модели")

bode(A,B,C,D) или nyquist(A,B,C,D) grid

где A ,B ,C ,D – матрицы пространства состояний системы, полученные при выполнении командыlinmod ;grid – команда нанесения на график координатной сетки.

11. После окончания работы выйдите из MATLAB, закрыв все окна.

1.3. Содержание отчета по работе

1. Цель работы.

2. Схема исследованной системы с числовыми значениями параметров.

3. Экспериментально полученные графики переходного процесса, ЛЧХ, АФЧХ.

4. Ответы на контрольные вопросы.

1.4. Контрольные вопросы

1. Что из себя представляет система MATLAB и какова область его применения?

2. С какими видами моделей может работать Simulink?

3. Каким образом осуществляется построение структурной схемы в Simulink?

4. Как в Simulink осуществляется ввод и редактирование параметров блоков?

5. Как в MATLAB осуществляется построение ЛЧХ и АФЧХ системы?

6. Как осуществляется печать графиков переходных процессов?

ЛАБОРАТОРНАЯ РАБОТА № 2 ИССЛЕДОВАНИЕ ОСНОВНЫХ ХАРАКТЕРИСТИК ТИПОВЫХ

ДИНАМИЧЕСКИХ ЗВЕНЬЕВ

Цель работы Исследование переходной функции, амплитудно-фазовых и

логарифмических частотных характеристик апериодического, реального дифференцирующего и колебательного звеньев.

2.1. Основные сведения Типовыми динамическими звеньями САУ являются звенья, процессы в

которых описываются линейными дифференциальными уравнениями первого и второго порядков с постоянными коэффициентами и в общем случае имеют следующий вид:

d 2 y

a0 y= b2

d 2 x

B0 x,

где x (t ) ,y (t ) - соответственно входной и выходной сигналы звена;a 0 ,a 1 ,a 2 ;b 0 ,b 1 ,b 2 - постоянные коэффициенты.

Данное уравнение дает возможность определить передаточную функцию типового звена в виде

W (p )=

y (p )

b p2 + b p+ b

x (p )

a p2

a p +

Анализ возможных вариантов задания коэффициентов передаточной функции (2.2) показывает, что к типовым звеньям нулевого и первого порядка,

т.е. к звеньям, описываемым уравнениями вида (2.1) при a 2 = b 2 = 0 , относятся следующие

1. Безынерционное звено (при a 1 = b 1 = 0)

W (p) = b 0 = k. a0

2. Дифференцирующее звено (при a 1 = b 0 = 0)

W (p )=

b 1 p =

kp ,

где k =

3. Форсирующее звено (при a 1 =

W (p )=

b1 p+

b 0 =

k (Tp + 1) , гдеk =

b 1 .

4. Интегрирующее звено (при a 0

B 1 =0)

W (p )=

где k =

b 0 .

Апериодическое звено первого порядка (при b 1 = 0)

W (p )=

где k =

a p +

Tp + 1

Реальное дифференцирующее звено (при b 0 = 0)

W (p )=

где k =

a p +

Tp + 1

Из типовых

звеньев второго

наибольшее применение нашло

колебательное звено при b 1 =b 2 = 0 с передаточной функцией следующего вида:

W (p )=

Где k =

; T =

; ξ =

a p + a

2ξ Tp +1

Рассмотренная совокупность типовых динамических звеньев первого и второго порядков оказывается достаточной для построения структуры практически любой линейной САУ. При этом сложные реальные звенья могут заменяться последовательным или параллельным соединением нескольких типовых звеньев.

Временными характеристиками являются взаимосвязанные переходная h (t ) и весовая ω(t ) функции, представляющие собой реакции исследуемых звеньев на типовые воздействия в виде единичной ступенчатой функции 1(t ) и δ –функции δ(t ) . При этом переходная функция дает возможность оценить устойчивость и качество процессов управления, происходящих в исследуемых звеньях при скачкообразных входных воздействиях.

Частотные характеристики, основанные на использовании преобразования Фурье, позволяют оценить происходящие в звеньях процессы управления не только при скачкообразных, но и при любых других входных сигналах, действующих в реальных условиях.

При этом любой входной сигнал x (t ) представляется в виде суммы гармоник различных частот с определенными, соответствующими данному сигналу амплитудами и фазами, а реакция на сумму входных гармоник, т.е. выходной сигналy (t ) равен сумме реакций на каждую из них.

Для отдельной гармоники на входе линейного звена x (t ) = x 0 (ω) × e j ω t

реакцией будет совокупность вынужденной и переходной составляющих, последняя из которых по истечении некоторого времени затухает, и на выходе звена установится синусоидальный сигнал той же частоты, что и на входе, т.е.

y (t ) = y 0 (ω ) × e j (ωt + ϕ(ω)) .

Реакция звена на гармоники различных частот характеризуется его комплексным коэффициентом передачи, который представляет собой амплитудно-фазовую частотную характеристику (АФХ) звена определяется следующим образом.

Последнее обновление: 31.10.2015

Конкатенация

Конкатенация строк или объединение может производиться как с помощью операции + , так и с помощью метода Concat:

String s1 = "hello"; string s2 = "world"; string s3 = s1 + " " + s2; // результат: строка "hello world" string s4 = String.Concat(s3, "!!!"); // результат: строка "hello world!!!" Console.WriteLine(s4);

Метод Concat является статическим методом класса String, принимающим в качестве параметров две строки. Также имеются другие версии метода, принимающие другое количество параметров.

Для объединения строк также может использоваться метод Join:

String s5 = "apple"; string s6 = "a day"; string s7 = "keeps"; string s8 = "a doctor"; string s9 = "away"; string values = new string { s5, s6, s7, s8, s9 }; String s10 = String.Join(" ", values); // результат: строка "apple a day keeps a doctor away"

Метод Join также является статическим. Использованная выше версия метода получает два параметра: строку-разделитель (в данном случае пробел) и массив строк, которые будут соединяться и разделяться разделителем.

Сравнение строк

Для сравнения строк применяется статический метод Compare:

String s1 = "hello"; string s2 = "world"; int result = String.Compare(s1, s2); if (result<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result > 0) { Console.WriteLine("Строка s1 стоит после строки s2"); } else { Console.WriteLine("Строки s1 и s2 идентичны"); } // результатом будет "Строка s1 перед строкой s2"

Данная версия метода Compare принимает две строки и возвращает число. Если первая строка по алфавиту стоит выше второй, то возвращается число меньше нуля. В противном случае возвращается число больше нуля. И третий случай - если строки равны, то возвращается число 0.

В данном случае так как символ h по алфавиту стоит выше символа w, то и первая строка будет стоять выше.

Поиск в строке

С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:

String s1 = "hello world"; char ch = "o"; int indexOfChar = s1.IndexOf(ch); // равно 4 Console.WriteLine(indexOfChar); string subString = "wor"; int indexOfSubstring = s1.IndexOf(subString); // равно 6 Console.WriteLine(indexOfSubstring);

Подобным образом действует метод LastIndexOf , только находит индекс последнего вхождения символа или подстроки в строку.

Еще одна группа методов позволяет узнать начинается или заканчивается ли строка на определенную подстроку. Для этого предназначены методы StartsWith и EndsWith . Например, у нас есть задача удалить из папки все файлы с расширением exe:

String path = @"C:\SomeDir"; string files = Directory.GetFiles(path); for (int i = 0; i < files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

Разделение строк

С помощью функции Split мы можем разделить строку на массив подстрок. В качестве параметра функция Split принимает массив символов или строк, которые и будут служить разделителями. Например, подсчитаем количество слов в сроке, разделив ее по пробельным символам:

String text = "И поэтому все так произошло"; string words = text.Split(new char { " " }); foreach (string s in words) { Console.WriteLine(s); }

Это не лучший способ разделения по пробелам, так как во входной строке у нас могло бы быть несколько подряд идущих пробелов и в итоговый массив также бы попадали пробелы, поэтому лучше использовать другую версию метода:

String words = text.Split(new char { " " }, StringSplitOptions.RemoveEmptyEntries);

Второй параметр StringSplitOptions.RemoveEmptyEntries говорит, что надо удалить все пустые подстроки.

Обрезка строки

Для обрезки начальных или концевых символов используется функция Trim:

String text = " hello world "; text = text.Trim(); // результат "hello world" text = text.Trim(new char { "d", "h" }); // результат "ello worl"

Функция Trim без параметров обрезает начальные и конечные пробелы и возвращает обрезанную строку. Чтобы явным образом указать, какие начальные и конечные символы следует обрезать, мы можем передать в функцию массив этих символов.

Эта функция имеет частичные аналоги: функция TrimStart обрезает начальные символы, а функция TrimEnd обрезает конечные символы.

Обрезать определенную часть строки позволяет функция Substring :

String text = "Хороший день"; // обрезаем начиная с третьего символа text = text.Substring(2); // результат "роший день" Console.WriteLine(text); // обрезаем сначала до последних двух символов text = text.Substring(0, text.Length - 2); // результат "роший де" Console.WriteLine(text);

Функция Substring также возвращает обрезанную строку. В качестве параметра первая использованная версия применяет индекс, начиная с которого надо обрезать строку. Вторая версия применяет два параметра - индекс начала обрезки и длину вырезаемой части строки.

Вставка

Для вставки одной строки в другую применяется функция Insert:

String text = "Хороший день"; string subString = "замечательный "; text = text.Insert(8, subString); Console.WriteLine(text);

Первым параметром в функции Insert является индекс, по которому надо вставлять подстроку, а второй параметр - собственно подстрока.

Удаление строк

Удалить часть строки помогает метод Remove:

String text = "Хороший день"; // индекс последнего символа int ind = text.Length - 1; // вырезаем последний символ text = text.Remove(ind); Console.WriteLine(text); // вырезаем первые два символа text = text.Remove(0, 2);

Первая версия метода Remove принимает индекс в строке, начиная с которого надо удалить все символы. Вторая версия принимает еще один параметр - сколько символов надо удалить.

Замена

Чтобы заменить один символ или подстроку на другую, применяется метод Replace :

String text = "хороший день"; text = text.Replace("хороший", "плохой"); Console.WriteLine(text); text = text.Replace("о", ""); Console.WriteLine(text);

Во втором случае применения функции Replace строка из одного символа "о" заменяется на пустую строку, то есть фактически удаляется из текста. Подобным способом легко удалять какой-то определенный текст в строках.

Смена регистра

Для приведения строки к верхнему и нижнему регистру используются соответственно функции ToUpper() и ToLower() :

String hello = "Hello world!"; Console.WriteLine(hello.ToLower()); // hello world! Console.WriteLine(hello.ToUpper()); // HELLO WORLD!

Над строками определены следующие операции:

Присваивание (=);

Две операции проверки эквивалентности (= =) и (!=);

Конкатенация или сцепление строк (+);

Взятие индекса ().

Начнем с присваивания, имеющего важную особенность. Поскольку string - это ссылочный тип, то в результате присваивания создается ссылка на константную строку, хранимую в «куче». С одной и той же строковой константой в «куче» может быть связано несколько переменных строкового типа. Но эти переменные не являются псевдонимами - разными именами одного и того же объекта. Дело в том, что строковые константы в «куче» не изменяются (о неизменяемости строкового типа будем далее говорить подробно), поэтому, когда одна из переменных получает новое значение, она связывается с новым константным объектом в «куче». Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике значимого присваивания.

В отличие от других ссылочных типов операции, проверяющие эквивалентность, сравнивают значения строк, а не ссылки. Эти операции выполняются как над значимыми типами.

Бинарная операция «+» сцепляет две строки, приписывая вторую строку к хвосту первой.

Возможность взятия индекса при работе со строками отражает тот приятный факт, что строку можно рассматривать как массив и получать без труда каждый ее символ. Каждый символ строки имеет типchar , доступный только для чтения, но не для записи.

Вот пример, в котором над строками выполняются данные операции:

public void TestOpers () {
//операции над строками
string s1 = "ABC", s2 = "CDE";
string s3 = s1 + s2;
bool b1 = (s1 == s2);
char ch1 = s1, ch2 = s2;
+
s2 = s1;
b1 = (s1 != s2);
ch2 = s2;
Console.WriteLine("s1={0}, s2={1}, b1={2}," + "ch1={3}, ch2={4}", s1, s2, b1, ch1, ch2);
//Неизменяемые значения
s 1 = " Zenon ";
// s 1=" L ";
}

Статические методы класса String

Сводка статических методов классаString приводится в таблице 6.

Таблица 6. Статические методы класса String

Метод

Описание

Возвращается пустая строка. Свойство со статусом read only

Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. При этом можно учитывать или не учитывать регистр, особенности национального форматирования дат, чисел и т.д.

Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. Сравниваются коды символов

Конкатенация строк. Метод перегружен, допускает сцепление произвольного числа строк

Создается копия строки

Выполняет форматирование в соответствии с заданными спецификациями формата. Ниже приведено более полное описание метода

Intern, Islntern

Отыскивается и возвращается ссылка на строку, если таковая уже хранится во внутреннем пуле данных. Если же строки нет, то первый из методов добавляет строку во внутренний пул, второй - возвращает null. Методы применяются обычно тогда, когда строка создается с использованием построителя строк - класса StringBuilder

Конкатенация массива строк в единую строку. При конкатенации между элементами массива вставляются разделители. Операция, заданная методом Join, является обратной к операции, заданной методом Split. Последний является динамическим методом и, используя разделители, осуществляет разделение строки на элементы

Методы Join и Split

МетодыJoin иSplit выполняют над строкой текста взаимно обратные преобразования. Динамический методSplit позволяет осуществить разбор текста на элементы. Статический методJoin выполняет обратную операцию, собирая строку из элементов.

Заданный строкой текст зачастую представляет собой совокупность структурированных элементов - абзацев, предложений, слов, скобочных выражений и т.д. При работе с таким текстом необходимо разделить его на элементы, пользуясь специальными разделителями элементов, - это могут быть пробелы, скобки, знаки препинания. Практически подобные задачи возникают постоянно при работе со структурированными текстами. Методы Split и Join облегчают решение этих задач.

Динамический методSplit , как обычно, перегружен. Наиболее часто используемая реализация имеет следующий синтаксис:

public string[ ] Split(params char[ ])

На вход методуSplit передается один или несколько символов, интерпретируемых как разделители. Объектstring , вызвавший метод, разделяется на подстроки, ограниченные этими разделителями. Из этих подстрок создается массив, возвращаемый в качестве результата метода. Другая реализация позволяет ограничить число элементов возвращаемого массива.

Синтаксис статического методаJoin таков:

public static string Join(string delimiters, string[ ] items)

В качестве результата метод возвращает строку, полученную конкатенацией элементов массиваitems , между которыми вставляется строка разделителейdelimiters . Как правило, строкаdelimiters состоит из одного символа, который и разделяет в результирующей строке элементы массива items ; но в отдельных случаях ограничителем может быть строка из нескольких символов.

Рассмотрим примеры применения этих методов. В первом из них строка представляет сложноподчиненное предложение, которое разбивается на простые предложения. Во втором предложение разделяется на слова. Затем производится обратная сборка разобранного текста. Вот код соответствующей процедуры:

public void TestSplitAndJoin () {
string txt = "А это пшеница, которая в темном чулане хранится" +
", в доме, который построил Джек!";
Console . WriteLine (" txt ={0}", txt );
Console . WriteLine ("Разделение текста на простые предложения:");
string[ ] SimpleSentences, Words;
// размерность массивов SimpleSentences и Words
//устанавливается автоматически в соответствии с
//размерностью массива, возвращаемого методом
Split SimpleSentences = txt.Split(",");
for (int i = 0; i < SimpleSentences.Length; i++)
Console.WriteLine("SimpleSentences[{0}]= {1}", i, SimpleSentences[i]);
string txtjoin = string.Join(",", SimpleSentences);
Words = txt.Split(",", " ");
for (int i = 0; i < Words.Length; i++)
Console.WriteLine("Words[{0}]= {1}", i, Words[i]);
txtjoin = string.Join(" ", Words);
Console.WriteLine("txtjoin={0}", txtjoin);
} // TestSplitAndJoin

Результаты выполнения этой процедуры показаны на рис. 30.

Рисунок 30. Разбор и сборка строки текста

Обратите внимание, что методыSplit иJoin хорошо работают, когда при разборе используется только один разделитель. В этом случае сборка действительно является обратной операцией и позволяет восстановить исходную строку. Если же при разборе задается некоторое множество разделителей, то возникают две проблемы:

1. Невозможно при сборке восстановить строку в прежнем виде, поскольку не сохраняется информация о том, какой из разделителей был использован при разборе строки. Поэтому при сборке между элементами вставляется один разделитель, возможно, состоящий из нескольких символов;

2. При разборе двух подряд идущих разделителей предполагается, что между ними находится пустое слово. Обратите внимание в тексте нашего примера, как и положено, после запятой следует пробел. При разборе текста на слова в качестве разделителей указаны символы пробела и запятой. По этой причине в массиве слов, полученном в результате разбора, имеются пустые слова.

Если при разборе предложения на слова использовать в качестве разделителя только пробел, то пустые слова не появятся, но запятая будет являться частью некоторых слов.

Как всегда, есть несколько способов справиться с проблемой. Один из них состоит в том, чтобы написать собственную реализацию этих функций, другой - в корректировке полученных результатов, третий - в использовании более мощного аппарата регулярных выражений.

Динамические методы класса String

Операции, разрешенные над строками в C#, разнообразны. Методы этого класса позволяют выполнять вставку, удаление, замену, поиск вхождения подстроки в строку. КлассString наследует методы классаObject , частично их переопределяя. КлассString наследует и, следовательно, реализует методы четырех интерфейсов:ICompareable , ICloneable , IConvertible , Enumerable . Три из них уже рассматривались при описании классов-массивов.

Рассмотрим наиболее характерные методы при работе со строками.

Сводка методов, приведенная в таблице 7, дает достаточно полную картину широких возможностей, имеющихся при работе со строками в C#. Следует помнить, что классstring является неизменяемым. ПоэтомуReplace , Insert и другие методы представляют собой функции, возвращающие новую строку в качестве результата и не изменяющие строку, вызвавшую метод.

Таблица 7. Динамические методы класса String

Метод

Описание

Вставляет подстроку в заданную позицию

Удаляет подстроку в заданной позиции

Заменяет подстроку в заданной позиции на новую подстроку

Выделяет подстроку в заданной позиции

IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny

Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора

StartsWith, EndsWith

Возвращается true или false, в зависимости от того, начинается или заканчивается строка заданной подстрокой

PadLeft, PadRight

Выполняет набивку нужным числом пробелов в начале и в конце строки

Trim,TrimStart, TrimEnd

Обратные операции к методам Pad. Удаляются пробелы в начале и в конце строки, или только с одного ее конца

Преобразование строки в массив символов




Top