Skip to main content

Gestire il CODESYS Virtual Safe Control SL tramite la riga di comando

Per gestire e utilizzare il CODESYS Virtual Safe Control SL su un dispositivo Linux, puoi interagire direttamente con il VirtualControlAPI tramite la riga di comando.

IL VirtualControlAPI è uno strumento da riga di comando basato su Python per la gestione del CODESYS Virtual Safe Control SL sui sistemi Linux ed è utilizzato anche da CODESYS Control SL Deploy Tool.

Requisiti

  • Dispositivo con sistema operativo basato su Linux

  • Python 3 (>= 3.9)

  • Sceneggiatura: VirtualControlAPI.py

. Hai due modi per ottenere il VirtualControlAPI.py sceneggiatura:
  • Opzione 1 (consigliata):

    Se non lo hai già fatto, installa il CODESYS Virtual Control for Linux SL pacchetto al tuo CODESYS installazione su Windows. Dopodiché, troverai il VirtualControlAPI.py script nella directory <CODESYS installation directory> \CODESYS Virtual Control for Linux SL\Delivery\virtuallinux\VirtualControlAPI.py.

  • Opzione 2:

    Scarica il CODESYS Virtual Control for Linux SL pacchetto dal negozio ed estrai il .package pacchetto (ad esempio, CODESYS Virtual Control for Linux SL 4.18.0.0.package) con qualsiasi programma ZIP. Nella directory estratta, troverete il file VirtualControlAPI.py sceneggiatura sotto Delivery\virtuallinux\VirtualControlAPI.py.

Utilizzo

Lo script Python VirtualControlAPI.py Potrebbe essere necessario eseguirlo come utente root. Lo script esegue attività come apportare modifiche ai registri dei contenitori e modificare gli spazi dei nomi delle schede di rete.

sudo python3 VirtualControlAPI.py <command>

È possibile utilizzare il seguente comando per visualizzare la guida per tutte le possibili opzioni, parametri e descrizioni:

sudo python3 VirtualControlAPI.py --help

Flusso di lavoro tipico

  1. Importazione di un'immagine contenitore nel registro locale

    Per caricare un'immagine nel registro, utilizzare il comando --import-image e passa il nome del .tar.gz file in cui si trova l'immagine. In questo modo l'immagine viene trasferita al registro locale.

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


    Per vedere quali immagini sono già presenti nel registro locale, utilizzare il comando:

    sudo python3 VirtualControlAPI.py --list-images

    Solo le immagini che soddisfano i criteri del VirtualControlAPI verrà visualizzato.

  2. Creazione di un'istanza

    Per creare un'istanza di runtime, viene utilizzato il seguente comando:

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

    Se si desidera creare un'istanza EdgeGateway o un'istanza Safe Runtime, specificarlo alla fine del comando.

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

    Ciò è necessario perché i diversi tipi di istanza sono dotati di configurazioni e parametri predefiniti diversi.

  3. Configurazione dell'istanza

    Per configurare l'istanza creata, è consigliabile esaminare prima i parametri di configurazione disponibili. Per farlo, il seguente comando visualizza il file di configurazione in formato:

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

    I parametri elencati sotto CONFIG_KEY sono generalmente tutti configurabili e possono essere modificati con il seguente comando:

    sudo python3 VirtualControlAPI.py --configure <instance name> [set/add/remove] <CONFIG_KEY> <value>
    • set sovrascriverà il valore corrente.

    • add aggiungerà valori.

    • remove rimuoverà il valore corrente.

    In genere, per un primo avvio, è sufficiente impostare solo il CONFIG_KEY È richiesta un'immagine. Per farlo, esegui il seguente comando e sostituisci l'immagine con l'immagine corrispondente. Per visualizzare tutte le immagini, puoi usare il comando --list-images.

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


    Importante

    Per poter configurare un'istanza, questa deve trovarsi in stato di arresto.

  4. Avvio e arresto dell'istanza

    L'istanza verrà avviata con l'opzione --run e si è fermato con l'opzione --stop.

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

Per ulteriori informazioni sulle opzioni e sui codici di uscita, eseguire il comando sudo python3 VirtualControlAPI.py --help.

Esempio di scenario "Safe House" tramite scripting

I seguenti indici descrivono, ad esempio, come lo scenario "Safe House" può essere realizzato tramite VirtualControlAPI.

Importante

L'articolo "Safe House" fa luce su altri aspetti tecnici rilevanti per il funzionamento di un controller sicuro. Consultate questa pagina di aiuto, nonché la documentazione di sicurezza del produttore del dispositivo, per tutte le informazioni sulla sicurezza o sulla certificazione.

Preparativi

