Skip to main content

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 :

  1. Commencer CODESYS.

  2. Cliquez sur le OutilsScriptExécuter le fichier de script commande de menu.

  3. 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.

. Terminologie
  • 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.

Exemple 34. Exemple 1

Les valeurs ScriptPromptHandling.LogPrompts et ScriptPromptHandling.ForwardUnknownPrompts sont assignés.

  • La valeur ScriptPromptHandling.ForwardUnknownPrompts spécifie que toutes les invites sans entrée correspondante dans system.prompt_answers sont transmis au message service sous-jacent.

  • La valeur ScriptPromptHandling.LogPrompts spécifie que, pour toutes les invites avec une entrée dans system.prompt_answers est affiché dans la vue des messages, avec quelles valeurs l'invite a été confirmée.

system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts


Exemple 35. Exemple 2

Les valeurs ScriptPromptHandling.LogPrompts et ScriptPromptHandling.AlwaysForwardPrompts sont assignés.

  • La valeur ScriptPromptHandling.AlwaysForwardPrompts précise que tous Les invites sont transmises au message service sous-jacent. Les entrées correspondantes dans « system.prompt_answers » sont ignorées.

  • ScriptPromptHandling.LogPrompts n'a aucun effet dans ce cas car ScriptPromptHandling.AlwaysForwardPrompts a 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.

Exemple 36. Exemple 1

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")


Exemple 37. Exemple 2

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.

Exemple 38. Exemple 1

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")


Exemple 39. Exemple 2

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_1 la 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_2 la 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

Exemple 40. Exemple 1

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")


Exemple 41. Exemple 2

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

Exemple 42. Exemple

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.

Exemple 43. Exemple

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))