-
-
Save DanWBR/c355fd5420d20d960f5d084a7142cde8 to your computer and use it in GitHub Desktop.
| 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() |
Hi @DanWBR, Thanks for providing this code. I am wondering how can I make a connection with an already existent DWSim simulation. I mean, I don’t want to create a new simulation as explained in this sample code. I already have a simulation, so I want to make a python connection in order to use an optimization algorithm available in python. Could you please provide some example of this specific connection?
Hi @RoymelRCarpio, any success here?
Hi @DanWBR. Is there any way to like automate a existing flowsheet by referencing it and changing specifications of material streams, unit operartion and energy stream using python script. Like running and existing distillation column script
Hi @DanWBR. Is there any way to like automate a existing flowsheet by referencing it and changing specifications of material streams, unit operartion and energy stream using python script. Like running and existing distillation column script
Hi @PGdev2024 did you find out anything about this? I'm trying to do something similar.
@SaraDC87 @PGdev2024 just use Flowsheet.GetObject('myobject') and change its properties.
Hi is there any way to save DWSIM simulation as a json file?