программа симуляции вентилятора HVAC - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь создать простую программу, которая имитирует переменный вентилятор в системе отопления.Приведенный ниже сценарий только имитирует показания давления в воздуховоде (в дюймах водяного столба), основанные на запуске и увеличении вентилятора.Обычно вентилятор запускается и давление в воздуховоде будет равно нулю.Когда двигатель будет набирать обороты, давление в воздуховоде будет медленно расти каждые 10 секунд до значения .1 "WC каждые 10 секунд. Когда вентилятор имеет заданное значение давления в воздуховоде 1,5, программа генерирует случайное число в диапазоне от 1,3 до 1,7 доимитируйте вентилятор, зависший вокруг заданного значения. Надеюсь, это имеет смысл!

У меня такое чувство, что это могло бы быть написано намного лучше, но в простейшей форме:

import time
from numpy.random import seed
from numpy.random import randint

# seed random number generator
seed(1)

#generate random number to mimic fan hovering at setpoint
def ductRandStatic():
    value = randint(13, 17, 20)
    return value * .1

ductStaticStart = 0
ductStaticEnd = 1.5

#mimic fan ramping up to setpoint slowly
def startFan():
    static = ductStaticStart + .1
    time.sleep(10)
    if static < ductStaticEnd:
        static = ductRandStatic()
    else:
        static = static
    print(static)


while True:
    startFan()

По какой-то причине программа толькопечать Я думаю, что генератор случайных чисел ... Там, где я надеялся, он будет печатать значение каждые 10 секунд, имитируемое давление в канале ... [1.5 1.6 1.6 1.5 1.4 1.4 1.4 1.6 1.3 1.3 1.4 1.6 1.3 1.5 1.3 1.3 1.4 1.6 1.4 1.5]

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

У вас есть два этапа симуляции: запуск (фиксированная серия значений) и поддержание (ваше случайное отклонение).Код как таковой:

from time import sleep
from numpy.random import randint


def ductRandStatic():
    return randint(13, 17) * 0.1


delay = 10

for i in range(16):
    pressure = i * 0.1
    print(pressure)
    sleep(delay)

while True:
    print(ductRandStatic() )
    sleep(delay)

Вывод:

0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1.0
1.1
1.2000000000000002
1.3
1.4000000000000001
1.5
1.5
1.6
1.4000000000000001
1.4000000000000001
1.4000000000000001
1.6
1.4000000000000001
1.4000000000000001
1.6
1.4000000000000001
1.3
1.4000000000000001
1.3
1.3
1.5
1.3
^CTraceback (most recent call last):
  File "so.py", line 18, in <module>
    sleep(delay)
KeyboardInterrupt
0 голосов
/ 27 апреля 2019

Я думаю, что вы хотите избавиться от функции startFan() и переместить большую часть ее кода вниз в основной цикл, чтобы static мог запомнить ее значение:

# initialize to 0.1
static = 0.1

# mimic fan ramping up to setpoint slowly
while True:
    if static < 1.5:
        static = ductRandStatic()
    print(static)
    time.sleep(10)

Кроме того, ваш вызов randint() неверен - он должен принимать два целых числа, но вы пропускаете три.

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