Skip to main content

Gestión de la CODESYS Virtual Safe Control SL a través de la línea de comandos

Para administrar y utilizar el CODESYS Virtual Safe Control SL en un dispositivo Linux, puede interactuar directamente con el VirtualControlAPI a través de la línea de comandos.

El VirtualControlAPI es una herramienta de línea de comandos basada en Python para administrar CODESYS Virtual Safe Control SL en sistemas Linux y también lo utiliza el CODESYS Control SL Deploy Tool.

Requisitos

  • Dispositivo con un sistema operativo basado en Linux

  • Python 3 (>= 3.9)

  • Guion: VirtualControlAPI.py

. Tienes dos formas de conseguirlo VirtualControlAPI.py guion:
  • Opción 1 (recomendada):

    Si aún no lo ha hecho, instale el CODESYS Virtual Control for Linux SL paquete a tu CODESYS Instalación en Windows. Después de eso, encontrará el VirtualControlAPI.py script en el directorio <CODESYS installation directory> \CODESYS Virtual Control for Linux SL\Delivery\virtuallinux\VirtualControlAPI.py.

  • Opción 2:

    Descargar el CODESYS Virtual Control for Linux SL paquete de la tienda y extraiga el .package paquete (por ejemplo, CODESYS Virtual Control for Linux SL 4.18.0.0.package) con cualquier programa ZIP. En el directorio extraído, encontrará el VirtualControlAPI.py guión bajo Delivery\virtuallinux\VirtualControlAPI.py.

Uso

El script de Python VirtualControlAPI.py Es posible que deba ejecutarse como usuario root. El script realiza tareas como modificar los registros de contenedor y los espacios de nombres de los adaptadores de red.

sudo python3 VirtualControlAPI.py <command>

Puede utilizar el siguiente comando para mostrar ayuda para todas las opciones, parámetros y descripciones posibles:

sudo python3 VirtualControlAPI.py --help

Flujo de trabajo típico

  1. Importar una imagen de contenedor al registro local

    Para cargar una imagen en el registro, utilice el comando --import-image y pasar el nombre del .tar.gz Archivo donde se encuentra la imagen. Esto transfiere la imagen al registro local.

    ejemplo 5. Ejemplo:
    sudo python3 VirtualControlAPI.py --import-image Docker_codesyscontrol_virtuallinux_4.19.0.0_amd64.tar.gz


    Para ver qué imágenes ya existen en el registro local, utilice el comando:

    sudo python3 VirtualControlAPI.py --list-images

    Sólo imágenes que cumplan con los criterios de la VirtualControlAPI se mostrará.

  2. Creando una instancia

    Para crear una instancia de tiempo de ejecución, se utiliza el siguiente comando:

    sudo python3 VirtualControlAPI.py --add-instance <instance name>

    Si desea crear una instancia de EdgeGateway o una instancia de Safe Runtime, especifíquelo al final del comando.

    udo python3 VirtualControlAPI.py --add-instance <instance name> --safety
    sudo python3 VirtualControlAPI.py --add-instance <instance name> --gateway

    Esto es necesario porque los diferentes tipos de instancias están equipados con diferentes configuraciones y parámetros predeterminados.

  3. Configurando la instancia

    Para configurar la instancia creada, es recomendable revisar primero los parámetros de configuración disponibles. Para ello, el siguiente comando muestra el archivo de configuración formateado:

    sudo python3 VirtualControlAPI.py --get-configuration <instance name>

    Los parámetros enumerados a continuación CONFIG_KEY Generalmente son todos configurables y se pueden editar con el siguiente comando:

    sudo python3 VirtualControlAPI.py --configure <instance name> [set/add/remove] <CONFIG_KEY> <value>
    • set sobrescribirá el valor actual.

    • add Agregará valores.

    • remove eliminará el valor actual.

    Por lo general, para un primer inicio, solo se configura el CONFIG_KEY Se requiere una imagen. Para ello, ejecute el siguiente comando y reemplace la imagen con la correspondiente. Para mostrar todas las imágenes, puede usar el comando --list-images.

    ejemplo 6. Ejemplo
    sudo python3 VirtualControlAPI.py --configure <instance name> set Image codesyscontrol_virtuallinux:4.19.0.0


    Importante

    Para que una instancia pueda configurarse, debe estar en estado detenido.

  4. Iniciar y detener la instancia

    La instancia se iniciará con la opción --run y se detuvo con la opción --stop.

    sudo python3 VirtualControlAPI.py --run <instance name>
    sudo python3 VirtualControlAPI.py --stop <instance name>

