В. М. Дубовой, М. С. Юхимчук

ІМІТІЦІЙНЕ МОДЕЛЮВАННЯ
В СИСТЕМІ SCILAB/XCOS

Навчальний посібник


4. ВИКОРИСТАННЯ ОСНОВНИХ БЛОКІВ Xcos

 

 

4.1. Осцилографи

Для графічного відображення сигналу як функції часу в Xcos використовуються блоки CSCOPE і CMSCOPE з палітри Пристрої реєстрації.

Блок CSCOPE має один вхід і відображає один сигнал (скаляр) або множину сигналів (вектор) в єдиній системі координат. Збережіть діаграму під іншим ім'ям: Файл → Зберегти як.

Додайте до діаграми, що складається з генератора, осцилографи і лічильника часу, блок INTEGRAL_f  з палітри Неперервні динамічні системи і блок MUXMUX  (мультиплексор) з палітри Маршрутизація сигналів. Підключіть вихід генератора до першого входу мультиплексора і до входу інтегратора, вихід інтегратора до другого входу мультиплексора і, нарешті, вихід мультиплексора до входу осцилографа.

Діаграма моделі і результат моделювання наведені на рис. 2.4.

Мультиплексор в даному прикладі об'єднує два скаляра на своїх входах в один вектор з двох елементів. Осцилограф відображає їх зміну у часі у вигляді двох графіків в одних осях.

Блок CMSCOPE має два і більше входів і відображає сигнали в окремих системах координат в єдиному графічному вікні.

  
Рисунок 2.4 – Використання ESCOPE

 

Додайте до діаграми блок CMSCOPE  і блок ABS_VALUE (модуль) з палітри Математичні операції. Підключіть до першого входу осцилографа вихід генератора, а до другого вихід блоку ABS_VALUE. На вхід блоку ABS_VALUE подайте сигнал з генератора. Керуючий вхід осцилографа з'єднайте з виходом лічильника часу.

 

  
Рисунок 2.5 – Використання CMSCOPE

 

Межі по осі y задаються в параметрах блоку змінними Ymin vector і Ymax vector. Перший елемент вектора відноситься до першого графіка, другий – до другого. Задайте межі (-2,2) для першого графіка і (0,2) для другого.

Діаграма моделі і результат моделювання наведені на рис. 2.5.

Інтервал оновлення осцилографа (розмір відображуваного проміжку осі часу t) задається в параметрах блоку змінною Refreshperiod (інтервал оновлення). Для блоку CSCOPE це скаляр, для CMSCOPE – вектор, перший елемент якого відноситься до першого графіка, другий – до другого.

Блок CMSCOPE, аналогічно CSCOPE, відображає векторний вхід у вигляді множини сигналів в одній системі координат. Однак, на відміну від CSCOPE, для нього потрібно явно вказати розмірності кожного з входів. Розмірності входів задаються в параметрах блоку змінною Inputportsizes (розмірності вхідних портів) вектором, перший елемент якого відноситься до першого графіка, другий- до другого.

Задайте розмірність першого входу 2. Підключіть до першого входу осцилографа сигнал з виходу мультиплексора. Запустіть моделювання.

Змінна Inputportsizes має ще одне важливе значення: ЇЇ розмірність визначає кількість входів осцилографа. Зміна розмірності Inputportsizes тягне за собою відповідну зміну розмірності змінних YminvectorYmaxvector і Refreshperiod, які задаються для кожного входу окремо.

Додайте третій елемент до Inputportsizes, рівний 1. Встановіть для нового графіка межі по осі y і Інтервал оновлення. Підключіть до третього входу осцилографи сигнал з виходу генератора.

 

  
Рисунок 2.6 – Розширене використання CMSCOPE

 

Колір графіків функцій задається в параметрах блоку змінної Drawingcolors вектор, елементи якого відповідають номеру кольору в стандартній палітрі. Перший елемент визначає колір першої кривої, другий колір другої кривої і т.д. Якщо вказати значення кольору зі знаком мінус, то замість кривих на графіку будуть відображатися позначки.

 

4.2. Джерела сигналів

Джерела сигналів знаходяться в палітрі Джерела сигналів і впливів.

 

4.2.1. Константа

