NodeRed#USB CameraでQR Codeを読み取り・OPC UA Serverを立ち上げよう

今回の記事ではPI4にNode Redインストールし、そしてQR CodeをUSBカメラで認識させ同時にOPC UA Server立ち上げ、TwinCAT3 TF6100からアクセスし連携します。現時点で無料・気楽に試せるOPC UA ClientはおそらくTwinCAT3しかありませんので。

さ、はじめよう。

Camera

こちらは今回使用するLogi社の2500円のWeb Cameraです。

Configuration

手作り感半端ないですが、このようにWeb Cameraを使ってQR Codeを読み取りようにします。

Implementation

Operation Flow

こちらは今回の記事の制御Flowです。

Raspberry PI Side

最初はRaspberry PI側から構築します。

Check Camera

カメラが認識されたかを確認します。

lsusb

lsusbコマンドを使用し、現在Raspberry PIが認識されているUSBデバイスをリストアップします。 

pi4@raspberrypi:~ $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

https://www.baeldung.com/linux/check-for-usb-devices

grep 

次はgrepコマンドを使用し、lsusbから出力した結果からWebcam C270(今回記事で使用するWebカメラ)だけを取り出します。

pi4@raspberrypi:~ $ lsusb | grep ‘Webcam C270’
Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270

https://phoenixnap.com/kb/grep-command-linux-unix-examples

Install Node-Red

次は下記の記事を参照しRaspberry PI4でNode-REDをインストールしましょう。

Raspberrypi#Install Node-Red

Node-Red Side

Node-Redのプログラムを作成します。

Install Node

最初に今回記事の中で使用するNodeを説明します。

node-red-contrib-opcua

こちらはOPC UA機能を実装したNodeです。

https://flows.nodered.org/node/node-red-contrib-opcua

下記のコマンドでnode-red-contrib-opcuaをインストールします。

npm install node-red-contrib-opcua

node-red-contrib-opcuaをインストール完了したら、OPC UAのNodeが表示されます。

node-red-contrib-usb-camera

こちらはUSBカメラの操作を実装したNodeです。

https://flows.nodered.org/node/@prescient-devices/node-red-contrib-usb-camera

下記のコマンドでnode-red-contrib-usb-cameraをインストールします。

npm install @prescientdevices/noderedcontribusbcamera

node-red-contrib-usb-cameraをインストール完了したら、usbcameraのNodeが表示されます。

node-red-contrib-qrdecode

こちらはQR CodeのDevodeを実装したNodeです。

https://flows.nodered.org/node/node-red-contrib-qrdecode

下記のコマンドでnode-red-contrib-qrdecodeをインストールします。

npm install node-red-contrib-qrdecode

node-red-contrib-qrdecodeをインストール完了したら、qrcodeのNodeが表示されます。

Flow

ここからFlow作成の説明をします。

Configure OPC-UA Server

こちらはNode-RedからOPC UA Serverを立ち上げるFlowになります。

Read OPC UA Server Running Status

最初にStatus Nodeを使用し、OPC UA Serverが立ち上げたかをCheckします。

Status Nodeでは同じFlow Tabの中にあるNodeの状態を取得できますので、今回はNode-Red内にあるLocal Serverの状態をCheckします。

Check the OPC UA Server Status

先ほどのStatus NodeからLocal Serverを取得したので、次はswitch Nodeを使って条件判断の制御をします。

現在Status NodeのPayloadから”running”状態のみ、次のNodeに進めるようにします。

その”running”というのは、OPC UA Serverが正常に立ち上げたあと、Node-Redから”running”だと示したことです。

Configure Server Folder/Nodes

OPC UA Serverが立ち上げたことを確認できれば、次はOPC UA ServerにFolderやNodesを追加します。

Add Folder inside OPC UA Server

最初にFolderをOPC UA Serverに追加します。Folderを追加することにより、目的異なるNodeを分けてカタログ化できます。

topicはFolderの詳細で、payloadはFolderを追加するときに使用するコマンドです。

msg.topic =”ns=1;s=CameraOperation”;
msg.payload = { “opcuaCommand”: “addFolder” };

return msg;

先ほどのコマンドを実行したあと、uaExpertやTwinCAT3 TF6100を使ってOPC UA Serverにアクセスするとき、”CameraOperation”というFolderが作成されます。