Para obtener más información sobre las opciones y los códigos de salida, ejecute el comando sudo python3 VirtualControlAPI.py --help.

Ejemplo de escenario de "The Safe House" mediante scripts

Los siguientes subíndices describen, por ejemplo, cómo se puede lograr el escenario de "The Safe House" a través de la VirtualControlAPI.

Importante

El artículo "Casa Segura" explica otros aspectos técnicos relevantes para el funcionamiento de un controlador seguro. Consulte esta página de ayuda, así como la documentación de seguridad del fabricante del dispositivo, para obtener toda la información sobre seguridad o certificación.

Preparativos

Para obtener el VirtualControlAPI.py guión, así como las últimas versiones de las imágenes de la CODESYS Virtual Control for Linux SL, siga las instrucciones desde el paso Requisitos del capítulo anterior. Repita el procedimiento para CODESYS Virtual Safe Control SL para descargar las imágenes para CODESYS Virtual Safe Control SL y CODESYS Virtual Safe Time Provider SL. Las imágenes del contenedor se pueden encontrar en los siguientes directorios, según el método:

  • Opción 1:

    Las imágenes del contenedor se almacenan como tar.gz archivos en el siguiente directorio:

    <CODESYS installation directory>\CODESYS Virtual Control for Linux SL\Delivery\<product>\

    <CODESYS installation directory>\CODESYS Virtual Safe Control SL\Delivery\<product>\

  • Opción 2:

    Las imágenes del contenedor se almacenan como tar.gz archivos en el siguiente directorio de la CODESYS paquete:

    Delivery\<product>\

  • Opción 3 – Scripting:

    La opción 2 también se puede implementar mediante scripts. Consulte el siguiente script de ejemplo para descargar y descomprimir el archivo. CODESYS paquete, así como para enviar las imágenes a la infraestructura de su empresa.

    Sugerencia

    Tenga en cuenta las condiciones de licencia para utilizar un CODESYS software.

    DownloadUnpackPush.cmd

    @echo off
    setlocal EnableDelayedExpansion
    
    REM ===== Configuration =====
    set ZIP_URL_vControl=https://store.codesys.com/ftp_download/3S/VirtualLinuxSL/000138/4.18.0.0/CODESYS%%20Virtual%%20Control%%20for%%20Linux%%20SL%%204.18.0.0.package
    set ZIP_URL_vSafe=https://store.codesys.com/ftp_download/3S/VirtualSafeSL/000139/4.18.0.0/CODESYS%%20Virtual%%20Safe%%20Control%%20SL%%204.18.0.0.package
    
    set ZIP_FILE_vControl=%TEMP%\CODESYS Virtual Control for Linux SL 4.18.0.0.package
    set ZIP_FILE_vSafe=%TEMP%\CODESYS Virtual Safe Control SL 4.18.0.0.package
    
    set DEST_DIR=C:\ExtractedFiles
    set "vControlDir=%DEST_DIR%\vControl"
    set "vSafeDir=%DEST_DIR%\vSafe"
    
    set "REGISTRY=example.registry.com"
    
    REM ===== Create destination folder =====
    if not exist "%vControlDir%" mkdir "%vControlDir%"
    if not exist "%vSafeDir%" mkdir "%vSafeDir%"
    
    REM ===== Download ZIP =====
    curl -L --ssl-no-revoke --no-keepalive --retry 5 --retry-delay 2 -o "%ZIP_FILE_vControl%" "%ZIP_URL_vControl%"
    curl -L --ssl-no-revoke --no-keepalive --retry 5 --retry-delay 2 -o "%ZIP_FILE_vSafe%" "%ZIP_URL_vSafe%"
    
    REM ===== Extract ZIP =====
    "C:\Program Files\7-Zip\7z.exe" x "%ZIP_FILE_vControl%" -o"%vControlDir%" -y
    "C:\Program Files\7-Zip\7z.exe" x "%ZIP_FILE_vSafe%" -o"%vSafeDir%" -y
    
    REM ===== load images to docker and push to registry =====
    
    for /f "tokens=3 delims=: " %%I in ('docker load -i "%vControlDir%\Delivery\virtuallinux\Docker_codesyscontrol_virtuallinux_4.18.0.0_amd64.tar.gz"')
        do (
        docker tag %%I %REGISTRY%/%%I
        docker push %REGISTRY%/%%I
    )
    for /f "tokens=3 delims=: " %%I in ('docker load -i "%vControlDir%\Delivery\edgeamd64\Docker_codesysedge_edgeamd64_4.18.0.0_amd64.tar.gz"')
         do (
        docker tag %%I %REGISTRY%/%%I
        docker push %REGISTRY%/%%I
    )
    
    for /f "tokens=3 delims=: " %%I in ('docker load -i "%vSafeDir%\Delivery\linuxsafei386\Docker_codesyssafecontrol_linuxsafei386_4.18.0.0_i386.tar.gz"')
         do (
        docker tag %%I %REGISTRY%/%%I
        docker push %REGISTRY%/%%I
    )
    for /f "tokens=3 delims=: " %%I in ('docker load -i "%vSafeDir%\Delivery\linuxsafetimeprovider\Docker_codesyssafetimeprovider_linuxsafetimeprovider_4.18.0.0_amd64.tar.gz"')
         do (
        docker tag %%I %REGISTRY%/%%I
        docker push %REGISTRY%/%%I
    )
    
    echo Done.
    endlocal
    pause

