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

. 你有两种方法可以获得VirtualControlAPI.py脚本:
  • 方案一(推荐):

    如果您尚未安装,请安装。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使用任何 ZIP 程序解压缩 4.18.0.0.package 文件。在解压后的目录中,您将找到VirtualControlAPI.py脚本Delivery\virtuallinux\VirtualControlAPI.py

用法

Python脚本VirtualControlAPI.py可能需要以 root 用户身份运行。该脚本执行诸如更改容器注册表和修改网络适配器命名空间等任务。

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

重要

“安全屋”一文阐述了与安全控制器操作相关的其他技术方面。有关所有安全或认证信息,请参阅此帮助页面以及设备制造商的安全文档。

准备工作

为了获得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 SLCODESYS CodeMeter for Linux SL。

因为CODESYS Virtual Control for Linux SL只能通过网络许可进行授权,这两个软件包是授权所必需的。测试设置不需要此步骤,但建议执行此步骤,并且已包含在以下脚本中。

将脚本、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

“安全屋”场景自动设置脚本

注意

以下脚本仅供参考。您可能需要对版本、网络适配器、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)未启动

重启容器环境