PyAVEVAE3D contains Proof of Concept for Python 3 embedding into AVEVA Plant Design Products ( e.g. PDMS, E3D2.1/ 3.1, Diagrams, Engineering). These software are based on PML & PML.Net.
This repository has Visual Studio Project Solution. The Solution contains 2 main projects:
-
PyAVEVAInteraction : It contains the architectural skeleton for Python Embadding into AVEVA E3D2.1.0.3. and It invoks the either system level python or virtual enviroment python.
-
PyAVEVAE3DExt : It's Python extension module. It contains the c++ & python classes which allows python to directly interact with the AVEVA E3D.
- AVEVA E3D Version : Mk2.1.0.3[Z2103-12] (WINDOWS-NT 6.1) (27 Apr 2016 : 23:54)
- Python : Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 22:57:10) [MSC v.1929 32 bit (Intel)] on win32
- Visual Studio : 2022
-
Copy following files from solution to the pmllib folder,
..\PyAVEVAE3D\PyAVEVAE3DExt\DataBridge.pmlobj
..\PyAVEVAE3D\PyAVEVAInteraction\RunPy.pmlfrm
-
Create Python 32bit Virtual enviroment. and Create PML Global Variable for Accessing Python Virtual from E3D Session. Use the following pml command,
!!pyVenv = |path to virtual environment/Scripts/python.exe|
-
Copy Dll files from repository to Aveva Installation Directory.
From :
..\PyAVEVAE3D\SampleDlls\PyAVEVAInteraction.dll
To :
%AVEVA_DESIGN_EXE%
-
Install pyavevae3dext
-- Method 1: using
pip install pyavevae3dext
.-- Method 2: Build the .pyd file based on the your module dependencies and build the package. Refer Development Documetation Section
-
Open RunPy form using pml command
Show !!RunPy
. RunPy Form is used to write a test python scripts. -
Run Python Script form the Form. And All the output from python scripts will be printed in the AVEVA console. e.g.
print("abc")
in python will give the output in the python console.
pyavevae3dext PiPy package has basically 3 classes.
-
COMMON:
Common Class Instentiation,
from pyavevae3dext import * c = COMMON()
Method to know about current mdb.
c.mdb()
Method to execute Savework command.
c.savework()
Method to execute Getwork command.
c.getwork()
Getter-Setter for
CE
,print(c.ce()) #Getter c.ce = "/ElementName" #Setter
-
DB:
Db Class Instentiation,
from pyavevae3dext import * d = DB()
Method to know Attributes on current elements,
att = d.attributes() print(att)
Method to Get Collection as List for the Element,
elms = d.collectAllForElement("/SITE-CABLE-AREA03") print(elms)
Method to Get Collection as List for the Element,
elms = d.collectAllFor("PIPE BRAN", "/SITE-PIPING-AREA01 /SITE-PIPING-AREA02") print(elms)
Method to Set String Attribute for Element,
d.SetStringAttribute("/SITE-PIPING-AREA03", "Description", "This is test description")
Method to Set Real Attribute for Element,
d.SetRealAttribute("/SITE-PIPING-AREA03", "Number", 5)
Method to Set Bool Attribute for Element,
d.SetBoolAttribute("/SITE-PIPING-AREA03", "Lock", True)
-
PML:
PML Class Instentiation,
from pyavevae3dext import * p = PML()
Method to Run the PML Command in PDMS Console,
p.RunInPdms("$p This Message is From Python...")
Method to Run the PML Command in .Net Environment,
p.Run("/SITE-CABLE-AREA03") # /SITE-CABLE-AREA03 will be set as current element
To utilize the methods mentioned below, the variables in the PML Commandline must be defined as global variable.
Run the below code in PML Commandline to define the pml global variable,
!!AR[1] = 'A' !!AR[2] = 'b1' !!AR[3] = 'C' !BOOL = true !REAL = 5 !STR = |Hii.. This message is From PML.|
Method to get the Value of the PML Variable as String,
value = p.GetPmlString("STR") print(value)
Method to get the Value of the PML Variable as Long,
value = p.GetPmlReal("REAL") print(value)
Method to get the Value of the PML Variable as Bool,
value = p.GetPmlBool("BOOL") print(value)
Method to get the Value of the PML Variable as Array/ List,
value = p.GetPmlArray("AR") print(value)
Refer the Development Documetation Section for Detailed Procedure for setting up development environment.
-- For Utilzing Python with Other AVEVA Software, Please install the Python version compatible to the AVEVA module architecture e.g. (x86, x64). and Make sure the platform architectural dependencies (Python and AVEVA Dll) for Build/ Release.
-- conda
Environment as well conpatible. Make sure the conda
environment platform architecture e.g. (x86, x64).