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
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.pyscript 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
.packagepacchetto (ad esempio, CODESYS Virtual Control for Linux SL 4.18.0.0.package) con qualsiasi programma ZIP. Nella directory estratta, troverete il fileVirtualControlAPI.pysceneggiatura sottoDelivery\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
Importazione di un'immagine contenitore nel registro locale
Per caricare un'immagine nel registro, utilizzare il comando
--import-imagee passa il nome del.tar.gzfile 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
VirtualControlAPIverrà visualizzato.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.
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_KEYsono generalmente tutti configurabili e possono essere modificati con il seguente comando:sudo python3 VirtualControlAPI.py --configure <instance name> [set/add/remove] <CONFIG_KEY> <value>
setsovrascriverà il valore corrente.addaggiungerà valori.removerimuoverà 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. Esempiosudo 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.
Avvio e arresto dell'istanza
L'istanza verrà avviata con l'opzione
--rune 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.gzfile 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.gzfile 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: | 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 python3 VirtualControlAPI.py <command> |
L'immagine non viene visualizzata nel registro |
| 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 | ||
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 |