Блок CONST_m  використовується для формування постійної величини. Він має один параметр: ConstantValue – значення константи. Блок є констатним блоком (див. розділ 1.4).

 

4.2.2 Генератор синусоїди

Блок GENSIN_f  використовується для отримання сигналів синусоїдальної форми. Він є активним завжди.

Параметри блоку:

•    Magnitude - амплітуда;

•    Frequency(rad/s) – частота(рад/с);

•    Phase(rad) – фаза(рад).

 

Створіть нову діаграму (Файл → Нова діаграма). Додайте до неї два генератора синусоїди. Встановіть фазу першого генератора рівною %pi/2 (коси-НПУ), а другого залиште рівною нулю – синус (рис. 2.7). Перегляньте сигнали з обох генераторів в одному вікні осцилографа.

 

  
Рисунок 2.7 – Використання GENSIN_f

 

4.2.3. Генератор прямокутних імпульсів

Блок GENSQR_f  використовується для отримання послідовності прямокутних імпульсів (відео-імпульсів). Блок має один керуючий вхід і один інформаційний вихід.

Параметр Amplitude задає амплітуду імпульсів. Тривалість імпульсів визначається інтервалом надходження на керуючий вхід сигналів активації.

Створіть нову діаграму рис. 2.8. Додайте до діаграми генератор прямокутних імпульсів і лічильник часу. Встановіть інтервал дискретизації рівним 5. З'єднайте керуючий вихід лічильника з керуючим входом генератора. Перегляньте сигнал генератора на екрані осцилографа.

 

  
Рисунок 2.8 – Використання GENSQR_f

 

4.2.4. Генератор випадкових чисел

Блок RAND_m  використовується для отримання випадкових чисел, розподілених за нормальним або рівномірним законом. Блок має один керуючий вхід і один інформаційний вихід. Параметри блоку:

• Datatype (тип вихідних даних): 1 дійсні числа, 2 комплексні;

• Flag: прапор, який визначає вид закону розподілу: 0 рівномірний, 1 – нормальний (гаусівський);

• A і B: для рівномірного розподілу величина A визначає мінімальне значення, а величина A + B максимальне. Для нормального розподілу A визначає математичне сподівання, а B середнє квадратичне відхилення (СКВ).

• SEED: числа, використовувані для ініціалізації машинного генератора псевдовипадкових чисел. Перше значення відноситься до дійсної, а друге до уявної частини вихідного сигналу. Два генератора з однаковим параметром SEED видаватимуть два ідентичних псевдовипадкових сигнала.

Створіть діаграму і додайте до неї генератор випадкових чисел. Встановіть параметри генератора таким чином, щоб отримати на виході випадкові числа, розподілені за нормальним законом з математичним сподіванням 0 і СКО рівним 1. Виведіть сигнал генератора у вікно осцилографа з інтервалом дискретизації 0.1.

Випадковий процес на виході генератора (рис. 2.9) є білим гаусівським шумом.

За допомогою блоку RAND_m можна отримати випадковий синхронний телеграфний сигнал (СТС), що імітує передане двійкове повідомлення.

 

  
Рисунок 2.9 – Білий шум

 

Встановіть параметри генератора таким чином, щоб отримати числа, рівномірно розподілені в діапазоні (-1,1). Додайте до виходу генератора блок SIGNUM  з палітри Математичні операції. На керуючий вхід генератора подайте сигнал від лічильника часу з інтервалом 2. Виведіть вихідний сигнал блоку SIGNUM на екран осцилографа з інтервалом дискретизації 0.1 (рис. 2.10).

  
Рисунок 2.10 – Випадковий синхронний телеграфний сигнал

 

4.2.5.  Функція включення

Блок STEP_FUNCTION  генерує ступінчасту функцію (вмикання). Параметри блоку:

• Steptime – момент часу увімкнення;

• Initialvalue – початкове значення;

• Finalvalue – кінцеве значення.

Створіть діаграму, яка містить генератор функції вмикання з параметрами: час вмикання 10, початкове значення 0, кінцеве значення1. Відобразіть сигнал з виходу генератора в вікні осцилографа (рис. 2.11).

 

  
Рисунок 2.11 – Функція вмикання

 

