Gestion des messages avec CODESYS Scripting Script
Exigences: CODESYS V3.5 SP17 ou plus récent avec installé CODESYS Scripting Version 4.2.0.0
Préparations: Copiez l’exemple de code souhaité dans un fichier et enregistrez-le en tant que script Python sous n’importe quel nom.
Pour exécuter le script Python enregistré, suivez ces étapes :
Commencer CODESYS.
Cliquez sur le Outils → Script → Exécuter le fichier de script commande de menu.
Dans le Sélectionner le fichier de script boîte de dialogue, sélectionnez le script Python qui doit être exécuté.
Toutes les sorties sont affichées dans le Messages vue dans le Script catégorie.
Message Service: Fonctionnalité de la plateforme d'automatisation pour afficher différentes invites qui peuvent ensuite être traitées automatiquement si nécessaire
Message Key Identifiant unique d'une invite générée via le message service. Toutes les invites ne possèdent pas de message key. Ces clés sont généralement masquées, mais peuvent être affichées via la propriété
system.log_prompt_details(voir ci-dessous: Propriété:system.log_prompt_details).
Propriété: system.script_prompt_handling
Vous pouvez utiliser la propriété system.script_prompt_handling pour spécifier si et comment les invites du message service sont traitées automatiquement.
Les valeurs ScriptPromptHandling.LogPrompts et ScriptPromptHandling.ForwardUnknownPrompts sont assignés.
La valeur
ScriptPromptHandling.ForwardUnknownPromptsspécifie que toutes les invites sans entrée correspondante danssystem.prompt_answerssont transmis au message service sous-jacent.La valeur
ScriptPromptHandling.LogPromptsspécifie que, pour toutes les invites avec une entrée danssystem.prompt_answersest affiché dans la vue des messages, avec quelles valeurs l'invite a été confirmée.
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts
Les valeurs ScriptPromptHandling.LogPrompts et ScriptPromptHandling.AlwaysForwardPrompts sont assignés.
La valeur
ScriptPromptHandling.AlwaysForwardPromptsprécise que tous Les invites sont transmises au message service sous-jacent. Les entrées correspondantes dans « system.prompt_answers » sont ignorées.ScriptPromptHandling.LogPromptsn'a aucun effet dans ce cas carScriptPromptHandling.AlwaysForwardPromptsa la priorité la plus élevée et remplace toutes les autres options.
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.AlwaysForwardUnknown
Important
Les conditions supplémentaires suivantes s'appliquent à toutes les invites qui nécessitent une interaction utilisateur supplémentaire (par exemple, la sélection de cases à cocher) lorsque seules ScriptPromptHandling.SuppressPrompts ou ScriptPromptHandling.LogPrompt est défini :
Toutes les invites sans message key sont transmises au message service sous-jacent.
Toutes les invites avec une message key nécessitent une entrée dans
system.prompt_answers.
Propriété: system.process_script_prompts
Avec le system.process_script_prompts propriété, vous pouvez spécifier si les invites générées via system.ui devraient également être traités par le message handling de CODESYS Scripting.
Dans l'exemple suivant, le traitement des invites, qui sont générées via CODESYS Scripting, est activé.
Lorsque ce script est exécuté, l'invite d'informations générée est traitée par le message handling de CODESYS Scripting et le résultat est affiché dans la vue des messages.
system.process_script_prompts = True
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")Dans l'exemple suivant, le traitement des invites, qui sont générées via CODESYS Scripting, est désactivé.
Lorsque ce script est exécuté, une invite d'informations s'ouvre qui n'est pas traitée par la message handling de CODESYS Scripting.
system.process_script_prompts = False
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")Propriété: system.log_prompt_details
Avec le system.log_prompt_details Cette propriété permet de spécifier si tous les détails d'une invite doivent être affichés dans la vue des messages avant traitement. Ceci est particulièrement utile si la réponse à une invite plus complexe doit être stockée dans system.prompt_answers. Étant donné que la message key d'une invite est également affichée, la méthode peut être utilisée pour déterminer la message key correspondante à utiliser dans system.prompt_answers, Par exemple.
Dans l'exemple suivant, la journalisation des détails de l'invite est activé. Après cela, une invite avec des options supplémentaires est générée.
Lorsque ce script est exécuté, l’invite apparaît et toutes les informations sur cette invite sont affichées dans la vue du message.
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")Dans l'exemple suivant, la journalisation des détails de l'invite est désactivé. Après cela, une invite avec des options supplémentaires est générée.
Lors de l'exécution de ce script, l'invite s'affiche. Aucune information relative à l'invite n'est affichée dans la vue des messages.
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")Propriété: system.prompt_answers
Avec le system.prompt_answers propriété, vous pouvez spécifier comment les réponses doivent être apportées à des invites spécifiques.
C'est nécessaire
Lorsque les invites ne doivent pas recevoir de réponse avec les valeurs par défaut définies
Pour les invites qui nécessitent une interaction supplémentaire de l'utilisateur (par exemple, la sélection de cases à cocher)
Important
Seules les réponses aux invites avec une message key peuvent être stockées.
Invites sans options de sélection supplémentaires
Dans l'exemple suivant, la manière dont la réponse aux invites avec le message_key_1 la message key doit être effectuée est stockée dans system.prompt_answers. Dans cet exemple, toutes les invites avec cette message key reçoivent une réponse avec OK répondu.
Lorsque ce script est exécuté, deux invites sont générées l'une après l'autre.
La première invite avec le
message_key_1la message key est traitée automatiquement et le résultat est affiché dans la vue du message.La deuxième invite avec le
message_key_2la message key s'affiche.
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")Invites avec sélection unique supplémentaire
Pour les invites qui attendent la sélection d'une option parmi une liste d'options possibles, l'option qui doit être sélectionnée doit être stockée dans system.prompt_answers pour la message key correspondante.
Il y a deux options pour cela :
Spécifiez l'index de base zéro de l'option souhaitée
Stocker un délégué de type
MultipleChoiceSelector
Dans l'exemple suivant, l'index est stocké dans system.prompt_answers, qui doit être utilisé pour toutes les invites avec le 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")Dans l'exemple suivant, un délégué de type MultipleChoiceSelector est stocké dans system.prompt_answers qui devrait être utilisé pour toutes les invites avec le 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")Invites avec sélection multiple supplémentaire
Pour les invites qui attendent la sélection de plusieurs options à partir d'une liste d'options possibles, les options qui doivent être sélectionnées et le résultat avec lequel l'invite doit répondre doivent être enregistrés dans system.prompt_answers pour la message key correspondante.
Il y a deux options pour cela :
Spécifiez l'index de base zéro de l'option souhaitée
Stocker un délégué de type
MultipleChoiceSelector
Dans l'exemple suivant, un tuple est stocké dans system.prompt_answers qui contient tout d'abord le PromptResult à utiliser et contient deuxièmement un délégué de type PromptChoiceFilter.
Lors de l'exécution du script, la réponse à l'invite est automatique et le résultat s'affiche dans la vue Message. Pour les options individuelles, Boolean est utilisé pour spécifier s'ils ont été sélectionnés.
# 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")Invites avec des options de sélection supplémentaires spécifiques à l'application
Dans l'exemple suivant, un tuple est stocké dans system.prompt_answers qui contient tout d'abord le PromptResult à utiliser et contient deuxièmement un délégué de type PromptCustomControlValueProvider.
L'exemple suivant montre comment un tel délégué est implémenté et stocké dans system.prompt_answers. Les identifiants des sous-contrôles individuels peuvent être lus via 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))