Preparación adicional:

De la misma manera, descargue los paquetes para CODESYS License Server for Linux SL y CODESYS CodeMeter para Linux SL.

Porque CODESYS Virtual Control for Linux SL Solo se puede obtener una licencia mediante licencia de red; estos dos paquetes son necesarios para obtenerla. Este paso no es necesario para una configuración de prueba, pero se recomienda y se incluye en los siguientes scripts.

Transferencia del script, los paquetes Debian y las imágenes del contenedor al controlador

Para una sola aplicación, puede transferir los archivos individuales desde el CODESYS paquetes directamente a los dispositivos de destino. Por ejemplo, con pscp:

pscp -pw password <PathToDockerImage.tar.gz> user@<IP>:~/

Si las imágenes del contenedor, VirtualControlAPI.py, y todos los paquetes Debian necesarios se han cargado en un servidor interno o en un registro de contenedor interno, entonces también puede obtenerlos directamente desde allí.

#!/bin/bash docker pull example.registry.com/codesyscontrol_virtuallinux:4.18.0.0
docker pull example.registry.com/codesyssafecontrol_linuxsafei386:4.18.0.0
docker pull example.registry.com/codesysedge_edgeamd64:4.18.0.0

curl my-server-url/VirtualControlAPI.py -o VirtualControlAPI.py

Guión para la configuración automática del escenario "The Safe House"

Nota

Los siguientes scripts son solo ejemplos. Es posible que deba realizar ajustes en la versión, los adaptadores de red, las direcciones IP, etc.

En los siguientes ejemplos, se supone que los archivos individuales se han transferido directamente al controlador después de ser extraídos del CODESYS paquete. Adapte los scripts según su caso de uso.

PC host Linux 2

Navegue hasta el directorio que contiene VirtualControlAPI.py así como el .tar.gzImágenes de contenedor comprimidas. Adapte el siguiente script a su plataforma y ejecútelo.

SetupExample_LinuxHostPC2.sh

#!/bin/bash

# load images into registry
docker load -i Docker_codesyssafetimeprovider_linuxsafetimeprovider_4.18.0.0_amd64.tar.gz

# create timeprovider instance and configure
python3 VirtualControlAPI.py -a timeprovider --timeprovider
python3 VirtualControlAPI.py -c timeprovider set Image codesyssafetimeprovider_linuxsafetimeprovider:4.18.0.0
python3 VirtualControlAPI.py -c timeprovider set GenericCommands -e TARGET_IP=10.0.0.4 -e TARGET_PORT=60000

python3 VirtualControlAPI.py -r timeprovider

PC host Linux

Navegue hasta el directorio que contiene VirtualControlAPI.py así como las imágenes de contenedor comprimidas en .tar.gz. Adapte el siguiente script a su plataforma específica y ejecútelo.

SetupExample_LinuxHostPC.sh

#!/bin/bash

