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
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.pyscript 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
.packagepaquete (por ejemplo, CODESYS Virtual Control for Linux SL 4.18.0.0.package) con cualquier programa ZIP. En el directorio extraído, encontrará elVirtualControlAPI.pyguión bajoDelivery\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
Importar una imagen de contenedor al registro local
Para cargar una imagen en el registro, utilice el comando
--import-imagey pasar el nombre del.tar.gzArchivo 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
VirtualControlAPIse mostrará.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.
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_KEYGeneralmente son todos configurables y se pueden editar con el siguiente comando:sudo python3 VirtualControlAPI.py --configure <instance name> [set/add/remove] <CONFIG_KEY> <value>
setsobrescribirá el valor actual.addAgregará valores.removeeliminará el valor actual.
Por lo general, para un primer inicio, solo se configura el
CONFIG_KEYSe 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. Ejemplosudo 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.
Iniciar y detener la instancia
La instancia se iniciará con la opción
--runy 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.gzarchivos 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.gzarchivos 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: | 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 python3 VirtualControlAPI.py <command> |
La imagen no se muestra en el registro |
| 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 | ||
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 |