Dag iedereen!
eerst en vooral moet ik zeggen dat Python nieuw is voor mij..
maar ik heb al heel wat leuke dingen kunnen doen, maar nu heb ik een probleem die ik maar niet opgelost krijg:
wanneer ik deze code uitvoer werkt alles:
debug.py
maar wanneer ik de 'main_debug.omnic_ready() functie oproep vanuit app.py werkt het niet:
app.py:
het is mij reeds gelukt om stukken code uit te voeren via de web interface van de flask applicatie, maar nog nooit dit stuk code. Hieronder vinden jullie de rest van de code om een idee te krijgen wat er juist gaande is..
Ik vermoed dat het iets te maken heeft met de rechten van flask en de DDE server..
main_debug.py:
de Omnic_adrem_debug.py:
dit is de OmnicDDE.py code:
en tenslotte hebben we ook nog de volgende code:
OmnicExperimentalSettings.py:
dus ik heb enkel problemen wanneer ik de app.py (flask web interface) uitvoer en niet als ik het test vanuit de debug.py code, de foutcode die ik krijg is de volgende:
Bedankt voor de hulp!
(wat ik reeds geprobeerd had is om powershell als admin te openen en dan app.py uit te voeren vanuit deze powershell, maar dit helpt dus niet)
eerst en vooral moet ik zeggen dat Python nieuw is voor mij..
maar ik heb al heel wat leuke dingen kunnen doen, maar nu heb ik een probleem die ik maar niet opgelost krijg:
wanneer ik deze code uitvoer werkt alles:
debug.py
code:
1
2
3
4
5
| import main_debug main_debug.omnic_ready() print("test successful") |
maar wanneer ik de 'main_debug.omnic_ready() functie oproep vanuit app.py werkt het niet:
app.py:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| from flask import Flask, render_template, request, Response, url_for, flash, get_flashed_messages, redirect import main_debug app = Flask(__name__) app.secret_key = "Secret_key" @app.route('/FTIR_status', methods=['POST', 'GET']) def FTIR_status(): main_debug.omnic_ready() return render_template("index_wbase.html", graph=False) # Get the batch name from the form data if __name__ == "__main__": app.run(debug=True, port=5005) |
het is mij reeds gelukt om stukken code uit te voeren via de web interface van de flask applicatie, maar nog nooit dit stuk code. Hieronder vinden jullie de rest van de code om een idee te krijgen wat er juist gaande is..
Ik vermoed dat het iets te maken heeft met de rechten van flask en de DDE server..
main_debug.py:
code:
1
2
3
4
5
6
7
8
9
10
11
| from Omnic_adrem_debug import Omnic def omnic_ready(): global omnic omnic = Omnic() try: omnic.initialize_omnic() print("Omnic ready for analyzing") except Exception as e: print("Something went wrong:", e) |
de Omnic_adrem_debug.py:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| from OmnicDDE import OmnicDDE MyOmnic = OmnicDDE() class Omnic: def __init__(self): # , gantry try: MyOmnic.GetExperimentalSettings() except NameError: print("OmnicDDE object not instantiated") def initialize_omnic(self): self.OMNIC_ready = False if not self.OMNIC_ready: print("Get Omnic ready") MyOmnic.GetExperimentalSettings() print("Set scan numbers to 10") MyOmnic.SetNumScans(10) print("Clear Window") MyOmnic.ClearWindow() print("collect background") MyOmnic.CollectBackground("Background") self.OMNIC_ready = True print("Omnic Is ready for sampling") |
dit is de OmnicDDE.py code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
| # For Python 3.XX, use pywin32 (pip install --upgrade pywin32) import win32ui import dde import time from OmnicExperimentalSettings import ExperimentalSettings class OmnicDDE(): Application = "Omnic" Thread = "Spectra" def __init__(self): print("dde.createServer") self.server = dde.CreateServer() print('server.Create(Myomnic_server)') self.server.Create("MyOmnic_server") print("dde.CreateConversation") self.MyOmnicConversation = dde.CreateConversation(self.server) print("MyOmnicConversation.connectTo..") self.MyOmnicConversation.ConnectTo(self.Application, self.Thread) print(time.asctime() + "\t" + "Connection With Omnic Established") # Minimize the Omnic window self.MyOmnicConversation.Exec('[MinimizeWindow]') def NewWindow(self, WindowName=""): if WindowName == "": cmd = '[NewWindow]' else: cmd = '[NewWindow """' + WindowName + '"""]' self.MyOmnicConversation.Exec(cmd) CurrentWindow = self.MyOmnicConversation.Request('Window Title') print(time.asctime() + "\t" + "Window Created with Name: " + CurrentWindow) def ClearWindow(self): CurrentWindow = self.MyOmnicConversation.Request('Window Title') self.MyOmnicConversation.Exec("[Select All]") self.MyOmnicConversation.Exec("[DeleteSelectedSpectra]") print(time.asctime() + "\t" + "Window " + CurrentWindow + " Cleared") def CollectBackground(self, title=""): # title = kwargs.get('title','') cmd = '[Invoke CollectBackground """' + title + '""" Auto Polling]' self.MyOmnicConversation.Exec(cmd) print(time.asctime() + "\t" + "Collecting Background ...") CurrentWindow = self.MyOmnicConversation.Request('Window Title') self.MyOmnicConversation.Exec('[MaximizeWindow """' + CurrentWindow + '"""]') self.MyOmnicConversation.Exec('[MinimizeWindow]') MS = self.MyOmnicConversation.Request('MenuStatus CollectBackground') while MS == "Disabled": time.sleep(1) MS = self.MyOmnicConversation.Request('MenuStatus CollectBackground') self.MyOmnicConversation.Exec('[MinimizeWindow]') print(time.asctime() + "\t" + "Background Collection Finished") # If the user does not specify the title, he probably doesn't want to save it if title == "": time.sleep(0.5) self.MyOmnicConversation.Exec("[DeleteSelectedSpectra]") def SetNumScans(self, nscans): self.MyOmnicConversation.Poke('Collect NumScans', str(nscans).zfill(4)) def GetExperimentalSettings(self): print("set ExperimentalSettings") self.ExpSettings = ExperimentalSettings(self.MyOmnicConversation) print("Print ExperimentalSettings") self.ExpSettings.PrintSettings() print("GetExperimentalSettings Done and printed") def CloseConnection(self): self.server.Destroy() print(time.asctime() + "\t" + "DDE Connection with Omnic was Terminated") def ExportAs(self, filename): cmd = '[Export D:\Projects\R&D\PlasticPicker\FTIR\Test\\' + filename + ']' self.MyOmnicConversation.Exec(cmd) |
en tenslotte hebben we ook nog de volgende code:
OmnicExperimentalSettings.py:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| class ExperimentalSettings(object): ''' classdocs ''' def __init__(self, DDEComm): ''' Constructor ''' self.NumScans = DDEComm.Request('Collect NumScans') self.Resolution = DDEComm.Request('Collect Resolution') self.NumBKGScans = DDEComm.Request('Collect NumScansBKG') self.NumIFGPoints = DDEComm.Request('Collect NumDataPts') self.Apodisation = DDEComm.Request('Collect ApodizationFunction') self.BKG_Handling = DDEComm.Request('Collect BackgroundHandling') self.PhaseCorrection = DDEComm.Request('Collect PhaseCor') self.FinalFormat = DDEComm.Request('Collect FinalFormat') self.Source = DDEComm.Request('Bench Source') self.BeamSplitter = DDEComm.Request('Bench Beamsplitter') DDEComm.Exec('[GtDetector]') self.Detector = DDEComm.Request('Result Current').strip() self.SSP = DDEComm.Request('Bench SSP') self.Gain = DDEComm.Request('Bench Gain') self.Source = DDEComm.Request('Bench Source') self.MirroVelocity = DDEComm.Request('Bench Velocity') def PrintSettings(self): attrs = vars(self) print(''.join("%s: %s \n" % item for item in attrs.items())) |
dus ik heb enkel problemen wanneer ik de app.py (flask web interface) uitvoer en niet als ik het test vanuit de debug.py code, de foutcode die ik krijg is de volgende:
code:
1
| dde.error: Request failed |
Bedankt voor de hulp!
(wat ik reeds geprobeerd had is om powershell als admin te openen en dan app.py uit te voeren vanuit deze powershell, maar dit helpt dus niet)
[ Voor 44% gewijzigd door thomke op 19-07-2023 07:57 . Reden: OmnicExperimentalSettings.py toegevoegd ]