OPPID - Tag Expression and results


Applies To 
Product(s):OpenPlant PID
Version(s):08.11.10.XXX (SS5) | 08.11.11.XX (SS6)
Environment: Windows 7/8.1/10 (64 bit)
Area: Customization
Subarea: Tag
Original Author:Steven Morrow

Background

In this article, we will discuss different Tag number parsing and the results. These are defined in the OpenPlant_Supplemental_Tagging schema.

Steps To Accomplish

  1. Launch class editor and load OpenPlant.01.07 schema. This schema is generally located in C:\ProgramData\Bentley\OpenPlantPID (SS6)\WorkSpace\OPPID\schemas folder.

  2. Supplement it with OpenPlant_Supplemental_Tagging schema. This is a project specific schema and generally located in C:\ProgramData\Bentley\OpenPlantPID (SS6)\WorkSpace\Projects\OPPID_Metric\Dataset\schemas folder.

  3. Locate the class for which you want to modify the tag format. For example, PIPING_NETWORK_SYSTEM.



  4. Switch to properties tab and select NAME property.



  5. Tag format is defined in the form of EC expression and Parser Expression as shown below in Calculated ECProperty Specification custom attribute.

Similarly, tag format for any class can be added/modified. Below are some samples for EC expression as well as corresponding parser expressions.

Class

ANNOTATION_COMPONENTS

ECExpression

this.GetRelatedInstance("PLANT_AREA_HAS_NAMED_ITEM:1:PLANT_AREA, NAME:?").NAME & "-" & this.DEVICE_TYPE_CODE & "-" & this.NUMBER

ParserRegularExpression

^[?\w]*-(?<DEVICE_TYPE_CODE>[?\w]*)-(?<NUMBER>.*)|(?<NUMBER>.*)

Result

A1-SP-0001

 

Class

EQUIPMENT

ECExpression

this.DEVICE_TYPE_CODE & "-" & this.NUMBER

ParserRegularExpression

^(?<DEVICE_TYPE_CODE>.*)-(?<NUMBER>.*)|(?<NUMBER>.*)

Result

PMP-0001

 

Class

FLUID_REGULATOR

ECExpression

this.DEVICE_TYPE_CODE & "-" & this.NUMBER

ParserRegularExpression

^(?<DEVICE_TYPE_CODE>.*)-(?<NUMBER>.*)|(?<NUMBER>.*)

Result

HV-0001

 

Class

INSTRUMENT

ECExpression

this.GetRelatedInstance("PLANT_AREA_HAS_NAMED_ITEM:1:PLANT_AREA, NAME:?").NAME & "-" & this.DEVICE_TYPE_CODE & "-" & this.NUMBER

ParserRegularExpression

^[?\w]*-(?<DEVICE_TYPE_CODE>[?\w]*)-(?<NUMBER>.*)|(?<NUMBER>.*)

Result

A1-FT-0001

 

Class

INSTRUMENT_LOOP/LOOP

ECExpression

this.GetRelatedInstance("PLANT_AREA_HAS_NAMED_ITEM:1:PLANT_AREA, NAME:?").NAME & "-" & this.DEVICE_TYPE_CODE & "-" & this.NUMBER

ParserRegularExpression

^[?\w]*-(?<DEVICE_TYPE_CODE>[?\w]*)-(?<NUMBER>.*)|(?<NUMBER>.*)

Result

A1-L-0001

 

Class

NOZZLE

ECExpression

this.GetRelatedInstance("EQUIPMENT_HAS_NOZZLE:1:EQUIPMENT, DEVICE_TYPE_CODE:?").DEVICE_TYPE_CODE & "-" & this.GetRelatedInstance("EQUIPMENT_HAS_NOZZLE:1:EQUIPMENT, NUMBER:?").NUMBER & "-" & this.DEVICE_TYPE_CODE & this.NUMBER

ParserRegularExpression

^[?\w]*-[?\w]*-(?<DEVICE_TYPE_CODE>.)(?<NUMBER>.*)|(?<NUMBER>.*)

Result

