ich bin Python-Neuling und hab vor kurzem erst angefangen, mich in die Sprache einzuarbeiten. Ich möchte durch ein Python-Script ein Programm (ControlDesk), das einen Hardware-in-the-Loop-Simulator steuert, automatisieren. Dazu habe ich mir einen mitgelieferten Demofile genommen und will ihn für meine Zwecke abändern (Interpretation klappt dank der jetzigen Grundlagen und C++-Kenntnisse ganz gut Das Original-Demoskript funktioniert auch einwandfrei).
Es geht darum, einen Parameter zu verändern, bspw. eine 0-1-Taktung an einem der Eingänge des Simulators zu realisieren. Hierzu kann man in ControlDesk den sog. ParameterEditor() mit dazugehörigen Methoden nutzen, der dann die Parameter ins Programm "einpflegt".
Hier ist der Code, den ich gerade ausführen will:
Code: Alles auswählen
#ControlDesk-Spezifisches
from cdautomationlib import (.....)
import cdacon
from dSPACEDemoUtilities import (.....)
import os
import sys
import string
WorkingDir = os.path.dirname(sys.argv[0])
if os.path.isdir(WorkingDir) == 0:
WorkingDir = os.getcwd()
SavePath1 = os.path.normpath(WorkingDir + "\\SavePAR1")
PARFile1 = SavePath1 + "\\PARFile1.par"
print PARFile1
# Das funktioniert, Pfad wird ausgegeben.
PGain = "Model Root/DAC/Channel/Value"
print PGain
# Auch dieser Pfad wird ausgegeben
if not os.path.exists(SavePath1):
os.mkdir(SavePath1)
else:
if os.path.exists(PARFile1):
os.remove(PARFile1)
ParameterEditor().Generate(SDFFile, PARFile1, cdacon.false)
print "Successfully generated"
# Bis hierhin keine Probleme
ValueP = ParameterEditor().ReadParameter(PARFile1, PGain) #Hier tritt der Fehler auf
print ValueP
print "Loop finished"
Am Eigenartigsten erscheint mir dabei, dass ReadParameter offenbar den ersten und letzten Character abschneidet. Meine fruchtlosen Lösungsansätze bisher waren:Traceback (most recent call last):
File "<string>", line 937, in _InternalRunScript
File "<string>", line 889, in _DoRunScript
File "D:\HardwareInTheLoop\YConverter HiL\Version Office\AutoScript.py", line 241, in <module>
ValueP = ParameterEditor().ReadParameter(PARFile1, PGain)
File "dSPACE Internal Module ControlDeskAutomation:cdautomationlib.py", line 908, in ReadParameter
File "dSPACE Internal Module ControlDeskAutomation:hierarchybrowsercomponent.py", line 80, in ReadParameter
File "C:\Program Files (x86)\Common Files\dSPACE\Python25\lib\site-packages\win32com\client\__init__.py", line 493, in _ApplyTypes_
dispid, 0, wFlags, retType, argTypes, *args),
ComClass "HIERAR~3"
Error : Schwerwiegender Fehler
Description : Parameter set ':\HardwareInTheLoop\(...)\SavePAR1\PARFile1.pa' not found
com_error: Ausnahmefehler aufgetreten.
- ausführlichere Erweiterung der Adressierung:
ControlDesk arbeitet mit "Experimenten", die alle Unterordner, Variablen und ausführbare Simulationen enthalten und dem .py-file übergeordnet sind. Wir hatten die bestehenden Experiment-Deklarationen aus dem Demofile zunächst auskommentiert, um den Code übersichtlich zu halten. Ich habe alle Funktionen, die auch nur entfernt mit Adressen zu tun haben könnten, einzeln sowie in Kombination rein- und wieder rausgenommen.
- PARFile1.par manuell erstellt
- sämtliche Adressen sowohl durch Funktionsaufrufe "holen lassen" als auch explizit handgeschrieben
- ... abwechselnd mit doppelten und einfachen Backslashes und Anführungszeichen
- die PARFile1-Adresse mit einem Leerzeichen je vorne und hinten manipuliert
- einen Kollegen mit jahrelanger Python-Erfahrung gefragt, dem leider auch nichts einfiel.
Beim englischen Python-Forum habe ich einen Hinweis auf sys.argv[0] gefunden, das wohl einen derartigen Fehler produzieren kann (in dem konkreten Beispiel ging es um einen Server, der nicht erkannt wurde), falls es den Wert 1 hat. Das hat es bei mir. Aber ich weiß nicht, wie ich diesem Skript noch ein Argument übergeben sollte - und welches, und wozu? (Anmerkung hierzu: ich rufe die Main nicht auf, sondern lasse das ganze sozusagen "roh" durchlaufen. Ohne Funktionsaufruf.) Ich hab mir jedenfalls den ganzen Tag den Kopf zerbrochen und bin so langsam fertig mit den Nerven.
Das kann doch nicht so schwierig sein - übersehe ich vielleicht was? Vielleicht hat jemand eine Idee...
Viele Grüße
Ragen