CA Gen : トレースオプションが有効な場合に、深くネストしたIFステートメントで発生するジェネレーションエラーについて
search cancel

CA Gen : トレースオプションが有効な場合に、深くネストしたIFステートメントで発生するジェネレーションエラーについて

book

Article ID: 134289

calendar_today

Updated On:

Products

Gen

Issue/Introduction

トレースが有効となっている場合、Action Diagram に深くネストした IF ステートメントがあると、分散プラットフォームに対するコード生成が、ある状況下で失敗する場合があります。

Environment

Release:

CA Gen Diagram Trace: r7.6, r8.0

Resolution

ステートメントのネスト設計は最大25レベルまでに制限することを推奨します。

分散プラットフォーム向けの CA Gen コード ジェネレータは変更されており、トレース オプションが有効な状態でコードが生成された場合、コード ステートメントの長いプレフィックスは圧縮されなくなっています。

これにより、ユーザは DTU 内の Action Diagram を Toolset と同様の完全に展開された状態で見ることができます。

しかし、Action Diagram コード ジェネレータの最大行長は 128 バイトです。

この制限は Toolset の Action Diagram エディタには適用されないため、Action Diagram 内の深くネストした IF ステートメントは 制限の 128 を超えるコード長となり、ジェネレーション エラーを引き起こす可能性があります。

行長が128 を超えた場合、ジェネレータ コードはネストした IF ステートメントを複数ステートメントに分解します。(128 バイトのところで分解されるのではなく、最大値になる前に分解します)。しかし、ジェネレータは主に IF ステートメントのインデントで構成される行のプレフィックスは分解しません。

行全体の長さは、プレフィックスの総計(ステートメント番号長+サブステートメント番号長+インデント長)+実際のステートメント長となります。

例:

“[IF loc workset a="A"]” ステートメントで36レベル ネストを繰り返した場合、36 番目のステートメントの長さは、

6 (ステートメント番号長)

+ 6 (サブステートメント番号長)

+ 105 (一回のインデントに付き 3 バイトで 35 インデント)

= 117 (プレフィックス総計)

+ 22 (実際のステートメントの長さ)

= 139

総計は 139 で制限の 128 を超えていますが、プレフィックス単体の総計は 117 で 128 以下です。

そのため、ジェネレータは実際のステートメントを二行に分けることができます。

DTU でコード トレースを行っているときに改行されて表示されます。

ですが、ネストがこれ以上続くとプレフィックスの総計だけでも制限 128 を超えてしまうため、ジェネレータは実際のステートメントを分解できなくなり、許可された以上のメモリを割り当てようとして、ジェネレータ 失敗を引き起こします。

そのため、DTU Action Diagram ビューでの改行やジェネレータ失敗を防ぐために、IF ステートメントのネスト設計は最大 25 レベルまでに制限することを推奨します。

ご質問等がございましたら、恐れ入りますが弊社サポートまでご連絡ください。

Additional Information

Old Japanese Knowledge document ID : JTEC001783 

CA Genのその他のFAQについては、以下のリンクからご確認ください。

CA Gen FAQ一覧表