Використовуючи пару генераторів функції вмикання і блок BIGSOM_f (суматора) з палітри Математичні операції можна отримати одиночний прямокутний імпульс. Додайте до діаграми ще один блок STEP_FUNCTION і блок BIGSOM_f. Встановіть час включення другого генератора рівним 15 і кінцеве значення рівним-1. З'єднайте виходи генераторів зі входами суматора, а вихід суматора з входом осцилографа (рис. 2.15).

 

  
Рисунок 2.12 – Одиночний прямокутний імпульс

 

Блок BIGSOM_f  (суматор) має один параметр: Inputportssigns / gain – вектор вагових коефіцієнтів вхідних портів. Розмірність цього вектора визначає число портів. Вихідний сигнал суматора дорівнює зваженій сумі вхідних сигналів. За замовчуванням блок має два входи з вагами 1, тобто просто підсумовує вхідні сигнали.

Тривалість отриманого імпульсу визначається різницею часу вмикання генераторів. Зменшуючи цю різницю до скільки завгодно малого значення, будемо отримувати сигнал, що наближається до дельта-функції. Практично мінімальна різниця визначається найменшим часом дискретизації з усіх лічильників на діаграмі.

 

4.3 Маршрутизація сигналів

З палітри Маршрутизація сигналів нам знадобляться три основних блоки:

•  MUX   – мультиплексор;

•  ISELECT_m   – селектор;

•  NRMSOM_f   – шина.

Мультиплексор MUX  об'єднує вхідні скаляри в один вихідний вектор. Кількість входів задається змінною Numberofinputports в параметрах блоку.

Селектор ISELECT_m  використовується для розбиття вхідного потоку на кілька вихідних. Кількість керуючий входів дорівнює кількості інформаційних виходів. Кожен керуючий вхід відповідає одному виходу: при надходженні на перший керуючий вхід сигналу активації вхідний потік виводиться на перший вихід, при надходженні сигналу активації на другий керуючий вхід – виводиться на другий вихід. Параметри блоку:

Datatype - тип даних: 1 дійсні, 2 комплексні і т.д. (Відповідають стандартним типам даних Scilab);

Numberofoutputs – кількість виходів;

Initialconnectedoutput – номер початково підключеного виходу.

Нехай є синхронний тактовий сигнал (СТС) з тактовим інтервалом, рівним 1. Необхідно розділити сигнал від джерела на два потоки, перший з яких містить посилки з парними, а другий – з непарними номерами.

Створіть нову діаграму. Зберіть схему джерела СТС. Додайте до діаграми селектор і два лічильника часу. З'єднайте лічильники з керуючими входами селектора. Встановіть параметр Initialconnectedoutput селектора рівним 2. Задайте інтервали дискретизації лічильників на входах селектора рівними 2 та встановіть затримку (offset) лічильника на першому вході селектора рівною 1. Додайте до схеми осцилограф CMSCOPE. Виведіть у вікна осцилографа сигнал з виходу генератора СТС і сигнали з виходів селектора (рис. 2.13).

 

  
Рисунок 2.13 – Використання селектора

 

Шина NRMSOM_f  об'єднує велику кількість вхідних потоків в один вихідний. Кількість вхідних потоків задається змінною numberofinputs в параметрах блоку. Об'єднайте потоки парних і непарних посилок з попереднього прикладу в один. Додайте до діаграми блок NRMSOM_f. Подайте на перший вхід блоку сигнал з першого виходу селектора, на другий сигнал з другого виходу селектора. Додайте до діаграми осцилографи CMSCOPE. Виведіть у вікна осцилографів сигнал з виходу генератора СТС і сигнал з виходу шини (рис.2.14).

 

  
Рисунок 2.14 – Використання шини

 

При оновленні значення сигналу на будь-якому з входів шини воно перенаправляється на вихід.

 

4.4  Блок затримки

Блок TIME_DELAY   з палітри Неперервні динамічні системи реалізує затримку вхідного сигналу в часі. Величина затримки визначається змінною Delay в параметрах блоку. Змінна initialinput задає початкове значення вихідного сигналу, а змінна Buffersize – розмір буфера, в якому зберігаються відліки затриманого вхідного сигналу. Розмір буфера повинен бути не менше, ніж число відліків сигналу за час затримки.

