Skip to main content

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:

  1. Comenzar CODESYS.

  2. Haga clic en el HerramientasScriptingEjecutar archivo de script comando de menú.

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

. Terminologí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.

ejemplo 34. Ejemplo 1

Los valores ScriptPromptHandling.LogPrompts y ScriptPromptHandling.ForwardUnknownPrompts están asignados.

  • El valor ScriptPromptHandling.ForwardUnknownPrompts especifica que todos los mensajes sin una entrada coincidente en system.prompt_answers se reenvían al message service subyacente.

  • El valor ScriptPromptHandling.LogPrompts especifica que, para todas las indicaciones con una entrada en system.prompt_answers Se muestra en la vista de mensajes con qué valores se confirmó la solicitud.

system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts


ejemplo 35. Ejemplo 2

Los valores ScriptPromptHandling.LogPrompts y ScriptPromptHandling.AlwaysForwardPrompts están asignados.

  • El valor ScriptPromptHandling.AlwaysForwardPrompts especifica que todo Las solicitudes se reenvían al message service subyacente. Las entradas coincidentes en "system.prompt_answers" se ignoran.

  • ScriptPromptHandling.LogPrompts no tiene efecto en este caso porque ScriptPromptHandling.AlwaysForwardPrompts tiene 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.

ejemplo 36. Ejemplo 1

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


ejemplo 37. Ejemplo 2

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.

ejemplo 38. Ejemplo 1

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


ejemplo 39. Ejemplo 2

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_1 La message key se procesa automáticamente y el resultado se muestra en la vista del mensaje.

  • El segundo mensaje con el message_key_2 Se 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

ejemplo 40. Ejemplo 1

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


ejemplo 41. Ejemplo 2

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

ejemplo 42. Ejemplo

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.

ejemplo 43. Ejemplo

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