趣味と興味の覚え書

趣味や興味があって調べたことなどを記しています

Node-REDを使ってOPC UAでPLCの値を読み書きした際の気づきメモ

今回は、Node-REDを使ってOPC UAでPLCの値を読み書きした際に気づいたことをまとめる。

ritty1224.hatenablog.com

前回やったこと

下図のようにCODESYSをインストールしたラズパイでシーケンス制御を実行し、制御内で使用されている変数をOPC UAでPCに読み出し、読み出した値を表示した。 f:id:ritty1224:20211030144550p:plain

気づき

OPC UAでPLCから情報を収集するような以下のシーンを想定する。

  • PC側を設計する人(データの見える化する人)とPLC(CODESYS)を設計する人は別
  • 既にPLCは、稼働している状態。なるべく止めない
  • PC側で見える化したいデータが増加

このシーンを想像しながら、データ収集と表示までの手順を振り返ると、下記困りそう。

PC設計者:

  • どのデータを読み出せば良いかわからない。
  • 対象データの表示方法を決めるために、サイズ、更新頻度などデータの仕様理解が必要。
  • デバッグが困難。PLCが止められないため。

PLC設計者:

  • データを公開するには、変数追加や設定変更が必要。PLCを止めたくない
  • そもそも対象データ自体取れない。センサ取り付け、プログラム変更、変数公開が必要。PLCは止めたくない
  • そもそもプログラム変更でサイクルタイムが変わって欲しくない

じゃあどう進めるのだろうか?こんな感じ?

①PLC設計者が公開するデータ仕様を決定し、仕様書に記載
②PC設計者は仕様書をもとにNode-REDで読み出すデータを追加
③PC設計者はスタブで、データ読み出しをデバッグ(スタブ面倒)
④PLC設計者は仕様に従いセンサを追加(んーPLC電源落としたくない)
⑤PLC設計者は仕様に従いプログラムを変更し、変数を公開する(んーPLC電源落としたくない)
⑥PLC設計者は仕様に従い変更内容(プログラム)をデバッグする(PLCは稼働させたままにしたい)
⑦PC設計者はNode-REDで作成したデータ読み出しをデプロイし動作検証(ちゃんと動作するか不安)

①〜⑦をPC側とPLC側で並行作業する。
①→④→⑤→⑥↘︎ 
 ↘︎②→③→→→⑦

とここまで考えて、重要なことは、当たり前だが
「何が目的かを明確にすること」 だと思う。

PLCで制御する設備のチョコ停など内部の問題を見える化するのであればPLCの変数を見る必要があり、 そうではなく、製造したモノの検査結果などPLC外部でも取得できるものは、PLCではなくラズパイなどを使った データ収集で構わない。上記シーンを前者とすると、これを実現するためには、以下のようなことが必要そう。

  • ③でスタブが簡単に作成できる
  • ④で部分的に電源OFFできる。PLCとは別の電源系統で、そこを止めてもシーケンス制御に影響しない。
  • ⑤でシーケンス制御を止めずに、プログラム変更ができる
  • ⑥で実機PLCと同様の振る舞いができるシミュレータ
  • ⑦でデプロイ先と同様の環境での事前検証機能

こういった機能が世の中にあるかというとまだ十分ではなさそう。 データ活用という点で、機能の充実を図って行くことも重要と感じた。

今週のお題「叫びたい!」

今週のお題「叫びたい!」

「叫びたい!」と思ったことはないし、叫んだのはカラオケくらい。叫ぶというと、何か嫌なこと、ストレスが溜まっているイメージ。最近、急性胃腸炎で1日だけ仕事を休んだ。「体調不良で休むなんて珍しいね、ストレスかな。」と職場で言われる。確かに、最近は成果もあまり出ていなくて期待に応えられていないし悩んでる。でも、この程度でストレスで休むなんて、個人的には、ない。だから、ストレスで休んだと思われたくないし、そうでありたくない。

そんな私に先輩は言う、「自分が思っている以上にストレスは溜まっているもの。何も恥ずかしいことはない。素直に受け入れて、しっかり休めばいい。」

思っている以上にストレスは溜まっているのかも。無理はしたらあかんな。 来週あたり、海に釣りにいきたい。釣れたら叫んでみようかな。獲ったどーーーー! (恥ずかしいから無理やな)

今日の発見


何かに集中したい時、スマホは近くに置いてはいけないらしい。何かしらの通知や、通知が来なくてもSNSなどが気になって集中できないらしい。確かに。

Node-REDを使ってOPC UAでPLCの値を読み書き

目標

今回はNode-REDを使ってOPC UAでPLCの値を読み書きしたいと思う。Node-REDでこのような画面を作成し、ラズパイ上のCODESYSの変数の値を読み書きします。 f:id:ritty1224:20211017133613j:plain

簡単に画面の説明から。

  • Browse : OPC UAサーバのアドレス空間探索。変数情報を探すために使用。
  • Main : 変数読み書き。
    • STARTボタン : 変数のモニタ開始
    • Powerスイッチ : 変数gInput001に値を書き込む
    • gInput001 : 変数gInput001のモニタ値
    • gOutput001 : 変数gOutput001のモニタ値
    • Counter : 変数gCounterのモニタ値

構成

今回の構成は以下。Node-REDもラズパイ上で実行したかったが、PCに先に入れてしまったので、ラズパイは諦めた。まあ同じだろう。

Windows 10 (Node-RED, OPC UAクライアント)
l
ラズパイ(CODESYS, OPC UAサーバ)

準備

WindowsPCへのNode-REDのインストール (Node.jsのインストール含む)

Windowsで実行する : Node-RED日本ユーザ会

Node-REDで使用するノードのインストール

  • node-red-contrib-opcua (OPC UAによるデータ交換を行うノード)

node-red-contrib-opcua (node) - Node-RED

node-red-dashboard (node) - Node-RED

上記リンクはnpmによるインストール方法が記載されているが、GUIでもインストール可能。

パレットにノードを追加する : Node-RED日本ユーザ会

Raspberry PI (CODESYS installed)
CODESYSのインストール方法やプログラミングについては以下参照。

やってみよう

手順

  1. CODESYSの開発環境の設定
  2. CODESYSの設定、プログラミング
  3. Node-REDでフローを読み込む
  4. Node-REDで変数読み書き

CODESYSの開発環境の設定

CODESYSには標準でOPC UAサーバが搭載されている。OPC UA機能の設定を行うために必要となるアドオンの追加を行う。CODESYS V3.5 SP17 Pathc1を使用しているが、デフォルトではOPC UA機能の設定ができなかった。

  1. CODESYS Communicationをインストールする
    CODESYS Installerを起動し、CODESYS Communicationのアドオンを追加する。 f:id:ritty1224:20211016141951j:plain

CODESYSの設定、プログラミング

1.新規プロジェクトを作成する。
プロジェクト作成など基本的な操作は以下参照。

2.PLC_PRGを開きプログラムを書く。
gInput001がTrueなら、gOutput001をTrueにしgCounterを毎サイクル10加算する。という簡単なプログラム。

PROGRAM PLC_PRG
VAR 
    gInput001:BOOL;
    gOutput001:BOOL;
    gCounter:UINT;
END_VAR

IF gInput001 = TRUE THEN
    gOutput001:=TRUE;
    gCounter:=gCounter+10;
ELSE
    gOutput001:=FALSE;
    gCounter:=0;
END_IF;

3.シンボル構成オブジェクトを追加する
下図のメニューからシンボル構成オブジェクトを追加する。シンボル構成の追加のダイアログが表示される。「OPC UA機能のサポート」にチェックがついていることを確認して追加する。
f:id:ritty1224:20211016144138j:plain

4.シンボル構成の編集
シンボル構成を開き公開する変数にチェックをつける
f:id:ritty1224:20211017135013j:plain

5.Windows PCから資格情報なしに接続するためにCODESYSへの匿名ログインを許可しておく。 f:id:ritty1224:20211016145542j:plain f:id:ritty1224:20211016145203j:plain