Створіть нову діаграму. Додайте до діаграми генератор синусоїди і блок затримки. Встановіть час затримки рівним 5. Виведіть сигнал з генератора і затриманий сигнал в одному вікні осцилографа (рис. 2.15).

 

  
Рисунок 2.15 – Використання блока затримки

 

 

4.5. Перехід через нульовий рівень

Застосування блоків перетину нуля (блоки палітри Визначення переходів через нуль) найчастіше необхідно в гібридних моделях для непередбачуваних «подій». Наприклад, при моделюванні системи контролю рівня рідини в резервуарі в разі припинення, як тільки рівень перевищить певну величину. Також ці блоки визначають різкі зміни (скачки) сигналів. Ці явища можуть викликати помилки при використанні методів ітерації. Xcos, завдяки механізму виявлення моментів переходу через нуль, може виявити такі «події».

Для звичайних випадків в Xcos використовується блок перетину нуля. У деяких випадках, на додаток до встановлення факту перетину, необхідно знати напрямок перетину. З цією метою в Xcos є два інших блоку: блок «+ to –» і блок «– to +», які фіксують не тільки факт перетину, але і враховують напрямок цього перетину (рис. 2.16).

 

Рисунок 2.16 – Блоки перетину

 

Покажемо простий приклад діаграми Xcos щоб проілюструвати використання блоків нульового перетину.

Вище розглядалися годинники активації EventClock, які генерували послідовність рівномірно розташованих в часі «подій». Вони були використані, щоб активізувати SCOPE. Відкриємо порожнє вікно Xcos. Створимо таку модель, як на рис. 2.17.

Блок «+ to » знаходимо в палітрі Визначення переходів через нульS/H-блок (sampleandhold, збереження) – в палітрі Дискретні динамічні системи і cos-блок – в палітрі Математичні операції. Відзначимо, що блок CMSCOPE має 3 входи. Кількість входів CMSCOPE є параметром блоку; його потрібно встановити перш, ніж входи будуть приєднані.

Блок «+ to » генерує «подію» кожен раз, коли вхідний сигнал перетинає нульовий рівень, змінюючись від плюса до мінуса. Вхідний сигнал повинен бути безперервною функцією часу. Ці «події» активізують блок S/H, який копіює вхідний сигнал на свій вихід. Сигнал на виході не змінюється до наступної активації блоку.

 

Рисунок 2.17 - Приклад моделі з Event Clock

 

Результат рахунку показаний на рис. 2.18.

Рисунок 2.18 – Результати моделювання

 

Параметр амплітуди блоку генератора GENSIN_f встановлений 8.7. «події» з виходу блоку перетину нульового рівня були використані для генерації дискретних сигналів. Ці дискретні сигнали можуть бути використані для управління безперервними компонентами. Простий приклад наведений на рис. 2.20.

 

Рисунок 2.19 – Приклад моделі системи керування

 

Дискретний сигнал повертається в безперервну частину схеми. Відзначимо, що у генератора прямокутних хвиль вихідний порт зліва (в палітрі Джерела сигналів вихід у цього блоку праворуч). Це зроблено за допомогою використання команди Віддзеркалити в меню Формат. Цей блок видає на вихід 0 або 1, перемикання проводиться сигналом активації. Результат моделювання показаний на рис. 2.20.

Рисунок 2.20 Результати моделювання

 

4.6. Блоки з умовою

Основні функціональні блоки виконують задані обчислювальні функції, тоді як блоки з умовою управляють порядком обчислень в моделі. Ці блоки знаходяться у палітрі Обробка «подій». Вони можуть активізувати інші блоки в моделі Xcos при виконанні деяких умов. Найвживаніші блоки перевірки умов показані на рис. 2.21.

Рисунок 2.21 – Приклад блоків з умовою

 

Всякий раз, коли ці блоки отримують сигнал активації, вони в цей же момент формують синхронний сигнал активації на вихідному порту як функцію величини сигналу на їх інформаційному вході. Сигнали на виходах цих блоків взаємовиключні.

Щоб показати застосування блоку "If-Then- Else" розглянемо схему на рис. 2.22.

 

Рисунок 2.22 – Приклад моделі з використанням блоку "If-Then-Else

 

