Utilizzo dell'interfaccia Trace Scripting
Le CODESYS Trace il componente aggiuntivo fornisce un'interfaccia di scripting. Di seguito troverai esempi di come utilizzare questa interfaccia
Creazione di una traccia
# a new trace can be created using the toplevel trace api
myApplication = projects.primary.find("Device", "PLC Logic", "Application")[0]
traceObject = trace.create(myApplication, "MyTraceName")
traceObject.task_name = "Task" # a task with the name "Task" should already exist here. If it does not exist, this assignment throws an ValueError.# the task of the trace can be set during creation
myApplication = projects.primary.find("Device", "PLC Logic", "Application")[0]
traceObjectWithTaskSet = trace.create(myApplication, "NameOfMySecondTrace", "MainTask")
assert traceObjectWithTaskSet.task_name == "MainTask"Individuazione e verifica delle tracce esistenti
# finding an existing trace can be done via the project.find method
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" # .is_trace_object is False for all other objects of type IScriptObjectAggiungere e modificare le variabili di traccia
myTrace = projects.primary.find("Device", "PLC Logic", "Application", "MyTraceObject")[0]
# add_variable() is a convenience method to add a new ScriptTraceVariable and set its properties during creation
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) == 10Cambiare il ScriptTrace elenco di variabili
Rimuovere uno specifico ScriptTrace variabile
Il seguente frammento di codice trova la variabile con il nome specificato e la rimuove dal ScriptTrace elenco di variabili.
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)Modifica delle impostazioni di registrazione
Impostazione della risoluzione (ms/µs) della registrazione della traccia
Il seguente frammento di codice è basato su ??? frammento.
traceObject.resolution = Resolution.MicroSeconds # Use Resolution.MilliSeconds if you want to have a trace recording based on milliseconds
Impostazione delle condizioni di registrazione
Il seguente frammento di codice è basato su ??? frammento.
traceObject.record_condition = "PLC_PRG.bDoRecord"
Impostazione del commento
Il seguente frammento di codice è basato su ??? frammento.
traceObject.comment = "This trace records the ..."
Impostazione dell'opzione di avvio automatico
Il seguente frammento di codice è basato su ??? frammento.
traceObject.auto_start = True
Impostazione dell'opzione per registrare solo ogni n-esimo ciclo
Il seguente frammento di codice è basato su ??? frammento.
traceObject.every_n_cycles = 10
Diagrammi e loro variabili
Creare un ScriptTrace grafico con tutto ScriptTrace variabili
Lo script seguente mostra come creare un diagramma semplice e le relative variabili.
# first we need a ScriptTraceObject and some ScriptTraceVariables
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))
# create one ScriptTraceDiagram and add all ScriptTraceVariables to it
traceDiagram = traceObject.diagrams.add()
for traceVar in traceObject.variable_list:
traceDiagram.add_diagram_variable(traceVar)Creare un ScriptTrace diagramma per ScriptTrace variabile
Il seguente metodo Python ne richiede uno ScriptTrace oggetto e aggiunge un diagramma per ScriptTrace variabile.
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_nameCopia delle impostazioni di un ScriptTrace Diagramma
Lo script seguente mostra come modificare e copiare le impostazioni di un ScriptTrace diagramma.
# we assume, that the traceObject already has multiple diagrams
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])Gestione online della traccia
Scaricamento e avvio della traccia
Il seguente frammento di codice trova il Trace traccia del Application applicazione, la scarica e la avvia.
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()Salvare la traccia in un file
Il seguente frammento di codice è basato su Scaricamento e avvio della traccia frammento. Una traccia deve essere interrotta prima di poter essere salvata. Questa operazione può essere eseguita raggiungendo la condizione di attivazione o richiamando esplicitamente stop().
# We assume, that we have an already running trace editor.stop() editor.save(r"<File path to csv file>")
Interrogazione di varie informazioni per la registrazione delle tracce
Il seguente frammento di codice è basato su Scaricamento e avvio della traccia frammento.
# We assume, that we have an already running trace
print("Packet State: {}".format(editor.get_packet_state()))
print("Trace started at {} (absolute timestamp)".format(editor.get_trace_start_timetamp()))Gestione dei trigger
Configurazione di un BOOL grilletto
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
# The trigger level is only needed for numeric trigger variables. It is a good coding style to set the trigger explicitly to "None"
traceObject.trigger_level = NoneConfigurazione di un trigger numerico
traceObject = proj.find("Device", "PLC Logic", "Application", "Trace")[0]
traceObject.trigger_variable = "PLC_PRG.iTemperature"
traceObject.trigger_edge = TriggerEdge.PositivetraceObject.post_trigger_samples = 20
# In case of a trigger variable of REAL or LREAL type it is also possible to specify floating point trigger levels, e.g. 80.5
traceObject.trigger_level = 80Attesa di un trigger e salvataggio dei dati registrati
Il seguente frammento di codice si basa sulla «Configurazione di un BOOL-triggers» e «Configurazione di un * trigger».
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>")Interrogazione delle informazioni sul timestamp dopo il raggiungimento del trigger
Il seguente frammento di codice si basa sulla «Configurazione di un BOOL-Snippet» e «Configurazione di un * Trigger».
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()))Ripresa della registrazione della traccia dopo aver raggiunto il trigger
Il seguente frammento di codice si basa sulla «Configurazione di un BOOL-Snippet» e «Configurazione di un * Trigger».
editor.reset_trigger()
Traccia del dispositivo
Creare un DeviceTrace
myDevice = projects.primary.find("Device")[0]
devicetrace = trace.create(myDevice, "DeviceTrace")Interrogazione delle registrazioni di tracce correnti del dispositivo
Il seguente frammento di codice si basa sul codice «Crea un DeviceTrace« frammento.
traceObject = projects.primary.find("Device", "DeviceTrace")[0]
# for application traces the result of get_online_traces contains only the traces of the application
# traceObject = projects.primary.find("Device", "PLC Logic", "Application", "Trace")[0]
editor = traceObject.open_editor()
for tracepacket in editor.get_online_traces():
print(tracepacket)Scaricamento di una registrazione esistente su DeviceTrace
Il seguente frammento di codice si basa sul codice «Crea un DeviceTrace« frammento».
traceObject = projects.primary.find("Device", "DeviceTrace")[0]
editor = traceObject.open_editor()
editor.upload_to_device_trace("CpuCoreLoad")Cosa non funziona con DeviceTrace
Accesso a
traceobject.variable_listCreazione di variabili di traccia utilizzando
traceobject.add_variable())Accesso a
traceobject.diagrams