CODESYS Control(Runtime)をPetalinuxにインストール

CodesysはWindowsかLinuxならDebian系にしか対応しておらず、Petalinuxに対応させてインストールしてみました。

種類

  • CODESYS Development
    • PLCをプログラムするソフトは(紛らわしい。 Programmingとかにすればいいのに、カスタマイズするものと思ってしまう)
  • CODESYS Control(Runtime)
    • Arm64bitのボードに入れるFirmware。 CODESYSはRuntimeの事をControlと呼んでいる。(紛らわしい。 Runtimeと書けばいいのに。)

ダウンロードとインストール

  • CODESYS Store(https://store.codesys.com/en/)に行き『Development』でプログラミングソフトを検索。 €0.00の『CODESYS Developmenet System V3』を選択し、Windows PCにダウンロードする。 64bit版をダウンロード。
  • ダウンロードするにはSign inしないといけない。 DownloadをクリックしてからSign inすると、ダウンロードは中止されるので、再度Downloadをクリックする事。
  • ダウンロードされた、.exeファイルをダブルクリックしてインストール。
  • CODESYS Developmentをインストール後PCの再起動が必要

.exeをダブルクリックして、5分ほどでインストールされました。

Runtimeのインストール

今度はPCでなくZynq ultrascale+のボードにインストールするRuntimeです。 RuntimeはCODESYS Developmentで新たに取得しなければなりません。 CODESYS Developmentソフトのメニューから『ツール』~『CODESYS インストーラー』を選択します

  1. 使い方がややこしいので要注意
  2. まず『ブラウズ』をクリック
  3. ブラウズ』の右上に『検索』項目が表示されるので『linux』と入力
  4. CODESYS Control for Linux ARM64 SL』にチェックを入れ、更にグレーにしておく。(*私はチェックを入れてインストールを押したら、32bit版がインストールされてしまいました。 どうもチェックを入れてもグレーになっていたのは32bit版だったようです。 これで何時間もロスしました。)
  5. そして、画面右中央にインストールする名称が表示されるので『ARM64』が選択されていることを確認する。
  6. 確認したら『インストール』をクリック
  7. 後ほど使いますが、CODESYS Controlをボードにインストールする際にCODESYS Control SL Extension Packageも一緒にボードにインストールされるので、External Call等を使用できる。(*External Callとは、Runtimeの外からRuntime内との間で高速にデーター交換ができる。使用できるプログラムはPython、 Java、C、NodeJSなどが使用できる)

(要注意)以下の様にすると、チェックボックスには64ビットを選択していても、グレーで選択されている32ビット版がインストールされてしまいました。 もしかしたら『チェック』は意味がないのかもしれません。

インストーラはメッセージもなく止まってしまいますが、実は裏で以下の画面が出てきていてライセンスを承諾しないと次にインストールできません。 『ライセンス契約を承諾します』にチェックを入れないと『続行』はグレーアウトされていて押せませんが、『ライセンス契約を承諾します』は表示されていません。 なのでインストーラーが止まったら、以下のような画面が別の画面の裏に隠れていないか探してみてください。

  • 中央上の『ライセンス契約』をクリック
  • ライセンス契約を承諾します』にチェックを入れる
  • 続行』をクリック

以下が表示されるので、CODESYS Developmentソフトを終了する。 (CODESYS Developmentソフトとは、このインストーラーを開始したソフト。 そして『OK』をクリック。

すると以下の画面が表示されるので『OK』をクリック。 *『OK』が表示されていない場合は、下のWindowsのサイズをマウスポインタでドラッグして広げると、『OK』が右下に現れる。

インストールされました』を選択して、『CODESYS Control for Linux ARM64 SL』がインストールされたことを確認します。

ボードにCODESYS Controlをインストール

  • 『C:\Program Files\CODESYS 3.5.19.50\CODESYS\CODESYS Control for Linux ARM64 SL\Delivery\linuxarm64』に『codesyscontrol_linuxarm64_4.10.0.0_arm64.ipk』があるのでscpでLinuxデバイスにscpで転送して、opkgでインストールする。 (Debian系の場合はdpkgなので、codesyscontrol_linuxarm64_4.10.0.0_arm64.debファイルを転送する。 Debian系は、”C:\Program Files\CODESYS 3.5.19.50\CODESYS\CODESYS Control for Linux ARM64 SL\Dependency\codemeter-lite_7.60.5625.503_arm64.deb”も転送して、これを先にインストールする。)
  • Petalinuxのボードには、予めsudo dnf install opkgを実行しておく。
  • opkgを使って、codesyscontrol_linuxarm64_4.10.0.0_arm64.ipkファイルをインストールする。
  • (Debian系なら、最初に C:\Program Files\CODESYS 3.5.19.50\CODESYS\CODESYS Control for Linux ARM64 SL\Dependency\codemeter-lite_xxxxxxx_arm64.debをscpで転送してインストールする。 これはライセンス管理ソフト。 有償ソフトを使う場合にはこのソフトが必要。 しかしPetalinux用は存在しないので、PetalinuxはDemo版として2時間限定でCODESYS Controlを動作させる。)

//以下で.ipkファイルをボードにscp転送。 IPアドレスは書き換えてください。
$ scp codesyscontrol_linuxarm64_4.10.0.0_arm64.ipk petalinux@192.168.11.201:~

//opkgをインストールします。
$ sudo dnf install opkg
//CODESYS Controlをインストールします。
$ cd ~
$ sudo opkg install codesyscontrol_linuxarm64_4.10.0.0_arm64.ipk

//もしインストールしたCODESYS Controlを削除する場合は以下を実行。 時々必要になります。 実際には全てのファイルを削除しません。
$ sudo opkg remove codesyscontrol

CODESYS Control(Runtime)を起動

  • CODESYS DevelopmentからCODESYS Controlを起動すると、/etc/init.d/codesyscontrolシェルスクリプト経由で実行されて、codemeterを探しに行くのでCODESYS Developmentからは実行できない。(*Petalinuxにはcodemeterはインストールできない。 Kitを購入してCodesysに依頼してPetalinux用のカスタムCODESYS Controlを作成してもらう必要がある。)
  • そこで直接CODESYS Controlを実行する。『sudo /opt/codesys/bin/codesyscontrol.bin
  • Licenseがない。 Demo modeで~2hoursと表示され起動しました。
$ sudo /opt/codesys/bin/codesyscontrol.bin

実行してから10秒くらいして『CODESYS』のロゴが表示されたら起動している。

上記のターミナルはCODESYS Control(Runtime)が占有しているので使用するとCODESYS Controlが止まってしまうので、別のターミナルでSSH接続し以下を実行してみる。

$ cat /var/opt/codesys/codesyscontrol.log
  • すると、CODESYS Controlの起動時のログ情報を見ることができる。
  • 途中のERRORはCodemeterが無いので『access denied』となっている。
  • また『No certificate for the OPC UA server』となっているが、Demoモードで2時間はOPC UAサーバーは起動できるので問題ありません。
  • その下にOPC UAの接続情報が記載されています。 OPC UA接続する際は、同じボード内から接続する場合は、『opc.tcp://127.0.01:4840』を使う。 PCからなどボード外から接続する場合は、ボードのIPアドレスを使用する。私の場合は『opc.tcp://192.168.11.201:4840』で接続。
  • そして最後の2行で『CODESYS Control ready』となって起動されています。
  • そしてライセンスがないので『running in demo mode(~2hours)』となっているので2時間は動作し続けます。
  • 2時間経つと『shutdown』という表示が出て止まり、CODESYS Developmentとの接続も切れるので、再度『sudo /opt/codesys/bin/codesyscontrol.bin』を実行して、CODESYS Controlが起動したら、CODESYS Developmentでログインしてオンライン接続しなおす。
            :
            :
            :
2024-03-19T00:46:24Z, 0x00000401, 1, 0, 0,   TARGET_MCU_USED_ALIGNMENT = 1
2024-03-19T00:46:24Z, 0x00000129, 1, 0, 0, Debug Messages not activated
2024-03-19T00:46:24Z, 0x0000ff03, 1, 0, 0, Read connection settings...
2024-03-19T00:46:28Z, 0x00000030, 1, 0, 6, Local network address: <ipaddress>192.168.11.201</ipaddress>
2024-03-19T00:46:28Z, 0x00000018, 1, 0, 4, Network interface <interface>BlkDrvTcp</interface> at router <instance>1</instance> registered
2024-03-19T00:46:28Z, 0x0000007a, 4, 1, 0, **** ERROR: CodeMWriteLicenseFile: CodeMeter access denied
2024-03-19T00:46:28Z, 0x0000007a, 4, 25, 0, **** ERROR: CodeMCreateInitialSoftcontainer: Error creating initial empty soft container
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0, No certificate for the OPC UA server available.
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0, Security policy allows plain text communication. Secure communication is deactivated.
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0, **************************************************************
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0,     OPC UA Server Started:
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0,     Hostname: peta, Port: 4840
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0,     URL: opc.tcp://peta:4840
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0,     Loopbackadapter activated.
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0,     All available networkadapters are used.
2024-03-19T00:46:28Z, 0x00000124, 1, 0, 0, **************************************************************
2024-03-19T00:46:29Z, 0x00000124, 1, 0, 0, Provider 'CODESYS_DefaultProvider' (version 0x305131e) registered at the OPC UA server.
2024-03-19T00:46:29Z, 0x000000a6, 1, 0, 0, Not able to read file of Run/Stop switch. Functionality of component disabled
2024-03-19T00:46:31Z, 0x00000001, 1, 0, 0, =========================================================================
2024-03-19T00:46:31Z, 0x00000001, 1, 0, 4, CODESYS Control for Linux ARM64 SL
2024-03-19T00:46:31Z, 0x00000001, 1, 0, 4, OS=Linux, CPU=ARM, Arch=64Bit, Coding=C
2024-03-19T00:46:31Z, 0x00000001, 1, 0, 6, <version>3.5.19.30</version> <builddate>Oct 25 2023</builddate>
2024-03-19T00:46:31Z, 0x00000001, 1, 0, 5, Copyright CODESYS Development GmbH
2024-03-19T00:46:31Z, 0x00000001, 1, 0, 0, =========================================================================
2024-03-19T00:46:31Z, 0x00000124, 1, 0, 0, Provider 'AddressSpaceFragment Provider' (version 0x3051314) registered at the OPC UA server.
2024-03-19T00:46:31Z, 0x00000124, 1, 0, 0, Provider 'OPC UA for IEC-61131-3' (version 0x3051314) registered at the OPC UA server.
2024-03-19T00:46:31Z, 0x00000124, 1, 0, 0, Provider 'AlarmManager' (version 0x3051314) registered at the OPC UA server.
2024-03-19T00:46:32Z, 0x0000013d, 1, 0, 4, Number of licensed cores for IEC-tasks: 1 from 2
2024-03-19T00:46:32Z, 0x00000126, 2, 0, 0, !!!! Warning: No valid license found for OPC UA IecVarAccess provider. Running in demo mode (2h).
2024-03-19T00:46:32Z, 0x00000002, 1, 0, 22, No retain area in bootproject of application [<app>Application</app>]
2024-03-19T00:46:32Z, 0x00000002, 1, 0, 6, Bootproject of application [<app>Application</app>] loaded
2024-03-19T00:46:32Z, 0x00000018, 1, 0, 1, Setting router <instance>0</instance> address to <address>(00c9)</address>
2024-03-19T00:46:32Z, 0x00000018, 1, 0, 1, Setting router <instance>1</instance> address to <address>(2ddc:c0a8:0bc9)</address>
2024-03-19T00:46:32Z, 0x00000002, 1, 0, 10, Application [<app>Application</app>] started
2024-03-19T00:46:32Z, 0x00000104, 2, 39, 4, !!!! Warning: Access denied to '/home/petalinux/PlcLogic/Application/test_codesys.py' due to ForceIecFilePath
2024-03-19T00:46:32Z, 0x00000104, 1, 0, 0, To grant access, this path may be configured as a PlaceholderFilePath
2024-03-19T00:46:32Z, 0x00000001, 1, 0, 34, CODESYS Control ready
2024-03-19T00:46:32Z, 0x00000001, 2, 0, 0, !!!! Warning: no runtime license - running in demo mode(~2 hours)

デバッグで使える方法

  • CODESYS Controlが起動できなければ、CODESYS Developmentと接続できない為プログラム転送や実行ができない。 またCODESYS Developmentでログやエラーも見れない。
  • そこで、cat /var/opt/codesys/codesyscontrol.log を直接閲覧してデバッグする。
  • Petalinuxでは、findコマンドに-lsオプションを使えないので、-exec ls -l {} \; を付けて-lsオプションの代わりにしてる。codesysの動作を追う時に、『codesys』をキーワードにして追跡しました。
// /run/media/mmcblk0p3/root/Platforms/Linux/Bin
$ file codesyscontrol     //not fileとなって実行できなかった。 何故実行できないかfileで確認するとELF32bitと表示された。 インストーラが32bitインストールしたのが分かったので、64bitをインストールし直して実行。   

$ sudo find -name codesys* -exec ls -l {} \;

$ cat /var/opt/codesys/codesyscontrol.log
//
$ cat /var/run/codesyscontrol.pid
6497
$ cd /proc/6497
$ cat /proc/6497/status

   :
   :
State: S(Sleeping)

//2時間経つとShutdownとなるので、再度 sudo /opt/codesys/bin/codesyscontrol.binを実行する。
2024-02-05T04:41:31.882Z: Cmp=CmpRouter, Class=1, Error=0, Info=5, pszInfo= Network interface <interface>ether 4</interface> unregistered
2024-02-05T04:41:31.895Z: Cmp=CM, Class=1, Error=0, Info=36, pszInfo= CODESYS Control shutdown done
INFO: PlcStart: Shutdown complete

//これは何か分からなかった。
2024-02-05T02:44:40.169Z: Cmp=CmpSrv, Class=4, Error=28, Info=0, pszInfo=**** Invalid session ID. Still other sessions on this channel, do not close it.

プログラム作成

  • 今度はPC側のCODESYS Developmentで『プロジェクト作成
  • 標準プロジェクト』を選択して作成する。(こうしないとタスク構成など表示されず、自分で作るのは慣れないと難しい)
  • そしてプログラムを作る
  • 私は簡単なタイマー回路で、繰り返しON/OFFするプログラムを作成しました。

オンライン

  1. オンラインにする前に、ボードにSSHで接続し、コマンドラインでsudo /opt/codesys/bin/codesyscontrol.binを実行して開始する。 実行したターミナルは、表示が止まるがそのままにしておく。 Ctrl+C等を押すと、CODESYS Controlは停止(Shutdown)する。 デバイスにアクセスしたい場合は、別のターミナルを開いてssh通信する。 
  2. CODESYS Developmentでプロジェクトを開く
  3. Device』~『ネットワークスキャン』を選択して、新しく登録されたデバイスをダブルクリック
  4. ここでユーザー名(Device User)とパスワード設定画面が出る。 これはCODESYS Control(Runtime)へのログインとして最初に1回だけ設定できる。 ユーザー名、パスワードを忘れた場合は、CODESYS Controlを一旦Uninstall してInstallし直して、再度ユーザー名とパスワードを設定する。 (ここではuser:peta、パスワード:shohentai12とした)
  5. ユーザー名とパスワードを設定したら、ダイアログボックス右下の『OK』をクリックできるようになるので、『OK』をクリック
  1. すると、下の図の青枠のように、有効となったデバイスが表示されるので、『OK』を押すとしたの図のようにデバイスユーザーログインの画面が現れるので、最初に設定したユーザー名(Device User)とパスワードを入れて『OK』。(私の場合はuser:peta、パスワード:shohentai12としたので、これらを入力する。)

  1. オンライン』~『ログイン』を選択する。
  2. ログインを『はい

アプリケーションをダウンロードしてもいいか聞いてくるので『はい』をクリック

オンラインにする前にビルドを実行すると、正常にビルドされれば以下の様に表示する。 エラーがあれば、内容を見て修正する。

ログインしてオンライン接続しても、PLCのプログラムは実行されていないので、『Application(停止)』上で右クリックして、『運転』を選択。

  • エラーなく運転状態になると『Application(運転)』となり
  • PLCプログラムのタブを開くと、変数の値が表とプログラム中で表示されています。

Gatewayが動作しなくなった

ある日突然『Gatewayが正常に動作していません』みたいなメッセージが出てきて、ネットワークスキャンできずログインできなくなりました。 インストーラーでCODESYS Controlの更新やCODESYS Controlをremoveして再度installしてみましたが、復旧できませんでした。

そこで、CODESYS Developmentをアンインストールして、再インストールしたらゲートウェイは再度動作して、再度ネットワークスキャン、ログイン、オンライン接続ができました。 多分、CODESYS Developmentの何らかのバグで発生したと思います。 再発時の復旧備忘録として記してます。

CODESYS Developmentをアンインストール

  • コントロールパネルから以下をアンインストール
    • CODESYS Development
    • Codemeter
    • CODESYS Installer
  • ダウンロードフォルダ内に生成された『CODESYS』フォルダ。(フォルダで右クリックして確認すると、フォルダ下には1.5GBも入っていた)

インストーラの更新では解決せず、アンインストールして再インストールして解決

なので、上記のアンインストールして再インストールをしたら解決した。

  • 急に動作しなくなったので以下を実行
  • 次の画面の左下の『ライセンス契約を承諾』をチェックしてOK

下の画面が現れるのでCODESYS Developmenを閉じてOK

Network ScanでDeviceを見つけない

時々このような事が発生する。(2ヵ月で3回)

  • ボード再起動、CODESYS Controlの再インストール等は駄目
  • 結果は以下を実行して復旧できた。
    1. CODESYS Developmentのアンインストール
      • コントロールパネルのアプリケーションのアンインストールでCODESYS DevelopmentとInstallerの2つをアンインストール。 30分ほどかかった。
    2. CODESYS Developmentの再インストール
    3. CODESYS Developmentの『ツール』~『インストーラー』から再度CODESYS Control for Linux ARM64 SLをインストールして、scpでボードに転送。
    4. ボードで、新しいCODESYS Control for Linux ARM64 SLの.ipkファイルでインストール
    5. CODESYS Controlを先に起動
    6. CODESYS Developmentを再起動して、Network Scanでも見つからないが、Deviceのリストのプルダウンで(有効)と表示されているものを選択すると接続された。
      • この時、既存のProjectでは接続できず、新規Projectを作成し、接続後各オブジェクトをコピペで追加して復旧した。
  1. 既存Projectは、上記で確認した後、
    1. 既存Projectを開き
    2. 下の赤枠の部分のチェックを外し
    3. 一旦保存&CODESYS Developmentを終了して
    4. CODESYS Developmentを再起動して、その既存Projectを再度開き、
    5. 上記の6の様にプルダウンでIPアドレスの部分を選択すると接続した。

接続は再度できたもののNetwork Scanは使えないままいまだに解決策が分からない。

バージョン不一致(Version mismatch)の場合

左のNavigationの『Device』上で右クリック~『Deviceの更新』で解決しました。 これは、Windows PC側のDeviceを更新しています。 この問題は、Installerで新しいCODESYS Control for Linux ARM64 SLをボードにインストールしたりすると、ボードのRuntimeのVersionとWindows PC(開発環境)側のDeviceのバージョンが不一致になる事から発生していると思います。

その他1

『ツール』からLinux ARM64を更新を選択するとログイン■情報等が表示される。 ここにIPアドレスを入れる事ができる。

その他2

CODESYS DevelopmentからCODESYS Controlを起動すると、$PATHを書き換えられてしまうので/etc/init.d/codesyscontrolの以下の様に$PATH:を追加しておきます。

PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin

その他 uBuntuにRuntimeをインストール

  • ツール』~『CODESYSインストーラ
  • ブラウズ』をクリックして、検索で『linux』を入力し『CODESYS Control for Linux SL』を選択して『インストール』 (ARM64 SLではuBuntuで動作しない。)
  • 以下の2つのファイルをuBuntuに転送  (amd64となっている)
    • C:\Program Files\CODESYS 3.5.19.50\CODESYS\CODESYS Control for Linux ARM64 SL\Delivery\codemeter-lite_8.0.5967.500_amd64.deb
    • C:\Program Files\CODESYS 3.5.19.50\CODESYS\CODESYS Control for Linux SL\Delivery\linux\codesyscontrol_linux_4.11.0.0_amd64.deb
  • uBuntuでcodemeter~codesysの順に『sudo dpkg -i ファイル名』でインストール (sudo apt install ファイル名ではエラーになりインストールできなかった)

『ツール』~『Linuxを更新』を選択すると以下が表示されるのでSSHログインユーザー名とパスワードとIPアドレスを入力して、ランタイムの『開始』を押して実行する。(デモバージョンなので2時間で止まるため2時間おきに開始をしければログインできない)

ichiri-H670はuBuntu PCなのでボードのPetalinuxとは異なる為、ichiri-H670を選択すると『デバイスオブジェクトと一致しません。 …更新しますか?』と表示されるいので『はい』を選択するとログインできるようになる。

uBuntu PCにもPetalinuxと同じuser:peta、パスワード:shohentai12にした。

OPC UA接続する時は、『ランタイムセキュリティポリシーを変更』で『匿名ログインを許可』にして『セキュリティ設定』でOPC UA設定の『CommunicationMode』を『ALL』に変更して再ログイン。(ウォームリセットが必要かもしれません) 詳細はリンクを参照ください。

コメント

タイトルとURLをコピーしました