Gestione dei messaggi con CODESYS Scripting Scrittura di script
Requisiti: CODESYS V3.5 SP17 o più recente con installato CODESYS Scripting Versione 4.2.0.0
Preparativi: Copia l'esempio di codice desiderato in un file e salvalo come script Python con un nome qualsiasi.
Per eseguire lo script Python salvato, seguire questi passaggi:
Inizio CODESYS.
Fare clic su Utensili → Scrittura di script → Esegui file script comando di menu.
Nel Seleziona file script finestra di dialogo, seleziona lo script Python che deve essere eseguito.
Tutti gli output vengono visualizzati in Messaggi vista nel Scrittura di script categoria.
Message Service: Funzionalità della piattaforma di automazione per visualizzare diversi prompt che possono poi essere elaborati automaticamente se necessario
Message Key: Identificatore univoco per un prompt generato tramite il message service. Non tutti i prompt hanno una message key. Le chiavi di messaggio dei prompt sono normalmente nascoste, ma possono essere visualizzate utilizzando la proprietà
system.log_prompt_details(vedi sotto: Proprietà:system.log_prompt_details).
Proprietà: system.script_prompt_handling
Puoi usare la proprietà system.script_prompt_handling per specificare se e come i prompt message service vengono elaborati automaticamente.
I valori ScriptPromptHandling.LogPrompts E ScriptPromptHandling.ForwardUnknownPrompts sono assegnati.
Il valore
ScriptPromptHandling.ForwardUnknownPromptsspecifica che tutti i prompt senza una voce corrispondente insystem.prompt_answersvengono inoltrati al message service sottostante.Il valore
ScriptPromptHandling.LogPromptsspecifica che, per tutti i prompt con una voce insystem.prompt_answersviene visualizzato nella vista messaggi con quali valori è stata confermata la richiesta.
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts
I valori ScriptPromptHandling.LogPrompts E ScriptPromptHandling.AlwaysForwardPrompts sono assegnati.
Il valore
ScriptPromptHandling.AlwaysForwardPromptsspecifica che Tutto I prompt vengono inoltrati al message service sottostante. Le voci corrispondenti in "system.prompt_answers" vengono ignorate.ScriptPromptHandling.LogPromptsnon ha alcun effetto in questo caso perchéScriptPromptHandling.AlwaysForwardPromptsha la priorità più alta e sostituisce tutte le altre opzioni.
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.AlwaysForwardUnknown
Importante
Le seguenti condizioni aggiuntive si applicano a tutti i prompt che richiedono un'interazione aggiuntiva dell'utente (ad esempio, la selezione di caselle di controllo) quando solo ScriptPromptHandling.SuppressPrompts O ScriptPromptHandling.LogPrompt è impostato:
Tutti i prompt senza una message key vengono inoltrati al message service sottostante.
Tutti i prompt con una message key richiedono un'immissione in
system.prompt_answers.
Proprietà: system.process_script_prompts
Con il system.process_script_prompts proprietà, è possibile specificare se i prompt generati tramite system.ui dovrebbe essere elaborato anche dalla message handling di CODESYS Scripting.
Nell'esempio seguente, l'elaborazione dei prompt, che vengono generati tramite CODESYS Scripting, è abilitato.
Quando questo script viene eseguito, il prompt informativo generato viene elaborato dalla message handling di CODESYS Scripting e il risultato viene visualizzato nella vista messaggi.
system.process_script_prompts = True
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")Nell'esempio seguente, l'elaborazione dei prompt, che vengono generati tramite CODESYS Scripting, è disabilitato.
Quando questo script viene eseguito, si apre un prompt informativo che non viene elaborato dalla message handling di CODESYS Scripting.
system.process_script_prompts = False
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")Proprietà: system.log_prompt_details
Con il system.log_prompt_details proprietà, è possibile specificare se tutti i dettagli di un prompt debbano essere visualizzati nella vista messaggi prima dell'elaborazione. Ciò è particolarmente utile se la risposta per un prompt più complesso deve essere memorizzata in system.prompt_answers Poiché viene emessa anche la message key di un prompt, il metodo può essere utilizzato per determinare la message key corrispondente da utilizzare in system.prompt_answers, Per esempio.
Nell'esempio seguente, la registrazione per i dettagli del prompt è abilitato Successivamente, viene generato un prompt con opzioni aggiuntive.
Quando questo script viene eseguito, viene visualizzato il prompt e tutte le informazioni su questo prompt vengono visualizzate nella vista messaggi.
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")Nell'esempio seguente, la registrazione per i dettagli del prompt è disabile Successivamente, verrà generato un prompt con opzioni aggiuntive.
Quando questo script viene eseguito, viene visualizzato il prompt. Nella vista messaggi non vengono visualizzate informazioni sul prompt.
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")Proprietà: system.prompt_answers
Con il system.prompt_answers proprietà, è possibile specificare come devono essere fornite le risposte a richieste specifiche.
Questo è necessario
Quando non si deve rispondere alle richieste con i valori predefiniti impostati
Per richieste che richiedono un'interazione aggiuntiva da parte dell'utente (ad esempio, la selezione di caselle di controllo)
Importante
È possibile memorizzare solo le risposte ai prompt con una message key .
Prompt senza opzioni di selezione aggiuntive
Nell'esempio seguente, il modo in cui la risposta ai prompt con il message_key_1 la message key dovrebbe essere eseguita è memorizzata in system.prompt_answers In questo esempio, a tutte le richieste con questa message key viene risposto con OK risposto.
Quando questo script viene eseguito, vengono generati due prompt uno dopo l'altro.
Il primo prompt con il
message_key_1la message key viene elaborata automaticamente e il risultato viene visualizzato nella vista del messaggio.Il secondo prompt con il
message_key_2viene visualizzata la message 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")Prompt con selezione singola aggiuntiva
Per i prompt che prevedono la selezione di un'opzione da un elenco di opzioni possibili, l'opzione che deve essere selezionata deve essere memorizzata in system.prompt_answers per la message key corrispondente.
Ci sono due opzioni per farlo:
Specificare l'indice a base zero dell'opzione desiderata
Memorizza un delegato di tipo
MultipleChoiceSelector
Nell'esempio seguente, l'indice è memorizzato in system.prompt_answers, che dovrebbe essere utilizzato per tutti i prompt con il 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")Nell'esempio seguente, un delegato di tipo MultipleChoiceSelector è immagazzinato in system.prompt_answers che dovrebbe essere utilizzato per tutti i prompt con il 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")Prompt con selezione multipla aggiuntiva
Per i prompt che prevedono la selezione di più opzioni da un elenco di opzioni possibili, le opzioni che devono essere selezionate e il risultato con cui il prompt deve rispondere devono essere salvati in system.prompt_answers per la message key corrispondente.
Ci sono due opzioni per farlo:
Specificare l'indice a base zero dell'opzione desiderata
Memorizza un delegato di tipo
MultipleChoiceSelector
Nell'esempio seguente, una tupla è memorizzata in system.prompt_answers che contiene innanzitutto il PromptResult da utilizzare e in secondo luogo contiene un delegato di tipo PromptChoiceFilter.
Quando lo script viene eseguito, la richiesta riceve automaticamente una risposta e il risultato viene visualizzato nella vista messaggi. Per le singole opzioni, Boolean viene utilizzato per specificare se sono stati selezionati.
# 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")Prompt con opzioni di selezione aggiuntive specifiche dell'applicazione
Nell'esempio seguente, una tupla è memorizzata in system.prompt_answers che contiene innanzitutto il PromptResult da utilizzare e in secondo luogo contiene un delegato di tipo PromptCustomControlValueProvider.
L'esempio seguente mostra come un tale delegato viene implementato e memorizzato in system.prompt_answers Gli ID dei singoli sottocontrolli possono essere letti tramite 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))