6.CODESYSにプロジェクトをダウンロード CODESYSにログインしプロジェクトをダウンロードし、運転モードにする。

Node-REDでフローを読み込む

1.Node-REDを起動し、右上の三本線アイコンをクリックし、「読み込み」を実行する。

2.以下をコピーし貼り付ける。

[{"id":"e1e4a455bdf7b20d","type":"tab","label":"フロー 1","disabled":false,"info":""},{"id":"fd8c6625af5c9311","type":"ui_template","z":"e1e4a455bdf7b20d","group":"b4cbb1eea7449882","name":"","order":6,"width":"6","height":"10","format":"<div layout=\"row\" layout-align=\"space-between\">\n\t<select ng-model=\"item\" ng-options=\"items.item.displayName.text for items in msg.payload\">\n\t\t<option value=\"\">-- Objects Root --</option>\n\t</select>\n</div>\n\n<div layout=\"row\" layout-align=\"space-between\">\n\t<button ng-click=\"send({payload: {actiontype: 'browse', root: item}})\"> Browse </button>\n</div>\n\n<div layout=\"row\" layout-align=\"space-between\">\n    <ul> <li ng-repeat=\"items in msg.payload\"> {{items.item.displayName.text}}: {{items.item.nodeId}} </li>\n    </ul>\n</div>","storeOutMessages":false,"fwdInMessages":false,"resendOnRefresh":false,"templateScope":"local","className":"","x":430,"y":100,"wires":[["e8facbc9f34c7609"]]},{"id":"e8facbc9f34c7609","type":"OpcUa-Browser","z":"e1e4a455bdf7b20d","endpoint":"a1c9116733215552","item":"","datatype":"","topic":"","items":[],"name":"","x":430,"y":180,"wires":[["fd8c6625af5c9311"]]},{"id":"17a6b19b660e193f","type":"ui_text","z":"e1e4a455bdf7b20d","group":"952cda7cb8019a3d","order":4,"width":0,"height":0,"name":"Output","label":"gOutput001","format":"{{msg.payload}}","layout":"row-spread","className":"","x":730,"y":380,"wires":[]},{"id":"bde88723416b903d","type":"OpcUa-Client","z":"e1e4a455bdf7b20d","endpoint":"a1c9116733215552","action":"write","deadbandtype":"a","deadbandvalue":1,"time":10,"timeUnit":"s","certificate":"n","localfile":"","localkeyfile":"","securitymode":"None","securitypolicy":"None","name":"Write","x":550,"y":280,"wires":[[]]},{"id":"62c454e9715eec40","type":"OpcUa-Item","z":"e1e4a455bdf7b20d","item":"ns=4;s=|var|CODESYS Control for Raspberry Pi MC SL.Application.PLC_PRG.gInput001","datatype":"Boolean","value":"0","name":"gInput","x":350,"y":280,"wires":[["bde88723416b903d"]]},{"id":"6f12e56749684087","type":"ui_switch","z":"e1e4a455bdf7b20d","name":"Power","label":"Power (gInput001)","tooltip":"","group":"952cda7cb8019a3d","order":2,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"className":"","x":150,"y":280,"wires":[["62c454e9715eec40"]]},{"id":"3bcb0fc232647942","type":"OpcUa-Item","z":"e1e4a455bdf7b20d","item":"ns=4;s=|var|CODESYS Control for Raspberry Pi MC SL.Application.PLC_PRG.gcounter","datatype":"Int32","value":"","name":"gCounter","x":340,"y":480,"wires":[["b59193780ad42b14"]]},{"id":"8fa9cfdda22b99d7","type":"OpcUa-Item","z":"e1e4a455bdf7b20d","item":"ns=4;s=|var|CODESYS Control for Raspberry Pi MC SL.Application.PLC_PRG.gOutput001","datatype":"Boolean","value":"","name":"gOutput","x":340,"y":360,"wires":[["b4aaf019d6bde6e5"]]},{"id":"753cf4a165d0d134","type":"OpcUa-Item","z":"e1e4a455bdf7b20d","item":"ns=4;s=|var|CODESYS Control for Raspberry Pi MC SL.Application.PLC_PRG.gInput001","datatype":"Boolean","value":"","name":"gInput","x":330,"y":420,"wires":[["b4aaf019d6bde6e5"]]},{"id":"89aae51628092960","type":"ui_text","z":"e1e4a455bdf7b20d","group":"952cda7cb8019a3d","order":3,"width":0,"height":0,"name":"Input","label":"gInput001","format":"{{msg.payload}}","layout":"row-spread","className":"","x":730,"y":420,"wires":[]},{"id":"7ddd8555903772fc","type":"ui_gauge","z":"e1e4a455bdf7b20d","name":"Counter","group":"952cda7cb8019a3d","order":5,"width":0,"height":0,"gtype":"gage","title":"Counter","label":"units","format":"{{value}}","min":0,"max":"65535","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":740,"y":480,"wires":[]},{"id":"b4aaf019d6bde6e5","type":"OpcUa-Client","z":"e1e4a455bdf7b20d","endpoint":"a1c9116733215552","action":"subscribe","deadbandtype":"a","deadbandvalue":1,"time":"1","timeUnit":"s","certificate":"n","localfile":"","localkeyfile":"","securitymode":"None","securitypolicy":"None","name":"Subscribe","x":540,"y":400,"wires":[["17a6b19b660e193f","89aae51628092960"]]},{"id":"b59193780ad42b14","type":"OpcUa-Client","z":"e1e4a455bdf7b20d","endpoint":"a1c9116733215552","action":"subscribe","deadbandtype":"a","deadbandvalue":1,"time":"1","timeUnit":"s","certificate":"n","localfile":"","localkeyfile":"","securitymode":"None","securitypolicy":"None","name":"Subscribe","x":540,"y":480,"wires":[["7ddd8555903772fc"]]},{"id":"ca7543de1070b079","type":"ui_button","z":"e1e4a455bdf7b20d","name":"Monitor","group":"952cda7cb8019a3d","order":1,"width":0,"height":0,"passthru":false,"label":"Start","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"true","payloadType":"bool","topic":"topic","topicType":"msg","x":160,"y":360,"wires":[["8fa9cfdda22b99d7","753cf4a165d0d134","3bcb0fc232647942"]]},{"id":"b4cbb1eea7449882","type":"ui_group","name":"Browse","tab":"ec09a280e1494ca8","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"a1c9116733215552","type":"OpcUa-Endpoint","endpoint":"opc.tcp://192.168.1.94:4840","secpol":"None","secmode":"None","login":false},{"id":"952cda7cb8019a3d","type":"ui_group","name":"Main","tab":"ec09a280e1494ca8","order":2,"disp":true,"width":"6","collapse":false,"className":""},{"id":"ec09a280e1494ca8","type":"ui_tab","name":"ホーム","icon":"dashboard","disabled":false,"hidden":false}]