У блока Selector є два вхідних порту активації. Блок може бути активованим в даний момент тільки одним з них. Всякий раз, коли Selector активований за першим чи другим входом, вхідний сигнал приймається на вхід також з першого або другого інформаційного входу відповідно. Таким чином, на виході Selector присутній пилкоподібний сигнал, якщо сигнал Randomgenerator додатний, і прямокутний хвильової сигнал, якщо сигнал Randomgenerator від’ємний.

Якщо блок, "If-Then-Else" не має вхідного порту активації, він управляє блоками безперервного сигналу, які отримують активацію по інших кіл. В цьому випадку, чисельний вирішувач бачить тільки ті блоки, які знаходяться в активній гілки блоку " If-Then-Else ".

Блок «Eventseleсt» також вважається синхронним блоком. У нього є вбудований індикатор перетину нуля. Блок має один вхід і в будь-який момент активізований тільки один вихід

 

4.7. Дискретні системи

 

Блок є дискретним, якщо він активізований «подія»ми і таким чином генерує постійний сигнал. «події» не обов'язково повинні бути періодичними. Схема може бути сформована і виключно на дискретних блоках. Ці блоки знаходяться у палітрі Дискретні динамічні системи.

Розглянемо приклад на рис. 2.23.

Рисунок 2.23 – Модель системи з дискретними блоками

 

Тут блок 1/z (дискретна затримка) – регістр зсуву. Кожен раз, отримуючи сигнал активації, він відображає свій внутрішній стан на виході і змінює свій внутрішній стан відповідно до вхідного сигналу. Схема є лічильником. По кожному сигналу годинника стан збільшується на одиницю. В цьому випадку природно, що Scope відображає сигнал у вигляді точок, а не лінії. Це може бути зроблено за допомогою зміни параметрів Scope.

Результат моделювання для періоду годинника активації 2 секунди показаний на рис. 2.24.

 

Рисунок 2.24 – Результати моделювання системи з дискретними блоками

 

Відзначимо, що блоки цієї схеми активізуються тільки під час «події» за винятком блоку константи, який активізований постійно.

У загальному випадку блок без вхідних портів активації – або активний завжди, або успадковує час активації від вхідних сигналів. У цьому останньому випадку час активації є об'єднанням часу активації вхідних сигналів.

Блоки із змінним в часі вихідним сигналом, навіть якщо у них є входи, не успадкують час активації; вони просто активні завжди.

Створимо нову схему, зображену на рис. 2.25.

 

Рисунок 2.25 – Приклад моделі системи із змінним в часі вихідним сигналом

 

Блок Scope може успадковувати час активації. Вхідний порт активації цього блоку тому може бути видалений установкою відповідного блочного параметра. Результат в цьому випадку ідентичний попередньому.

Створимо нову схему (рис. 2.26). Для того, щоб побачити механізм успадкування в дії, в схему введені два незалежних джерела «подій». Період обох годинників дорівнює 2 с, але початковий час другого годинника встановлений 0.3 с (першого 0 с). Таким чином, у схемі є два незалежних генератора «подій».

 

Рисунок 2.26 – Приклад моделі системи з двома незалежними джерелами «подій»

 

В цьому випадку немає ризику виникнення невизначеності, оскільки дві незалежних «події» ніколи не відбуваються в один і той же час. Це обумовлено таким вибором параметрів годинників. При іншому виборі може виникнути невизначеність. Тому цей тип схем застосовувати не слід. Аналогічний результат може бути отриманий інакше, як це показано нижче.

Запустимо модель, отримаємо графік процесу (рис. 2.27). Відзначимо, що час активації Scope є суміщенням часу активації двох регістрів. Scope активізується в моменти 2n і 2n + 0.3 секунд, n = 0,1,2 ...

 

Рисунок 2.27 – Результати моделювання системи з двома незалежними джерелами «подій»

 

Розглянемо ще кілька простих схем. Як було сказано вище, якщо кожен блок активізується власним генератором «подій», наприклад, так, як це показано на рис. 2.28, то блоки не синхронні, навіть якщо обидва генератора «подій» налаштовані однаково.

 

Рисунок 2.28 – Несинхронні блоки

 

Результат моделювання для цієї блок-схеми в Xcos непередбачуваний. Ця ж схема при використанні SampleCLK виглядає, як на рис. 2.29.

 

Рисунок 2.29 – Блоки SampleCLK

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