Set the Folder

新しいNodeを先程追加されたFolderの下に作成したいので、Set Folderコマンドを使用します。

topicはこれから作業したいFolderの詳細で、payloadはSet Folderを設定するときに使用するコマンドです。

msg.topic =”ns=1;s=CameraOperation”;
msg.payload = { “opcuaCommand”: “setFolder” };

return msg;
Connect the OPC UA Server Node

次はFolder操作のNodeをOPC UA Server Nodeと繋がれば、OPC UA Serverが自動的にCameraOperationのFolderを作成し、またこれから作業するFolderをCameraOperationに設定するようになります。

Process Delay

Set FolderできるまでのDelayを設定します。

Node-REDではdelayのNodeを使用し動作遅延することができます。

今回は固定の4s Delayに設定します。

Add Variables into OPC UA Server

次はOPC UA Serverに変数を追加します。

基本的にはtopicで追加したい変数の詳細を入力し、payloadでaddVariableのコマンドを設定します。

他のNode変数も同じ操作だけなので、詳しく説明しません。

msg.topic =”ns=1;s=DoubleArray;datatype=DoubleArray[50];”;
msg.payload = { “opcuaCommand”: “addVariable” };

return msg;
Connect all Variables to OPC UA Server

アプリケーションに必要なNode変数をすべて構築したあと、Local Serverと繋がり、OPC UA ServerにNode変数を作成させます。

これでOPC UA Serverの構築は完了です。

Configure USB Camera

次はUSBカメラが動作し、QR CodeをDecodeするまでのFlowを説明します。

Read Trigger Command via OPC UA

OPC UA Clientからのコマンドを周期で読み取ります。

Inject Nodeから重複実行の時間などの細かい設定ができます。

Configure the reading Node

次はLocal OPC UA Serverに読み取りたいCameraコマンドを設定します。

OperationCommandを常にMonitorします。

Set up the OPC UA Server Connection

OPC UA ServerのNodeにアクセスするため、Local OPC UA Clientを追加します。

EndpointはLocalhostで、ActionをREADに設定します。

Trigger Camera Operation via Pulse UP

USB CAMERAの動作はOperationCommand値が0→1に変化する度のみ実行したいので、Node-RedにあるTrigger Nodeを利用します。

Trigger NodeをLocal OPC UA ClientのNodeの実行後と繋がりましょう。

Trigger条件成立するとPayload値を1に送信、該当するNodeはmsg.rest msgかpayload=0がくるとリセットします。

Check the Signal

次はswitch Nodeを追加し条件判断を行います。

switch Nodeは複数の条件判断を定義でき、今回は0と1だけ設定しましたが、0の場合はSwitch Nodeの上にあるFlowに流れていく、1の場合は下のFlowに流れるイメージです。

Reflesh the Server Status 

USB CAMERAがTriggerされた場合、OPC UA にあるMessage/Status/Valueの3つの変数を一旦初期化します。そうするとOPC UA Serverと接続されているClientにも、CameraがTriggerされたことがわかります。

Setup Payload

各Function NodeにPayload Messageを設定します。

Function Message
var _msg=msg;
_msg.payload=”Camera Operation is Triggerred.”;

return _msg;
Function Status
var _msg = msg;
_msg.payload = -2;

return _msg;
Function Value
var _msg = msg;
_msg.payload = ” “;

return _msg;
Passing payload to OPC UA Item

先ほどFunction Nodeで設定したPayload MessageをOPC UA Itemに設定します。

Configure Writing OPC UA Item

OPC UA Server書き込みたいのOPC UA Itemを設定しましょう。

こちらの設定は先程も説明しましたので、詳しく説明しません。

Write Data to OPC UA Server

次はOPC UA Clientを追加し、先ほど設定したOPC UA Itemと繋がりましょう。

OpcUa-Client NodeではEngpointをLocalHostに設定し、ActionをWRITEにしましょう。

Trigger the USB Camera

OPC UA Serverの変数Nodeを更新したあと、USB CAMERAの動作をTriggerするため、USBCAMERA Nodeを追加しましょう。

File ModeをBufferし、Image Resolutionを800×600くらいにしましょう。

Decode the Images

次はqrcode Nodeを追加し、usbcamera Nodeと接続します。

