Data Typeというのは複数の変数をさらに一つの変数としてまとめするのものです。
PLCNEXT Engineeringには2種類のData Type Classがあり、それはStandardとSafety-relatedです。
- StandardはIEC 61131-3 準拠したData typeです。中にPLC NEXTで元あるSystem Data type(Bool/Byteなど…)やUser定義できる User-defined data typeです。
- Safety-related は今回触れませんので、説明は控えています。
User-defined Data Types
IEC6113-3ではUserで自らData typeを定義することが提供され、そのUser-defined data typeはIEC61131-3の基本Data typeベースで作成されています。
注意するのはPLCNEXT EngineeringではUser-defined のSafety-related Data TypeがSupportしません。
User-defined data typeを定義するのはWorksheet内でTYPE.. END_TYPEの中になります。
*User-defined data typeのMemory FormatはController Typeにより変わりますので、詳細はHardware説明を参考にしてください。
Support definitions
PLCNEXT Engineeringは以下の定義でできます。
- Array
- Structure
- Enumerations
- User-defined 文字列
- それらの組み合わせしたData type
になります。
Add Data Type in your project
ではまずPLCNEXT プロジェクトからData Type Sheetを追加します。
COMPONENTS>Local>Data Typesを選択します。
右クリック>Add Data Type Worksheetで新しいData Type Sheet追加します。
新しいData Types Sheet ”Data Type”が追加されました。
中を開くともうDefault TYPE END_TYPEが定義されています。
Array
メーカにより直接配列を定義することできますがPLCNEXT EngineeringではData typeを先に定義する必要があります。
Arrayは同じ変数タイプを予め複数に定義することです。例えばArray[0..10] of INTならその変数が0..10までの11個INT(整数)があり、各ElementをアクセスにはINDEXを使用します。
Myvalue[0]、Myvalue[1]…のように。そしてArraryの定義は TYPE…END_TYPE の中で行うことが必要で、その配列は2D以上でもOKです。
もちろんそのArrayの長さは変数から定義することも可能です。同じWorksheetでVAR CONSTANT…END_VAR を先に定義し、そのあとArray [0..MydataLength] of INTのようなイメージになります。
Example-1 Basic Define
まず基本からやりましょう。以下の例で長さ6の整数配列MyArray1定義しました。
次はプログラムを開いて>Variables>変数を定義し、TypeはMyArray1に設定します。
次は[0] [1]のように配列のElementにアクセスすればよいです。
Data Typeを使用するメリットは流用することが可能で、手入力するによる間違いは減ります。例えば以下のようにmyArrayDataとmyArrayData2は同じのData Typeですが、まったく違うメモリもっています。
なのでプログラム内で自由に使えばよいです。
Example-2 Default Value of Array
次は配列にDefault値を入れます。いまMyArrayWithDefault配列では、
[0]=0,[1]=1,[2]=2,[3]=4,[4]=5,[5]=6のDefault値が入っています。
Example-3 Default Value of Array in multiple value
配列のDefault値設定では、連続のIndexで同じDefault値であれば、もっと簡単な方法があります。以下の例では、
[0]=1
[1],[2]=30
[3]=50
[4]=100
[5]=200
[6]=100
[7]=200
[8]=100
[9]=200
になります。
実際にはこのようなStatementとまったく一緒です。
Structures
Structuresは複数の変数を一つの変数としてまとめる箱です。使用できる道が幅広く、例えば機械の特性(たとえば機械のコマンド・状態・HMIメモリを一つとしてまとめたりとか)
Data Type Sheetで右クリック>Insert Template>STRUCTすればPLCNEXTからTemplateを挿入してくれます。
Example-1 Basic Define
例えば下記のExampleではLoggingというStructures Data Typeを定義しました。中にString TypeのocurredTime、DWORDのErroCode、WarningCodeとRunningCodeが含まれています。
プログラム内で使用してみましょう。プログラムを開いて>Variables Tab>変数を定義>Typeは先程定義したLoggingにします。
次は変数名.部品名のようにアクセスすればよいです。
Example-2 Default Value
Default値を設定した場合は以下になります。
Enumerations (enums)
Enumeration(列挙型データ型)の変数は、Data Type Sheetから事前定義されたリストの値を持つことができます。例えば、3色のLED Tower(赤・黄色・緑)があり、私たちがEnumerationのData Typeを定義すると、中にRed=0、Yellow=1、Green=2のように定義できます。そしてプログラムアクセスするときはLED_Tower:=Greenのように、もっとわかりやすいプログラムを作ることができます。
Example-1 Basic Define
以下の例ではEnumerationのData Type ServoStatusを定義し、中にEnabled,Errorなど複数のStatusで、Disabled=0、Error=8000の整数値があり、そしてDefault値はDisabledです。
プログラムを使用するには、Programを開いて>Variables Tab開く>Variableを定義し>Typeは先程作成したServoStatusを設定すればOKです。
プログラム内で使用するには、直接Servo1_StatusにEnabledやResetting値を与えればよいです。
Example-2 Enum with same Duplicate name
次はData Type Sheetに複数のenumeration を定義し、まったく同じElement を定義しました。下記のExampleではServoStatusとInverterStatus、2つのenumerationがあり、中身は同じです。
その状態からプロジェクトをコンパイルすると、Ambiguous enumeration valueのエラーメッセージが表現されます。曖昧な表現だと言われます。
Messageをクリックすると、先のプログラム EnabledのStatementsが赤くなっています。つまりそこの表現が曖昧ですね。
修正します。Enabledを入力すると、InverterStatus#EnabledとServoStatus#Enabledが選択できます。PLCNEXTでは複数のEnumerationで同じのElementがあれば #で分けることができます。
以下のExampleのようにプログラムを編集すればエラーが解消できます!
User String
最後はUser定義文字列を説明します。実はすごく簡単で、単なる固定文字数のStringを定義するだけです。文字数を定義しないString変数は1から32766までの文字を格納できます。
Example-1 Basic Define
以下のように、ErrorMessageは固定文字数30のStringが定義しました。
プログラム使用するにはプログラム開いて>Variables Tab>Variables定義>Typeは先程作成したErrorMessageを設定すればOkです。
実際使用するときは普通の文字列操作となにも変わりません。
Limit
Controller以外のアプリケーションから文字列変数へのアクセスは最大511Bytesになり、理由はRemote Service Calls (RSC) IDataAccessService とISubScriptionServiceで、そのRSCはプロセスとデバイス間の通信を管理するサビースです。RSCsはPLCNEXT Technology FirmwareのCore部品にアクセスするAPIを提供します。
*DefaultのStringは80文字数です。
今回は以上になります。お疲れ様です!