У схемі, показаній на малюнку, обчислення тривіальні, оскільки обидва блоки мають ідентичні періоди. Еквівалентна схема наведена на рис. 2.30.

 

Рисунок 2.30 – Приклад блоків, які мають ідентичні періоди

 

У Xcos блок 1/z, подібно будь-якому іншому блоку, може працювати без вхідного порту активації, успадковуючи її зі свого основного входу. Наприклад, як на рис. 2.31.

 

Рисунок 2.31 – Приклад блоків без вхідного порту активації

 

 

Наступна блок-схема (рис. 2.32) є узагальненням цього принципу

Рисунок 2.32 – Узагальнена схема блоків без вхідного порту активації

 

Неперервна частина не буде успадковувати ніякої активації, оскільки вона і так завжди активна. Крім того, слід зазначити, що S/H блок тут не потрібен, оскільки вихід дискретної частини і без цього зберігає вихідну величину до наступної активації.

 

4.8. Використання Synchro-блоків

Отже не всі блоки моделі Xcos повинні активізуватися. Модель може мати два незалежних джерела активації, які управляють різними блоками. Інша ситуація виникає, коли активація необхідна в багатьох точках схеми.

Коли два блоки активовані одним джерелом активації (наприклад, одним генератором «подій»), кажуть, що вони синхронізовані. У цьому випадку, у них однакові часи активації, і якщо вихід кожного підключений до входу іншого, то компілятор знає, що блоки виконуються в правильному порядку. Два блоки, активовані двома незалежними годинами в один і той же час, не синхронізовані. Навіть при тому, що у цих годинників однакові параметри. Справа в тому, що вони можуть бути активовані симулятором в будь-якому порядку.

З іншого боку, два сигнали активації можуть бути синхронними, але не бути одночасними. Наприклад, моменти однієї активація можуть бути підмножиною моментів інший активації (активація з кратними частотами). В цьому випадку, частина «подій», сформованих тактовим генератором з більш високою частотою, одночасна з «подія»ми низькочастотного тактового генератора. Але і в цьому випадку обидва сигналу (з високою і низькою частотами) повинні бути породжені одним генератором, інакше вони будуть несинхронні. Отже необхідно переконатися, що низькочастотна активація отримана з високочастотної.

Розглянемо приклад (рис. 2.33). Тут блок синхронізації маршрутизує «події», що надійшли на вхідний порт активації між вихідними портами активації. Вибір вихідного порту активації залежить від величини сигналу на основному вході блоку.

Рисунок 2.33 – Приклад системи з блоком синхронізації

 

Блок If-then-else направляє сигнал активації (в цьому випадку він надходить з годинника) на один зі своїх вихідних портів активації. Якщо вхідний сигнал (тобто вихідний сигнал блоку Random generator), додатний, сигнал активації від годинника надходить в перший вихідний порт активації, в іншому випадку – в другий. Генератор шуму формує випадкову послідовність. Параметри блоку визначають статистичні властивості випадкової змінної. Блок генератора прямокутних хвиль видає свій сигнал на вихід, змінюючи свій внутрішній стан в момент активації.

Виберемо опцію Gaussian для шумового генератора. Модифікуємо параметри MScope, щоб отримувати 3 входу.

Результат для періоду годинника 2 з показаний на рис. 2.34.

 

Рисунок 2.34 – Результат моделювання

 

Розглянемо тепер цикл «подій» з умовою, наприклад лічильник, який зупиняється при нульовому результаті. Тут є певні проблеми.

Рисунок 2.35 – Приклад циклу «подій» з умовою

 

Компілятор видає повідомлення algebraic loop. Ця модель є неприйнятною, оскільки для вирішення, на який порт блок If-then-else повинен направляти сигнал активації, що надходить, потрібно знати величину виходу 1/z-блоку. Але цей вихід залежить від надходження «події» (або ненадходження) з If-then-else-блоку. Виникає невизначеність, яка називається алгебраїчний цикл (algebraic loop).

Може здатися, що 1/z-блок – це просто в деякому відношенні блок затримки і він повинен перервати цикл. Але це не так. Причина в тому, що функції 1/z-блоку реалізуються наступним чином.

Рисунок 2.36 – Структура 1/z-блоку

 

