10 марта 2011 г.

Переезд сайта

Сайт переезжает и будет находиться по адресу http://pml.dabacon.ru/ . Помещайте новый сайт в закладки.
Вся информация будет располагаться там. Здесь сообщения дублироваться не будут

7 марта 2011 г.

Пример редактирования атрибутов

Задача: выгрузить в формат Excel (.csv) элементы типа EQUI для редактирования атрибута Descirpition. После редактирования (в Excel) загрузить информацию обратно, так чтобы соответствующему элементу рписвоилось соответствующее значение атрибута.

Решение: состоит из двух частей - коллекция и запись в файл и считывание файла и запись атрибута

Часть первая (код первого макроса): собираем все элементы типа EQUI внутри текущего элемента --> формируем массив для вывода во внешний файл --> выводим в файл, затем файл редактируется средствами Excel

--собираем коллекцию
VAR !allEqui COLLECT ALL EQUI FOR CE
--запускаем цикл для формирования массива данных на вывод
--разделитель - точка с запятой для того, чтобы Excel авоматически разбил по столбцам
do !x from 1 to !allEqui.Size()

 !outputArray[!x] = !allEqui[!x].Dbref().Name + ';' + !allEqui[!x].Dbref().Desc

enddo

--формируем файл
!fileName = 'c:\equips.csv'
!fileObj = OBJECT FILE(!fileName)
--записываем информацию
!fileObj.Writefile('OVERWRITE',!outputArray)

8 февраля 2011 г.

Пример использования коллекций. Обработка модели

Задача: были созданы несколько трубопроводов (PIPE), однако не задавался атрибут Bore (диаметр). В именовании трубопроводов присутствует обозначение диаметра, в качестве первого блока (до знака минус), например /100-B-1 (здесь 100 - основной диаметр линии). Необходимо найти диаметр по части имени и присвоить это значение атрибуту Bore элемента Pipe. Вторая часть задачи: добавить найденные элементы на экран и задать временный цвет согласно схеме
Диаметр-цвет: 40-BLUE,80-RED,100-GREEN,150-YELLOW,200-GREY,250-DARKBROWN

Решение: делаем запросы к базе на предмет нахождения элементов типа PIPE, далее запускаем
цикл, в цикле обрабатываем каждый элемент на предмет нахождения диаметр (функция .Before(), .After()), присвоения атрибута Bore в найденное значение, учитывая что это должно быть число, вывод на экран и раскраской согласно указанной фильтрации

7 февраля 2011 г.

Сообщения пользователю. Часть 1

Для того, чтобы сделать ваши интерфейсы более интерактивынми и дружелюбными к пользователю, необходимо предусматривать систему сообщений.
Возможно использовать несколько видов сообщений:
1.Так называемые Алерты - всплывающие окошки с сообщением, а также Алерты с предложением простого действия и диалога
2.Сообщение в нижней статусной строке
3.Сообщениея в верхней статусной строке

В данной статье рассмотрим работу с Алертами.
Их бывает несколько видов.
Первый тип: информационные сообщения:

!!Alert.Error('Это сообщение об ошибке!')









6 февраля 2011 г.

Пример работы с коллекцией

Пример именования элементов согласно определенным правилам.

Задача: необходимо найти все элементы типа VALV, у которых в наименовании есть слово 'Задвижка' и присвоить каждому уникальный идентификатор, базирующийся на атрибуте Styp из спецификации + номер суффикса.

Решение:
--сначала проверяем уровень иерархии для которого нужно вести поиск
--и если это не ZONE с атрибутом Purp=PIPE, тогда останавливаем выполнение
if (!!CE.Type NEQ 'ZONE' AND !!CE.Purp NEQ 'PIPE') then
  !!Alert.Message('Перейдите на зону с трубами')
   RETURN
endif

4 февраля 2011 г.

Работа с графикой. Часть 2

Методы указания характерных точек или линий элементов:

1. Указание P-точек.
В отличии от обычной команды указания элемента, команда указания точек используется только в виде запроса:
Q IDP @
после выполнения команды система переходит в режим ожидания указания P-Точки

3 февраля 2011 г.

Работа со строками. Часть 1

Некоторые приемы работы со строковыми переменными.

Исходная строковая переменная:
!stringVar = 'Задвижка клиновая с выдвижным шпинделем # 30c41нж/30нж41нж'

Пример 1. Отделение части до определенного символа или выражения

!resultVar = !stringVar.Before('#')
В результате в переменную !resultVar запишется значение 'Задвижка клиновая с выдвижным шпинделем ', то есть то, что находится до значения, указанного в качестве параметра метода.
Применяется метод .Before('СТРОКОВОЕ_ЗНАЧЕНИЕ')
NB: пробелы тоже считаются 


Работа с графикой. Часть 1

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

