Beckhoff#TF6421を使ってXMLファイルを読んでみよう

今回の記事ではBeckhoff TF6421を利用しXML Fileを読み込み、結果をPLC 変数に転送します。さ、はじめよう!

Reference Video

Beckhoff.TF6421でXML Dataを読んでみよう

TF6421?

TwinCAT XML Server TF6421は、XMLファイルへの書き込みや読み取りの簡易なPLCライブラリを提供します。XML Serverを使用することにより、例えばマシンの起動時によく必要とされる初期化データのロードのような実装も可能になります。

またPLC 変数を、PLC コメントを含む XML ファイルにフォーマットして保存することもできます。XML 文書の変数構造は、PLC 変数の構造と一致します。

System Requirment

Structure

こちらはTF6421 XML Serverの構造です。

TwinCAT XML Server

TwinCAT XML ServerはTwinCATと共に起動/停止するサービスであり、TwinCATとXMLファイル間のリンクです。

PLC Library

PLCライブラリ PLCライブラリには4つのFunction Blockがあり、PLCライブラリからXMLファイルにデータを書き込んだり、XMLファイルから読み込んだりできます。変数をXMLファイルにフォーマットして保存し、XMLファイルからTwinCATで変数を初期化できます。

XML File

こちらはTwinCAT Runtimeに格納されたXML Fileになります。

Principle of operation

XMLサーバは、ADSを介してTwinCAT PLCと通信します。XML サーバが書き込むすべての変数はテキストに変換され、MSXML DOMパーサを介してXMLファイルに書き込まれます。XMLファイルにはデータ型に関する情報は一切含まれず、タグ名としての変数名と値のみが記述されます。

<variable name> value </variable name>

逆に読み取り操作の間、読み取られる変数のデータ型はADSを介してXML Serverに転送され、XMLファイルからのテキストはそれに応じて変換される。

Data Type

こちらはTwinCAT PLC Runtimeの変数とXML Fileの対応例になります。

Function Block

FB_XmlSrvRead

こちらのFunction Block FB_XmlSrvRead を使用して、XML ファイルからのデータで PLC 変数を初期化できます。この場合は入力変数sXPathは、sFilePathで指定されたXMLファイルの有効なノードを指す必要があります。

VAR_INPUT

VariableData TypeDescription
sNetIdT_AmsNet_IdTwinCAT 3 XMLサーバのネットワークアドレスであり、Local PCでは、空の文字列を指定してください。
ePathE_OpenPathファイルを開くターゲットデバイス上のTwinCATシステムパスを指定する
nModeWORDXMLファイルの評価方法を制御することができ、現在サポートするのはXMLSRV_SKIPMISSINGとXmlSrvReadのみになります。
pSymAddrDWORDXML ファイルからのデータを書き込む PLC 変数のアドレスOffset。
cbSymSizeUDINTXML ファイルからのデータを書き込む PLC 変数のサイズ。
sFilePathT_MaxStringFBが開くファイルのパスとファイル名を指定します。注意するのはパスはローカルコンピュータのファイルシステムのみで、ネットワークではパスは使用できません。
sXPathT_MaxStringデータアクセスする XML ドキュメント内のタグのアドレスになります。
bExecuteBOOL立ち上げ信号でFBを実行する
tTimeoutTIMEFBの最大実行時間

VAR_OUTPUT

VariableData TypeDescription
bBusyBOOLTrue=FB実行中
bErrorBOOLTrue=FBエラーあり
nErrIdUDINTTC3 XML Serverから返答したエラーコード

FB_XmlSrvReadByName

こちらのFB_XmlSrvReadByName を使用して、XML ファイルからのデータで PLC 変数を初期化できます。この場合は入力変数sXPathは、sFilePathで指定されたXMLファイルの有効なノードを指す必要があります。

VAR_INPUT

VariableData TypeDescription
sNetIdT_AmsNet_IdTwinCAT 3 XMLサーバのネットワークアドレスであり、Local PCでは、空の文字列を指定してください。
ePathE_OpenPathファイルを開くターゲットデバイス上のTwinCATシステムパスを指定する
nModeWORDXMLファイルの評価方法を制御することができ、現在サポートするのはXMLSRV_SKIPMISSINGとXmlSrvReadのみになります。
sSymNameT_MaxStringXML ファイルからのデータを書き込む PLC シンボル名になります。
sFilePathT_MaxStringFBが開くファイルのパスとファイル名を指定します。注意するのはパスはローカルコンピュータのファイルシステムのみで、ネットワークではパスは使用できません。
sXPathT_MaxStringデータアクセスする XML ドキュメント内のタグのアドレスになります。
bExecuteBOOL立ち上げ信号でFBを実行する
tTimeoutTIMEFBの最大実行時間

VAR_OUTPUT

VariableData TypeDescription
bBusyBOOLTrue=FB実行中
bErrorBOOLTrue=FBエラーあり
nErrIdUDINTTC3 XML Serverから返答したエラーコード

Installation

BeckhoffのHPからTF6421のXML ServerインストールFileをDownloadしてください。

