外部ストレージを使用する際は、必ず次の制限事項もあわせてご確認ください。
5.6.3 外部ストレージを使用する際の制限事項
1つのDスクリプトに設定できる最大アドレス数は255です。起動条件式と実行式の読み出しで使用しているアドレス数の合計が255以下になるように設定してください。呼び出しているユーザー定義関数内で使用しているアドレスも、アドレス数にカウントされます。
Dスクリプトでは浮動小数点(フロート変数/リアル変数)の演算はできません。
また構造体変数指定もできません。ただし構造体の各メンバは指定できます。
Dスクリプトのプログラム量は表示スキャンタイムに影響します。特にアドレスを多数使用するとパフォーマンスが非常に低下しますのでご注意ください。
トリガビットのON/OFFや条件成立/不成立の状態は、通信サイクルタイム*1もしくは表示スキャンタイム*2のいずれか長い方の時間以上保持してください。
接続機器アドレスへの書き込みを行うスクリプトでは、起動条件で[常に動作]、[ビットON中]、[ビットOFF中]、[条件成立中]、[条件不成立中]を指定しないでください。書き込み命令が大量に発生するため通信処理が間に合わず、エラーが発生します。
これらの起動条件を使用する場合は、表示器内部デバイスやテンポラリアドレスを使用してください。
起動条件[ビットON中]、[ビットOFF中]、[条件成立中]、[条件不成立中]を含んだ複数のスクリプトを登録している場合、スクリプトの処理途中で接続機器との通信が切断されると、以降のスクリプトは実行されません。通信復旧後は登録されている先頭のスクリプトから処理を開始します。
ウィンドウ画面に設定されたスクリプトの処理途中であっても、通信復旧後はベース画面の先頭スクリプトから再開されます。
関数の再帰呼び出しは最大9ネストまでです。
関数最大作成数は254個です。
Dスクリプトの実行文の途中で画面切り替えのアドレスに値を代入する場合、そのDスクリプトの処理がすべて終わった後に、画面切り替えの処理が行われます。
例)
ID:00000
データ形式:Bin、データ長:16 ビット、符号+/-:無し、トリガ:ビット立ち上がり([b:M0000])
[w:[PLC1]D0100]=0 // (1)
[w:[#INTERNAL]LS0008]=30 // (2)ベース画面30に切り替え
[w:[PLC1]D0101]=1 // (3)
[w:[PLC1]D0102]=2 // (4)
上記のDスクリプトが実行された場合、3、4が処理された後、画面切り替えの処理が行われます。
Dスクリプトで使用するデータを表示器からタッチにより設定する場合、すべてのデータが書き込めたことを検出した上で、Dスクリプトを動作させるようにしてください。
パラメータに使用する文字列では大文字/小文字の区別がありません。
Dスクリプト/グローバルDスクリプトでアクセスタイプを指定したデバイスアドレス(例:[w16s:[PLC1]D0100])を使用する場合、設定できる命令や演算子は以下のとおりです。
オフセットアドレス
加算(+)、減算(-)、余り(%)、掛け算(*)、割り算(/)、および代入(=)
[w16s:[PLC1]D0100]=[w16s:[PLC1]D0200]*10%5 //正常に動作します
[w16s:[PLC1]D0100]=20<<1 //エラーになります
if([w16s:[PLC1]D0100]==10) { } //エラーになります
memcpy([w16s:[PLC1]D0200],[w16s:[PLC1]D0100],5) //エラーになります
以下の文字はフォルダ名、ファイル名に指定することはできません。使用した場合エラーとなります。
: , = + / " [ ] | < > ? [スペース]
フォルダ名、ファイル名を設定するときは、システム設定[本体設定]-[表示設定]の[システムの言語設定]で設定した言語を使用してください。システムの言語と異なる言語を使用している場合、指定した文字にならないことがあります。
CFファイル操作、SDファイル操作、SD/CFastファイル操作、USBファイル操作については、以下の制限があります。
ファイル名は、8.3フォーマット(ファイル名8文字、拡張子3文字)のみ使用できます。
ルートフォルダ(ディレクトリ)を指定する場合には、フォルダ名に" "(空文字列)を指定してください。
起動条件にアクセスタイプを指定したデバイスアドレス(例:[w16s:[PLC1]D0100])は使えません。
アクセスするフォルダ内のファイル数は最大100ファイルまでにしてください。その他の機能の動作が遅くなる場合があります。
*1 通信サイクルタイムとは、表示器から接続機器にデータを要求して取り込むまでの時間です。内部デバイスのLS2037にBin形式で格納されます。単位は10msです。±10msの誤差があります。
複数の接続機器を使用している場合の各通信サイクルタイムは、[システム設定]-[周辺機器一覧]の[接続機器管理アドレス一覧]に表示される内部デバイスアドレスで確認できます。
5.4.14 システム設定[周辺機器一覧]の設定ガイド
*2 表示スキャンタイムとは、1画面の表示と演算処理にかかる時間です。内部デバイスのLS2036にBin形式で格納されます。単位はmsです。±10msの誤差があります。
メモリリンクとそれ以外のデバイスを使用した場合の起動条件の動作一覧
起動条件に指定したデバイスによって、画面切り替え直後または電源投入直後のDスクリプトの実行詳細は次の様になります。
O : 画面切替直後または電源投入直後に処理を実行します。
X : 画面切替直後または電源投入直後に処理を実行しません。
グローバルDスクリプトでは、電源投入時に上記表の動作を行います。画面切り替え時は上記表は適用されず、起動条件を継続して監視します。
Dスクリプトで起動条件を[タイマ]に設定している場合は、Dスクリプトを設定している画面に切り替えた時点からタイマのカウントが始まります。
グローバルDスクリプトで起動条件を[タイマ]に設定している場合は、表示器の電源ON時からタイマのカウントが始まります。
タッチキー入力をトリガモードの起動やプログラムでの起動ビット操作に用いないでください。タッチ入力のタイミングによって取りこぼす場合があります。
グローバルDスクリプト特有の制限事項
グローバルDスクリプトは画面切替中などの場合は処理を中断しています。
電源投入後、初期画面においては一度すべての読み出しが終了するまで処理は実行されません。
ただし画面切替を行うと読み出しが終了する前でも処理は実行されます。
グローバルDスクリプト内のすべてのデバイス数の合計は最大255です。(起動条件式と実行式で使用されているデバイス数の合計です。)
デバイス数が256以上になったDスクリプトは動作しません。これらのデバイスは画面に関係なく常時読み出しを行いますので使用時は必要最小限の設定を行ってください。パフォーマンスを低下させる原因となります。
グローバルDスクリプトの総数は最大32個までです。使用している関数も1個とカウントします。32個を超えると超えた分は無視されます。
送受信関数では、アドレスを指定していますが、Dスクリプトのアドレス数のカウントには加算されません。
コントロール変数(書き込みのみ有効)、ステータス変数(読み込みのみ有効)、受信データ変数(読み込みのみ有効)となります。コントロール変数を読み出したり、ステータス変数に書き込みを行うと誤動作するためご注意ください。
送信と受信については、それぞれ別のDスクリプト(あるいは関数)を作成し、実行するようにしてください。
転送のフローチャートについて
22.5.3.1 フローチャート
送受信関数でデータを格納できる内部デバイスの有効範囲はユーザーエリア(LS20 ~ LS2031、LS2096 ~ LS8191)です。
[システム設定]の[スクリプト設定]で[Dスクリプト/グローバルDスクリプト]を設定していない場合に、Dスクリプト/グローバルDスクリプトの[SIOポート操作]のラベル設定(送信関数、受信関数、コントロール、ステータスの読み出し、受信データ数の読み出し)を実行すると、LS2032のビット13がONします。
特殊リレーについて
A.1.1.3 特殊リレー(ダイレクトアクセス方式)またはA.1.2.3 特殊リレー(メモリリンク方式)
送信関数、受信関数を使用する場合は、Dスクリプトのビット長を16ビットに設定してください。ビット長を32ビットに設定すると、誤作動するためご注意ください
送信バッファは2048バイト、受信バッファは8192バイトあります。フロー制御を行う場合、受信バッファに空き領域が残り少なくなると(受信バッファの使用容量が75%以上)、表示器から接続機器に、送信の一時中断を要求します。空き容量が十分になると(受信バッファの使用容量が30%未満)、送信の再開を要求します。
BCD設定時の制限事項
演算中にBCDに変換できないデータ(Hex のA ~ F)がある場合は、実行を中止します。
A~Fのデータを扱わないようにしてください。
本原因で実行を中止した場合表示器内の共通リレー情報(LS2032)のビット7がONします。本ビットは電源をOFFにするかオフラインモードになるまで保持します。
例)
[w:[PLC1]D0200]=([w:[PLC1]D0300]<<2)+80
D300が3の場合、2ビット左にシフトすると0x000CとなりBCDとして扱うことができなくなり、プログラムの実行を中断します。
[w:[PLC1]D0200]=[w:[PLC1]D0300]<<2
D300が3の場合、2ビット左にシフトすると0x000Cとなりますが、演算を終了した結果なので0x000Cを格納して中断されません。
ゼロ割算に関する制限事項
演算子の割算"/"、剰余算"%"において0(ゼロ)で割る場合は、実行を中止します。ゼロで割らないようにしてください。
本原因で実行を中止した場合表示器内の共通リレー情報(LS2032)のビット8がONします。本ビットは電源をOFFにするかオフラインモードになるまで保持します。
代入の遅延に関する注意事項
代入にデバイスアドレスを使用する場合、表示器と接続機器は通信を行っているため、書き込みが遅延します。以下のような注意が必要です。
例)
[w:[PLC1]D0200]=[w:[PLC1]D0300]+1 // ...1
[w:[PLC1]D0201]=[w:[PLC1]D0200]+1 // ...2
1の命令文でD0200に(D0300+1)を代入しますが通信を行っているため時間がかかり、2の命令文ではD0200には1の演算結果はまだ代入されていません。このような場合は1の演算結果を1度LSエリアもしくはテンポラリワークアドレスに格納して実行するようプログラミングしてください。
[w:[#INTERNAL]LS0100]=[w:[PLC1]D0300]+1
[w:[PLC1]D0200]=[w:[#INTERNAL]LS0100]
[w:[PLC1]D0201]=[w:[#INTERNAL]LS0100]+1
負の数の扱いに関する注意事項
関数において、負の数を取り得ない引数*3に負の値を入力した場合、符号無し*4として動作します。
*3 例えば_CF_read()引数の「バイト数」の場合はデータを読み出すサイズの為、負の数を取り得ません。
*4 例えば-1の場合、16ビットでは65535、32ビットでは4294967295として扱われます。
同一Dスクリプト内の同一デバイスアドレス読み出しに関する注意事項
同じDスクリプト/グローバルDスクリプトで同一のデバイスアドレスを使用していても、Dスクリプト/グローバルDスクリプトが処理されるタイミングによって、デバイスアドレスに読み出される値が異なる場合があります。
この現象を回避するには、内部デバイスやテンポラリアドレスに一時的にデータを格納するように実行式をプログラミングしてください。
例)
内部デバイス(USRエリア)を使用した場合
[w:[#INTERNAL]USR20000]=[w:[#MEMLINK]0100]
[w:[#INTERNAL]USR00000]=[w:[#INTERNAL]USR20000]
[w:[#INTERNAL]USR00001]=[w:[#INTERNAL]USR20000]
テンポラリアドレスを使用した場合
[t:0000]=[w:[#MEMLINK]0100]
[w:[#INTERNAL]USR00000]=[t:0000]
[w:[#INTERNAL]USR00001]=[t:0000]
組込み関数は実行式の処理中に引数の値が書き変わっても影響を受けない関数ですが、以下の関数は影響を受ける場合があります。
これらの関数を使用する場合は実行式の処理中に引数の値が書き変わらないように、実行式をプログラミングしてください。
memring
_memshift
_memsearch