制約エディタ

制約式の構文

制約式の構文は、LN 工具構文に含まれるサブセットです。制約式を作成するには、次の基本指示を使用します。

算術演算子:

  • × (乗算)
  • ÷ (除算)
  • + (加算)
  • - (減算)
  • \ (除算後の剰数)
  • & (英数字配列の連結)

論理演算子:

  • OR
  • AND
  • NOT

関係演算子:

  • = (等しい)
  • > (より多い)
  • >= (以上)
  • <> (等しくない)
  • < (より少ない)
  • <= (以下)

ドメイン式

A is {a1,a2,a3-a4,..} の意味は、(A=a1 または A=a2 または A >= a3 および A <= a4、以下同様) です。

ドメイン式の構文は、変数のドメインに関する論理式を表す省略表記法です。

式の優先順位

算術演算子は関係演算子よりも優先されます。

関係演算子は論理演算子よりも優先されます。

算術演算子の優先順位は、x ÷ \ + - の順です。

論理演算子の優先順位は、not、and、or です。

丸括弧 ('()') は、算術演算子と論理演算子の優先順位を変更する目的に用いられます。

3 + 4 x 5 = 23

(3 + 4) x 5 = 35

ブール式

ブール式は真または偽の値 (1 または 0) をとります。これは制約 (特に条件式) に適用できます。

「If not e then '」は、次式を意味します。

If e = false then'

または If e = 0 then'

If-then-else 構文

拡張 if-then-else 構文は制約で使用できます。ステートメントのネストは許されます。

if-then-else 構文は、常に endif 文で終了します。else 文は必須ではありません。if、else および endif 文は常に新しい行で始まります。(条件) 式は数行に分割されてもかまいません。有効性確認の制約は、if-then-else 文なしでも定義できます。その場合、この制約は 「c:」 で始める必要があります。

制約にコメントを付けるには、「|」 記号を使用します。構成処理中には、変数メッセージを使用してメッセージ (最大 80x25 ラインのテキスト) を生成できます。

If 式 1

then 式 2

else 式 3

endif

制約変数

制約式では、グローバル変数とローカル変数の両方を使用できます。グローバル変数は、グローバルとして宣言される、製品特徴およびユーザ定義制約変数です。入力、表示、長さ、幅などの製品コンフィギュレータにより事前定義された変数はローカル変数です。構成処理を通じてグローバル変数の値は変更されない限り保持されます。

制約変数の宣言には、次の種類があります。

  • 文字列 (英数字) (例: string machine global)
  • long (整数) (例: long i)
  • double (分数) (例: double j)

ユーザ定義制約変数は、常に制約の一番先頭で宣言しなければなりません。制約の実行前にすべてのローカル変数を初期化します。初期化によって、英数字変数が消去され、数値変数に値 0 が代入されます。グローバル変数の入力と妥当性検証は真の値で初期化されます。

制約変数の使用

製品特徴は、制約式の中に開始および終了の角括弧 ([......]) で囲んで指定する必要があります。残りの変数は直接式で使用できます。英数字変数 (文字列配列) は表記 (開始位置 [;長さ]) に従ってインデックス付けできます。

[color] = "red"

validating = true

変数の値には英数字または数字をとることができます。英数字の値は引用符 ("....") で括って記述する必要があります。数値は直接入力することができます。小数点記号は点 ('.') です。

machine(1;2) = "A5"

volume = 28.673

定数の真/偽は、ブール式に使用できます。

算術関数

  • round(X,Y,Z): X の丸め値を求めます。Y は小数点以下の桁数、Z は丸め方法 (0 = 切下げ、1 = 通常、2 = 四捨五入) です。
  • val(A): 文字列の数値 A を求めます。(val("8.7") = 8.7)
  • abs(X): X の絶対値を算出します。(abs(-10.3) = 10.3)
  • int(X): X の整数値を求めます。(int(11.6) = 11)
  • pow(X,Y): X の Y 乗を求めます。(pow(10,2) = 100)
  • sqrt(X): X の平方根を求めます。(sqrt(16) = 4)
  • min(X,Y): X と Y のうち小さい方の値を求めます。(min(6,10) = 6)
  • max(X,Y): X と Y のうち大きい方の値を求めます。(max(6,10) = 10)
  • pi: 値 PI を持つ定数。(3.1415926...)

三角関数

  • sin(X), cos(X), tan(X): X (半径) の正弦、余弦、または正接を求めます。
  • asin(X), acos(X), atan(X): X の逆正弦、逆余弦、または逆正接を求めます。
  • hsin(X), hcos(X), htan(X): X の双曲線正弦、双曲線余弦、または双曲線正接を求めます。

対数関数

  • exp(X): e の X 乗を求めます。
  • log(X): e を底とした X の自然対数を求めます。
  • log10(X): 10 の累乗を底とした X の自然対数を求めます。

文字列関数

  • edit(X,Y): フォーマット Y に従って数値 X をフォーマットします。(edit(10.3,"ZZZ9V.99") = "10.30"
  • str(X): 文字列内に数値を挿入します。(str(10.3) = "10.3")
  • len(X): 文字列 X の長さを求めます。(len("abc") = 3)
  • strip(X): 最後の文字の末尾にあるスペースを削除します。(strip("A ") "A")
  • pos(X,Y): 文字列 X で文字列 Y が左側から何番目の位置にあるかを求めます。
  • rpos(X,Y): 文字列 X で文字列 Y が右側から何番目の位置にあるかを求めます。

日付関数

  • date(): 日付 0 から起算して、現在の日付までの日数を求めます。
  • date(y,m,d): 日付 0 から起算して、入力された日付までの日数を求めます。

date(1995,06,01) = 728445