OpenPLC用 Arduino UNO用テストベンチボードを作ってみました ラダープログラム編

前回Arduino UNO用のベンチボードの紹介をしました。
[前回の記事](https://qiita.com/kaz19610303/items/97aece891b3223c819df)

前回の記事の中にArduino IDEで作成したサンプルプログラムを掲載していますが
今回はそれと同等の動きをするラダープログラムを**OpenPLC**で作ってみました。

先ずは[OpenPLC](https://openplcproject.com/)のページから [OPENPLC EDITOR](https://openplcproject.com/download/) と **Runtime** をダウンロードします。
[Windows への OpenPLC ランタイムのインストール](https://openplcproject.com/docs/installing-openplc-runtime-on-windows/) 
[Linux への OpenPLC ランタイムのインストール](https://openplcproject.com/docs/installing-openplc-runtime-on-linux-systems/)  

OpenPLCのインストールに関してはYoutubeの
[Next Step の Open PLC で ラダープログラム 基礎編 01](https://youtu.be/snneNZr7rpw)
こちらを参考にしてください。

OpenPLC Editerを起動して新しいプロジェクトを作成します。
ここでは OpenPLC_test_01 としました。
![2023-01-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/7af6f8b6-0147-ef8b-b1d7-e7bd99a1e711.png)
また **Language** は **LD** (ラダー言語)を選択します。
![2023-01-05 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/d95667bb-c283-80cb-d5c5-e6033c96da61.png)

**入力と出力の設定**は次のように設定します。
![2023-01-05 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/3c7747a6-7edd-e4ca-8555-cc4bc7350099.png)

**ラダープログラム**は次のようになります
(プログラムの説明は別の機会に行います)
![2023-01-05 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/bcd4accf-9717-299d-e2db-e5530f4b3cd0.png)

作成したラダープログラムを保存します。
**オレンジ色の下矢印**のアイコンをクリックしてください。
![2023-01-05 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/d6f4c0fe-f0f0-2189-d8be-86724a2da4c2.png)
ファイル名を指定して保存します。
今回は**OpenPLC_test** にしました。(拡張子の .st は自動で付加されます)
![2023-01-05 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/1d501204-2ea0-5dfb-77da-7cc5309f3b2a.png)

これでラダープログラムの準備は終了です。

次に**Arduino UNO**でこのラダープログラムを実行する準備を行います。

Arduino UNO用の**Farmware**をダウンロードして **Arduino IDE** で書き込みます。
[Farmwareダウンロードページ](https://openplcproject.gitlab.io/openplc_firmware/platforms_index.html)  

Firmwareの書き込みが終了したら Arduino IDE を閉じておいてください。
(OpenPLC Runtimeとの通信に同じシリアルポートを使っているので競合してしまうので)

次に **OpenPLC Runtime** を起動します。
**ターミナル**が起動して次のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/c74824ea-57fd-ad36-3e63-fbc24017cab0.png)

**OpenPLC Runtime** が起動したら ブラウザから **localhost:8080** にアクセスします。
ユーザー名、パスワード共に **openplc** と入力します。
![2023-01-05 (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/a5851b7a-47e5-7b29-dd7c-074d1ac86c18.png)

認証に成功すると以下の画面になります
![2023-01-05 (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/d000c202-eeb8-58c4-0f5b-4efc4d558d4b.png)

次にProgramのページで、先ほどOpenPLC Editer で保存した **.stファイル**を開きます。
![2023-01-05 (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/b4f301ba-fe7c-9a55-852a-47e9c2191e49.png)![2023-01-05 (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/c2114f9f-af39-9cff-a9f0-a79aff4cb3a1.png)
![2023-01-05 (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/38bee94a-aa26-1507-cba8-251f1eb16588.png)
Nemeの欄に適当な名前を入力して **upload program** をクリックします。
![2023-01-05 (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/3ef92331-cefa-15ac-2042-7965eb2fcf60.png)
  
**Go to Dashboardボタン**が赤くなったらアップロード終了です。
![2023-01-05 (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/cc092b9a-97c2-6394-a740-a2c02cba074a.png)
**Go to Dashboard ボタン** を押して **Dashboard** に戻ります。
次に **Slave Devices** をクリックして **Arduino UNO** を登録します。
![2023-01-05 (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/50ea093c-bcab-ed12-8147-73f25740822f.png)
**Add new device** をクリックします。
Device Type で **Arduino UNO** を選択して arduino UNO がつながっている**シリアルポート**を選択します。
Device Name は何でも良いのですが **Arduino UNO** としておきます。
(他の項目は変更出来ません)
**Save deviceボタン**を押してセーブします。
**Slave Devices** のページに今追加した Arduino UNOが表示されます。
![2023-01-05 (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/9b5f9e94-f54e-1dd6-8a4b-7d834a15b4b8.png)
**Start PLCボタン** を押すと **Status: が Running**になります。
この時点でArduino UNOでラダープログラムが走っています。
![2023-01-05 (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/63be8c07-78bb-a506-184e-a331b2fa0cd5.png)
**Monitoringページ**で**入出力のモニタ**が出来ます。
**Degital_in_0**のスイッチを押したら**Degital_out_0**がオンになりました。
![2023-01-05 (36).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/30c5cc55-8fd1-cb4c-aee6-e9b4d86e299a.png)
Analog_in_0の半固定抵抗を回すとAnalog_in_0の値とAnalog_out_0の値が変わります。
![2023-01-05 (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/1db185a6-c784-ee4a-827c-bb489e9ebc61.png)

以上で **Arduino UNO** 上で**OpenPLCのプログラム**が走りました。
ただ、これだと**Arduino UNO単体**ではラダープログラムの実行が出来ません。
ラダープログラムの学習にはなりますが、機械に組み込んでの制御は出来ません。

次回はArduino UNO単体でも OpenPLCのプログラムを実行する方法を解説します。