Зі схеми видно, що коли 1/z-блок активований, вміст пам'яті подається на вихід, а потім вхідний сигнал копіюється в пам'ять. Таким чином, немає безпосереднього зв'язку входом і виходом, а є між вхідним сигналом активації і виходом. Але для того, щоб перервати цикл, нам потрібно мати вихід MEMORY доступним за межами блоку. Це неможливо в даному блоці. Тому в останніх версіях Xcos є блок Counter.

 

Блок Event Clock є істотним елементом будь-якої моделі Xcos. Це скомпільований суперблок.

Створимо наступну схему (рис. ). Блок Delay знаходиться в палітрі Обробка «подій».

Рисунок 2.37 – Приклад системи з блоком Delay

 

Блок Delay має два параметри. Перший визначає затримку між «подія»ми, які надходять і виходять, другий – час початку генерації «подій». Якщо цей час від’ємний, то блок спочатку не генерує «події». Це означає, що модель залишається замороженою у часі. У багатьох ситуаціях установка часу початку генерації не потрібна.

Встановимо параметри блоку Delay (delay = 1 і initial firing time = 5) і запустимо модель. На рис. 2.38 видно, що зациклений блок затримки поводиться як EventClock.

 

Рисунок 2.38 – Результат моделювання

 

 

4.9. Ієрархія (суперблоки)

 

Модель, що складається з дуже великої кількості блоків, незручна, її важко запам'ятати, робота з нею і її налагодження ускладнені. Для великих систем корисно використовувати засоби створення ієрархічної моделі.

Створимо модель, показану на рис. 2.39.

Рисунок 2.39 – Приклад простої моделі

 

Розмістимо інтегратор і підсилювач в супер блоці, як на рис. 2.40. Для цього можна вибрати область, яку потрібно помістити в супер блок, у меню вибрати Змінити / Позначене у суперблок. Якщо в результаті вхідні/вихідні порти не видно, або розташовані вони неправильно – виконати кілька разів операцію Формат/Віддзеркалити. При необхідності відновити зв’язки суперблока з рештою моделі.

Рисунок 2.40 – Модель з суперблоком

 

Перевіримо склад супер блоку. Для цього зробимо подвійний ЩЛК на суперблоці. Він відкривається в новому вікні.

 

Рисунок 2.41 – Приклад суперблока

 

Вийдемо з суперблоку і запустимо модель Xcos. Отримуємо такий результат.

Рисунок 2.42 – Графіки роботи моделі з суперблоком

 

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

 

4.10. Створення нових блоків Xcos

Для того, щоб створити новий блок, нам потрібні дві функції. По-перше, функція сполучення, яка визначає графічні властивості, параметри і т.п. і ім'я функції, яка виконує обчислення, необхідні при моделюванні. Функція сполучення повинна бути функцією Scilab, функція обчислювального блоку може бути написана на CFortran або мовою Scilab.

Якщо розглядається блок простої дії (у нього немає стану) і він не має вхідних або вихідних портів активації, то він може бути реалізований з використанням C або Fortran-блоку в палітрі Функції, визначені користувачем. Ці блоки містять опис обчислювальної функції відповідно на C або Fortran.

Рисунок 2.43 - Блоки додаткових функцій користувача

 

Блок Fortran допускає зовнішнє завдання обчислювальної функції. Для того, щоб використовувати цей блок, необхідно мати компілятор f2c. Для МС Windows, необхідний Visual C ++. Компілятор f2c включений в пакет Scilab.

В параметрах блоку (рис. 2.44) можна задати розмірність вхідних та вихідних портів, параметри і ім'я обчислювальної функції.

 

Рисунок 2.44 – Приклад відкриття блоку

 

Показаний на малюнку блок матиме три скалярних входи і один скалярний вихід. Іменем обчислювальної функції буде forty.

Тепер Xcos автоматично генерує шаблон функції forty (виклики і оголошення). У нього можна вписати необхідну підпрограму.

 

Рисунок 2.45 – Приклад шаблону функції forty

 

Блок може бути використаний при створенні моделей. Іконка блоку може бути змінена через меню Format.

Блок на мові С створюється так само. Також і для блоку Scifunc, за винятком того, що використовуються вирази Scifunc. У разі Scifunc блок може мати як дискретні, так і неперервні стани.