qrcode Nodeに設定する項目がありません。

Reflesh the Result

qrcode NodeのDecode結果をOPC UA ServerのNode変数に反映します。

qrcodeの出力とまた3つのFunction Nodeを繋がります。

Configure the payload

qrcode Nodeの結果をPayload Messageに設定します。

Function Message
var _paylod=msg.payload.message;
var _msg=msg;
_msg.payload=_paylod;

return _msg;
Function Status
var _paylod=msg.payload.status;
var _msg=msg;
_msg.payload=_paylod;

return _msg;
Function Value
var _paylod = msg.payload.value;
var _msg = msg;
_msg.payload = _paylod;

return _msg;
Configure OPC UA Item

Function NodeとOPC UA Itemを繋がります。

Opc-UA-Itemに更新したいNode変数を設定しましょう。

Write to OPC UA Server

最後はOPC UA ServerにNode変数を書き込むようにOPC UA Itemの出力と繋がりましょう。

Check the Camera Status

最後はUSBカメラの状態をCHECKするFlowを説明します。

Trigger 

こちらは1sごとに重複実行するNodeです。

Execute Command

次はexec Nodeを追加しましょう。こちらのNodeを使用すればSystem Commandを実行できます。

記事の最初にも紹介した通り、こちらのコマンドでWebcam文字列を取り出します。

Check the result

Function Nodeを追加し、exec Nodeの実行結果を利用し、USB CAMERAの状態を反映します。

もしWebcam 270の文字があれば、Raspberry PIがUSB CAMERAを認識できると判断しますので、1を返します。それ以外は0を返します。

var str=msg.payload;
var pos=str.search(‘Webcam C270’);
var returnValue=0;

if (pos>=0){
    returnValue=1;
}

msg.payload=returnValue;

return msg;
Configure the OPC UA Item

OPC UA Serverに書き込むNodeを設定しましょう。

こちらの設定は先ほどにも説明しましたので。

Write the Data to OPC UA Server

OPC UA Serverにデータを書き込むようにします。これでRaspberry PI側が完了です。

Beckhoff Side

Install Packages

Beckhoff TwinCAT3でOPC UA Clientを使用するには下記のPackageをインストールしてください。

https://www.beckhoff.com/ja-jp/products/automation/twincat/tfxxxx-twincat-3-functions/tf6xxx-connectivity/tf6100.html?

Add Devices

Devices>Add New Itemで新しいDevicesを追加します。

OPC UA>Virtual OPC UA Deviceを選び>Okします。

Add OPC UA Client

Device>Add New Itemで新しいOPC UA Clientを追加します。

OPC UA Client(Module)を追加しましょう。

SelectEndpoint

Raspberry PIの接続設定をするため、先程追加したClientをクリックします。

Select Endpointをクリックします。

Endpoint Discovery画面が表示されます。

Discovery UrlでRaspberryPIのOPC UA Server Endpointを入力しましょう。

RaspberryPIと接続するEndpointsを選びましょう。

Done!

Add Nodes

今回の記事で必要なNodeはすべてCameraOperationというFolderに格納されていますので、Enable WriteのCheckを入れて、OKで進みましょう。

Add PLC

PLCを右クリック>Add New Itemで新しいPLCプロジェクトを追加します。

Standard PLC Projectを選び、Addで進みます。

Create GVL

Create Plc Codeを利用しGVLを自動生成します。

Done!

MAIN

こちらはbSwitchがONになると、OperationCommandを1に書き込み、OFFになると0に書き込む簡単なプログラムです。

Screen

こちらはQR Codeの結果やTriggerするStart ボタンの簡単な画面です。

Activate Configuration

最後はActivate ConfigurationでプロジェクトをRuntimeにDownloadしましょう。

ライセンスが足りない場合はTrialライセンスを入力しましょう。

Magicのコードさえ入力すれば7日使えます。そして7日後Runtimeは1回Stopになり、もう1回Trialライセンスを有効にしましょう。

TwinCATをRun Modeに切り替えます。

Login

結果を監視するためLoginします。

Yesで進みます。

Start

StartボタンでRuntimeを起動します。

Write Enable

GVLにあるbWrite_EnableをTrueにします。また、bConnected=Trueなので、OPC UA Serverと正常に接続しています。

Result

こちらの動画で動作確認できます。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする