Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Моделирование / Системно-динамическое моделирование в среде Powersim.pdf
Скачиваний:
168
Добавлен:
02.06.2015
Размер:
2 Мб
Скачать

2.3.4 Функции Powersim и Stella (iThink)

В Stella/iThink и Powersim много общего как в отношении диаграммной техники (в Stella/iThink более простой интерфейс), так и в описании функций (см. табл. 2.12 для различающихся функций).

Таблица 2.12 Сравнение обозначений в Stella/iThink 5.0 и Powersim

Stella/iThink 5.0

Powersim 3.5с

A % B

A MOD B

ARRAYMEAN(A[*])

ARRAVG(A) или ARRAVG([A1,A2,...,AN])

ARRAYSTDDEV(A[*])

ARRSTDDEV(A) или ARRSTDDEV([A1,A2,...,AN])

ARRAYSUM(A[*])

ARRSUM(A) или ARRSUM([A1,A2,...,AN])

CAP(Печь), CAP(Конвейер)

Печи и конвейеры не встроены в Powersim, но могут

быть смоделированы явно.

 

CGROWTH(A*100%)

RAMP(A,0)

COOKTIME(Печь)

Печи не встроены в Powersim, но могут быть

смоделированы явно.

 

COUNTER(A,B)

A+(TIME MOD (TIMESTEP*B))

DELAY(Вход, Длительность,

DELAYPPL(Вход, Длительность, Начальное

Начальное значение)

значение)

DT

TIMESTEP

FORCST(In, LT, FT)

FORCAST(In, LT, FT)

INT(X)

FLOOR(X)

LOG10(X)

LOG(X) или LOG(X, 10)

LOGN(X)

LN – натуральный логарифм X

MEAN(X, ...)

AVG(X, ...)

MOD(A, B)

A MOD B

MONTECARLO(P)

IF(RANDOM(0,100)>P,1,0)

OSTATE(Печь)

Печи не встроены в Powersim, но могут быть

смоделированы явно.

 

PAUSE

PAUSE(TRUE) или PAUSE(1)

POISSON(Среднее)

POISSON(Среднее * TIMESTEP) / TIMESTEP

QELEM(Очередь, Элемент)

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

массивы.

 

QLEN(Очередь)

Длина очереди является выходным параметром

функции QUEUE.

 

 

Доля возврата (в %) продукции из текущего

REWORK(A*100%)

резервуара (уровня) в предыдущий может быть

 

смоделирована явно.

SMTH1(Вход, Длительность,

DELAYINF(Вход, Длительность, 1, Начальное

Начальное значение)

значение)

SMTH3(Вход, Длительность,

DELAYINF(Вход, Длительность, 3, Начальное

Начальное значение)

значение)

SMTHN(Вход, Длительность, N,

DELAYINF(Вход, Длительность, N, Начальное

Начальное значение)

значение)

SUM(X, Y, Z...)

X+Y+Z+...

SWITCH(A, B)

IF(A > B, 1, 0) или (A > B)

В отличие от Powersim в Stella/iThink предусмотрено несколько типов переменных уровней (запасов): Reservoir (Резервуар), Conveyors (Конвейер), Queues (Очередь) и Ovens (Печь). Переменная уровня из Powersim соответствует Резервуару в Stella/iThink. Другие типы переменных уровней можно явно смоделировать при помощи комбинаций функций

79

Powersim. Например, конвейер можно смоделировать при помощи диаграммы, представленной на рис. 2.27:

Вход_на_конвейер Конвейер Выход_с_конвейера

Время_движения_по_конвейеру Начальная_загрузка_конвейера

Рисунок 2.27 Потоковая диаграмма для конвейера

Данная диаграмма описывается следующей системой уравнений:

Уравнения уровней

level Конвейер = Начальная_загрузка_конвейера -dt*Выход_с_конвейера +dt*Вход_на_конвейер

Уравнения темпов

aux Вход_на_конвейер = ...

aux Выход_с_конвейера = DELAYPPL(Вход_на_конвейер, Время_движения_по_конвейеру, Начальная_загрузка_конвейера)

Константы

const Время_движения_по_конвейеру = ...

const Начальная_загрузка_конвейера = ...

Очередь в Powersim можно смоделировать при помощи функции QUEUE (см. пример для функции QUEUE в п. 2.4.7). Печь можно смоделировать следующим образом:

 

Ïå÷ü

 

Заполнение

 

Опустошение

Скорость_заполнения

Состояние

Скорость_опустошения

 

 

Начало_заполнения Переход_состояния Начало_опустошения

Начало_выпечки Вместимость_печи

 

Таймер

Запуск_таймера

Прошедшее_время

Время_выпечки Время_заполнения

Рисунок 2.28 Потоковая диаграмма для печи

80

Данная диаграмма описывается следующей системой уравнений:

Уравнения уровней

init

Печь

=

0

flow

Печь

=

-dt*Опустошение

init

+dt*Заполнение

Таймер

= Время_заполнения

flow

Таймер

= -dt*Прошедшее_время

+dt*Запуск_таймера

Уравнения темпов

aux Заполнение = IF(Состояние(1),Скорость_заполнения,0) aux Опустошение = IF(Состояние(3),Скорость_опустошения,0) aux Начало_выпечки = Состояние(1) AND ((Таймер<=0) OR

(Вместимость_печи<=Печь))

aux Запуск_таймера = PULSEIF(Начало_заполнения,Время_заполнения- Таймер)+PULSEIF(Начало_выпечки,Время_выпечки-Таймер)

aux Начало_заполнения = Состояние(3) AND (Печь<=0) aux Начало_опустошения = Состояние(2) AND (Таймер<=0) aux Переход_состояния = SHIFTCIF(Начало_заполнения OR

Начало_опустошения OR Начало_выпечки, Состояние)

Константы

dim Состояние = (1..3)

const Состояние = [1,0,0]

const Время_заполнения = ...

const Скорость_заполнения = ...

const Скорость_опустошения = ...

const Время_выпечки = ...

const Прошедшее_время = ...

const Вместимость_печи = ...

81

Соседние файлы в папке Моделирование