Подготовка Mathcad-документа к работе на Mathcad Application Server

Подготовка Mathcad-документа к работе на Mathcad Application Server

Как правило, Mathcad-документы имеют структуру, состоящую из трех частей – ввод исходных данных, расчет и вывод ответа. Эти части нередко выделяют в три области – Areas, в которых возможны сепаратные действия – защита от редактирования (Lock-Unlock) и/или скрытие (Collapse-Expand).

Структура реального документа, как правило, не имеет четких границ между этими тремя областями. 

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

Пользователь может изменить значения переменных а и/или b и считать результат – значение переменной с, равной сумме а и b. Пользователь может также усложнить и развить этот документ – ввести новые переменные и формулы, построить графики и т.д. и т.п. Но это будет уже не пользователь, а разработчик (технология MAS четко делит людей на эти две категории). Первый этап подготовки документа и публикации на MAS – это выделение операторов присваивания (не только операторы := или ≡ (глобальное присваивание), но и так называемые Controls, введенные в Mathcad 2001), через которые будущий Интернет-пользователь может менять исходные данные. Эти операторы присваивания должны быть заменены на так называемые WebControls – «сетевые элементы интерфейса» (рис. 2.2), с аналогами которых читатель уже давно знаком, вводя информацию по различным Интернет-запросам или запуская приложения, созданные с помощью Visual Basic или Visual С или просто форматируя текст в Word.

WebControls

