はじめに
OMRON NJ/NXシリーズのデータ型について
OMRON NJ/NXシリーズPLCの開発において、適切な変数の理解と使用は高品質なプログラム作成の基盤となります。本記事では、NJ/NXシリーズで使用できる全データ型の仕様、使用方法を詳しく解説します。
目次
基本データ型の概要
NJ/NXシリーズでは、以下の9つの基本データ型カテゴリが用意されています:
分類 | 定義 |
---|---|
ブール型 | 値が0または1のいずれかのデータ型 |
ビット列型 | ビットの列で値を表現したデータ型 |
整数型 | 値が整数値のデータ型 |
実数型 | 値が実数値のデータ型 |
持続時間型 | 値が時間(日・時・分・秒・ミリ秒)のデータ型 |
時刻型 | 値が時刻(時・分・秒)のデータ型 |
日付型 | 値が日付(年・月・日)のデータ型 |
日時時刻型 | 値が日時時刻の組み合わせのデータ型 |
文字列型 | 値が文字列のデータ型 |
重要な概念
- データサイズ(容量値): 実際の値の容量
- アライメント(境界値): メモリを確保するときの単位
詳細データ型仕様
ブール型(BOOL)
最もシンプルなデータ型で、TRUE/FALSEの二値を扱います。
データ型 | データサイズ | アライメント | 値の範囲 |
---|---|---|---|
BOOL | 16ビット | 2バイト | FALSE, TRUE |
⚠️ 注意: データサイズは16ビット
ビット列型
ビット操作や通信データの処理に適しています。
データ型 | データサイズ | アライメント | 値の範囲 |
---|---|---|---|
BYTE | 8ビット | 1バイト | BYTE#16#00〜FF |
WORD | 16ビット | 2バイト | WORD#16#0000〜FFFF |
DWORD | 32ビット | 4バイト | DWORD#16#00000000〜FFFFFFFF |
LWORD | 64ビット | 8バイト | LWORD#16#0000000000000000〜FFFFFFFFFFFFFFFF |
⚠️ 注意: ビット列型は大小比較ができません。比較が必要な場合は、WORD_TO_UINT命令などで整数型に変換してください。
整数型
符号付きと符号なしの両方が用意されており、用途に応じて選択できます。
符号付き整数型
データ型 | データサイズ | アライメント | 値の範囲 |
---|---|---|---|
SINT | 8ビット | 1バイト | -128〜+127 |
INT | 16ビット | 2バイト | -32768〜+32767 |
DINT | 32ビット | 4バイト | -2147483648〜+2147483647 |
LINT | 64ビット | 8バイト | -9223372036854775808〜+9223372036854775807 |
符号なし整数型
データ型 | データサイズ | アライメント | 値の範囲 |
---|---|---|---|
USINT | 8ビット | 1バイト | 0〜+255 |
UINT | 16ビット | 2バイト | 0〜+65535 |
UDINT | 32ビット | 4バイト | 0〜+4294967295 |
ULINT | 64ビット | 8バイト | 0〜+18446744073709551615 |
実数型
浮動小数点演算に使用します。
データ型 | データサイズ | アライメント | 値の範囲 |
---|---|---|---|
REAL | 32ビット | 4バイト | ±3.402823e+38〜±1.175495e-38, 0 |
LREAL | 64ビット | 8バイト | ±1.79769313486231e+308〜±2.22507385850721e-308, 0 |
時間関連データ型
データ型 | データサイズ | アライメント | 値の範囲 | 記述例 |
---|---|---|---|---|
TIME | 64ビット | 8バイト | T#-9223372036854775808ms〜 T#+9223372036854775807ms |
T#1d2h3m3s, TIME#25h_3m |
DATE | 64ビット | 8バイト | D#1970-01-01〜D#2106-02-06 | D#1994-09-23 |
TIME_OF_DAY | 64ビット | 8バイト | TOD#00:00:00.000000000〜 TOD#23:59:59.999999999 |
TOD#12:16:28.12 |
DATE_AND_TIME | 64ビット | 8バイト | DT#1970-01-01-00:00:00.000000000〜 DT#2106-02-06-23:59:59.999999999 |
DT#1994-09-23-12:16:28.12 |
文字列型(STRING)
UTF-8エンコーディングを使用します。
項目 | 仕様 |
---|---|
データ型 | STRING[Size] |
データサイズ | (半角文字数+1) × 8ビット |
アライメント | 1バイト |
文字コード | UTF-8 |
文字数制限 | 0〜1985文字(半角英数字) 0〜661文字(日本語目安) |
デフォルトサイズ | 256バイト |
💡 Tips: 文字列の終端には**NULL(1バイト)**が付加されるため、最大文字数+1文字分のメモリが必要です。**STRING[256]**のようにサイズ指定が必須です。
配列と派生データ型
配列指定(ARRAY)
同じデータ型の要素を複数格納できます。
// 1次元配列
ARRAY[0..4] OF INT
// 2次元配列
ARRAY[0..5,0..3] OF INT
// 3次元配列
ARRAY[0..1,0..2,0..3] OF INT
配列の仕様
項目 | 仕様 |
---|---|
最大要素数 | 65,535 |
要素番号 | 0〜65534 |
開始番号 | 0以外も可能 |
次元数 | 最大3次元 |
💡 Tips: 2次元配列と3次元配列は合計で65,535以下にする必要はあります。
例えばARRAY[0..5,0..9999] OF INTは6×10000で要素数60000となりOKですが、**ARRAY[0..6,0..9999]**だとオーバーになります。
可変長配列
**ファンクション(FUN)やファンクションブロック(FB)**の入出力変数でのみ使用可能。
入力変数、出力変数は使用不可。
// 可変長配列の例
ARRAY[*] OF INT
ARRAY[*,*] OF INT
ARRAY[*,*,*] OF INT
共用体型(UNION)
同一データに対して複数の異なるデータ型でアクセス可能な派生データ型です。
このように1WORDの領域をWORD、BYTE、BOOLの3種類で操作可能です。
通信で送受信するデータなど、一つのエリアに複数のデータ型が混在する場合に便利です。
共用体型の仕様
項目 | 仕様 |
---|---|
メンバ数 | 最大4個 |
初期値設定 | 不可(必ずゼロ) |
使用可能データ型 | BOOL型、ビット列型とその配列 |
メモリ使用量 | 最大メンバのサイズ |
列挙型(ENUM)
変数の値を文字で表現する派生データ型です。
-2147483648~+2147483647の整数値です。
下図のような型を作れば、名称でカラーコードの指定が可能です。(16進数で直接書けませんが)
定数(リテラル)の記述方法
基本的な記述形式
各データ型の定数記述方法一覧:
データ型 | 記述例 |
---|---|
ブール型 |
TRUE , FALSE ,BOOL#1 , BOOL#0 ,BOOL#TRUE , BOOL#FALSE ,1 , 0
|
ビット列型 |
WORD#16#0064 ,16#0064 ,100 BYTE#2#01101010
|
整数型 |
INT#10#-1 ,10#-1 ,INT#-1 ,-1
|
実数型 |
LREAL#10#-3.14 ,LREAL#-3.14 ,-3.14 ,1.0E+6
|
時間型 |
TIME#61m5s ,T#1d2h3m3s ,T#12d3.5h
|
文字列型 |
'HELLO' ,STRING#'文字列'
|
ビット列型
データサイズを指定して、特定のビット列を扱いたい場合に使用します。
-
データ型名:
BYTE
(8ビット)、WORD
(16ビット)、DWORD
(32ビット)、LWORD
(64ビット) -
基数:
2
、8
、10
、16
-
記述形式:
(データ型名)#(基数)#(数値)
、(基数)#(数値)
、(数値)
-
記述例:
WORD#16#0064
、16#0064
、100
整数型
符号付きまたは符号なしの整数を扱います。
-
データ型名:
SINT
、USINT
、INT
、UINT
、DINT
、UDINT
、LINT
、ULINT
-
基数:
2
、8
、10
、16
-
記述形式:
(データ型名)#(基数)#(数値)
、(基数)#(数値)
、(データ型名)#(数値)
、(数値)
-
記述例:
INT#10#-1
、10#-1
、INT#-1
、-1
実数型
浮動小数点数(小数点のある数値)を扱います。
-
データ型名:
REAL
、LREAL
-
基数:
10
のみ -
記述形式:
(データ型名)#(基数)#(数値)
、(基数)#(数値)
、(データ型名)#(数値)
、(数値)
-
記述例:
LREAL#10#-3.14
、10#-3.14
、LREAL#-3.14
、-3.14
日時型
日時型には、持続時間型、日付型、時刻型、日付時刻型があります。
持続時間型(TIME)
時間の長さを表現します。
-
データ型名:
TIME
またはT
-
記述形式:
TIME#d(日)h(時間)m(分)s(秒)ms(ミリ秒)
-
記述例:
TIME#61m5s
、T#61m5s
日付型(DATE)
特定の日付を表現します。
-
データ型名:
DATE
またはD
-
記述形式:
DATE#年-月-日
-
記述例:
DATE#2010-1-10
、D#2010-1-10
時刻型(TIME_OF_DAY)
特定の時刻を表現します。
-
データ型名:
TIME_OF_DAY
またはTOD
-
記述形式:
TIME_OF_DAY#時:分:秒
-
記述例:
TOD#23:59:59.999999999
日付時刻型(DATE_AND_TIME)
日付と時刻を組み合わせて表現します。
-
データ型名:
DATE_AND_TIME
またはDT
-
記述形式:
DATE_AND_TIME#年-月-日-時:分:秒
-
記述例:
DT#2010-10-10-23:59:59.123
その他のデータ型
文字列型(STRING)
一連の文字を扱います。
-
記述形式:
'(文字列)'
、STRING#'(文字列)'
-
ルール: シングルクォート
'
で囲みます。文字列内に'
や改行を含めるにはエスケープ文字を使用します。 -
エスケープ文字:
$$
(ドル記号)、$'
(シングルクォート)、$L
(改行) など
列挙型
定義された複数の値の中から1つを選択する場合に使用します。
-
記述形式:
{列挙型のデータ型名}#{列挙子}
-
記述例:
_eDAYOFWEEK#_WED
(曜日データ型_eDAYOFWEEK
の水曜日_WED
)
PLCとHMIのデータ型対応
NJ/NXシリーズと**NAシリーズ(HMI)**間でのデータ型対応表
PLCのデータ型 | HMIのデータ型 |
---|---|
BOOL | Boolean |
INT | Short |
DINT | Integer |
LINT | Long |
UINT, WORD | UShort |
UDINT, DWORD | UInteger |
ULINT, LWORD | ULong |
REAL | Single |
LREAL | Double |
STRING | String |
SINT | SByte |
USINT, BYTE | Byte |
TIME | TimeSpan |
DATE, DATE_AND_TIME, TIME_OF_DAY | Date |