3.OPC UAのノードのEndpointを設定する
フロー上の「OPC UA Browser」のノードをダブルクリックしEndpointを通信先のデバイスに合わせる。

4.デプロイする Node-REDの画面右上のデプロイボタンを実行する

5.ダッシュボードを起動する
Node-REDの右上にある▽ボタンを押下し、Dashboardを選択する。下図のタブの隣にある四角形から矢印が出ているアイコンをクリックする。目標に書いた画面が表示されればOK。
f:id:ritty1224:20211017161647j:plain

Node-REDで変数読み書き

あとは画面操作のみ。

  1. STARTボタンを押す
    変数のモニタが開始する。

  2. Power (gInput001)スイッチをONにする
    gInput001がTrueになり、gOutput001, gCounterの値が変わる。CODESYSの開発環境でプログラムをモニタしても変数の値が変わっていることが分かる。

調べたこと

  • OPC UAサーバのアドレス空間
    OPC UAのサーバアドレス空間は、PLCOpenとOPC UAで定めたPLC の内部情報を公開するアドレス仕様に従っている。この規格に従っているPLCは同じように内部情報を公開するため、上位系システムのMESやSCADAからの情報取得が容易となっている。アドレス空間はノードで構成されており、これらを識別するNode IDでアクセスが可能。
    詳しくはまだ勉強不足。おもしろそうなので今後勉強していく

  • ダッシュボードのBrowseボタン
    Browseボタンを押下すると下段にアドレス空間のノード情報が表示される。ドロップダウンリストでDeviceSetを選択し、Browseボタンを押す。これによりアドレス空間を探索する。DeviceSet→CODESYS Control for Raspberry Pi MC SL→Resources→Application→Programs→PLC_PRGと探索していくとgInput001, gOutput001, gCounterが見つかる。ns=4;s=・・・の部分がNode ID。変数の読み書きする際に使用する。 f:id:ritty1224:20211017162811j:plain

  • Node-REDのフロー
    Browseで探索した変数のNode IDは、gInputなどのノードのitemプロパティに設定している。画面を操作するとNode IDに従い、OPC UAサーバのアドレス空間の値を読み書きしている。