WebControls есть не у любой версии Mathcad, а только у Mathcad 11.1 Enterprise Edition (и выше; у автора на компьютере стоит Mathcad 11.2а – с диска была установлена версия 11.0, а «заплатка» 2а была «скачана» с сайта http://www.mathcad.com/download).

WebControls отличаются от своих несетевых аналогов (Controls – см. их список над словом WebControl в центре рис. 2.2, а также панель правее слова Go) главным образом тем, что для функционирования WebControls не надо писать или редактировать программы на языках, поддерживающих технологию Active Scripting (JScript и VBScript – см. рис. 2.15). Такие программы в сети нежелательны, т.к. через них в основном переносятся компьютерные вирусы. Из-за этого многие разработчики не вставляют в свои программы Controls, а по-прежнему используют только операторы := или ≡ . В среде Mathcad 2001i появилась возможность фиксации таких «скриптов» в открываемом документе, как это делается в среде Word или Excel. По этой причине можно рекомендовать вставлять WebControls не только в Mathcad-документы, подготавливаемые к открытию в сети, но и в обычные, несетевые. Следует только помнить, что Mathcad-документ с WebControls может работать только в среде Mathcad 11.2 Enterprise Edition – в самой последней (февраль 2004) и самой дорогой версии этого вычислительного пакета.

Документ после подготовки и публикации на MAS должен выглядеть так.

При открытии этого документа на MAS линии и комментарии, отмечающие границы областей, не будут видны. Но при необходимости их можно прописать комментарием – цепочкой тире, например, чтобы будущий пользователь расчетного документа, знал, что тут находится выделенная область. Целесообразно таким комментарием помечать скрытую область, где запрятан расчет

Границы областей, маркированных нами как «Исходные данные», «Расчет» и «Вывод ответа», как уже отмечено, на MAS не будут видны. Можно «захлопнуть» область «Расчет» и оператор с:= a + b не будет виден. Это очень важно – разработчик может скрыть от пользователя часть Mathcad-документа, опубликованного в сети, предоставляя возможность только счета. А можно, наоборот, открыть и выделить цветом наиболее интересные и важные части расчета, например, для проверки как самой методики расчетов так и исходных данных. Кстати, о проверке. Если в нашем примере на рис. 2.1 и 2.3 переменные а и/или b могут принимать значения только в оговоренных интервалах (0 < a < 3, например), то будет полезно вставить в Mathcad-документ некий «КПП» (контрольно-пропускной пункт: a := if(0 < a < 3, a, “Ошибка!”), блокирующий дальнейшие вычисления, если пользователь ненароком или специально ввел неверные исходные данные. Здесь важно не только правильно записать формулы, но и защитить документ «от дурака». Такие же «кпп» хорошо установить перед выводом ответа. Они должны блокировать вывод результата, если исходные данные дают несовместимое сочетание. Так по адресу http://twt.mpei.ac.ru/mas/worksheets/Calc_Q_VPU.mcd хранится программа расчета проектной производительности водоподготовки для электростанции, которая возвращает не число, а текст «Ошибка в данных!», если пользователь ввел ошибочное сочетание параметров проектируемой станции.

Название «Text box» не совсем правильное. Через этот элемент интерфейса можно вводить не только (и не столько) текстовые константы, но и числа – простые (как на рис. 2.3), так и комплексные (-5+3i, например). При этом приходится опираться на старую (DOS-овскую) запись формата чисел: не 103, а Е3 (е3). Если введенная строка символов не «похожа» на число, то она воспринимается как текст. В несетевом аналоге текстового окошка любая цепочка символов воспринимается как текст, который нужно было конвертировать в число функцией num2str из группы встроенных функции «String».

В первых трех случаях введенная информация воспринимается как числовая константа (число – простое или комплексное), а в четвертом – как текстовая константа (цепочка символов в кавычках).

Автором совместно с Томом Гудманом (Tom Gudman – tom_gutman@compuserve.com) разработана методика ввода через текстовое окошко (так и хочется сказать «игольное ушко») массивов (векторов и матриц), а также функций пользователя.

Первый оператор if в программе выбирает из введенной строки цифры 0…9 или (булевый оператор или V) точку с минусом

Цепочка символов, введенная в текстовое окошко, преобразуется в вектор с помощью пользовательской функции Str2VMat. При этом разделителями чисел в текстовом окошке могут быть любые символы, отличающиеся от 0…9, точки (десятичный разделитель) и знака «минус». В нашем случае разделителями чисел служат пробелы.

Матрицу можно ввести построчно или по столбцам, несколько усложнив метод, показанный на рис. 2.5, – вводя отдельные строки. Но если матрица квадратная и произвольного размера, то можно ввести ее в виде вектора размером n2, а затем «упаковать» в квадратную матрицу.

Таким же образом можно ввести и неквадратную матрицу, оговорив число строк и столбцов в ней.

Частично решена и проблема ввода через текстовое окошко функции пользователя. Сам алгоритм перевода текста в формулу довольно громоздок (его можно скачать тут ), и на рис. 2.7 не показан – спрятан в захлопнутой области (пояснения по вводу функций через текстовое окошко). Этот же алгоритм может быть использован и для ввода значения переменной не константой (1.25, например), а арифметическим выражением (45/12+11), включающим и ранее введенные и встроенные переменные (PI/4*d^2, например). Если необходимо, чтобы у пользовательской функции аргументы были собраны в вектор, то прибегают к дополнительному оператору f(X):=f(X0,X1,...). Так, к примеру, реализован расчет глобального минимума по генетическому алгоритму – см. http://twt.mpei.ac.ru/MAS/Worksheets/Minimum.mcd.

Частичность этого решения в том, что к данной функции нельзя применить символьную математику и использовать в ней переменные, заданные ранее, хотя список аргументов функции y можно изменять и расширять (см. пример по адресу http://twt.mpei.ac.ru/mas/worksheets/Fit_f_x_a_b_c.mcd /Fit_f_x_a_b_c.mcd).

Пример работы с функцией, введенной через текстовое окошко http://twt.mpei.ac.ru/mas/worksheets/F_X_Y_Plot.mcd. 

Очень полезной особенностью Mathcad является его работа с физическими величинами. 

Очень часто единицы измерения в расчетах фигурируют лишь как комментарии, а не множители, упрощающие и контролирующие сам расчет. Это связано с тем, что: 1) многие встроенные функции Mathcad не приспособлены к работе с размерными аргументами (см. статью по этому поводу – http://twt.mpei.ac.ru/ochkov/Unit_MC_MP/Unit_MC_MP.htm); 2) массивы (вектора и матрицы) Mathcad могут хранить только безразмерные величины или величины, одной физической величины – длина, давление и т.д. и 3) в расчетах фигурируют так называемые эмпирические формулы – формулы, где переменные связаны с конкретными единицами измерений, а не с физическими величинами. Если единица измерения (мг/л, например) фигурирует в расчете не как переменная, а как комментарий, то рекомендуется вставлять ее в расчет, как единичный коэффициент, завершающий оператор вывода числового значения – мг/л: = 1 C=25 ■ ← мг/л. В этом случае единица измерения станет «плавающей» – будет перемещаться оставаться на нужном месте при изменении длины выводимого числа (см. пример http://twt.mpei.ac.ru/mas/worksheets/Comp_procent.mcd). 

Если число вариантов ввода информации ограничено, то можно (нужно) ее вводить не через текстовое окошко (через клавиатуру), а через выбор из предложенного списка (мышкой). Мы это уже делали, прося пользователя не набирать единицу длины на клавиатуре, а выбрать ее из трех вариантов – m, mm и cm. Если в списке всего две позиции (да или нет – альтернативный вопрос), то обычно используют «галочку», три и более – радиокнопки и/или список. Список отличается от радиокнопок лишь тем, что в списке часть позиций может быть скрыта и выведена на экран прокруткой. (Если же из списка нужно выбрать не одну, а несколько позиций, то его заменяют на группу галочек – см. пример http://twt.mpei.ac.ru/mas/worksheets/Tests/Test_Cone.mcd). В принципе, галочки более универсальный инструмент, чем радиокнопки, хотя требуют более сложного программирования. В радиокнопках всегда должна быть активирована одна из кнопок, и этим как бы пользователю подсказывается одно из решений, которое может быть и ложным. Галочки же могут быть все пустыми, что оставляет пользователю полную свободу выбора. Кроме того, расстояние между галочками может быть любым и расположены они на листе могут в любом порядке, а не только вертикально как радиокнопки. Дополнительно можно запрограммировать так, что галочки будут перемешиваться перед каждым обращением к документу. Это также будет исключать какое-либо предпочтение при выборе варианта. Выбранных позиций в группе галочек может быть больше чем одной, что может быть задумано разработчиком при создании данной расчетной или проверочной методики.

Через диалоговое окно пользователь может изменить ширину самого текстового окошка и/или максимальную длину вводимого текста. При этом подчеркивается, что нажатие на клавишу Enter будет сигналом на передачу измененных данных на MAS. Повторяем, кнопка «Пересчитать может быть лишней. Но в этом случае не будет лишним вставить в документ соответствующий комментарий. Иначе пользователь может не дождаться ответа – глобус в верхнем правом углу браузера не будет крутиться.

В диалоговом окне форматирования галочки (рис. 2.12) есть собственная «галочка», «постановка» которой создателем MAS-приложения будет означать, что изменение в «галочке», поставленной в самом Mathcad-документе, будет тут же передаваться на MAS. Такие же галочки имеются и в диалоговых окнах форматирования радиокнопок.

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

Внимание! Элементы управления интерфейсом «Список» и «Радиокнопки» могут работать неправильно, если в них введены некоторые спецсимволы – символ градусов (°), например. Это относится (увы) и к буквам кириллицы. 

Программа (макрос), вшитая в Mathcad-документ, как отмечено выше, и была причиной отказа от Controls и перехода к WebControls. Из-за этого в списке WebControls не оказалось такого удобного элемента интерфейса как «бегунок» (Slider). Зато сетевые радиокнопки устроены более правильно, чем их несетевые аналоги. В несетевых элементах интерфейса нет радиокнопок, а есть радиокнопка. А это ошибка – радиокнопок может быть три и более, но никак не одна или две.

«Бегунок» удобен тем, что он позволяет мышкой выставить нужное значение переменной в заданном диапазоне и с заданной размерностью. Но бегунок можно сымитировать, отформатировав определенным образом список – оставив в окне только один элемент, а в таблице форматирования (Name – Value: записав нужное количество дискретных значений, присваиваемой переменной: 0.1, 0.11, 0.12…0.2.

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

В идеале можно (и нужно!) так спроектировать интерфейс для пользователя MAS, что он не будет касаться клавиатуры, а будет работать только с мышкой.

Мы говорили о том, что в сетевом Mathcad-документе, может и не быть кнопки Submit. Но в документ можно вставить и несколько таких кнопок, если документ объемный и исходные данные нужно менять в разных местах. В этом случае такие места нужно «отмечать» такой кнопкой Submit (пример с двумя такими кнопками показан на рис. 2.18). Хорошим решением будет разбивка расчета на отдельные блоки, окончание которых фиксируется кнопкой Submit. Расчеты по последующему блоку будут заблокированы до тех пор, пока пользователь не введет нужные исходные данные в предыдущих блоках, не проверит правильность решения и не нажмет очередную клавишу Submit.

Те, кто проектировал интерфейс пользователя на языках программирования (Visual C, Visual Basic, Delphi и др.), отметят, что интерфейс MAS довольно скудный. Мы уже отмечали, что там нет Combo box – окошка, совмещающего текстовое окошко и список. Не предусмотрена возможность «гашения» некоторых элементов интерфейса, если какая-либо переменная принимает определенное значение (частичное решение этой проблемы http://twt.mpei.ac.ru/MAS/Worksheets/Smart_Input.mcd) и т.д. Но здесь нужно принимать во внимание, что WebControls – это не разработка MathSoft, а стандартные средства передачи данных в Интернет, которые пока не очень богатые. Это некие заготовки (полуфабрикаты), которые можно доработать.

Можно скомбинировать текстовое окошко и список, и получить Combo box. Такое комбинированное окошко, сочетающее текстовое окошко и список, задействовано в документе по адресу http://twt.mpei.ac.ru/mas/worksheets/VPU_4_1.mcd – пользователь имеет возможность выбрать значения диаметра фильтра из списка (1.0, 1.5, 2.0, 2.6, 3.0 и 3.4 м) или ввести свое значение.

О комментариях

Все знают, что, составляя Mathcad-документ, нужно не лениться – не скупиться на комментарии: текстовые и графические вставки, не влияющие на сам расчет, но помогающие в нем разобраться не только другому человеку, но и самому разработчику.

Это правило требует существенной коррекции при подготовке Mathcad-документа к работе в сети. Дело в том, что объемный документ с большими графическими вставками будет «тормозиться» в сети. Поэтому основные комментарии (история создания документа, его подробное описание, инструкция по работе и др.) целесообразно поместить в отдельный (не Mathcad) документ (в html-файл, созданный в Word’е, например), а в самом Mathcad-документе поместить только минимум комментариев и ссылку на «большие», дополнительные комментарии, которые открываются в отдельном окне браузера. По этой же причине не рекомендуется перегружать Mathcad-документ сложными графиками. С другой стороны, следует помнить, что в Mathcad-документе, открытом на MAS, нет возможности мышкой вращать трехмерный график, например. Поэтому следует дублировать такой график в разных ракурсах. Другое решение: можно запрашивать углы ориентации графика вокруг осей и делать пересчеты перед выводом трехмерного графика на дисплей – см. пример на сайте http://twt.mpei.ac.ru/mas/worksheets/3D_Plot_Rotate.mcd.

Следует отметить, что технология MAS, предоставляя пользователю возможность доступа к операторам и функциям Mathcad, отсекает он него команды меню.

Публикуя документ в Интернете, следует думать и о его многоязычности. Для этого, во-первых, все комментарии можно продублировать на нескольких языках – по-русски, по-английски и т.д. Есть и другое решение – давать пользователю возможность выбора языка.

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

Разноязычные комментарии вводятся в вектор, элементы которого выводятся на дисплей в зависимости от выбранного языка (первый язык – первый элемент, второй язык – второй элемент и т.д.). Есть и третье решение – дать возможность пользователю открывать несколько вариантов одного расчета (несколько файлов) с комментариями и переменными (Vinput и Vвх, например) на различных языках. Так построены документы http://twt.mpei.ac.ru/mas/worksheets/Tests/Test_Cone.mcd и http://twt.mpei.ac.ru/mas/worksheets/Tests/Test_Cone_Eng.mcd, например.

И последнее. При открытии MAS-приложений в Интернете могут возникать проблемы с показом букв кириллицы не только в WebControls, но и в простых текстовых комментариях Mathcad-документов. Поэтому можно рекомендовать заменять текстовые комментарии именами переменных, где спецсимволы вставлены после взятия аккорда «Ctrl + Shift + j», помня о том, что их должен быть минимальное количество (см. выше). Здесь будет одно ограничение – нельзя использовать точку, т.к. она становится невидимой и выделяет последующую часть имени переменной в нижний индекс Vвх, например.

О вставках других программ

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

Список зависит от программ, которые установлены на компьютере. Mathcad-документ с «чужепрограммными» вставками можно размещать на MAS только после решения лицензионных вопросов с разработчиками соответствующих программ. Ведь программы приобретались для использования только на рабочей станции, а не для открытия в Интернете. Если вообще приобретались.

В Mathcad-документе, подготовленном для публикации в сети, могут быть сделаны Mathcad-вставки, дублирующие некоторые фрагменты расчетов. Дело в том, что часто у графика могут находиться операторы глобального присваивания переменным, значения которых «закидываются» в начало расчета. Глобальное присваивание, к сожалению, невозможно в Controls и WebControls. В этом случае приходится часть Mathcad-документа дублировать и скрывать этот дубль в захлопнутой области.

Об именах переменных и функций

При подготовке Mathcad-документа к публикации в сети может оказаться так, что имя переменной или функции, нормально работающее в среде Mathcad, дает сбой при открытии этого документа в сети. Обычно это случается, если используются русские буквы в именах. Вообще-то в именах объектов программирования русские буквы нежелательны не только в «работающих» именах переменных, функций, файлов и т.д., но даже и в комментариях (см. выше). Тем не менее, их приходится использовать особенно в специфических расчетах, где те или иные объекты уже давно получили русские имена и которым пользователи привыкли. У многих этих переменных есть латинские аналоги, но у некоторых нет. Если русские буквы необходимы в формулах, то можно посоветовать прием нивилирования «русскости» этих переменных. Автор заметил, что, например, переменные ч (час), мг-экв (миллиграмм-эквивалент) и некоторые другие – Ц. баз (базовая цена, где баз – это нижний текстовый индекс) при открытии Mathcad-документ в сети дают сбой – переменные «краснеют» с сообщением об ошибке «Переменная или функция не определена». «Подлечить» такие переменные можно, поставив первым их символом пробел. Вид переменной не изменится (она только чуть сдвинется вправо), а расчет восстановится. «Лечить» переменные также можно заменой (подправкой) их имени через команду Edit/Replace, проставив галочку у слова Math в диалоговом окне настройки замены. 

Следует помнить, что Mathcad по-настоящему поддерживает только латинские и греческие буквы. Наши хитрости, связанные с «лечением» покрасневших имен переменных, содержащих спецсимволы, (пробел в начале имени) не является документированным. Следовательно можно ожидать, что в новой версии Mathcad данный прием не будет работать. Если все же без русских букв не обойтись, то можно порекомендовать накрывать латинские «поганые» названия картинкой с русскими символами - см. совет 214 из книги «Советы пользователям Mathcad». Пример специальных переменных – http://twt.mpei.ac.ru/mas/worksheets/Spec_Var.mcd.

Проблема объемных исходных данных (Suggested solution for a large volume input data)

При работе с Mathcad-документом, открытым в сети на MAS или в самой оболочке Mathcad, может возникнуть проблема ввода большого изменяющегося массива данных (пример по адресу http://twt.mpei.ac.ru/mas/worksheets/Exp_Steam_K_300_240_LMZ.mcd, где пользователь должен просмотреть и при необходимости изменить значения в нескольких десятках текстовых окошках, прежде чем нажать на кнопку Recalculate). Ввод таких данных через обычные (Web)Controls (текстовые окошки) очень трудоемок и неудобен. При работе вне сети (в самой оболочке Mathcad) эта проблема обычно решается записью исходных данных файлом на диск и считыванием их в массивы Mathcad (функция READPRN и др.). При работе с MAS такая технология затруднительна, но можно рекомендовать другую. Пользователь перед тем, как работать с МАS, в электронных таблицах, например, готовит новые исходные данные.

После того, как данные готовы (это могут быть подправленные данные предыдущего сеанса связи с MAS, например, хранящиеся в архиве пользователя), они простым копированием (Ctrl+Insert – Shift+Insert) переносятся в «длинное» текстовое окошко Mathcad-документа, открытого в сети– в одно окошко или несколько, если длина копируемой цепочки символов превышает 256 знаков. После этого нажимается кнопка Submit (или клавиша Enter) и расчет ведется с новыми исходными данными. Если ответ также объемен, то можно порекомендовать выводить его не отдельными скалярными величинами, а таблицей, которую также можно скопировать из сетевого Mathcad-документа – перенести в документ пользователя для дальнейшего анализа и обработки. При этом следует помнить, что вертикальные и горизонтальные прокрутки объемных массивов (векторов и матриц) в сети не работают. Кроме того, там не будет возможности раскрытия составных массивов (Nested Array).

Предложенное решение проблемы архивации и ввода в сетевой Mathcad-документ объемных исходных данных в принципе должно быть встроено в MAS, и об этом автор сообщил разработчикам (см. п. 15 в Приложении «Содержание MAS…»). Во многих несетевых расчетных программах – приложениях Windows в меню File есть специальные команды (New [Project], Open [Project] и Save [Project]), позволяющие работать с архивом исходных данных, где эти команды показаны (меню и диалоговые окна одного приложения Windows-программы с именем расчета водоподготовительной установки, где данные по отдельным проектам (сеансам работы с программой) хранятся на диске в файлах с именами Sample1.rod, Sample2.rod, ... Sample8.rod). 

Готовя Mathcad-документ для публикации в сети, нужно решить вопрос о стартовых значениях исходных данных. Как правило, разработчик сетевого расчета, продолжая традицию Mathcad с его основным оператором интерфейса «:=», строит документ так, что в расчете даны некие типовые исходные данные, которые пользователь может (но не обязан!) изменить, отредактировать. С одной стороны, это удобно – можно сразу просмотреть расчет, ничего в нем не меняя или меняя отдельные данные. С другой стороны, это чревато и ошибками, связанными с тем, что пользователь может где-то не изменить нужные данные и получить неправильный ответ. Поэтому можно рекомендовать записывать в текстовое окошко, например, не стартовое (типовое) значение, а прочерк («–»), блокирующий расчет и требующий тем самым от пользователя обязательного ввода нужных исходных данных. По этой же причине можно рекомендовать использовать группу «галочек», а не список или радиоточки при организации выбора варианта исходных данных.