# load images into registry
docker load -i Docker_codesyscontrol_virtuallinux_4.18.0.0_amd64.tar.gz
docker load -i Docker_codesysedge_edgeamd64_4.18.0.0_amd64.tar.gz
docker load -i Docker_codesyssafecontrol_linuxsafei386_4.18.0.0_i386.tar.gz
dpkg -i codemeter-lite_8.30.6885.501_amd64.deb
dpkg -i codesyslicenseserver_licenseserver_4.18.0.0_all.deb

# create runtime instance and configure
python3 VirtualControlAPI.py -a vPLC
python3 VirtualControlAPI.py -c vPLC set Image codesyscontrol_virtuallinux:4.18.0.0
python3 VirtualControlAPI.py -c vPLC set Ipc shareable
python3 VirtualControlAPI.py -c vPLC set LicenseServer 10.0.0.4

# create edge gateway instance and configure
python3 VirtualControlAPI.py -a vGateway --gateway
python3 VirtualControlAPI.py -c vGateway set Image codesysedge_edgeamd64:4.18.0.0

# create safe runtime instance and configure
python3 VirtualControlAPI.py -a vSafePLC --safety
python3 VirtualControlAPI.py -c vSafePLC set Image codesyssafecontrol_linuxsafei386:4.18.0.0
python3 VirtualControlAPI.py -c vSafePLC set Ipc container:vPLC
python3 VirtualControlAPI.py -c vSafePLC set Dependencies vPLC

python3 VirtualControlAPI.py --run-all

Una vez ejecutados los scripts en las computadoras respectivas, las instancias se configuran según el escenario y se encuentran en el Running Estado. Todos los dispositivos necesarios ya están listos. Los siguientes pasos para crear un proyecto e integrar PROFIsafe se describen en Extensión de seguridad de CODESYS documentación.

Script para actualizar las instancias de tiempo de ejecución

Solo se requieren unos pocos comandos para actualizar la versión de cada instancia. Detener, cambiar la imagen del contenedor y reiniciar las instancias no afectará ninguna otra configuración. Sin embargo, se beneficiará de todas las nuevas funciones y mejoras de la nueva versión.

Implemente las imágenes en el dispositivo como lo hizo en los pasos anteriores.

UpgradeVersions.sh

#!/bin/bash

# load images into registry
docker load -i Docker_codesyscontrol_virtuallinux_4.19.0.0_amd64.tar.gz
docker load -i Docker_codesysedge_edgeamd64_4.19.0.0_amd64.tar.gz
docker load -i Docker_codesyssafecontrol_linuxsafei386_4.19.0.0_i386.tar.gz

# stop all instances. If only selective instances should be upgraded, use python3 VirtualControlAPI.py -s <instance name> to only stop specific instances
python3 VirtualControlAPI.py --stop-all

# configure new images for instances
python3 VirtualControlAPI.py -c vPLC set Image codesyscontrol_virtuallinux:4.19.0.0
python3 VirtualControlAPI.py -c vGateway set Image codesysedge_edgeamd64:4.19.0.0
python3 VirtualControlAPI.py -c vSafePLC set Image codesyssafecontrol_linuxsafei386:4.19.0.0

# start all instances
python3 VirtualControlAPI.py --run-all

Solución de problemas

Error

Síntoma

Causa

Solución

Permiso denegado / Error de acceso

Mensaje de error: PermissionError: [Errno 13] Permission denied

El script requiere permisos superiores, por ejemplo, para acceder al registro de contenedores, a las rutas del sistema y para realizar cambios en los espacios de nombres de los adaptadores de red.

Ejecute el comando nuevamente con sudo.

sudo python3 VirtualControlAPI.py <command>

La imagen no se muestra en el registro

--list-images no muestra la imagen esperada.

La imagen no es compatible.

Solo imágenes que cumplan con los requisitos específicos CODESYS Se muestran los criterios.

Comprueba si es oficial CODESYS Virtual Control SL imagen.

La importación fue cancelada.

Ejecute la importación nuevamente.

sudo python3 VirtualControlAPI.py --import-image

Nombre de archivo incorrecto / archivo dañado

Validar que el tar.gz Está completo y se puede leer.

La instancia se bloquea al iniciarse

Tiempo de espera o intento de inicio sin fin

Mala configuración de la red

Comprueba la imagen

Etiqueta de imagen faltante o incorrecta

Validar la configuración

El tiempo de ejecución del contenedor (por ejemplo, Podman o Docker) no se inició

Reiniciar el entorno del contenedor