Exemples et bonnes pratiques pour le CODESYS Trace API de script
CODESYS Scripting depuis CODESYS Trace
Les exemples suivants sont destinés à compléter la documentation API générée automatiquement à partir de CODESYS Scripting à CODESYS Trace.
Créer une trace
Vous pouvez utiliser le CODESYS Trace API de script pour créer une nouvelle trace.
myApplication = projects.primary.find("Device", "PLC Logic", "Application")[0]
traceObject = trace.create(myApplication, "MyTraceName")
Une tâche nommée Task doit déjà exister ici. S'il n'existe pas, cette affectation génère une ValueError.
traceObject.task_name = "Task"
Dans le script, vous pouvez spécifier dans quelle tâche la trace nouvellement créée doit être exécutée.
myApplication = projects.primary.find("Device", "PLC Logic", "Application")[0]
traceObjectWithTaskSet = trace.create(myApplication, "NameOfMySecondTrace", "MainTask")
assert traceObjectWithTaskSet.task_name == "MainTask"Recherche et vérification d'une trace existante
Pour retrouver une trace existante, vous pouvez utiliser le project.find méthode.
Pour tous les autres objets du IScriptObject taper, .is_trace_object équivaut à FALSE.
foundObjects = projects.primary.find("Device", "PLC Logic", "Application", "MyTraceObject")
expectedTraceObject = foundObjects[0]
assert expectedTraceObject.is_trace_object, "Could not find trace object with the expected name"
Ajout et modification de variables de trace
Le add_variable() est une méthode simple pour ajouter un nouveau ScriptTraceVariable et définissez ses propriétés lors de la création.
myTrace = projects.primary.find("Device", "PLC Logic", "Application", "MyTraceObject")[0]
addedVariable = myTrace.add_trace_variable(variableName="PLC_PRG.a1",
graphColor= 0xff000000,
graphType=GraphType.LINES,
activateMaxWarning=True,
maxWarningArea=9.0,
maxColor= 0xffff0000)
addedVariable.enabled = False
for i in range(2,11):
newVariable = myTrace.variable_list.add()
newVariable.variable_name = "PLC_PRG.a"+str(i)
newVariable.graph_type = GraphType.LINES_CROSSES
assert len(myTrace.variable_list) == 10Modification de la liste des variables ScriptTrace
Suppression d'une variable ScriptTrace spécifique
Dans l'extrait de code suivant, une variable portant le nom spécifié est d'abord trouvée, puis supprimée du ScriptTraceVariableList.
def remove_variable_by_name(traceObject, variableName):
index_to_remove = -1
for variable in traceObject.variable_list:
if variable.variable_name == variableName:
index_to_remove = traceObject.variable_list.index_of(variable)
break
if index_to_remove != -1:
traceObject.variable_list.remove(index_to_remove) Modification des paramètres d'enregistrement
Réglage de la résolution (ms/µs) de l'enregistrement de trace
L'extrait de code suivant est basé sur le "Créer une trace" extrait.
traceObject.resolution = Resolution.MicroSeconds
Utiliser Resolution.MilliSeconds si vous souhaitez un enregistrement basé sur des millisecondes.
Définition des conditions d'enregistrement
L'extrait de code suivant est basé sur le "Créer une trace" extrait.
traceObject.record_condition = "PLC_PRG.bDoRecord"
Définir un commentaire
L'extrait de code suivant est basé sur le "Créer une trace" extrait.
traceObject.comment = "This trace records the ..."
Définition de l'option de démarrage automatique
L'extrait de code suivant est basé sur le "Créer une trace" extrait.
traceObject.auto_start = True
Définition de l'option d'enregistrement uniquement tous les n-ièmes cycles
L'extrait de code suivant est basé sur le "Créer une trace" extrait.
traceObject.every_n_cycles = 10
Diagrammes et leurs variables
Création d'un diagramme ScriptTrace avec toutes les variables ScriptTrace
Le script suivant est un exemple de création d'un diagramme simple dans lequel toutes les variables sont utilisées.
Tout d'abord, un objet ScriptTrace et certaines variables ScriptTrace sont créés.
traceObject = projects.primary.find("Device","PLC Logic","Application","Trace")[0]
assert traceObject.is_trace_object
for i in range(5):
traceObject.add_trace_variable(variableName="PLC_PRG.a"+str(i))
Ensuite, un diagramme ScriptTrace est créé, puis toutes les variables ScriptTrace sont ajoutées.
traceDiagram = traceObject.diagrams.add()
for traceVar in traceObject.variable_list:
traceDiagram.add_diagram_variable(traceVar)Création d'un diagramme ScriptTrace par variable ScriptTrace
La méthode Python suivante prend un objet ScriptTrace et ajoute un diagramme par variable ScriptTrace.
def one_diagram_per_variable(traceObject):
assert traceObject.is_trace_object
for traceVar in traceObject.variable_list:
diagram = traceObject.diagrams.add(traceVar)
diagram.name = traceVar.variable_name
Copie des paramètres d'un diagramme ScriptTrace
Le script suivant montre comment modifier et copier les paramètres d'un diagramme ScriptTrace.
traceObject = projects.primary.find("Device","PLC Logic","Application","Trace")[0]
assert traceObject.is_trace_object
# apply settings for the first diagram
traceObject.diagrams[0].y_axis.mode = AxisScaleMode.FixedLength
traceObject.diagrams[0].y_axis.range = 10.0
traceObject.diagrams[0].y_axis.color = 0xffee0000
traceObject.diagrams[0].y_axis.draw_grid = True
traceObject.diagrams[0].y_axis.grid_color = 0xffee0000
traceObject.diagrams[0].tickmark_fixed_spacing = True
traceObject.diagrams[0].tickmark_fixed_distance = 5.0
traceObject.diagrams[0].tickmark_fixed_subdivisions = 4
# copy the settings from the first diagrams to all other diagrams
for i in range(1,len(traceObject.diagrams))
traceObject.diagrams[i].y_axis.copy_from(traceObject.diagrams[0])
Traitement en ligne de la trace
Téléchargement et démarrage de Trace
L'extrait de code suivant trouve le Trace trace de la Application l'application, la télécharge et la démarre.
proj = projects.open(r"<Path to the project file>")
app = proj.find("Device", "PLC Logic", "Application")[0]
with online.create_online_application(app) as onlineapp:
traceObject = proj.find("Device", "PLC Logic", "Application", "Trace")[0]
onlineapp.login(OnlineChangeOption.Never, True)
onlineapp.start()
editor = traceObject.open_editor()
editor.download()
editor.start()Enregistrer la trace dans un fichier
L'extrait de code suivant est basé sur le "Téléchargement et démarrage de Trace" extrait.
Une trace doit être arrêtée avant de pouvoir être enregistrée. Cela peut être fait soit en atteignant la condition de déclenchement, soit par un appel explicite de stop().
On suppose qu'une trace est déjà en cours d'exécution.
editor.stop() editor.save(r"<File path to csv file>")
Interrogation de diverses informations sur l'enregistrement de trace
L'extrait de code suivant est basé sur le "Téléchargement et démarrage de Trace" extrait.
On suppose qu'une trace est déjà en cours d'exécution.
print("Packet State: {}".format(editor.get_packet_state()))
print("Trace started at {} (absolute timestamp)".format(editor.get_trace_start_timetamp()))Gestion des déclencheurs
Configurer un déclencheur booléen
traceObject = proj.find("Device", "PLC Logic", "Application", "Trace")[0]
traceObject.trigger_variable = "PLC_PRG.bVar"
traceObject.trigger_edge = TriggerEdge.Positive
traceObject.post_trigger_samples = 20
Le niveau de déclenchement est requis uniquement pour les variables de déclenchement numériques. Cependant, il est judicieux de définir explicitement le déclencheur sur None.
traceObject.trigger_level = None
Configurer un déclencheur numérique
traceObject = proj.find("Device", "PLC Logic", "Application", "Trace")[0]
traceObject.trigger_variable = "PLC_PRG.iTemperature"
traceObject.trigger_edge = TriggerEdge.Positive
traceObject.post_trigger_samples = 20Si la variable de déclenchement est de type REAL ou LREAL, le niveau de déclenchement peut également être spécifié sous la forme d'un nombre à virgule flottante (par exemple, 80.5).
traceObject.trigger_level = 80
Attendre le déclencheur et sauvegarder les données enregistrées
L'extrait de code suivant est basé sur le "Téléchargement et démarrage de Trace" extrait et "Configuration d'un déclencheur *".
triggerstate = editor.get_trigger_state()
while triggerstate != TriggerState.TriggerReached:
system.delay(200)
triggerstate = editor.get_trigger_state()
editor.save(r"<File path to csv file>")Interroger les informations d'horodatage après avoir atteint le déclencheur
L'extrait de code suivant est basé sur le "Téléchargement et démarrage de Trace" extrait et "Configuration d'un déclencheur *".
print("Trigger reached at {} (absolute timestamp)".format(editor.get_trigger_timetamp()))
print("Trigger reached at {}".format(editor.get_trigger_startdate()))
print("Trace was running {}ms until trigger has been reached".format(editor.get_trigger_timetamp() - editor.get_trace_start_timetamp()))Reprise de l'enregistrement de trace après avoir atteint le déclencheur
L'extrait de code suivant est basé sur le "Téléchargement et démarrage de Trace" extrait et "Configuration d'un déclencheur *".
editor.reset_trigger()
Suivi de l'appareil
Création d'un DeviceTrace
myDevice = projects.primary.find("Device")[0]
devicetrace = trace.create(myDevice, "DeviceTrace")Interroger les enregistrements de trace actuels sur l'appareil
L'extrait de code suivant est basé sur le "Création d'un DeviceTrace" extrait.
traceObject = projects.primary.find("Device", "DeviceTrace")[0]
Pour les traces d'application, le résultat de get_online_traces ne contient que des traces de l'application.
# traceObject = projects.primary.find("Device", "PLC Logic", "Application", "Trace")[0]
editor = traceObject.open_editor()
for tracepacket in editor.get_online_traces():
print(tracepacket)Téléchargement d'une trace existante en tant que DeviceTrace
L'extrait de code suivant est basé sur le "Création d'un DeviceTrace" extrait.
traceObject = projects.primary.find("Device", "DeviceTrace")[0]
editor = traceObject.open_editor()
editor.upload_to_device_trace("CpuCoreLoad")