Pull to refresh
40
0
Тимофеев Константин @timofeevka

Программист

Send message

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

У нас в 3В Сервис из разработчиков нашей системы SimInTech программистов по образованию нет: все инженеры, по ядерным энергоустановкам, баллистике, робототехнике. И людей учить в основном приходится нам лично. Интересно, приходят ли к вам люди с хоть более менее профильной подготовкой после ВУЗа?

Сейчас мне отдадут все последние разработки по каталогу и я всё выложу

Ну вообще да, надо бы на сайт новости класть нам почаще.

Понял, спасибо ! Завтра пришлю.

А давайте я вам пришлю одну дискретно событийную модель транспортного потока с диаграммами Харелла и ссылку на статью иностранную одну по данным которой эта модель и строилась. Интересно было бы сравнить способ реализации.

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

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

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

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

В общей части подсистемы моделирования входо-выходных моделей метода трапеций нет, но есть более точный метод Гира из неявных. Результат следует сравнивать вам или с методом Гира или с Адаптивный 1, 3 . Список методов доступен по нажатию кнопки параметров расчёта на схемном окне. Разные графики при перемешивании как раз и отображают разные задержки на шаг в разных вариантах. Дело в том что интеграторы при непрерывном моделировании должны являться приоритетными блоками. Т.е. они свой выход формируют первыми, потом от них по цепочке пересчитываются функции, потом, для всех интеграторов вычисляются производные зависящие от входов, потом эти производные поступают в метод интегрирования и с него проинтегрированные величины идут на выходы интеграторов, потом цикл повторяется.

Т.е. схема расчёта в общем такая:

X=Xo

While(1) {

Расчёт выходов блоков

Y = Fouts(X)

Расчёт производных

X' = Fderi(Y)

Интегрирование непрерывных частей

X = X + X' *h;

}

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

У вас судя по коду метод трапеций используется. Посмотрите какой метод стоит в simintech в настройках расчёта проекта и сделайте такой же

А вы шаг у себя в модели и SimInTech сделайте побольше и разницу увидите скорее всего. Тут вот в чём дело: к примеру я могу работать с неотсортированной моделью и выполнять её в произвольном порядке имея при этом неявные задержки на шаг непонятно где. Но при этом даже если я получу устойчивое решение (а могу и не получить), то скорее всего мне придётся для как раз обеспечения устойчивости на шаге интегрирования пересчитывать схему не один а два раза. Вообще автоматный подход и непрерывное моделирование - это принципиально 2 разных способа моделирования. При этом я на классическую непрерывную схему моделирования, когда модель рассматривается как функция X' = F(X, u) могу натянуть и условное исполнение и конечные автоматы и дискретную логику (внутри самой функции). Автоматный же подход который вы продвигаете подразумевает, что схема разделена на независимые "параллельно" исполняемые компоненты, которые взаимодействуют друг с другом через передачу сигналов от входа к выходу. Соответственно в такой схеме я к примеру согласованно обеспечить контроль точности интегрирования и итерационный процесс, если у меня решение не сходится, по ВСЕЙ модели не смогу. Что внутри SimInTech, что внутри Simulink метод интегрирования дёргает вызов общей функции F(x, x') внутри которой уже по отсортированной модели идёт последовательный её пересчёт - т.е. вызов для каждого блока исполняемого кода. Поэтому способ моделирования должен выбираться соответственно решаемой задаче. Наличие сортировки модели и элиминация задержек на шаг интегрирования позволяет устранить численную неустойчивость и увеличить шаг интегрирования, и соответственно сократить время решения задачи на ЭВМ.

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

А да: уберите тег "инженерные системы", обычно под этим имеют в виду водопровод , канализацию и электрические сети.

А как у вас с лицензиями то? Или пиратку узаконили официально?

По GUI : в SimInTech графическая оболочка совмещает в себе сразу функции scada и рисования гуя. Собственно используя только саму оболочку без плагинов делали видеокадры для тренажеров АЭС успешно. Инструкция есть в справке по программе.

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

В SimInTech от флажка меняется только физическое время расчёта, но никак не результат. Он для этого и нужен. Этим модель отличается от управляющего контроллера для которого данные идут с физических устройств. Но этот уже другая схема моделирования : hardware in the loop

Ну так если у вас один поток и при этом нет воспроизводимости значит что то явно сделано не то (скорее всего с начальными условиями). Ну я пока вижу, что данная вычислительная модель не для всего пригодна. Как бы в структурных схемах вполне однозначно описано как их считать. Вообще при моделировании никому не интересны как правило быстрые переходные процессы в логических элементах. А когда интересны, то модели используют с учётом их физики (ёмкости затвора к примеру). Например никого не волнует внутреннее устройство rs триггера, а волнует только логика его работы, которая задаётся вполне однозначно и вполне однозначный результат даёт. Мне просто думается, что применённый вами подход как минимум неоднозначен и приведенную задачу им просто решать нельзя. А главное : а зачем вам системный таймер при моделировании? Он у вас что влияет на результат расчёта? Тогда как бы это не математическое моделирование уже несколько, а скорее имитационное, и что оно имитирует неочевидно.

Я извиняюсь, что не посмотрел ваш возраст в профиле. Думал что спорит студент очередной. Просто какие именно проблемы возникают при параллельном расчёте двух систем я в курсе. Везде где это возникает принимают меры по устранению невоспроизводимости, к примеру в тренажёрах или комплексных моделях делают строго последовательную запись данных в ячейки которые потом являются входами для других моделей с буферизацией. Насколько я понимаю ограничение кванта в 1 мсек у вас идёт от разбиения на потоки в ОС? Если это так, то ни о каком параллельном расчёте сразу всех блоков говорить не приходится.

Юмора не понимаешь, что ли? Своё я сам и доработаю, но список пожеланий приветствуется.

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

сортировка блоков параллельной среде не нужна в принципе - это качественное свойство параллельных процессов.

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

По результатам моделирования: нас заказчики за невоспроизводимость при ПАРАЛЛЕЛЬНОМ расчёте вполне себе нагнули когда-то давно и пришлось меры применять правильные чтобы сделать режим когда её не возникает.

Невоспроизводимость тут это свойство реализации в вашей системе. Её надо убрать. Задержки на шаг надо убрать. Индикацию где эти задержки могут возникнуть сделать. Нам заказчик на букву А за задержки на шаг предъявлал когда-то, тоже принимали меры чтобы их избежать и указать путём модификации сортировки модели.

Примеры приведите, где применяли программу свою ? Мне странно что подобные вопросы не возникали.

Сортировку модели подпили опциональную, ковбой, а то у тебя образуются неочевидные задержки на шаг интегрирования. Сумматор - это оператор сложения с весовыми коэф-ми. Код его выполнен в dll в виде соответствующего класса. Если уж охота описать схему что она вообще совсем параллельная, то в списке блоков их порядок выполнения достаточно перемешать в случайной последовательности. Но это надо на каждом шаге проделывать. Только это неправильно для описания непрерывных систем. Т.е. на большом шаге интегрирования получатся искажения которых нет реально и считать тебе придётся с очень мелким шагом. По факту такой способ расчёта как сделано в ВКПа для реальных живых АСУТП и моделирования систем непригоден.

Information

Rating
Does not participate
Location
Раменское, Москва и Московская обл., Россия
Date of birth
Registered
Activity