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 IScriptObject
Aggiungere 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) == 10
Cambiare 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_name
Copia 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 = None
Configurazione 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 = 80
Attesa 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_list
Creazione di variabili di traccia utilizzando
traceobject.add_variable())
Accesso a
traceobject.diagrams