メッセージ処理CODESYS Scriptingスクリプト
要件 : CODESYS V3.5 SP17以降がインストールされている場合CODESYS Scriptingバージョン4.2.0.0
準備 : 必要なコード例をファイルにコピーし、任意の名前で Python スクリプトとして保存します。
保存した Python スクリプトを実行するには、次の手順に従います。
始めるCODESYS。
クリックツール→スクリプト→スクリプトファイルの実行メニュー コマンド。
の中でスクリプトファイルを選択ダイアログで、実行する Python スクリプトを選択します。
すべての出力はメッセージのビュースクリプトカテゴリ。
Message Service : 自動化プラットフォームの機能により、必要に応じて自動的に処理できるさまざまなプロンプトが表示されます。
Message Key :message serviceによって生成されたプロンプトの一意の識別子。すべてのプロンプトにmessage keyがあるわけではありません。プロンプトのメッセージキーは通常は非表示ですが、プロパティを使用して表示できます。
system.log_prompt_details(以下を参照してください:財産:system.log_prompt_details)。
財産:system.script_prompt_handling
プロパティを使用することができますsystem.script_prompt_handling message serviceのプロンプトを自動的に処理するかどうか、またどのように処理するかを指定します。
価値観ScriptPromptHandling.LogPromptsそしてScriptPromptHandling.ForwardUnknownPrompts割り当てられます。
価値
ScriptPromptHandling.ForwardUnknownPrompts一致するエントリがないすべてのプロンプトを指定しますsystem.prompt_answers基盤となるmessage serviceに転送されます。価値
ScriptPromptHandling.LogPromptsすべてのプロンプトに対して、とエントリーsystem.prompt_answersメッセージ ビューには、プロンプトが確認された値が表示されます。
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts
価値観ScriptPromptHandling.LogPromptsそしてScriptPromptHandling.AlwaysForwardPrompts割り当てられます。
価値
ScriptPromptHandling.AlwaysForwardPrompts指定する全てプロンプトは基盤となるmessage serviceに転送されます。「system.prompt_answers」内の一致するエントリは無視されます。ScriptPromptHandling.LogPromptsこの場合は効果がない。ScriptPromptHandling.AlwaysForwardPrompts最高の優先度を持ち、他のすべてのオプションよりも優先されます。
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.AlwaysForwardUnknown
重要
以下の追加条件は、追加のユーザーインタラクション(チェックボックスの選択など)を必要とするすべてのプロンプトに適用されます。ScriptPromptHandling.SuppressPromptsまたはScriptPromptHandling.LogPrompt設定されています:
message keyのないすべてのプロンプトは、基礎となるmessage serviceに転送されます。
message keyのあるすべてのプロンプトでは、
system.prompt_answers。
財産:system.process_script_prompts
とsystem.process_script_promptsプロパティでは、system.ui message handlingによっても処理される必要があるCODESYS Scripting。
次の例では、プロンプトの処理は、CODESYS Scriptingが有効になります。
このスクリプトが実行されると、生成されたmessage handlingプロンプトは、CODESYS Scripting結果はメッセージビューに表示されます。
system.process_script_prompts = True
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")次の例では、プロンプトの処理は、CODESYS Scriptingは無効になっています。
このスクリプトを実行すると、message handlingによって処理されない情報プロンプトが開きます。CODESYS Scripting。
system.process_script_prompts = False
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")財産:system.log_prompt_details
とsystem.log_prompt_detailsプロパティを使用すると、処理前にプロンプトの詳細をすべてメッセージビューに表示するかどうかを指定できます。これは、より複雑なプロンプトへの応答をsystem.prompt_answersプロンプトのmessage keyも出力されるので、このメソッドは、system.prompt_answers、 例えば。
次の例では、プロンプトの詳細のログは有効その後、追加オプションを含むプロンプトが生成されます。
このスクリプトを実行すると、プロンプトが表示され、このプロンプトに関するすべての情報がメッセージ ビューに表示されます。
system.log_prompt_details = True
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.ui.select_many("my info message", PromptChoice.OKCancel, PromptResult.Cancel, options, "message_key")次の例では、プロンプトの詳細のログは無効その後、追加オプションを含むプロンプトが生成されます。
このスクリプトを実行するとプロンプトが表示されます。メッセージビューにはプロンプトに関する情報は表示されません。
system.log_prompt_details = False
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.ui.select_many("my info message", PromptChoice.OKCancel, PromptResult.Cancel, options, "message_key")財産:system.prompt_answers
とsystem.prompt_answersプロパティを使用すると、特定のプロンプトに対してどのように応答するかを指定できます。
これは必要だ
設定されたデフォルト値でプロンプトに答えるべきではない場合
追加のユーザーインタラクション(チェックボックスの選択など)を必要とするプロンプトの場合
重要
message keyを持つプロンプトに対する応答のみを保存できます。
追加の選択オプションのないプロンプト
次の例では、プロンプトに対する応答がmessage_key_1 message keyは保存されますsystem.prompt_answersこの例では、このmessage keyを持つすべてのプロンプトは次のように応答されます。OKと答えた。
このスクリプトを実行すると、2 つのプロンプトが次々に生成されます。
最初のプロンプトは
message_key_1message keyは自動的に処理され、結果がメッセージ ビューに表示されます。2番目のプロンプトは
message_key_2message keyが表示されます。
system.process_script_prompts = True
system.prompt_answers["message_key_1"] = PromptResult.OK
system.ui.prompt("automatically processed prompt", PromptChoice.OKCancel, PromptResult.Cancel, message_key="message_key_1")
system.ui.prompt("shown prompt", PromptChoice.OKCancel, PromptResult.Cancel, message_key="message_key_2")追加の単一選択プロンプト
可能な選択肢のリストから1つの選択肢を選択するプロンプトの場合、選択する選択肢はsystem.prompt_answers対応するmessage key。
これには 2 つのオプションがあります。
希望するオプションのゼロベースのインデックスを指定します
デリゲート型を保存する
MultipleChoiceSelector
次の例では、インデックスはsystem.prompt_answers、これはすべてのプロンプトで使用されるべきであるmessage_key_1 message key。
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.prompt_answers["message_key_1"] = 1
system.ui.choose("single choice prompt", options, message_key="message_key_1")次の例では、型のデリゲートMultipleChoiceSelector保存されているsystem.prompt_answersこれは、message_key_1 message key。
from System import Array
# filter function
def my_filter(choices):
return Array.IndexOf(choices, "Option 2")
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.prompt_answers["message_key_1"] = MultipleChoiceSelector(my_filter)
system.ui.choose("single choice prompt", options, message_key="message_key_1")追加の複数選択を含むプロンプト
可能な選択肢のリストから複数の選択肢を選択するプロンプトの場合、選択する選択肢とプロンプトが応答する結果は、system.prompt_answers対応するmessage key。
これには 2 つのオプションがあります。
希望するオプションのゼロベースのインデックスを指定します
デリゲート型を保存する
MultipleChoiceSelector
次の例では、タプルはsystem.prompt_answersまず、PromptResult使用されるデリゲートと、2番目に型のデリゲートが含まれていますPromptChoiceFilter。
スクリプトが実行されると、プロンプトに自動的に応答し、結果がメッセージビューに表示されます。個々のオプションについては、Boolean選択されているかどうかを指定するために使用されます。
# filter function
def my_filter(choice):
return choice in ("Option 1", "Option 3")
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.prompt_answers["message_key_1"] = (PromptResult.OK, PromptChoiceFilter(my_filter))
system.ui.select_many("select many prompt", PromptChoice.OKCancel, PromptResult.OK, options, message_key="message_key_1")アプリケーション固有の追加選択オプションのプロンプト
次の例では、タプルはsystem.prompt_answersまず、PromptResult使用されるデリゲートと、2番目に型のデリゲートが含まれていますPromptCustomControlValueProvider。
次の例は、このようなデリゲートがどのように実装され、保存されるかを示しています。system.prompt_answers個々のサブコントロールのIDは、system.log_prompt_details。
# filter function def my_filter(control_id): if control_id = id_1: return "value_for_id_1" if control_id = id_2: return "value_for_id_2" return None system.prompt_answers["message_key_1"] = (PromptResult.OK, PromptCustomControlValueProvider(my_filter))