MATLAB#OPCUA Clientを使ってみる

今回はMATLABを使ってOPCUA Clientしシーメンス側のOPCUA Serverをアクセスと考えています。

事前準備

シーメンスのS7-1500でOPCUA Serverを立ち上げ方法はもうすでにのっていますので詳しく説明しません。下記で参考お願いします。

シーメンス#TIA OPCUAの使い方

ちなみに、今回用意したのはこの3つの変数です。

MATLAB

MATLABからOPCUAの使い方は下記のLINK詳しい説明がありますが、ここで使えそうな関数などを簡単に説明したいと思います。

https://www.mathworks.com/help/opc/ug/opcua.html

opchdaserverinfo

HostNameはIPアドレスやServer名でもOKで、Dataタイプが文字列・Vector可能になります。sが”OPC HDA ServerInfo”としてOPC ServerからRead-onlyのプロパティが戻り値になります。

s = opchdaserverinfo(‘HostName’) 

https://www.mathworks.com/help/opc/ug/opcserverinfo.html

opcua

この関数を使ってOPCUA Clientを作成します。入力可能パラメータは:

  • ServerInfoObj  #opchdaserverinfo関数で取得したもの
  • ServerUrl #OPCUA ServerのURL
  • Hostname,Portnum #OPCUA ServerのServer名とPort番号

そしてOPC Client Objectが戻ってきます。

UaClient = opcua(ServerInfoObj)
UaClient = opcua(ServerUrl)
UaClient = opcua(Hostname,Portnum)

https://www.mathworks.com/help/opc/ug/opcua.html

Connect

OPC Serverと接続する関数です。ObjはOPC Client Objectです。つまり先opcua関数で作成されたObjectをそのまま入れればOkです。

connect(Obj)

https://www.mathworks.com/help/opc/ug/opcda.connect.html

isConnected

もしOPC Client ObjectがOPC Serverと繋がってるのであればTrue返して来ます。

isConnected(hdaObj)

https://www.mathworks.com/help/opc/ug/opc.hda.client.isconnected.html

disconnect

OPC Client Objectが接続しるOPC Serverを切ります。

disconnect(Obj)
da.Status

https://www.mathworks.com/help/opc/ug/opcda.disconnect.html

findNodeByName

名前からServer Nodeを検索する関数です。

1列目はNodeNameのプロパティと合ってるすべでのNodeを探します。

2列目はNodeNameのプロパティと合ってる最初1つのNodeを探します。

3列目はすべてNodeNameのプロパティと同じ始まってるのNodeを探します。

4列目はすべてNodeNameのプロパティと同じ始まってる最初1つのNodeを探します。

FoundNodes = findNodeByName(NodeList,NodeName)
FoundNodes = findNodeByName(NodeList,NodeName,’-once’)
FoundNodes = findNodeByName(NodeList,NodeName,’-partial’)
FoundNodes = findNodeByName(NodeList,NodeName,’-once’,’-partial’)

https://www.mathworks.com/help/opc/ug/opc.ua.node.findnodebyname.html

findNodeById

IndexとIdentifierからServer Nodeを検索する関数です。

FoundNode = findNodeById(NodeList,NsInd,Id)

https://www.mathworks.com/help/opc/ug/opc.ua.node.findnodebyid.html

Example

では、まずOpcua Serverの情報をいただきます。