Per ottenere il VirtualControlAPI.py script, così come le ultime versioni delle immagini del CODESYS Virtual Control for Linux SL, segui le istruzioni dal passaggio Requisiti dal capitolo precedente. Ripeti la procedura per CODESYS Virtual Safe Control SL per scaricare le immagini per CODESYS Virtual Safe Control SL e CODESYS Virtual Safe Time Provider SL. Le immagini del contenitore possono essere trovate nelle seguenti directory, a seconda del metodo:

  • Opzione 1:

    Le immagini del contenitore vengono memorizzate come tar.gz file nella seguente directory:

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

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

  • Opzione 2:

    Le immagini del contenitore vengono memorizzate come tar.gz file nella seguente directory del CODESYS pacchetto:

    Delivery\<product>\

  • Opzione 3 – Scripting:

    L'opzione 2 può essere ottenuta anche tramite script. Vedere il seguente script di esempio per scaricare e decomprimere il file CODESYS pacchetto e per inviare le immagini all'infrastruttura della tua azienda.

    Suggerimento

    Nota le condizioni di licenza per l'utilizzo di 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

Preparazione aggiuntiva:

Allo stesso modo, scarica i pacchetti per CODESYS License Server for Linux SL E CODESYS CodeMeter per Linux SL.

Perché CODESYS Virtual Control for Linux SL Può essere concesso in licenza solo tramite licenza di rete; questi due pacchetti sono necessari per la licenza. Questo passaggio non è necessario per una configurazione di prova, ma è consigliato ed è incluso negli script seguenti.

Trasferimento dello script, dei pacchetti Debian e delle immagini dei container al controller

Per una singola applicazione, è possibile trasferire i singoli file dal CODESYS pacchetti direttamente ai dispositivi di destinazione. Ad esempio, con pscp:

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

Se le immagini del contenitore, VirtualControlAPI.py e tutti i pacchetti Debian necessari sono stati caricati su un server interno o su un registro di contenitori interno, quindi è possibile ottenerli direttamente da lì.

#!/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

Script per l'impostazione automatica dello scenario "The Safe House"

Nota

Gli script seguenti servono solo come esempio. Potrebbe essere necessario apportare modifiche alla versione, alle schede di rete, agli indirizzi IP, ecc.

Negli esempi seguenti, si presume che i singoli file siano stati trasferiti direttamente al controller dopo essere stati estratti dal CODESYS pacchetto. Adatta gli script in base al tuo caso d'uso.

PC host Linux 2

Passare alla directory contenente VirtualControlAPI.py così come il .tar.gz- immagini contenitore compresse. Adatta il seguente script alla tua piattaforma specifica ed eseguilo.

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

Passare alla directory contenente VirtualControlAPI.py così come le immagini contenitore compresse in formato .tar.gz. Adatta il seguente script alla tua piattaforma specifica ed eseguilo.

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

Dopo che gli script sono stati eseguiti sui rispettivi computer, le istanze vengono configurate in base allo scenario e sono nella Running stato. Tutti i dispositivi richiesti sono ora pronti. I passaggi successivi per la creazione di un progetto e l'integrazione di PROFIsafe sono descritti nel Estensione di sicurezza CODESYS documentazione.

Script per l'aggiornamento delle istanze di runtime

Sono necessari solo pochi comandi per aggiornare la versione delle singole istanze. L'arresto, la modifica dell'immagine del contenitore e il riavvio delle istanze non influiranno su altre impostazioni. Tuttavia, potrai beneficiare di tutte le nuove funzionalità e i miglioramenti della nuova versione.

Distribuisci le immagini sul dispositivo come hai fatto nei passaggi precedenti.

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

Risoluzione dei problemi

Errore

Sintomo

Causa

Soluzione

Permesso negato / Errore di accesso

Messaggio di errore: PermissionError: [Errno 13] Permission denied

Lo script richiede autorizzazioni più elevate, ad esempio per accedere al registro dei contenitori, ai percorsi di sistema e per apportare modifiche agli spazi dei nomi delle schede di rete.

Eseguire nuovamente il comando con sudo.

sudo python3 VirtualControlAPI.py <command>

L'immagine non viene visualizzata nel registro

--list-images non mostra l'immagine prevista.

L'immagine non è compatibile.

Solo le immagini che soddisfano specifici CODESYS vengono visualizzati i criteri.

Controlla se è ufficiale CODESYS Virtual Control SL immagine.

L'importazione è stata annullata.

Eseguire nuovamente l'importazione.

sudo python3 VirtualControlAPI.py --import-image

Nome file errato / file danneggiato

Convalidare che il tar.gz è completo e può essere letto.

L'istanza si blocca all'avvio

Timeout o tentativo di avvio infinito

Configurazione errata della rete

Controlla l'immagine

Tag immagine mancante o errato

Convalida la configurazione

Runtime del contenitore (ad esempio, Podman o Docker) non avviato

Riavviare l'ambiente del contenitore