さいごに

今回、Node-REDとOPC UAを使ってみて思ったこと。
- 制御システムの情報の見える化のための通信ロジックやデータ制御ロジックなどいわゆるビジネスロジックは一切書かずに実現できた。そういう意味では簡単と言える。
- シンプルな画面は公開されているノードを使用することで容易に作ることができる。
- 複雑な画面を作るには、HTMLやJavaScript, CSSなどのスキルが必要
- OPC UAはFAにおけるデータ交換のオープンな国際標準規格として広まっており、様々な業界でOPC UAによる標準化が進んでいる。産業IoTにはこの知識、スキルは必須。

www.fa.omron.co.jp

今日からお風呂改革

今週のお題「お風呂での過ごし方」いいお題ですね。普段何も考えず、烏の行水なので、改めて考え直してみるいい機会です。

他の方の投稿を見て、いろんな過ごし方に気づき、今日から色々試してお風呂での過ごし方を変えてみようと思う。

まずは読書。毎日寝る前に本を読む時間をとっているが、最近は読み始めるとすぐに寝てしまう。寝る前ではなくお風呂の時間にしたら寝てしまうこともないかも。

今日の発見

栗を割ると先端に芽がある。あれは幼虫にしか見えないけど、芽らしい。知らずに何個か捨ててしまった。

2021/10/05 バス釣り(琵琶湖)

今日も滋賀県は朝から良い天気。窓を開けると風が涼しくて気持ちが良い。

今日は仕事休み。というか今週はずっと休み。
明日釣りに行こうと思っていたけど、暇なので今日も行くことに笑
早速、琵琶湖へGO!

AM9:30 南湖の木浜1 駐車場到着

平日だからか、ほとんど釣り人はいない。人が多いところは苦手なのでラッキー。
琵琶湖は思ったよりも風が強い。水質はキレイ。 f:id:ritty1224:20211005131651j:plain

まずはこの辺で、スピナーベイト(1/4oz ナチュラル系)を投げてみたが、反応なし。
前回はこの辺で35cmくらいのバスを釣ったけど、今日はダメ。 f:id:ritty1224:20211005131648j:plain

AM10:00 木浜内湖で40cmくらいのナマズを手元でばらす

風が強いので道路の反対側の木浜内湖へ。風は大分マシ。

ここでもスピナーベイト

3投目、ルアー着水後にラインのテンションを張ったまま、フォール。底まで沈めて巻き始めると、いきなりアタリ!

慌ててあわせると、結構重い感じの引き、これは期待できると胸躍らせて慎重にファイト。
が、あがってきたのは40cmくらいのナマズ・・・げっ(グリッパーもペンチもないぞ・・)と思ってひよっていると、ナマズが暴れてうまいこと針が外れた笑。
結構良い引きだったので、かなり興奮ししばらく足の震えが止まらず笑  やっぱ面白い!! f:id:ritty1224:20211005131656j:plain

AM10:30-12:00 木浜近辺でランガン