PMP-0001-N-1

 

Class

PIPING_NETWORK_SYSTEM

ECExpression

this.UNIT_NAME & "-" & this.SERVICE_NAME & "-" & this.NUMBER & "-" &  this.SPECIFICATION

ParserRegularExpression

^[?\w]*-[?\w]*-(?<NUMBER>[?\w]*)-(?<SPECIFICATION>.*)|(?<NUMBER>.*)

Result

U1-Oil-0001-Ductile

Copy and paste table below to add new table.

Class

Any class

 Comment

 This simple example checks to see if it's an email address, there are many ways to do it.  This is a simple example looking for any characters, and seperated by an "@" symbol

ECExpression

this.AccountName&"-"&this.Company

ParserRegularExpression

^(?<AccountName>[A-Z0-9._%+-]*)@(?<Company>[\w]*).

Result

Bentley_Software1234@bentley_systems.com

 

Class

Any property example

 Comment

this will look for digits and then parse out the " inches character.  Example Size=12" would parse to Size=12 (had this request for annotation purposes, and they didn't want inches shown.  Note: the value must be followed by a " inches character.

ECExpression

this.Size

ParserRegularExpression

^(?<SIZE>[\d]{1,3})"

Result

1 or 12 or 123

ClassPIPING_NETWORK_SYSTEM
CommentThis allows for a Pipeline tag of Area-Service-Design Size-Specification-Number where the Design Size has the "inch" mark on the size value. In the parser expression note the /" (Forward Slash and Inch mark in the section for DESIGN_SIZE
ECExpressionthis.AREA_NAME & "-" & this.SERVICE_NAME & "-" & this.DESIGN_SIZE & "-" & this.SPECIFICATION & "-" & this.NUMBER
Parser Regular Expression

^(?<AREA_NAME>[?\w]*)-(?<SERVICE_NAME>[?\w]*)-(?<DESIGN_SIZE>[?\w/"]*)-(?<SPECIFICATION>.*)-(?<NUMBER>[?\w]*)

Result10-STM-4"-CS150-2222

 

 

 

ClassPIPING_NETWORK_SYSTEM
CommentA tag format where the first value is SERVICE and SERVICE has spaces in the value. The SERVICE property is an Associated Item so it must be stripped out.
ECExpressionthis.SERVICE & "-" & this.NUMBER & "-" & this.SUFFIX
Parser Regular Expression

^[?\w\s]*-(?<NUMBER>.*)-(?<SUFFIX>.*)

Result

CM F-1234-1

 

ClassFLUID_REGULATOR
CommentThis example is for tag format without delimiter but with a character limit defined in the parser expression.
ECExpressionthis.PLANT_AREA & this.DEVICE_TYPE_CODE & this.NUMBER
Parser Regular Expression

^(?<PLANT_AREA>[a-zA-Z0-9]{1,2})(?<DEVICE_TYPE_CODE>[a-zA-Z]{1,2})(?<NUMBER>.*)|(?<NUMBER>.*)

Result

A1HV1234

 

ClassVALVE
Comment

This allows for tag format without a delimiter and an unknown number of alpha characters

in the first property (Device Type Code) of the expression.

ECExpressionthis.DEVICE_TYPE_CODE & this.NUMBER
Parser Regular Expression^(?<DEVICE_TYPE_CODE>[\D]*)(?<NUMBER>.*)
ResultV1234 and HV1234 and HVG1234567

ClassEQUIPMENT
Comment

This example is for Equipment tag format Plant area- Device type code-Number(SUFFIX optional) with no limit in parser expression.

ECExpressionthis.PLANT_AREA & "-" & this.DEVICE_TYPE_CODE & "-" & this.NUMBER & IIF(this.SUFFIX = "", "", this.SUFFIX)
Parser Regular Expression^[?\w]*-(?<DEVICE_TYPE_CODE>[^-]+)-(?<NUMBER>[\d]*)(?<SUFFIX>[?\w]*)
Result

A1-PMP-0001 and A1-PMP-0001SU

See Video :

communities.bentley.com/.../273323