Skip to main content

管理するCODESYS Virtual Safe Controlコマンドライン経由のSL

管理および使用CODESYS Virtual Safe Control Linuxデバイス上のSLでは、VirtualControlAPIコマンドライン経由。

そのVirtualControlAPI Pythonベースのコマンドラインツールで、CODESYS Virtual Safe Control Linuxシステム上のSLであり、CODESYS Control SL Deploy Tool

要件

  • Linuxベースのオペレーティングシステムを搭載したデバイス

  • Python 3 (>= 3.9)

  • スクリプト:VirtualControlAPI.py

. 入手方法は2つありますVirtualControlAPI.pyスクリプト:
  • オプション 1 (推奨):

    まだインストールしていない場合は、CODESYS Virtual Control for Linux SLパッケージをCODESYS Windowsにインストールします。その後、VirtualControlAPI.pyディレクトリ内のスクリプト<CODESYS installation directory> \CODESYS Virtual Control for Linux SL\Delivery\virtuallinux\VirtualControlAPI.py

  • オプション2:

    ダウンロードCODESYS Virtual Control for Linux SLストアからパッケージをダウンロードして.packageパッケージ(例:CODESYS Virtual Control for Linux SL 4.18.0.0.packageをZIPプログラムで解凍します。解凍したディレクトリには、VirtualControlAPI.pyスクリプトの下Delivery\virtuallinux\VirtualControlAPI.py

使用法

PythonスクリプトVirtualControlAPI.pyルートユーザーとして実行する必要がある場合があります。このスクリプトは、コンテナレジストリの変更やネットワークアダプタの名前空間の変更などのタスクを実行します。

sudo python3 VirtualControlAPI.py <command>

次のコマンドを使用すると、すべての可能なオプション、パラメーター、および説明のヘルプを表示できます。

sudo python3 VirtualControlAPI.py --help

典型的なワークフロー

  1. コンテナイメージをローカルレジストリにインポートする

    レジストリにイメージをロードするには、次のコマンドを使用します。--import-imageそして、.tar.gzイメージが保存されているファイル。これにより、イメージがローカルレジストリに転送されます。

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


    ローカル レジストリに既に存在するイメージを確認するには、次のコマンドを使用します。

    sudo python3 VirtualControlAPI.py --list-images

    基準を満たす画像のみVirtualControlAPIが表示されます。

  2. インスタンスの作成

    ランタイム インスタンスを作成するには、次のコマンドを使用します。

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

    EdgeGateway インスタンスまたは Safe Runtime インスタンスを作成する場合は、コマンドの最後にこれを指定します。

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

    これは、異なるインスタンス タイプには異なるデフォルト構成とデフォルト パラメータが備わっているために必要です。

  3. インスタンスの設定

    作成したインスタンスを設定するには、まず利用可能な設定パラメータを確認することをお勧めします。これを行うには、次のコマンドで設定ファイルをフォーマットされた形式で表示します。

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

    以下にリストされているパラメータCONFIG_KEYこれらは通常すべて設定可能であり、次のコマンドで編集できます。

    sudo python3 VirtualControlAPI.py --configure <instance name> [set/add/remove] <CONFIG_KEY> <value>
    • set現在の値を上書きします。

    • add価値を追加します。

    • remove現在の値を削除します。

    通常、最初の起動では、CONFIG_KEY画像が必要です。これを行うには、次のコマンドを実行し、画像を対応する画像に置き換えます。すべての画像を表示するには、次のコマンドを使用します。--list-images

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


    重要

    インスタンスを構成するには、インスタンスが停止状態である必要があります。

  4. インスタンスの起動と停止

    インスタンスはオプションで起動されます--runそしてオプションで停止--stop

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

オプションと終了コードの詳細については、コマンドを実行してください。sudo python3 VirtualControlAPI.py --help

スクリプトによる「セーフハウス」シナリオの例

以下の下線部は、例えば「セーフハウス」シナリオをどのようにして実現できるかを説明しています。VirtualControlAPI

重要

「Safe House」の記事では、セーフティコントローラーの操作に関連するその他の技術的側面について解説しています。安全性や認証に関するすべての情報については、このヘルプページとデバイスメーカーの安全に関する文書をご参照ください。

準備

を取得するにはVirtualControlAPI.pyスクリプトと最新バージョンの画像CODESYS Virtual Control for Linux SLの手順の指示に従ってください要件前の章の手順を繰り返します。CODESYS Virtual Safe Control SLで画像をダウンロードCODESYS Virtual Safe Control SLとCODESYS Virtual Safe Time Provider SL。コンテナイメージは、方法に応じて次のディレクトリにあります。

  • オプション1:

    コンテナイメージは次のように保存されますtar.gz次のディレクトリ内のファイル:

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

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

  • オプション2:

    コンテナイメージは次のように保存されますtar.gz次のディレクトリ内のファイルCODESYSパッケージ:

    Delivery\<product>\

  • オプション3 – スクリプト:

    オプション2はスクリプトを使って実現することもできます。ダウンロードと解凍については、以下のサンプルスクリプトを参照してください。CODESYSパッケージ化だけでなく、会社のインフラストラクチャにイメージをプッシュすることもできます。

    ヒント

    使用にあたってのライセンス条件に注意してくださいCODESYSソフトウェア。

    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

追加の準備:

同様に、CODESYS License Server for Linux SLそしてCODESYS Linux SL 用の CodeMeter。

なぜならCODESYS Virtual Control for Linux SLネットワークライセンス経由でのみライセンスを取得できます。ライセンス取得にはこれら2つのパッケージが必要です。この手順はテストセットアップでは必須ではありませんが、推奨されており、以下のスクリプトに含まれています。

スクリプト、Debian パッケージ、コンテナ イメージをコントローラに転送する

単一のアプリケーションの場合、個々のファイルをCODESYSパッケージをターゲットデバイスに直接送信します。例えばpscpの場合:

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

コンテナイメージの場合、VirtualControlAPI.py、必要な Debian パッケージが内部サーバーまたは内部コンテナ レジストリにロードされている場合は、そこから直接取得することもできます。

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

「The Safe House」シナリオの自動セットアップ用スクリプト

注記

以下のスクリプトはあくまでも例です。バージョン、ネットワークアダプタ、IPアドレスなどを調整する必要がある場合があります。

以下の例では、個々のファイルが、CODESYSパッケージ。ユースケースに応じてスクリプトを調整します。

LinuxホストPC 2

以下のディレクトリに移動しますVirtualControlAPI.pyだけでなく.tar.gz圧縮コンテナイメージ。以下のスクリプトを特定のプラットフォームに合わせて調整し、実行してください。

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

LinuxホストPC

以下のディレクトリに移動しますVirtualControlAPI.py .tar.gz 圧縮されたコンテナイメージも同様です。以下のスクリプトをプラットフォームに合わせて変更し、実行してください。

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

それぞれのコンピュータでスクリプトが実行されると、インスタンスはシナリオに従って構成され、Running状態です。必要なデバイスはすべて準備完了です。プロジェクトの作成とPROFIsafeの統合に関する次の手順については、 CODESYS 安全拡張機能ドキュメント。

ランタイムインスタンスを更新するためのスクリプト

個々のインスタンスのバージョンをアップグレードするには、いくつかのコマンドを実行するだけです。インスタンスの停止、コンテナイメージの変更、再起動は、他の設定には影響しません。ただし、新バージョンのすべての新機能と改善点の恩恵を受けることができます。

前の手順と同じように、イメージをデバイスに展開します。

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

トラブルシューティング

エラー

症状

原因

解決

権限が拒否されました / アクセスエラー

エラーメッセージ: PermissionError: [Errno 13] Permission denied

スクリプトには、コンテナー レジストリやシステム パスにアクセスしたり、ネットワーク アダプターの名前空間を変更したりするなど、より高い権限が必要です。

コマンドを再度実行するとsudo

sudo python3 VirtualControlAPI.py <command>

レジストリに画像が表示されない

--list-images期待した画像が表示されません。

画像に互換性がありません。

特定の条件を満たす画像のみCODESYS基準が表示されます。

公式かどうか確認するCODESYS Virtual Control SL画像。

インポートはキャンセルされました。

インポートを再度実行します。

sudo python3 VirtualControlAPI.py --import-image

ファイル名が正しくありません / ファイルが破損しています

検証するtar.gz完了しており、読むことができます。

インスタンスが起動時にハングする

タイムアウトまたは無限の起動試行

ネットワークの誤った構成

画像を確認する

画像タグが欠落しているか間違っています

構成を検証する

コンテナ ランタイム (Podman や Docker など) が起動していない

コンテナ環境を再起動します