Manejo de mensajes con CODESYS Scripting Scripting
Requisitos: CODESYS V3.5 SP17 o más reciente con instalado CODESYS Scripting Versión 4.2.0.0
Preparativos: Copie el ejemplo de código deseado a un archivo y guárdelo como un script de Python con cualquier nombre.
Para ejecutar el script de Python guardado, siga estos pasos:
Comenzar CODESYS.
Haga clic en el Herramientas → Scripting → Ejecutar archivo de script comando de menú.
En el Seleccionar archivo de script En el cuadro de diálogo, seleccione el script de Python que debe ejecutarse.
Todas las salidas se muestran en el Mensajes vista en el Scripting categoría.
Message Service: Funcionalidad de la Plataforma de Automatización para mostrar diferentes avisos que luego pueden procesarse automáticamente si es necesario
Message Key Identificador único de un mensaje generado mediante el message service. No todos los mensajes tienen una message key. Las claves de mensaje de los mensajes suelen estar ocultas, pero pueden mostrarse mediante la propiedad
system.log_prompt_details(vea abajo: Propiedad:system.log_prompt_details).
Propiedad: system.script_prompt_handling
Puedes utilizar la propiedad system.script_prompt_handling para especificar si los mensajes del message service se procesan automáticamente y cómo.
Los valores ScriptPromptHandling.LogPrompts y ScriptPromptHandling.ForwardUnknownPrompts están asignados.
El valor
ScriptPromptHandling.ForwardUnknownPromptsespecifica que todos los mensajes sin una entrada coincidente ensystem.prompt_answersse reenvían al message service subyacente.El valor
ScriptPromptHandling.LogPromptsespecifica que, para todas las indicaciones con una entrada ensystem.prompt_answersSe muestra en la vista de mensajes con qué valores se confirmó la solicitud.
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts
Los valores ScriptPromptHandling.LogPrompts y ScriptPromptHandling.AlwaysForwardPrompts están asignados.
El valor
ScriptPromptHandling.AlwaysForwardPromptsespecifica que todo Las solicitudes se reenvían al message service subyacente. Las entradas coincidentes en "system.prompt_answers" se ignoran.ScriptPromptHandling.LogPromptsno tiene efecto en este caso porqueScriptPromptHandling.AlwaysForwardPromptstiene la máxima prioridad y anula todas las demás opciones.
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.AlwaysForwardUnknown
Importante
Las siguientes condiciones adicionales se aplican a todos los mensajes que requieren una interacción adicional del usuario (por ejemplo, seleccionar casillas de verificación) cuando solo ScriptPromptHandling.SuppressPrompts o ScriptPromptHandling.LogPrompt se establece:
Todos los mensajes sin una message key se reenvían al message service subyacente.
Todos los mensajes con una message key requieren una entrada en
system.prompt_answers.
Propiedad: system.process_script_prompts
Con el system.process_script_prompts propiedad, puede especificar si las solicitudes se generan a través de system.ui También debe ser procesado por el message handling de CODESYS Scripting.
En el siguiente ejemplo, el procesamiento de las indicaciones, que se generan a través de CODESYS Scripting, está habilitado.
Cuando se ejecuta este script, el mensaje de información generado se procesa mediante el message handling de CODESYS Scripting y el resultado se muestra en la vista de mensajes.
system.process_script_prompts = True
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")En el siguiente ejemplo, el procesamiento de las indicaciones, que se generan a través de CODESYS Scripting, está deshabilitado.
Cuando se ejecuta este script, se abre un mensaje de información que no es procesado por el message handling de CODESYS Scripting.
system.process_script_prompts = False
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")Propiedad: system.log_prompt_details
Con el system.log_prompt_details Propiedad, puede especificar si todos los detalles de una solicitud deben mostrarse en la vista de mensajes antes de procesarla. Esto es especialmente útil si la respuesta a una solicitud más compleja debe almacenarse en system.prompt_answers. Debido a que la message key de un mensaje también se emite, el método se puede utilizar para determinar la message key correspondiente para su uso en system.prompt_answers, Por ejemplo.
En el siguiente ejemplo, el registro para obtener detalles del mensaje es activado. Después de eso, se genera un mensaje con opciones adicionales.
Cuando se ejecuta este script, aparece el mensaje y toda la información sobre este mensaje se muestra en la vista de mensajes.
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")En el siguiente ejemplo, el registro para obtener detalles del mensaje es desactivado. Después de eso, se genera un mensaje con opciones adicionales.
Al ejecutar este script, aparece el mensaje. No se muestra información sobre el mensaje en la vista de mensajes.
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")Propiedad: system.prompt_answers
Con el system.prompt_answers propiedad, puede especificar cómo se deben responder a solicitudes específicas.
Esto es necesario
Cuándo no se deben responder las indicaciones con los valores predeterminados establecidos
Para indicaciones que requieren interacción adicional del usuario (por ejemplo, seleccionar casillas de verificación)
Importante
Sólo se pueden almacenar respuestas a mensajes con una message key .
Indicaciones sin opciones de selección adicionales
En el siguiente ejemplo, la forma en que se responde a las indicaciones con el message_key_1 La message key que se debe guardar se almacena en system.prompt_answers En este ejemplo, todas las indicaciones con esta message key se responden con OK Respondido.
Cuando se ejecuta este script, se generan dos mensajes uno tras otro.
El primer mensaje con el
message_key_1La message key se procesa automáticamente y el resultado se muestra en la vista del mensaje.El segundo mensaje con el
message_key_2Se muestra 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")Avisos con selección individual adicional
Para los mensajes que esperan la selección de una opción de una lista de opciones posibles, la opción que debe seleccionarse debe almacenarse en system.prompt_answers para la message key correspondiente.
Hay dos opciones para esto:
Especifique el índice basado en cero de la opción deseada
Almacenar un delegado de tipo
MultipleChoiceSelector
En el siguiente ejemplo, el índice se almacena en system.prompt_answers, que debe utilizarse para todos los mensajes con el 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")En el siguiente ejemplo, un delegado de tipo MultipleChoiceSelector se almacena en system.prompt_answers que debe utilizarse para todos los mensajes con el 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")Avisos con selección múltiple adicional
Para los mensajes que esperan la selección de múltiples opciones de una lista de opciones posibles, las opciones que se deben seleccionar y el resultado con el que el mensaje debe responder se deben guardar en system.prompt_answers para la message key correspondiente.
Hay dos opciones para esto:
Especifique el índice basado en cero de la opción deseada
Almacenar un delegado de tipo
MultipleChoiceSelector
En el siguiente ejemplo, una tupla se almacena en system.prompt_answers que contiene en primer lugar el PromptResult para ser utilizado y en segundo lugar contiene un delegado de tipo PromptChoiceFilter.
Al ejecutar el script, se responde automáticamente al mensaje y el resultado se muestra en la vista de mensajes. Para cada opción, Boolean Se utiliza para especificar si han sido seleccionados.
# 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")Avisos con opciones de selección adicionales específicas de la aplicación
En el siguiente ejemplo, una tupla se almacena en system.prompt_answers que contiene en primer lugar el PromptResult para ser utilizado y en segundo lugar contiene un delegado de tipo PromptCustomControlValueProvider.
El siguiente ejemplo muestra cómo se implementa y se almacena dicho delegado en system.prompt_answers Los ID de los subcontroles individuales se pueden leer a través de 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))