はじめに
KVスクリプトとは
キーエンス KVシリーズではラダー以外にもKVスクリプトでの記述が可能です。
ということで学習のついでに学んだことを書いています。
どうもKVスクリプトはVB風の書き方をベースにしてるようです。(KVスクリプト大辞典より)
参考マニュアル
演算子
算術演算子
^ , ∗ , / , MOD , + , -
比較演算子
< , <= , > , >= , = , <>
文字列連結
+ または &
論理演算子
NOT , AND , OR , XOR
代入文
DM0 = 10 '数値代入
R501=TRUE 'ビット代入(0,OFF,FALSE,1,ON,TRUEが使用可能)
DM1 = DM0 'デバイス代入(ワード)
R500 = R0 'デバイス代入(ビット)
DM10.T = "STRING" '文字列代入
条件分岐文
IF文
IF DM0=1 THEN
DM1=1
ELSE IF DM0=2 THEN
DM1=2
ELSE
DM1=3
END IF
SELECT文
SELECT CASE DM0
CASE 1
DM1=1
CASE 2
DM1=2
CASE ELSE
DM1=3
END SELECT
MC文
MC DM0=0 THEN
MR0=1
MCR
繰り返し制御文
FOR文
'DM10,11を10になるまでまでループ
FOR DM10=0 TO 9 STEP 1
DM11=DM11+1
NEXT
WHILE文
'DM12を10になるまでまでループ
WHILE DM12<10
DM12=DM12+1
END WHILE
DO文
'DM13を10になるまでまでループ
DO
DM13=DM13+1
UNTIL DM13>9
FOR文、WHILE文、DO文はBREAKで繰り返し制御から抜けることができます。
こうやってみるとラダーより分かりやすいのですが、内部ではラダーに変換され実行されます。
変換するとスクリプト横に**[+]/[-]**の記号が表示されます。押すとラダーに変換された回路を見ることができます。
GX Works2のST文もそうですがこれだけ短くても長いラダーが生成されます。
サフィックス
- □.U 16ビット符号無し(0~65535)
- □.S 16ビット符号付き(-32768~32767)
- □.D 32ビット符号無し(0~4294967295)
- □.L 32ビット符号付き(-2147483648~2147483647)
- □.F 単精度浮動小数点型実数
- □.DF 倍精度浮動小数点型実数
- □.B ビット型
- □.T 文字列型
サフィックスを省略した場合の動作
- ビットデバイス : □.B ビット型
- ワードデバイス : □.U 16ビット符号無し
- Zデバイス : □.L 32ビット符号付き
- CTH : □.D 32ビット符号無し
このためDM0 = DM12 + DM14のように書くとすべて16ビット符号無しとして変換されます。
60000+60000を行うと120000にはならず54464という値になりエラーにもなりません。
サフィックスを省略しないように書くクセと値が大きくなる可能性がある場合は32ビットデバイスを使うように考えないといけません。
オプション
[ツール]→[オプション]のST/スクリプト設定タブで色々設定可能です。
改行、行番号表示だとこのようになります。
ワークメモリ
演算途中のデータはスクリプトでしか使用できないワークメモリに置かれます。
スクリプトでは、インデックスレジスタ以外でもインデックス修飾が可能
Z11、Z12が使用禁止なのはスクリプト内で使われるからのようです。