Welcome

Python とREST API による
PLCnext Runtime
変数の操作
Rev 1.1 (2024年7月4日)

Python からREST API を用いて変数値を取得

Agenda概要
PLCnext Engineer プロジェクトの用意
REST API 用 Python モジュール の用意

Pyhon プログラム：PLCnext Runtime 変数値の読み取り
Pyhon プログラム：PLCnext Runtime 変数への値書き込み
補足：パスワード認証無しでアクセスする場合

補足：複数の PLCnext Runtime 変数の操作
補足：curl コマンドによる REST API の動作確認

2

概要

当資料の概要PLCnext Control※ 上で動いている ST 言語で書かれたプログラム内の変数値を、Python のプログラムから操作する手順をご紹介します。
※ 当資料では AXC F 2152 を例にとっていますが、AXC F 1152/3152, EPC 1502/1522 でも同様の手順となります。

▪ 簡単なプロジェクトを作成し、プログラム内の変数値を 外部から操作するための準備をします。
> REST API の機能を使えるように設定を変更します。
> 変数 counter_per_task を REST API 経由で外部から操作できるように設定します。
▪ Python のプログラムから REST API を用いて変数 counter_per_task の値を読み込みます。

▪ Python のプログラムから REST API を用いて変数 counter_per_task へ値を書き込みます。
▪ 補足：パスワード認証無しでアクセスする方法を紹介します。
▪ 補足：複数の変数を操作したいときの Python プログラムの書き方を紹介します。
▪ 補足：Python を使わず Curl コマンドからも REST API 経由で変数 counter_per_task の値を読めることを確認します。
3

PLCnext Engineer プロジェクトの用意

PLCnext 用プロジェクトの作成▪ パソコン上で PLCnext Engineer を起動し、新しいプロジェクト※を作成してください。