>> uaClient = opc.ua.Client(‘opc.tcp://192.168.0.1:4840’)

uaClient =

OPC UA Client:

  Server Information:
                    Name: ‘SIMATIC.S7-1500.OPC-UA.Application:PLC_1’
                Hostname: ‘192.168.0.1’
                    Port: 4840
              EndpointUrl: ‘opc.tcp://192.168.0.1:4840’

  Connection Information:
                  Timeout: 10
                  Status: ‘Disconnected’
              ServerState: ‘<Not connected>’

  Security Information:
      MessageSecurityMode: None
    ChannelSecurityPolicy: None
                Endpoints: [1×1 opc.ua.EndpointDescription]

次はuaClient Objectの状態を確認します。

Disconnectedしてますね。

>> status=uaClient.Status

status =

    ‘Disconnected’

Serverを接続します。

>> connect(uaClient)
>> 

もう一度Statusを確認したら、もうConnectedに変わりましたね。

>> status=uaClient.Status

status =

    ‘Connected’

いまServerのNodeを確認しましょう。

OPCUA Nodeの配列がかえってきます。Indexが1,2,3があり、Indexの数字によってアクセスNode Objectを変わることできます。

>> topNodes=uaClient.Namespace

topNodes =

1×3 OPC UA Node array:
    index    Name     NsInd  Identifier  NodeType
    —–  ———  —–  ———-  ——–
      1    Server     0      2253        Object
      2    DeviceSet  2      5001        Object
      3    PLC_1      3      PLC         Object

次はIndex3のChildren Nodeを見てみましょう。

ちなみに3番はPLC_1、つまりCPUの中身になります。

多分一番情報知りたいのは7のOperate Mode、14と15番のDBかな?

>> serverChildren = topNodes(3).Children

serverChildren =

1×19 OPC UA Node array:
    index         Name          NsInd      Identifier       NodeType
    —–  ——————-  —–  ——————-  ——–
      1    DeviceManual         3      DeviceManual         Variable
      2    DeviceRevision       3      DeviceRevision       Variable
      3    EngineeringRevision  3      EngineeringRevision  Variable
      4    HardwareRevision     3      HardwareRevision     Variable
      5    Manufacturer         3      Manufacturer         Variable
      6    Model                3      Model                Variable
      7    OperatingMode        3      OperatingMode        Variable
      8    OrderNumber          3      OrderNumber          Variable
      9    RevisionCounter      3      RevisionCounter      Variable
    10    SerialNumber         3      SerialNumber         Variable
    11    SoftwareRevision     3      SoftwareRevision     Variable
    12    Icon                 3      5201                 Variable
    13    Counters             3      Counters             Object
    14    DataBlocksGlobal     3      DataBlocksGlobal     Object
    15    DataBlocksInstance   3      DataBlocksInstance   Object
    16    Inputs               3      Inputs               Object
    17    Memory               3      Memory               Object
    18    Outputs              3      Outputs              Object
    19    Timers               3      Timers               Object

それから少し便利の方法を教えます。

browseNamespace()というFunctionを使えばUIでのNodeを検索することができます。

ではdb_OPCuaの中にある3つのNodeを入れましょう。

serverNodes = browseNamespace(uaClient)

OKを押すだけで先選択した3つのNodesを自動的にOPCUA Node Arrayに変換し返してくれます。

serverNodes =

1×3 OPC UA Node array:
    index  Name   NsInd      Identifier      NodeType
    —–  —–  —–  ——————  ——–
      1    sw1    3      “db_OPCua”.”sw1″    Variable
      2    real1  3      “db_OPCua”.”real1″  Variable
      3    int1   3      “db_OPCua”.”int1″   Variable

そしてreadValue()のFunctionでNode値・TimeStamp・Quality IDをいただきます。

>> [v,t,q]=readValue(uaClient,serverNodes)

v =

  3×1 cell array

    {[     1]}

    {[4.9920]}

    {[   981]}

t = 

  3×1 datetime array

   13-Jul-2021 17:23:59

   13-Jul-2021 17:23:59

   13-Jul-2021 17:23:59

q = 

OPC UA Quality ID:

‘Good’

‘Good’

‘Good’

もし配列vの中にどある値だけほしいときは{}を使えましょう。

>> v{2}

ans =

  single

    4.9920

Cellの変換

下記のLinkはCell array変換について説明があります。

https://jp.mathworks.com/help/matlab/cell-arrays.html

はーい、お疲れ様ですー

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

シェアする

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

フォローする