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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

'Размеры захваченного массива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=2Do 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 Thendoub_int = res1 + (res2 - res1) * (arg_goris - y1) / (y2 - y1)End If End If

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

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

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

📎📎📎📎📎📎📎📎📎📎