-
-
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() |
But yes, because I am trying to figure out how to work with the Script Manager and would like to run this reaction via the Script Manager as a test, since I know the results. Still have a few problems to handle Script Manager...
I think these questions can be asked in forum. There are several Q&A on Script Manager in forum answered by @DanWBR also you can find shared solution.
Thank you for providing this code. I have a problem with mono compatibility (or maybe pythonnet compatibility) with my M2 macbook. So, I didn't succeed in running the code. when I use (import clr) i a get a long error including (OSError: cannot load library '/Library/Frameworks/Mono.framework/Versions/6.12.0/lib/libmonosgen-2.0.dylib':). i tried to fix the problem with (command export DYLD_LIBRARY_PATH="/Library/Frameworks/Mono.framework/Versions/6.12.0/lib:$DYLD_LIBRARY_PATH"
) switching to mono 6.8 and installing different versions of pythonnet. but, the problem is still there. Is there any solution to fix or bypass this problem?
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 need conda install pythonnet pywin32 -y Everything works
Where do I run this code?
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 is there any way to save DWSIM simulation as a json file?
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
I guess that your question isn't related to this gist, is it?