Макросы, диалоги и библиотеки (Basic)

Связка OpenOffice Calc + Basic для инженерных расчетов. Часть 2 Печать
Макросы, диалоги и библиотеки (Basic)
Автор Алифанов Леонид (aka Albuquerque)   
30.12.2009 г.

Это продолжение статьи. см. часть 1. Во второй части рассматриваются вопросы оформления, отладки расчётов и прочие вопросы, с которыми может столкнуться инженер.

 

Оформление расчетного шаблона

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

 

Весьма желательно отделять часть листа с исходными данными от результатов, по тому же принципу, по которому оформлялись школьные задачи по физике ("дано", "решение"). Подход к оформлению, при котором изменяемые и неизменяемые ячейки оказываются беспорядочно разбросанными по всему листу и маркируются определенными цветами, на мой взгляд, менее удачен.

В случае, когда вводимые данные - детерминированные (например, обозначение профиля из сортамента, расчетный случай и т.д.), лучше всего оформлять соответствующие ячейки в виде выпадающего списка (элементы вводятся в диалоговом окне Проверка вводимых значений, меню "Данные" > "Проверка..." > "Критерий" / "Допустимый тип данных" > "список").

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

Как быть с формулами? Как проверяющий поймет, что вы насчитали? Можно ограничиться поясняющей надписью со ссылкой на источник. Например, «коэффициент такой то, по формуле ... СНиП...». Можно набрать методику в OpenOffice.org Writer в отдельном файле, который сохраняется и распечатывается вместе с данным расчетом (можно скопировать методику из Стройконсультанта). Формулы с отображением «этажей» можно не только набирать в OpenOffice.org Math, но и, например, копировать из wxMaxima, как изображение.

Если расчет основан на функциях OpenOffice.org Basic, то можно даже распечатать и приложить к расчету хорошо структурированный и закомментированный код.

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

Отладка расчетов в электронных таблицах

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

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

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

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

Некоторые частные вопросы

Размерности физических величин

На практике размерности физических величин могут отличаться от единиц СИ. Так повелось, что площадь сечений прокатных профилей удобней указывать в квадратных сантиметрах, в качестве единиц силы многие используют по старинке тонн-силы, для напряжений, вместо паскалей и килопаскалей, - килограммы на квадратный сантиметр, длины и катеты сварных швов измеряют в миллиметрах и так далее. OpenOffice.org Basic и OpenOffice.org Calc никаких специальных настроек для размерностей не содержит, поэтому, создавая расчетный шаблон, вы сами должны понимать, в чем измеряются те или иные переменные в ваших расчетах.

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

' Перевод из см³ в м³
Wx=Wx*1e-6

 

Окончательный результат - напряжения в кгс/см² переводите из кгс/м².

' Перевод напряжений из кгс/м² в кгс/см²
sigma=sigma*1e-4

Скорость исполнения кода функций

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

Двойная интерполяция?

Многие необходимые для расчета коэффициенты приводятся в нормативных документах в форме двухмерных таблиц, в связи с чем для расчета нужно иметь соответствующую функцию. Допустим, сама таблица вбита вами в ячейки рабочей книги (как вариант, скопирована из электронной копии нормативного документа). Можно использовать некоторую функцию, которая «забирает» всю таблицу как массив (плюс два значения, при которых разыскивается искомая величина) и возвращает скаляр. См. видео с этой функцией.

Function doub_int(InArray, arg_vertic, arg_goris)
' Двойная интерполяция таблицы, занесенной в Рабочую Книгу
' (первые строка и столбец выделенного массива данных содержат аргументы
' табулированной функции в возрастающем свержу вниз и слева направо порядке;
' верхний левый элемент - нуль

 

'Размеры захваченного массива
num_of_rows = UBound(InArray, 1)
num_of_cols = UBound(InArray, 2)

'Если не выполняются необходимые условия - значение не определено
doub_int ="n/a"

'Условия для аргументов и алоритм интерполяции
If arg_vertic >=InArray(2,1) And arg_goris >= InArray(1,2) And arg_vertic<=InArray(num_of_rows,1) And arg_goris<=InArray(1,num_of_cols) Then
i=2
j=2
Do
x1 =InArray(i, 1)
x2 =InArray(i + 1, 1)

i = i + 1
Loop Until arg_vertic >= x1 And arg_vertic <= x2
Do
y1 =InArray(1, j)
y2 =InArray(1, j + 1)
j = j + 1
Loop Until arg_goris >= y1 And arg_goris <= y2
i = i - 1
j = j - 1
a1 =InArray(i, j)
a2 =InArray(i, j + 1)
a3 =InArray(i + 1, j)
a4 =InArray(i + 1, j + 1)

If x2-x1>0 Then
res1 = a1 + (a3 - a1) * (arg_vertic - x1) / (x2 - x1)
res2 = a2 + (a4 - a2) * (arg_vertic - x1) / (x2 - x1)
End If

If y2-y1>0 Then
doub_int = res1 + (res2 - res1) * (arg_goris - y1) / (y2 - y1)
End If
End If

End Function

Перенос строк в текстовом отчете

Выше был рассмотрен пример с выдачей значения функции в виде подробного текстового отчета с результатами. Отчет можно сделать многострочным (когда каждое новое значение с пояснением переносится на новую строку), используя константу vbCrLf в теле строковой переменной. В этом случае модуль с пользовательской функцией следует пометить заголовком Option Compatible.

Также в отчет вполне могут быть вставлены специальные символы - буквы греческого алфавита и т.д. (например вместо "sigma" - σ). Символы можно скопировать извне (в MS Windows - «Таблица символов», стандартные программы).

Ссылки и примеры

Некоторые пользовательские функции для расчета металлоконструкций и калькуляции нагрузок по строительным нормам вы можете найти на OpenOffice.org Templates. Ниже приведен перечень ссылок на шаблоны, которые я выкладываю в общий доступ под лицензией GNU GPL v3. Вы можете скопировать код функций из перечисленных шаблонов и использовать его для обучения и практической деятельности.

 

Обсудить на форуме...

Последнее обновление ( 09.09.2012 г. )
 
« Пред.

Главная arrow Макросы в Calc arrow Связка OpenOffice Calc + Basic для инженерных расчетов. Часть 2

MyOOo.ru, 2008 — 2024. Хостинг предоставлен компанией Netangels