トレーススクリプトインターフェイスの使用
ザル CODESYS Trace アドオンはスクリプトインターフェイスを提供します。このインターフェースの使用方法の例を以下に示します
トレースの作成
# 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"
既存のトレースの検索と検証
# 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
トレース変数の追加と変更
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
の変更 ScriptTrace
変数リスト
特定のものを削除する ScriptTrace
変数
次のコードスニペットは、指定された名前の変数を検索し、から削除します。 ScriptTrace
変数リスト。
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)
録音設定の変更
トレース記録の解像度 (ms/µs) の設定
次のコードスニペットは、 ??? スニペット。
traceObject.resolution = Resolution.MicroSeconds # Use Resolution.MilliSeconds if you want to have a trace recording based on milliseconds
記録条件を設定する
次のコードスニペットは、 ??? スニペット。
traceObject.record_condition = "PLC_PRG.bDoRecord"
コメントを設定する
次のコードスニペットは、 ??? スニペット。
traceObject.comment = "This trace records the ..."
自動起動オプションの設定
次のコードスニペットは、 ??? スニペット。
traceObject.auto_start = True
n サイクルごとにのみ記録するようにオプションを設定する
次のコードスニペットは、 ??? スニペット。
traceObject.every_n_cycles = 10
ダイアグラムとその変数
の作成 ScriptTrace
すべてを含むグラフ ScriptTrace
変数
次のスクリプトは、簡単な図とその変数を作成する方法を示しています。
# 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)
の作成 ScriptTrace
1 つあたりのダイアグラム ScriptTrace
変数
次の Python メソッドには 1 つ必要です。 ScriptTrace
オブジェクトを作成し、次のダイアグラムを追加します。 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
の設定のコピー ScriptTrace
ダイアグラム
次のスクリプトは、の設定を変更およびコピーする方法を示しています ScriptTrace
ダイアグラム。
# 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])
トレースのオンライン処理
トレースのダウンロードと開始
次のコードスニペットは Trace
のトレース Application
アプリケーションをダウンロードし、起動します。
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()
トレースをファイルに保存する
次のコードスニペットは、 トレースのダウンロードと開始 スニペット。トレースは保存する前に停止する必要があります。そのためには、トリガー条件に達するか、明示的に以下を呼び出します stop()
。
# We assume, that we have an already running trace editor.stop() editor.save(r"<File path to csv file>")
トレース記録のためのさまざまな情報のクエリ
次のコードスニペットは、 トレースのダウンロードと開始 スニペット。
# 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()))
トリガーハンドリング
の設定中 BOOL
トリガー
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
数値トリガーの設定
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
トリガーを待って記録されたデータを保存する
次のコードスニペットは、「Configuring a」に基づいています。 BOOL
-triggers」および「* トリガーの設定」スニペット。
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>")
トリガーに到達した後のタイムスタンプ情報のクエリ
次のコードスニペットは、「Configuring a」に基づいています。 BOOL
-トリガー」と「* トリガーの設定」スニペット。
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()))
トリガーに到達した後にトレースの記録を再開する
次のコードスニペットは、「Configuring a」に基づいています。 BOOL
-トリガー」と「* トリガーの設定」スニペット。
editor.reset_trigger()
デバイストレース
の作成 DeviceTrace
myDevice = projects.primary.find("Device")[0] devicetrace = trace.create(myDevice, "DeviceTrace")
デバイスの現在のトレース記録を照会する
次のコードスニペットは、「Create a」に基づいています。 DeviceTrace
「スニペット。
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)
既存のレコーディングをにダウンロードする DeviceTrace
次のコードスニペットは、「Create a」に基づいています。 DeviceTrace
「スニペット。
traceObject = projects.primary.find("Device", "DeviceTrace")[0] editor = traceObject.open_editor() editor.upload_to_device_trace("CpuCoreLoad")
で機能しないもの DeviceTrace
へのアクセス
traceobject.variable_list
を使用したトレース変数の作成
traceobject.add_variable())
へのアクセス
traceobject.diagrams