Доступно и просто |
|
|
Связка OpenOffice Calc + Basic для инженерных расчетов. Часть 1 |
Макросы, диалоги и библиотеки (Basic) | |
Автор Алифанов Леонид (aka Albuquerque) | |
23.12.2009 г. | |
Производительность труда современного инженера зависит от эффективности использования им персонального компьютера. Навыки программирования — один из ключевых факторов эффективной работы инженера в большинстве приложений, от AutoCAD до офисного пакета. В статье речь пойдет о программировании расчетов, выполняемых по инженерным методикам, по алгоритмам ГОСТ, СНиП, СП, Eurocode и других аналогичных документов. Статья, в основном, будет касаться выполнения несложных инженерных расчетов строительных конструкций, однако все изложенное ниже применимо и к расчетам в других сферах деятельности: машиностроении, промышленной безопасности, экономике и финансах. Допустим, нужно выполнить сбор нагрузок, рассчитать прочность балки или узлового соединения элементов. Есть несколько способов для реализации задачи: I. Все расчеты выполнить вручнуюВзять чистый лист с рамкой, карандаш с ластиком (или авторучку с корректором), калькулятор, нормативный документ и сделать то, что нужно. Достоинства
Недостатки
II. Купить специальную программу или набор программ и выполнять расчеты с ее помощьюДостоинства
Недостатки
III. Скачать бесплатную программу или шаблонДостоинстваСовпадают с предыдущим способом, только не нужно покупать, тратя деньги, которые никогда не бывают лишними. Кроме того, тот или иной расчет бывает нужен эпизодически. Недостатки
IV. Написать собственную программу и выполнять расчеты с ее помощьюПоскольку вся статья и посвящена этому способу, то и достоинства с недостатками будут обсуждаться далее по тексту. Сразу можно отметить, что в этом случае не нужно тратить деньги на покупку готовых программ и время на поиск бесплатных. Расчетные приложения, как правило, простые, и их разработка требует в большей мере знания самого предмета, нежели программирования. В процессе разработки вы будете иметь возможность протестировать программу самостоятельно, а при возникновении ошибок - отследить причины и исправить их самостоятельно. Все описанные выше способы осуществления расчетов подтвердили свою жизнеспособность на практике и каждый, благодаря своим специфическим достоинствам имеет право на существование. Так как любой выполненный расчет, независимо от способа нуждается в проверке, то можно варьировать инструменты, используя один способ для проверки результатов другого. В чем писать расчеты?Существует большое количество языков и сред программирования. Выбор языка - не предмет обсуждения настоящей статьи; в основном, каждый пишет в том, в чем умеет. Какие приложения предпочтительней - самостоятельные, которые могут быть скомпилированы в исполняемый файл, или в виде расчетных шаблонов с использованием интерпретируемых языков? Основное преимущество последних - простота, скорость разработки и тестирования. Недостаток - кроме операционной системы нужен соответствующий пакет. Само по себе наличие пакета-«посредника» не является недостатком (например, для работы .exe файлов в Windows также необходимы скрытые от глаз пользователя библиотеки или соответствующая версия .NET Framework). Гораздо более серьезным осложнением является то, что большинство пакетов такого рода, во-первых, имеют чрезмерный для инженерной деятельности математический или оформительский уклон, во-вторых, стоят приличных денег. Одним из оптимальных по простоте и функциональности решений является MS Excel в составе пакета MS Office. Электронные таблицы используются для инженерных расчетов достаточно широко, на них написано много удобных и полезных инженерных шаблонов. Но хорошо проработанные экселевские шаблоны чаще всего не бесплатны: за рубежом цена их за штуку в среднем варьируется от $30 до $200. Легальная установка самого MS Office (не считая обучения) также требует материальных затрат, довольно существенных, особенно если покупать коробочные версии на существующие машины. Другой офисный пакет - OpenOffice.org - этого недостатка лишен, а все достоинства в части выполнения с его помощью расчетов присутствуют в полном объеме.
Многие инженеры, использующие электронные таблицы, настороженно относятся к VBA в Excel и, соответственно, к OpenOffice.org Basic в Calc. Негласные «правила хорошего тона» предполагают, что расчетный шаблон должен быть, по возможности, создан базовыми средствами программы без пользовательских функций и макросов. Сложно сказать, в чем причины такого предубеждения. Я полагаю, что, скорее всего, дело в пугающем стандартном предупреждении о возможных макровирусах, которое появляется при настройке на «средний уровень безопасности» и на подсознательном уровне не располагает связываться с макросами вообще. В результате для того, чтобы запрограммировать более или менее сложный расчет, инженеры вынуждены прибегать к ухищрениям вроде многоуровнего пересчета по формулам в скрытых ячейках. В таких случаях контроль за алгоритмом затруднен, часто приходится действовать на ощупь. Не говоря уже о трудночитаемом «коде» вида «$A$1/($B2*IF(IF(.....», ввести и проверить который бывает не так просто, а случайно повредить при правке легко. После многочасовых бдений за монитором и нескольких неожиданных «фортелей» с результатами я отказался от такого способа сочинения «правильных» шаблонов и окончательно остановил свой выбор на использовании макроязыка. Программа на мой взгляд должна не просто работать, а работать понятно, отлаживаться легко, а любая неточность в коде - мгновенно выхватываться и исправляться. Замечу также, что в тех случаях, когда большая часть расчета реализована и отлажена средствами языка OpenOffice.org Basic, не составляет труда «перевести» программу в отдельно работающее «оконное» приложение при помощи любого подходящего компилятора Basic, например FreeBasic . После того, как вопрос расчетной оценки той или иной величины будет вами решен, у вас появится возможность улучшать проектные параметры конструкций и узлов, например, с помощью надстройки нелинейной оптимизации. Как написать расчетный шаблон, с чего начать?Для начала достаточно запустить OpenOffice.org Calc, сохранить файл со своим именем, как .ods файл и нажать на клавиатуре [Alt+F11]. Появляется окно OpenOffice.org Basic Macros (рис. 1). Находим в окне Макрос из (Macro From...) свой файл и жмем Создать (New). Новый модуль, в котором будет содержаться требуемый код, по умолчанию - Module1, создан, и на мониторе появляется активное окно редактора кода, где собственно и будет работать программа (рис. 2). Объяснять по шагам, как начать программировать, я не буду, замечу только что доступной литературы по OpenOffice Basic достаточно для пользователя любого уровня. Более того, для начинающего сойдет литература и по VBA для Excel, особенно в части написания пользовательских функций (в свое время я начинал осваивать этот инструмент по экселевской «Библии»). Вот несколько видеоуроков, иллюстрирующих написание и работу простейших функций (для того, чтобы разглядеть детали, разверните видео на весь экран). Первый ролик - простейшая функция в одну строчку, не считая стандартного объявления функции, завершения и комментария. Переменные не объявляются, подразумевается тип Variant. Известно, что такой подход в ряде случаев может приводить к ошибкам интерпретации значения, но раз существует «универсальная» переменная, то где-то она должна быть использована? =2*B1*B4^3/12+2*B1*B4*(B2/2-B4/2)^2+B3*(B2-2*B4)^3/12 Более того, в данном случае возможен вариант, при котором можно было вбить формулу =2*b*t^3/12+2*b*t*(h/2-t/2)^2+s*(h-2*t)^3/12 непосредственно в ячейку, предложив программе самой распознать переменные и присвоить им соответствующие значения. Я не использую его никогда в своей практике - не люблю, когда программа "думает" за меня. Но все способы, тем не менее, работают, что и требовалась доказать. Рассмотрим другой пример. Тут требуется найти решение кубического уравнения, к которому сводится задача расчета оттяжки или кабеля, провисающего под поперечной нагрузкой. Само решение легко находится в wxMaxima. Выбираем нужный (вещественный) корень уравнения, выбираем в контекстном меню «скопировать как текст», копируем и вставляем в код функции. Маленькая правка (замена "sqrt" на бэйсиковское "sqr") - и функция готова. Меньше ручных операций - меньше вероятность ошибки (хотя проверка, в любом случае, не помешает никогда). Function BeamCalculation(q,L,Jx,Wx,Em) 'Возвращает результаты расчета балки в виде текстовой строки 'Изгибающий момент, кгс*м 'Напряжение, кгс/см2 'Прогиб балки, см 'Результат функции End Function
Функция округления Round(x,a) в VBA есть, а в OpenOffice.org Basic - отсутствует. Достаточно воспользоваться предложением Эндрю Питоньяка, чтобы создать свою. Function BeamCalculation2(array)
'Напряжение, кгс/см2 'Прогиб балки, см 'Создаем массив 3 х 3 для результатов res(1,1)="Изгибающий момент M = " res(2,1)="Напряжение = " res(3,1)="Прогиб балки = " BeamCalculation2=res End Function В целом, для написания пользовательских функций для инженерных расчетов никаких особых знаний и навыков программирования не требуется. Все, чем я обходился до сих пор в 95% случаев, это:
Допустим, что вы уже освоили простые функции на OpenOffice.org Basic, самостоятельно написали несколько собственных примеров и убедились в их работоспособности.
Для начала лучше ограничиться самым простым внешним оформлением шаблона, потому что оформительскую часть работы смешивать с частью, ответственной за конечные результаты крайне нежелательно.
Обсудить на форуме...
|
|
Последнее обновление ( 09.09.2012 г. ) |
След. » |
---|
MyOOo.ru, 2008 — 2024. Хостинг предоставлен компанией Netangels