Creación de scripts de EcoStruxure Machine Expert - API de Python

Descripción general

EcoStruxure Machine Expert incluye una API de Python que podrá utilizar en los scripts de EcoStruxure Machine Expert.

La API de Python consta de dos categorías:

  • API estándar de Python y módulos o paquetes de Python

  • API de Python de EcoStruxure Machine Expert

La API estándar de Python (para el tratamiento de cadenas, matrices, archivos, etc.) forma parte de la instalación de EcoStruxure Machine Expert. Para obtener ayuda detallada, consulte Internet (por ejemplo, https://docs.python.org/3/). Es posible ampliar la instalación de EcoStruxure Machine Expert con módulos y paquetes de Python disponibles en Internet.

Para automatizar EcoStruxure Machine Expert, se incluye también una API de Python de EcoStruxure Machine Expert en la instalación de EcoStruxure Machine Expert. Esta se utiliza, por ejemplo, para abrir o cerrar un proyecto, modificar el contenido de un proyecto o compilar un proyecto y descargarlo en un controlador.

El concepto de API de Python de EcoStruxure Machine Expert se describe en este capítulo. Consulte asimismo los ejemplos del motor de script. Para explorar la API de Python de EcoStruxure Machine Expert, consulte el capítulo Explorar la API de EcoStruxure Machine Expert.

Para obtener más información sobre las descripciones de los métodos o funciones y sus parámetros consulte la sección Motor de creación de scripts.

API de Python basada en la programación orientada a objetos

Para encontrar los métodos de API adecuados para sus scripts de Python, deberá estar familiarizado con el concepto de API de Python de EcoStruxure Machine Expert y con cómo esta se integra en el motor de script (ejecución del script). El concepto principal en el que se basa la API de Python de EcoStruxure Machine Expert es un enfoque de API orientado a objetos. La programación orientada a objetos (OOP) es un modelo de programación que se basa en dos conceptos: objetos y código. Los objetos son estructuras de datos que contienen datos en forma de campos, también denominados atributos. El código está disponible en forma de procedimientos, también denominados métodos. Los procedimientos de un objeto pueden acceder a los campos de datos del objeto con el que están asociados y modificarlos. Los programas informáticos diseñados a partir de la OOP están formados por objetos que interactúan unos con otros.

El reto que se plantea al escribir scripts es el de asignar la documentación detallada de la API de Python de EcoStruxure Machine Expert a los objetos adecuados para llamar los procedimientos.

Variables predefinidas y tipos

Cuando ejecuta un script o utiliza REPL (en LogicBuilderShell.exe o la vista Scripting Immediate), cuenta con un ámbito de script principal con variables predefinidas (y tipos). Puede utilizarlos en el script como forma de acceso a la API de Python de EcoStruxure Machine Expert. Para enumerar las variables predefinidas disponibles en el ámbito de script principal, inicie LogicBuilderShell.exe y ejecute dir().

Lista de variables predefinidas al ejecutar dir():

>>> dir()
['AccessRight', 'ApplicationState', 'ArchiveCategories', 'ChannelType', 'Compile
rMessage', 'ConflictResolve', 'ConnectorRole', 'CredentialSourceKind', 'DeviceID
', 'DeviceUserManagementFlags', 'DiagType', 'ExportReporter', 'Guid', 'Implement
ationLanguage', 'ImportReporter', 'MultipleChoiceSelector', 'NativeExportReporte
r', 'NativeImportFilter', 'NativeImportHandler', 'NativeImportResolve', 'NativeI
mportResult', 'ObjectPermissionKind', 'OnlineChangeOption', 'OperatingState', 'P
ermissionState', 'ProjectType', 'PromptChoice', 'PromptChoiceFilter', 'PromptHan
dling', 'PromptResult', 'ResetOption', 'SV_DEV', 'SV_POU', 'Severity', 'TimeoutE
xception', 'ValuesFailedException', 'Version', '__SoMachine__', '__builtins__',
'__doc__', '__file__', '__name__', 'communication_settings', 'compiler_settings'
, 'etest_test_provider', 'feature_settings_manager', 'librarymanager', 'libraryp
ackage_service', 'new_project', 'online', 'projects', 'system', 'visualization_s
ettings']

Las entradas predefinidas de esta lista escritas en minúscula corresponden a variables que hacen referencia a un objeto que proporciona métodos o campos. Se trata de un tipo de API global que funciona con o sin un proyecto de EcoStruxure Machine Expert cargado.

Por ejemplo, system, o projects o online.

  • system: Funcionalidad para la integración en EcoStruxure Machine Expert. Este objeto proporciona las funciones que se documentan en ISystemInterface, como el acceso a la vista Mensajes desde EcoStruxure Machine Expert, o el uso de ui_present para verificar si el programa se ejecuta en modalidad --noUI.

  • projects: Funcionalidad para la gestión de proyectos. Este objeto proporciona las funciones que se documentan en IScriptProjects Interface, como la carga y el archivado de proyectos. Además, es el punto de entrada a proyectos individuales.

  • online: Funcionalidad para el acceso en línea al controlador. Puede utilizar el método create_online_application para recuperar el objeto en línea específico (que se documenta en IScriptOnlineApplication) para un objeto de aplicación. Este objeto permite iniciar sesión en un controlador, iniciar la aplicación y leer los valores de las variables.

Para obtener más información,, consulte el apartado Referencia de la API del complemento del motor de scripts de la ayuda en línea de EcoStruxure Machine Expert.

Las entradas predefinidas de esta lista que comienzan por mayúscula corresponden a enumeraciones o bien tipos o clases que pueden utilizarse o instanciarse en el script de Python. Por ejemplo, DeviceID (clase) o Guid (clase) o PromptChoice (enumeración).

Búsqueda y navegación en la estructura de árbol de EcoStruxure Machine Expert

Un proyecto de EcoStruxure Machine Expert está formado por dispositivos, POU, DUT, GVL, etc., organizados en un árbol de objetos (consulte, por ejemplo, el árbol de dispositivos de Logic Builder). Este árbol de objetos (el árbol del proyecto) está vinculado a projects.primary. En projects.primary, la API permite buscar objetos mediante el método find(…). Puede desplazarse por el árbol del proyecto, por ejemplo, mediante el método get_children() para obtener los objetos hijo inmediatos (por ejemplo, los dispositivos controladores). En cada objeto hijo, puede llamar de nuevo get_children() para obtener los objetos hijo inmediatos de este, y así sucesivamente.

NOTA: Los métodos disponibles en los objetos del árbol del proyecto pueden variar de un objeto a otro en función de su tipo (POU, DUT, GVL o dispositivo). Se recomienda utilizar inspectapi.dir(…) para obtener una lista de los métodos de API disponibles para un objeto.

Ejemplos

Ejemplo de uso de una función de API global para abrir un proyecto:

projects.open("MyProject.project")

Ejemplo para buscar un objeto del árbol del proyecto y cambiarle el nombre (tras la carga de un proyecto):

myObject = projects.primary.find("SERCOSIII")[0]
myObject.rename("New_SERCOSIII_Name")

En la figura se muestra el objeto del árbol del proyecto en la interfaz de usuario y el árbol del proyecto recorrido impreso por un script:

Script de ejemplo para recorrer el árbol del proyecto (según la impresión anterior):

def print_tree_of_obj(treeobj, depth=0, verbose=False):
    name = treeobj.get_name(False)   
    if treeobj.is_device:
        deviceid = treeobj.get_device_identification()
        details = ""
        if verbose == True:
            details = " [Device {0}/{1}/{2}]".format(deviceid.type, deviceid.id, deviceid.version)
        print("{0} * {1}{2}".format("   "*depth, name, details))
    else:
        print("{0} * {1}".format("   "*depth, name))
   
    for child in treeobj.get_children(False):
        print_tree_of_obj(child, depth+1, verbose)
def print_tree_of_project(pro, verbose=False):
    if pro == None:
        print("No project open.")
    else:
        for obj in pro.get_children():
            print_tree_of_obj(obj, 0, verbose)
def print_tree(verbose=False):
    if projects.primary != None:
        print_tree_of_project(projects.primary, verbose)
    else:
        print("No project open.")
print_tree(True)