再び琵琶湖に戻り、スピナーベイトランガン。結構草ボーボー。(明日も来るなら長靴やな)
風ビュービューでバックラッシュしまくるも、スピナーベイトを投げまくる。

合言葉は「風が吹いたらスピナーベイト
(村田基さんが言ってた。確か、風が吹くと波が立ち、プランクトンが岸際に寄ってくる。それを小魚が食べにくる。それをバスが食べに来る。だから小魚っぽく見え、アピール力もあるスピナーベイトが良いと)

が、小魚は見えるが、バスの反応なし。スピナーベイト以外もやってみたけどダメ。

PM12:30、もう少しやるか迷っているとスズメバチが飛んできたので、逃げるように退散。これで釣行終了。
(昔、スズメバチに追いかけられてから、羽音にすごく敏感・・・ビビってます) f:id:ritty1224:20211005131654j:plain

ちなみに僕のバスタックルはコレ(古っ)。
高校の時に憧れていた並木プロが釣り番組で使用していたDAIWAのBATTLERシリーズ。夏休みに毎日アルバイトして、給料日に2本購入。Kingbolt(左)とFlogger(右)。リールも高校の時に購入したシマノメタニウムf:id:ritty1224:20211005131625j:plain

本日の発見

  • ナマズの引きは、重量感のある引きで、グイィーッグイィーッとどんどん潜っていこうとする感じ。
  • 以前書いた記事で使用したCODESYS Control for Raspberry Pi MC SL、OPC UAのサーバ機能持ってるやん。今度、OPC UAを使った通信をやってみよう。

ritty1224.hatenablog.com

ラズパイとCODESYSでシーケンス制御

今回の目標

今回の目標は、ラズパイでシーケンス制御を実行すること。
(ブレッドボードを使ったLEDチカチカは今回はやらない)

用意したもの

準備

以下については、別途投稿する。

CODESYSのダウンロード

以下をCODESYS Storeからダウンロードする。ダウンロードするにはアカウント作成が必要なので、作る。

store.codesys.com

  • CODESYS Development System V3 (Version 3.5.17.10)
    「CODESYS 64 3.5.17.10.exe」がダウンロードされる
  • CODESYS Control for Raspberry Pi MC SL (Version 4.2.0.0)
    「CODESYS Control for Raspberry PI 4.2.0.0.package」がダウンロードされる
  • CODESYS Edge Gateway for Linux (Version 4.2.0.0)
    「CODESYS Edge Gateway for Linux 4.2.0.0.package」がダウンロードされる。上記CODESYS Control for Raspberry PI 4.2.0.0.packageをインストールする際にCODESYS Edge Gateway for Linux 4.2.0.0.packageが必要と言われる。

CODESYS Control for Raspberry Pi MC SLはライセンスが€100となっているが、ライセンスがなくてもお試しモードで2時間の連続運転が可能。それ以上運転する場合はライセンスが必要。

CODESYSのインストールと環境設定

  1. IDEをインストールする
    「CODESYS 64 3.5.17.10.exe」を実行する。ウィザードに従いインストールをすすめる
  2. Code Generatorのアドオンを追加する
    CODESYS Installerを起動し、InstallationsのCODESYS 3.5 SP17 (64bit)のChangeをクリック。AddOnsでCode Generatorを検索しCODESYS Code Generator ARMを入れる。依存関係としてCODESYS RISC Front Endもインストール。 f:id:ritty1224:20211004132710j:plain Code Generatorをインストールしないと、STプログラムをコンパイルする時にエラーになる。私はここでハマった。エラー見ても解決方法が分からず英語のサイトを彷徨った。この2つを追加したらコンパイル成功した
  3. IDEを起動する
    CODESYS V3.5 SP17 Patch1を実行する。
  4. パッケージをインストールする
    メインメニュー[ツール]-[パッケージマネージャ]を実行する。インストールボタンを押下し、以下をインストール

最終的にはこうなる。 f:id:ritty1224:20211005001912j:plain

本題

ここからは、シーケンス制御プログラムを作成しラズパイにダウンロードし、実際に運転するところまで確認する。

