Last active
June 6, 2024 13:55
-
-
Save DanWBR/c355fd5420d20d960f5d084a7142cde8 to your computer and use it in GitHub Desktop.
Create, run and save a new DWSIM simulation in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pythoncom | |
pythoncom.CoInitialize() | |
import clr | |
from System.IO import Directory, Path, File | |
from System import String, Environment | |
dwsimpath = "C:\\Users\\Daniel\\AppData\\Local\\DWSIM8\\" | |
clr.AddReference(dwsimpath + "CapeOpen.dll") | |
clr.AddReference(dwsimpath + "DWSIM.Automation.dll") | |
clr.AddReference(dwsimpath + "DWSIM.Interfaces.dll") | |
clr.AddReference(dwsimpath + "DWSIM.GlobalSettings.dll") | |
clr.AddReference(dwsimpath + "DWSIM.SharedClasses.dll") | |
clr.AddReference(dwsimpath + "DWSIM.Thermodynamics.dll") | |
clr.AddReference(dwsimpath + "DWSIM.Thermodynamics.ThermoC.dll") | |
clr.AddReference(dwsimpath + "DWSIM.UnitOperations.dll") | |
clr.AddReference(dwsimpath + "DWSIM.Inspector.dll") | |
clr.AddReference(dwsimpath + "System.Buffers.dll") | |
from DWSIM.Interfaces.Enums.GraphicObjects import ObjectType | |
from DWSIM.Thermodynamics import Streams, PropertyPackages | |
from DWSIM.UnitOperations import UnitOperations | |
from DWSIM.Automation import Automation3 | |
from DWSIM.GlobalSettings import Settings | |
Directory.SetCurrentDirectory(dwsimpath) | |
# create automation manager | |
interf = Automation3() | |
sim = interf.CreateFlowsheet() | |
# add water | |
water = sim.AvailableCompounds["Water"] | |
sim.SelectedCompounds.Add(water.Name, water) | |
# create and connect objects | |
m1 = sim.AddObject(ObjectType.MaterialStream, 50, 50, "inlet") | |
m2 = sim.AddObject(ObjectType.MaterialStream, 150, 50, "outlet") | |
e1 = sim.AddObject(ObjectType.EnergyStream, 100, 50, "power") | |
h1 = sim.AddObject(ObjectType.Heater, 100, 50, "heater") | |
m1 = m1.GetAsObject() | |
m2 = m2.GetAsObject() | |
e1 = e1.GetAsObject() | |
h1 = h1.GetAsObject() | |
sim.ConnectObjects(m1.GraphicObject, h1.GraphicObject, -1, -1) | |
sim.ConnectObjects(h1.GraphicObject, m2.GraphicObject, -1, -1) | |
sim.ConnectObjects(e1.GraphicObject, h1.GraphicObject, -1, -1) | |
sim.AutoLayout() | |
# steam tables property package | |
stables = PropertyPackages.SteamTablesPropertyPackage() | |
sim.AddPropertyPackage(stables) | |
# set inlet stream temperature | |
# default properties: T = 298.15 K, P = 101325 Pa, Mass Flow = 1 kg/s | |
m1.SetTemperature(300.0) # K | |
m1.SetMassFlow(100.0) # kg/s | |
# set heater outlet temperature | |
h1.CalcMode = UnitOperations.Heater.CalculationMode.OutletTemperature | |
h1.OutletTemperature = 400 # K | |
# request a calculation | |
Settings.SolverMode = 0 | |
errors = interf.CalculateFlowsheet2(sim) | |
print(String.Format("Heater Heat Load: {0} kW", h1.DeltaQ)) | |
# save file | |
fileNameToSave = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "heatersample.dwxmz") | |
interf.SaveFlowsheet(sim, fileNameToSave, True) | |
# save the pfd to an image and display it | |
clr.AddReference(dwsimpath + "SkiaSharp.dll") | |
clr.AddReference("System.Drawing") | |
from SkiaSharp import SKBitmap, SKImage, SKCanvas, SKEncodedImageFormat | |
from System.IO import MemoryStream | |
from System.Drawing import Image | |
from System.Drawing.Imaging import ImageFormat | |
PFDSurface = sim.GetSurface() | |
bmp = SKBitmap(1024, 768) | |
canvas = SKCanvas(bmp) | |
canvas.Scale(1.0) | |
PFDSurface.UpdateCanvas(canvas) | |
d = SKImage.FromBitmap(bmp).Encode(SKEncodedImageFormat.Png, 100) | |
str = MemoryStream() | |
d.SaveTo(str) | |
image = Image.FromStream(str) | |
imgPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "pfd.png") | |
image.Save(imgPath, ImageFormat.Png) | |
str.Dispose() | |
canvas.Dispose() | |
bmp.Dispose() | |
from PIL import Image | |
im = Image.open(imgPath) | |
im.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
On tiny10 Win x64 I have python 10 through miniconda
Environment variables [System Path]:
C:\Users\ukhan\miniconda3\Scripts\;C:\Users\ukhan\miniconda3\Library\bin\;C:\Users\ukhan\miniconda3\;
then u needconda install pythonnet pywin32 -y
Everything works