※当資料では、プロジェクト作成の細かい手順や PC と PLCnext の接続設定の詳細については解説しておりません。
PLCnext Engineer の基本的な操作方法 | PLCnext Technology (https://plcnext.jp/archives/53) などの記事をご参照ください。)

1. 使用している PLCnext Control※と FW の組合わせを選びます。

※ご利用の PLCnext Control が表示されない場合は (EPC/RFC シリーズ等)、
EPC1502/1522用プロジェクトの作成 | PLCnext Technology(https://plcnext.jp/archives/5069) をご参照ください。
4

2. プロジェクトが作成されます。

※ご利用の FW バージョンが表示されない場合は、適当な PLCnext Control を選択してプロジェクトを作成してからプロジェクトのコントローラ変更方法 | PLCnext Technology (https://plcnext.jp/archives/3425) を参照
してControl タイプとFWバージョンがご利用のものと一致するように変更してください。

PLCnext Engineer プロジェクトの用意

PLCnext 用プログラムの作成 (1)▪ ST Code 用のワークシートを用意します。

2. Add ST Code Worksheet をダブルクリック

5

1. Programming > Local >Programs > Main をダブルクリック
します。

PLCnext Engineer プロジェクトの用意

PLCnext 用プログラムの作成 (2)▪ 以下の通り簡単なプログラムを作成してください。

3. Main タブ の Code タブを選択し、counter_per_task := counter_per_task + 1;と入力します。
6

PLCnext Engineer プロジェクトの用意

PLCnext 用プログラムの作成 (3)▪ Counter_per_task 変数を作成します。

4. Main タブ の Variable タブを選択し、counter_per_task という変数を INT 型の External変数として作成してください。

7

PLCnext Engineer プロジェクトの用意

REST API インターフェースの有効化
2. Settings タブを選択します

3. Enable REST interface にチェックを入れます1. HMI Webserver をダブルクリックします

4. Enforcement of user levels がPLCnext user management ※となっていることを確認してください※REST API アクセスの際にユーザ名とパスワードを要求することを意味します。

8

PLCnext Engineer プロジェクトの用意

変数 counter_per_task の REST API アクセスを許可 (1)1. axc-f-2152-1 : AXC F 2152 をダブルクリックします
2. Data List タブを選択します。

9

PLCnext Engineer プロジェクトの用意

変数 counter_per_task の REST API アクセスを許可 (2)4. Add HMI Tag をクリックします。

3. counter_per_task を右クリックします。

10

PLCnext Engineer プロジェクトの用意

変数 counter_per_task の REST API アクセスを許可 (3)4. HMI tag の列に counter_per_task が入りました※。

※HMIで使用できるようになっている変数は、RESTAPI からもアクセス可能となります。

11

PLCnext Engineer プロジェクトの用意

プロジェクトのビルドと書き込み
1. axc-f-2152-1 : AXC F 2152 をダブルクリックします
2. Cockpit タブをクリックします3.

12

アイコンをクリックしますREST API 用 Python モジュール の準備

pyPLCn モジュールのインストール▪ Python から PLCnext Control の REST API を簡単に扱えるように、モジュール「pyPLCn」を pip※でインストールします。
$ su$ pip install pyPLCn$ exit※ pip を使用するには PLCnext Control をインターネットへ接続する必要があります。
下記のサイト等をご参照ください。
AXC F 1152/2152/3152をインターネットへ接続する | PLCnext Technology (https://plcnext.jp/archives/4051)※ su コマンドを使用する際、root ユーザにパスワードを設定しておく必要があります。 (デフォルトでは設定されていません)
下記のサイト等をご参照ください。
Linux root ユーザー作成 | PLCnext Technology (https://plcnext.jp/archives/1610)※ pip はデフォルトではインストールされていません。
以下のURLの手順に従ってインストールしてください。
https://plcnext.jp/wp-content/uploads/PIP-インストール手順curl.pdf
13

Pyhon プログラム：PLCnext Runtime 変数値の読み取り変数値を読み出す Python コードの作成▪ 以下のコードを作成し、read_counter.py という名前で PLCnext コントローラへ保存してください。
from pyPLCn import pyPLCn
from time import sleep

if __name__ == '__main__':Plc = pyPLCn()
Plc.set_var_names(['counter_per_task'])
Plc.connect( 'localhost', login = 'admin', password = '<実際のパスワード>', poll_time = 100)①③②while True:
print( 'counter_per_task = {}'.format(Plc.get_var('counter_per_task')) )sleep(1)① REST API の接続先の PLCnext
Runtime が動作している PLCnext
Control の IP アドレスです。
14② PLCnext Control にデフォルトで存在するユーザアカウント “admin”を指定しています。

③ admin ユーザ用の実際のパスワードを入力してください。デフォ
ルトパスワードは PLCnext Controlの筐体表面に印字されています。

Pyhon プログラム：PLCnext Runtime 変数値の読み取り変数値の読み出しを実行▪ read_counter.py を実行します。
$ python3 ./read_counter.py

counter_per_task 変数の値が表示され、PLCnext Runtime の変数値を読み出せていることがわかります。
▪ 中断するときは、Ctrl + x を押してください。

15

Pyhon プログラム：PLCnext Runtime 変数への値書き込み

変数値を書き込む Python コードの作成▪ 以下のコードを作成し、set_counter.py という名前で PLCnext コントローラへ保存してください。
from pyPLCn import pyPLCn
from time import sleep
if __name__ == '__main__':Plc = pyPLCn()
Plc.set_var_names(['counter_per_task'])
Plc.connect( 'localhost', login = 'admin', password = '<実際のパスワード>', poll_time = 100)
debug_counter = 0
実際のパスワードを入力してください
while True:
if debug_counter > 10:
紫の部分は、read_counter.py から
Plc.set_var('counter_per_task', '0')
print ('reset')の差分 (追加のみ) です。
debug_counter = 0
print( 'counter_per_task = {}'.format(Plc.get_var('counter_per_task')) )sleep(1)debug_counter = debug_counter + 1

16

Pyhon プログラム：PLCnext Runtime 変数への値書き込み

変数値の書き込みを実行▪ set_counter.py を実行します。
$ python3 ./set_counter.py
reset※ が表示された後に、counter_per_task の値が小さくなっています。
つまり、REST API による PLCnext Runtime 変数値の更新が行われたことがわかります。

※ REST API によるアクセス結果が反映されるまでには、若干のディレイがあります。

▪ 中断するときは、Ctrl + x を押してください。
17補足

パスワード認証無しでアクセスする場合

1. Enforcement of user levels がNone であれば、認証は不要です。

2. Python コード側は、login とpassword へ空文字列を指定します。

Plc.connect( 'localhost', login = '', password = '', poll_time = 100)

18

補足

複数の PLCnext Runtime 変数の操作▪ REST API でアクセスする変数は、set_var_names 関数の引数の配列内にあらかじめ変数名を全て登録しておく必要があります。
Plc.set_var_names(['counter_per_task', 'second_val'])▪ PLCnext Engineer のプロジェクト側にも該当する変数を用意し、REST API でアクセスできるようにHMI_tag を付与してください。

19

補足

curl コマンドによる REST API の動作確認▪ REST API でアクセスできる変数の一覧を取得$ curl --insecure https://192.168.1.10/ehmi/data.dictionary.json

counter_per_task 変数には Arp.Plc.Eclr/counter_per_task という名前でアクセスできることがわかります。
▪ counter_per_task 変数の値を取得$ curl --insecure https://192.168.1.10/_pxc_api/api/variables?paths=Arp.Plc.Eclr/counter_per_task

counter_per_task 変数の値を確認することができます。
20