シーケンス制御

ラズパイでシーケンス制御を動作させるまでの手順は以下。今回はブレッドボードを使ってLEDチカチカまではやらずに、その手前まで。

1. プロジェクト作成

  1. CODESYS V3.5 SP17 Patch1を起動する。
  2. 新規プロジェクト作成する。テンプレートは標準プロジェクトでOK。
  3. プロジェクト作成すると、デバイスと言語を設定する。私の場合STしか選択できなかったのでSTにする。 f:id:ritty1224:20211004135255j:plain

2. Update Raspberry PI

  1. メインメニューの[ツール]-[Update Raspberry PI]を実行する。下図ウィンドウが表示される。
  2. デフォルトのusernameはpi、passwordはraspberry。変更していれば変更したものを入力する。
  3. Scanを実行すると同一ネットワーク上のラズパイが見つかる。
  4. Package directoryにCODESYS Control for Raspberry PIのフォルダを選択する
  5. Installを実行する。
  6. インストール完了後にSystem Infoを実行し、ラズパイの情報が表示されればOK。
  7. RuntimeをStartする。
    f:id:ritty1224:20211004135316j:plain

3. プログラム作成

  1. バイスウィンドウでPLC_PRGをダブルクリックする。STエディタが表示される。
  2. STプログラムを書く。input001がTRUEになれば、output001もTRUEになる。
    f:id:ritty1224:20211004141106j:plain
  3. [ビルド]-[コード生成]を実行する。エラーなく完了すればOK。
    私の場合コード生成を実行すると以下のエラーがでた。原因はCode Generatorがないことだったので、準備に記載した手順でCode Generatorを追加すると成功した。 f:id:ritty1224:20211004131652j:plain

4. オンライン

  1. バイスウィンドウでDeviceをダブルクリック f:id:ritty1224:20211004143317j:plain
  2. ネットワークスキャン実行
  3. バイス選択ダイアログでラズパイを選択し、OKで閉じる f:id:ritty1224:20211004143318j:plain
  4. ログイン(SSH)する。ログイン画面が表示されたらユーザ名とパスワードを入力する。 f:id:ritty1224:20211004143557j:plain ユーザ名はラズパイのホスト名とパスワード(デフォルトはraspberrypiとraspberry)。私はこのユーザ名とパスワードが何か分からず解決するまでに時間かかりました。SSH接続しているようなのでラズパイのホスト名ですね。

5. ログイン→ダウンロード→運転

  1. メインメニュー[オンライン]-[ログイン]実行する
  2. Applicationがないからダウンロードするか聞かれるので、ダウンロードする。下図のように接続完了となればログインとダウンロード完了。 f:id:ritty1224:20211004145919j:plain
  3. メインメニューの[デバッグ]-[運転]を実行すると、運転状態になる。

試しにSTエディタにて任意の行にブレークポイントを設定して有効化してみると、その位置で停止する。 f:id:ritty1224:20211004151002j:plain

今回はここまで。もう少しシーケンス制御が動作していることが分かるプログラムにすれば良かった。

今回の発見


  • CODESYSはソフトPLCだから、実行環境に応じたコンパイラが必要で、それぞれにあったCode Generatorをユーザがインストールする
  • アドオンは、どれを使えばいいのかわからない。必要なものだけ、簡単に取り込め、不要になれば削除できる仕組みは必須。
  • エラーがいかに簡単に解決できるかが重要

ブログを書こうと思う

 今週のお題「今月の目標」
ちょうど今月からブログを書こうと思い、はてなブログさんでアカウントを作成したところでした。なので、ちょうどいいお題。

今月の目標 ブログを5本書く


 5本書くのがどれくらい大変か分からないけど、とりあえず1本/週。
ブログに書きたいのは、自分が興味があって勉強したこと。ブログという形でアウトプットすることで得た知識を整理し、理解を深めたい。まあ他にも趣味(釣り)のこととかも書きたいと思っていますが、目標の5本については勉強したことを書きます。

今日の発見


ラズベリーの綴りはRaspberry。 Rassberryではない。