Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Расчёт плотности нефтепродуктов по ГОСТ Р 50.2.076 - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Расчёт плотности нефтепродуктов по ГОСТ Р 50.2.076 (Макросы/Sub)
Расчёт плотности нефтепродуктов по ГОСТ Р 50.2.076
diehard71 Дата: Воскресенье, 29.10.2017, 14:35 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте,

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

Итак, есть стандарт. В нём приведены чёткие уравнения и алгоритмы расчёта плотности нефтепродуктов, в зависимости от температуры/давления. Вот примерная схема расчётов:

С этим вроде как всё ясно и понятно. Изначальная задача: вывести р15 из замеров топлива, находящегося в произвольном состоянии. На основании вышепривёдённых данных, родился следующий текст в VBA:
[vba]
Код
Function P_to_15(dens, temp, Optional p)
k0 = 613.9723
k1 = 0
k2 = 0
If IsMissing(p) = True Then
    p = 0
End If

old_dens = 0
new_dens = dens

Do Until Abs(new_dens - old_dens) = 0
    b15 = ((k0 + k1 * new_dens) / new_dens ^ 2) + k2
    Yt = 10 ^ -3 * Exp(-1.6208 + 0.00021592 * temp + ((0.87096 * 10 ^ 6) / new_dens ^ 2) + ((4.2092 * temp * 10 ^ 3) / new_dens ^ 2))
    old_dens = new_dens
    new_dens = (dens * Exp(-b15 * (temp - 15) * (1 + 0.8 * b15 * (temp - 15)))) / (1 - Yt * p)
Loop
P_to_15 = Application.Round(new_dens, 2)
End Function
[/vba]
И вроде бы всё хорошо. Но, не всё хорошо. Считает не правильно. В том же стандарте приводится пример для расчёта. Следуя которому - мною написанное даёт иные результаты. Вот пример:


Грубо говоря, при пересчёте из более высокой температуры в более низкую - плотность должна возрастать (что, как минимум, логично), а она - уменьшается. Другими словами: если при температуре +27, плотность солярки 840, то при +15 она должна быть +845, а не - 835.

Если взять конкретный пример: при t=27,3 плотность = 836,15
в результате первого приближения, при приведении к t=15 - формула должна выдать - 843,62, а она выдаёт - 827.31.... в чём собственно и состоит затык...

Прицепил файлик, в котором играюсь. Буду крайне признателен, если ткнёте носом в ошибку!
К сообщению приложен файл: p15-test_v2.xlsm(25Kb)


Сообщение отредактировал diehard71 - Воскресенье, 29.10.2017, 15:45
 
Ответить
СообщениеЗдравствуйте,

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

Итак, есть стандарт. В нём приведены чёткие уравнения и алгоритмы расчёта плотности нефтепродуктов, в зависимости от температуры/давления. Вот примерная схема расчётов:

С этим вроде как всё ясно и понятно. Изначальная задача: вывести р15 из замеров топлива, находящегося в произвольном состоянии. На основании вышепривёдённых данных, родился следующий текст в VBA:
[vba]
Код
Function P_to_15(dens, temp, Optional p)
k0 = 613.9723
k1 = 0
k2 = 0
If IsMissing(p) = True Then
    p = 0
End If

old_dens = 0
new_dens = dens

Do Until Abs(new_dens - old_dens) = 0
    b15 = ((k0 + k1 * new_dens) / new_dens ^ 2) + k2
    Yt = 10 ^ -3 * Exp(-1.6208 + 0.00021592 * temp + ((0.87096 * 10 ^ 6) / new_dens ^ 2) + ((4.2092 * temp * 10 ^ 3) / new_dens ^ 2))
    old_dens = new_dens
    new_dens = (dens * Exp(-b15 * (temp - 15) * (1 + 0.8 * b15 * (temp - 15)))) / (1 - Yt * p)
Loop
P_to_15 = Application.Round(new_dens, 2)
End Function
[/vba]
И вроде бы всё хорошо. Но, не всё хорошо. Считает не правильно. В том же стандарте приводится пример для расчёта. Следуя которому - мною написанное даёт иные результаты. Вот пример:


Грубо говоря, при пересчёте из более высокой температуры в более низкую - плотность должна возрастать (что, как минимум, логично), а она - уменьшается. Другими словами: если при температуре +27, плотность солярки 840, то при +15 она должна быть +845, а не - 835.

Если взять конкретный пример: при t=27,3 плотность = 836,15
в результате первого приближения, при приведении к t=15 - формула должна выдать - 843,62, а она выдаёт - 827.31.... в чём собственно и состоит затык...

Прицепил файлик, в котором играюсь. Буду крайне признателен, если ткнёте носом в ошибку!

Автор - diehard71
Дата добавления - 29.10.2017 в 14:35
KuklP Дата: Воскресенье, 29.10.2017, 19:21 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2340
Репутация: 479 ±
Замечаний: 0% ±

2003-2010


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Расчёт плотности нефтепродуктов по ГОСТ Р 50.2.076 (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!