Синтаксис:
после выполнения этой команды система переходит в режим ожидания, когда пользователь выбрет на экран элемент (любой). После выбора элемент станет текущим в иерархии.
ID @
Разновидности синтаксиса:

ID ТИП_ЭЛЕМЕНТА @
явное указание какой тип элемента должен быть выбран. Система будет находиться в режиме ожидания пока не будет выбран корректный тип элемента.

1 февраля 2011 г.

Работа с файлами. Часть 1

Основные задачи работы с файлами заключаются в следующем:
- обработать набор директорий
- открыть и прочитать содержимое файла (целиком или построчно)
- произвести поиск по содержимому и обработать данные
- записать информацию файл (создав новый или добавив в существующий)

Вот несколько приемов работы с файлами.

Пример 1. Открыть файл с определенным именем и считать информацию в массив

--определяем имя файла в строковой переменной
!fileName = 'C:\test.txt'
!fileObj = OBJECT FILE(!fileName)
!fileContent = !fileObj.Readfile()
do !x from 1 to !fileContent.Size()
  $( проверяем вхождение нужного слова, используя условный оператор
  и если слово встречает - печатает на экран $)
  if (!fileContent[!x].Matchwild('*Задвижка*')) then
    $P $!fileContent[$!x]
  endif
enddo

31 января 2011 г.

Запросы к Dabacon. Часть 2

Пример нахождения элементов по определенных условиям и вывод информации.

Задача:
    найти и вывести все элементы типа EQUI, у которых в атрибуте Desc встречается слово "Насос"

Вариант 1.Запрос типа без фильтра и фильтрация в цикле (долгий вариант)
 
--запрашиваем элементы типа EQUI
VAR !equi COLLECT ALL EQUI FOR CE
--запускаем цикл с конечной точкой - размер полученного массива элементов
do !x from 1 to !equi.Size()
  $( пропускаем элемент и переходим к следующему, если условие не выполнилось
  используется метод Matchwild, применяемый к строке, для поиска вхождения подстроки
  метод .Matchwild возвращает логическое значение "да" или "нет"
  соответственно следующая команда трактуется как "если в атрибуте Desc --НЕ встретилось
  значение Насос, тогда пропустить $)
     SKIP IF (!equi[!x[.Dbref().Desc.Matchwild('*Насос*').Not())   

    --выводим на печать
    $P $!equi[$!x]

enddo

28 января 2011 г.

Базовые конструкции языка. Работа с циклами. Часть 2

Пример вложенных циклов.

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

Итак, есть ряд цифр от 1 до 9.
Задача:
    вывести на экран результаты умножения цифры из ряда на все цифры из ряда по очереди.

Решение:

          --Вводим массив цифр. Далее приведен один из способов генерации массива из строки
!digitString = '1 2 3 4 5 6 7 8 9'
$( с помощью метода .Split(), который применен к строковой переменной, мы получаем массив данных. Если .Split() применен без параметров, тогда применяется разделитель по умолчанию - пробел $)
!digitArray = !digitString.Split() 

26 января 2011 г.

Базовые конструкции языка. Работа с циклами. Часть 1

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

Синтаксис:

do !x from ИНДЕКС_СТАРТА to КОНЕЧНАЯ_ТОЧКА
  --действия, которые выполняются с элементами относительно индекса !x
enddo
Пример:
   Печать значений от 1 до 10

25 января 2011 г.

Запросы к Dabacon. Часть 1

Важнейшая команда, которой должен уметь пользоваться каждый:
Организация запроса элементов в Dabacon. Основное назначение: найти необходимые элементы и произвести с ними некоторое действие.

Базовый синтаксис:
    VAR !arr COLLECT ALL ТИП FOR ГДЕ_ИСКАТЬ

Результат:
    В переменную !arr запишется массив значений (типа STRING) референтных номеров найденных элементов. При отсутствии элементов размер массив будет равен 0 (для использования с условными операторами)

Пример:
    Запрос элементов определенного типа

24 января 2011 г.

Базовые конструкции языка. Условия

Условия:

Ввод в код условий предполагает, что в зависимости от определенных параметров будет выполняться та или иная часть программы.
Базовый синтаксис:

if ( УСЛОВИЕ ) then
 --код, выполняемый при выполнении УСЛОВИЯ
 --если УСЛОВИЕ не выполняется, код тоже не будет выполнен
endif
Пример:
    Выполнение действие в зависимости от типа текущего элемента

Открытие блога

Всем здравствуйте!!
24 января запущен  блог, посвященный встроенному прикладному макроязыку программирования PML.
Данный язык применяется для написания процессов автоматизации действий пользователя при работе в среде AVEVA PDMS (проектирование промышленных объектов) и AVEVA MARINE (проектирование судов).
Обе среды обеспечивают работу в трехмерном пространстве, являются многопользовательскими и построены на собственной базе данных - Dabacon.