Перейти к содержанию
    

Работа с глобальными переменными в Simulink

Здравствуйте! 

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

Также подскажите как с помощью стандартных блоков симулинк сделать  "защелку"  выполнения определённого события , допустим при достижении  переменной значения более уставки выдавать на блок Switch сигнал включения вне зависимости от дальнейших значений искомой переменной. Можно конечно использовать  тригер (Set-Reset Flip-Flop) но хотелось бы более простого решения. 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Customer_Pow_el сказал:

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

при использовании блока Goto с указанием global  в параметре Tag visability, сигнал со входа блока Goto становится глобальным для всей модели, и его можно использовать в других местах этой модели с помощью соответствующего блока From

image.thumb.png.a529704a030685e82000265a0f0c1a3f.pngimage.thumb.png.aad6d354a1b3a0fe7123e98e37db8f3b.png

например можно передать таким образом сигнал между блоками, которые даже не соединены

image.thumb.png.ca8247168dd2964951af2800f2ebf128.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Customer_Pow_el сказал:

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

может подойти что-то вроде такой схемы

image.thumb.png.30449c8b23d950a3f63673f5a9aa05e1.png

первый график - сигнал и порог, второй график - моменты превышения порога, третий график - с учётом игнорирования всех дальнейших значений исходного сигнала

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! 

On 12/3/2022 at 5:02 PM, stealthisname said:

при использовании блока Goto с указанием global  в параметре Tag visability, сигнал со входа блока Goto становится глобальным для всей модели, и его можно использовать в других местах этой модели с помощью соответствующего блока From

попробовал, но мне выдает ошибку, при попытке перенести сигнал из подсистемы  "Goto/From connections cannot cross nonvirtual subsystem boundaries. The only exception is when a goto is connected to a state output port " 

 

Сам пока решил проблему с помощью двух MATLAB Function c глобальной переменной А, добавлением данной переменной Model Explorer и в блок Data Store Memory где можно задать ее начальное значение

Текст функции в подсистеме по условию if    

function Out  = fcn
%#codegen
global A;
A = 0;

Out = A;

  Текст функции на листе такой же, только само собой без  присвоения A = 0;

image.thumb.png.c0e46044cbd6a8e732674318ecbd079f.png

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

Может кто подскажет как  сделать то же самое только с "С Function"  т.к. в итоге хотелось бы получать кодогенерацию системы управления на С. 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выглядит как неправильное использование симулинка, если с ходу требуются блоки MATLAB Function, Data Store Memory, "С Function", If, If Action Subsystem и т. п. ИМХО

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/5/2022 at 3:56 PM, petrov said:

Выглядит как неправильное использование симулинка, если с ходу требуются блоки MATLAB Function, Data Store Memory, "С Function", If, If Action Subsystem и т. п. ИМХО

Как бы Вы рекомендовали решить проблему перехода режимов работы регулятора по разным условиям, плавного пуска, срабатывания защиты и фолтов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Customer_Pow_el

Не рекомендовал бы "рисовать программу", валить в одну кучу разработку алгоритма и кодогенерацию. Вот в примере stealthisname сразу очевидно что происходит, а у вас нет. Логическое управление стоит представлять в виде простейших конечных автоматов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...