https://www.beckhoff.com/en-en/products/automation/twincat/tfxxxx-twincat-3-functions/tf6xxx-connectivity/tf6421.html

TF6421のインストーラーを起動し、英語を選び>Okで進みます。

Next>ですすみます。

ライセンスに同意し、Next>で進みます。

個人情報を入力し、Next>で進みます。

Completeを選び、Next>で進みます。

Next>で進みます。

Installをスタートしましょう。

しばらく待ちます…

Done!

Implementation

これからTwinCAT3からTF6421のAPIを利用し、XML Fileのデータを読み取ります。

Add Library

Tc2_XMLDataSrvのライブラリをプロジェクトに追加してください。

DUT

次はXML Fileの構造に合わせて構造体を作成します。

DUT_MyXML 

TYPE DUT_MyXML :
STRUCT
COMMON:STRING(30);
BOTANICAL:STRING(30);
ZONE:INT;
LIGHT:STRING(30);
PRICE:REAL;
AVAILABILITY:BOOL;
END_STRUCT
END_TYPE

DUT_MyXML_Books 

TYPE DUT_MyXML_Books :
STRUCT
title:STRING(30);
author:STRING(30);
year:DINT;
price:REAL;
END_STRUCT
END_TYPE

DUT_MyXML とDUT_MyXML_Books は実際XML Fileとデータ・タイプと順番さえ合わせれば、変数名は特に気にする必要がありません。

Program

VAR

こちらはプログラムで使用する変数を定義します。

PROGRAM MAIN
VAR
fbXMLSrvRead:FB_XmlSrvRead;
fbXmlSrvReadByName:FB_XmlSrvReadByName;
bExecute:BOOL;
bReset :BOOL;
sFilePath:T_MaxString:=’C:\Users\threespc02\OneDrive\Desktop\plant_catalog-1.xml’;
sXMLPath:T_MaxString:=’/CATALOG/PLANT’;
sXMLPath2:T_MaxString:=’/CATALOG/book’;
iState:INT:=0;
myXMLValue:DUT_MyXML;
myXMLValueReadByName:DUT_MyXML_Books;
ErrorCode:UDINT;
END_VAR

こちらは今回記事で使用するXML Fileで、sFilePathなどの変数を該当する設定になります。

Code

こちらのプログラムはXML Fileを読み込んで、中のデータをfbXmlSrvReadByNameとfbXMLSrvRead Function Blockを使用しX読み取ります。

CASE iState OF

0:
fbXMLSrvRead(
pSymAddr:=ADR(myXMLValue)
,cbSymSize:=SIZEOF(myXMLValue)
,sFilePath:=sFilePath
,sXPath:=sXMLPath
,bExecute:=FALSE
);
fbXmlSrvReadByName(
sSymName:=’MAIN.myXMLValueReadByName’
,sFilePath:=sFilePath
,sXPath:=sXMLPath2
,bExecute:=FALSE
);
ErrorCode:=0;
IF NOT fbXMLSrvRead.bBusy
AND NOT fbXMLSrvRead.bError
AND NOT fbXmlSrvReadByName.bBusy
AND NOT fbXmlSrvReadByName.bError
AND bExecute THEN
iState:=10;
END_IF
10:
fbXMLSrvRead(
bExecute:=TRUE
);
IF fbXMLSrvRead.bBusy
AND NOT fbXMLSrvRead.bError THEN
iState:=20;
END_IF;
IF fbXMLSrvRead.bError THEN
iState:=900;
END_IF
20:
fbXMLSrvRead(
bExecute:=FALSE
);
IF NOT fbXMLSrvRead.bBusy THEN
iState:=100;
END_IF
;
100:
fbXmlSrvReadByName(
bExecute:=TRUE
);
IF fbXmlSrvReadByName.bBusy
AND NOT fbXmlSrvReadByName.bError THEN
iState:=110;
END_IF;
IF fbXmlSrvReadByName.bError THEN
iState:=910;
END_IF

110:
fbXmlSrvReadByName(bExecute:=FALSE);
IF NOT fbXmlSrvReadByName.bBusy THEN
iState:=120;
END_IF

120:
bExecute:=FALSE;
iState:=0;

900:
ErrorCode:=fbXMLSrvRead.nErrId;
bExecute:=FALSE;
IF bReset THEN
iState:=0;
END_IF

910:
ErrorCode:=fbXmlSrvReadByName.nErrId;
bExecute:=FALSE;
IF bReset THEN
iState:=0;
END_IF
;
END_CASE

Error 1828

もしエラー1828が発生した場合、ライセンスを入力する必要があります。

SYSTEM>Licenseを開きます。

こちらはTwinCAT3のライセンス管理画面です。

TF6421をCheck入れます。

TF6421のライセンスがいまMissingの状態になり、もう1回Hardware ConfigurationをDownloadしてください。

Result

Done!XML Fileのデータを読み込みました。

Download

こちらのリンクから記事のプロジェクトをDownloadできます。

https://github.com/soup01Threes/TwinCAT3/blob/main/Project_TF6421_XML_ReadExample.rar

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

シェアする

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

フォローする