Download 第3章 プログラミング例

Transcript
第3章 プログラミング例
基本1(I/O定義)
MPCの入出力はそれぞれ0番から ス ター ト し ています。MPC-816に付属し ている16点の入力 と8点の出力は0
~15の入力、 0~7の出力にふ り あて られています。 MIFではこれが16~31 (入力) 8~15 (出力) と 順にふら
れています。MPCではI/Oを ラベルで扱 う こ と ができ ます。 これを定義する コマン ド は#DEFS、#DEFOです。
それぞれ入力ポー ト 、出力ポー ト の定義に用います。も ちろん ラベルを使用し ないでそのま まポー ト 番号で
扱 う こ と もでき ますが保守時にはラベル化さ れたI/Oの方が扱いやす く な り ます。次に、定義例を示し ます。
最初に0か ら6までの入力を指定し、次に0から7までの出力ポー ト を定義し ています。こ の定義は最初にし な
く て も、 プロ グ ラ ム完成後追加し て も有効です。
I/Oマップ
#DEFS START 0
ポートNO.
名 称
#DEFS AUTO 1
0
START スイッチ
押してON
#DEFS MAN1 2
1
MODE スイッチ AUTO
#DEFS MAN2 1
2
〃
MAN1
#DEFS CYCLE 4
入力
3
〃
MAN2
#DEFS MIGI 5
4
〃
CYCLE
#DEFS HIDARI 6
5
テーブル右
さえぎってOFF
'
6
テーブル左
〃
#DEFO PIN 0
7
#DEFO HANDDWN 1
0
位置決めピン
ON 位置決め
#DEFO HANDMAE 2
1
トランスポート上下
ON 下降
#DEFO PINUP 3
2
トランスポート前後
ON 前進(C)
#DEFO AIR 4
出力
3
案内板送りピン上下
ON 上昇
#DEFO MAE 5
4
トランスポート真空破壊
ON 真空破壊
#DEFO STOP 6
5
案内板送り前後
ON 前進
#DEFO VACUM 7
6
度当り切替え
ON B位置
7
トランスポート真空
ON 真空
※前後の前(前進)とはシリンダのロッドが伸びた状態
2
センサ 5
4
7
1
OUT
+DC
GND
START
AUTO
MAN1
NAN1
CYCLE
操作BOX
3
0
5
サンプル装置
3-1
6
センサ 6
OUT
+DC
GND
基本2 (自動・手動運転の切り替え)
MPCにはマルチタ ス ク の機能があ り ます。 これは、複数のプ ロ グ ラ ム を同時に実行する ものです。 こ の機能
を使用する こ と によ り 動作の切 り 替え を簡単に実現する こ と ができ ます。 も し マルチタ ス ク を使用し ない
と自動と 手動の動作切 り 替えはプロ グ ラ ムを複雑な ものに し て し まいます。
'*******
*LOOP
'*******
WAIT SW(START)=1
WAIT SW(START)=0
QUIT 1
IF SW(AUTO)=1 THEN *A1
IF SW(MAN1)=1 THEN *M1
*A1
FORK 1,*AUTO
GOTO *LOOP
*M1
FORK 1,*MANU
GOTO *LOOP
'*******
*AUTO
'*******
FOR I=0 TO 7
ON I
TIME 5
OFF I
NEXT I
GOTO *AUTO
'*******
*MANU
'*******
FOR I=0 TO 7
WAIT SW(MAN2)=1
PRINT# I
NEXT I
GOTO *MANU
管理プログラム
自動運転プログラム
’プログラム自体には意味無し
手動運転プログラム
’プログラム自体には意味無し
こ の例ではSTARTス イ ッチの操作を き っかけに し て、 手動 と自動を切 り 替えています。 STARTス イ ッチ後
AUTO とMAN1のス イ ッチを読み取 り こ れによ り 必要に応じ て異なるプロ グ ラ ムをFORK し ています。 こ の
FORKコマン ド がマルチタ ス ク を起動させる ものです。 入力ポー ト AUTOがONの場合こ のコマン ド実行後、
管理プロ グ ラ ム と自動運転プロ グ ラ ムが同時に稼働し ます。 その次に、AUTOをOFFと し てMAN1をON と し
てSTARTス イ ッチを操作する と 管理プ ロ グ ラ ム中のQUITコマン ド によ り タ ス クが停止されます。 も ちろん
動作をいき な り 停止する と危険なプ ロ グ ラ ム も あ り ますのでタ ス ク間イ ン ターロ ッ ク に よ って タ イ ミ ング
を考慮し ます。通常はサイ クル停止 と な る よ う に し ます。こ の よ う に動作を決めるプロ グ ラ ム と動作を管理
するプロ グ ラ ムを分離する こ と によ って見通し の良いプロ グ ラ ム と な り ます。また、管理プロ グ ラ ム中で非
常停止ス イ ッ チを監視する よ う にすればいつで もプ ロ グ ラ ム を停止し た り 特別な処理をする こ と がで き ま
す。 次の例では非常停止によ ってプロ グ ラ ム停止、 出力ポー ト ク リ ア(SETIO)後にプロ グ ラ ムを停止し てい
ます。
3-2
'*******
*LOOP
'*******
IF SW(START)=1 THEN *NORMAL
IF SW(EMG)=1 THEN *EMG
*NORMAL
WAIT SW(START)=0
QUIT 1
IF SW(AUTO)=1 THEN *A1
IF SW(MAN1)=1 THEN *M1
*EMG
QUIT 1
SETIO
END
*A1
FORK 1,*AUTO
GOTO *LOOP
*M1
FORK 1,*MANU
GOTO *LOOP
管理プログラム
また、 マルチタ ス クは管理プロ グ ラ ムだけでな く 装置の上に分散する幾つものユニ ッ ト に個別のプロ グ ラ
ム を対応させて使用し ます。
3-3
基本3 (タスク間インターロック)
先の例のよ う に管理プロ グ ラ ムが一方的に タ ス ク を停止する と不都合な こ と が多い ものです。こ のため、動
作切 り 替えにはサイ ク ル停止が必要にな り ます。 こ う し た場合はタ ス ク (プロ グ ラ ム) 間で信号のや り と り
を し て動作を定めます。
'*******
*LOOP
'*******
WAIT SW(START)=1
WAIT SW(START)=0
ON -1
WAIT SW(-2)=1
QUIT 1
IF SW(AUTO)=1 THEN *A1
IF SW(MAN1)=1 THEN *M1
*A1
OFF -1,-2
FORK 1,*MANU
GOTO *LOOP
*M1
ON -2
FORK 1,*MANU
GOTO *LOOP
'********
*AUTO
'*******
FOR I=0 TO 7
ON I
TIME 5
OFF I
NEXT I
IF SW(-1)=0 THEN *AUTO
ON -2
WAIT SW(-1)=0
GOTO *AUTO
管理プログラム
自動運転プログラム
’プログラム自体には意味無し
こ こ では、 メ モ リ I/Oの-1と-2を使用し て*AUTOのプロ グ ラ ムの停止を制御し ています。 こ の よ う に相手の
プロ グ ラ ム を特定の箇所で停止させた り 、 状態を知らせた り するのには メ モ リ I/Oが有効です。 こ こ では直
接番号で メ モ リ I/Oを指定し ていますが#DEFS、 #DEFOで定義する こ と もでき ます。 注意すべき こ と は メ モ
リ I/Oは入出力が同じ番号のため、 2つ定義文が必要 と な り ます。
#DEFS
#DEFS
#DEFO
#DEFO
CMND
ACK
CMND
ACK
-1
-2
-1
-2
3-4
基本4 (サブルーチン)
以上でプロ グラ ムを記述する場合の大まかな段取 り ができ ま した。 あ と必要な事は細かい動作をどのよ う
に記述すれば良いか とい う こ とです。これにはサブルーチン とい う 考え方を使って、プロ グラ ムをよ く整理
し ます。も し この整理が無い とプログ ラ ムは秩序の無い冗長なものと なって保守が難し く な り ます。次の例
ではP&Pの動作を させるのに、 動作をい く つかの単位に分けて全体を制御し ています。 P&P1で1の位置に移
動しCHACKでワーク を囲みます。 P&P0は退避位置に移動するサブルーチンです。 P&P2は2の位置に移動し
ます。その後RELSはワーク を離し ます。この一連の動作をサブルーチンを使用しないで記述する と繰り 返し
が多いこ と、全体の見極めがつきに く いこ と などからプロ グラ ムの保守性が 著 し く 悪 く な り ます。またサブ
ルーチン単体の動作確認はRUNコマン ドで行います。
>RUN *P&P1
NO STATE!
>RUN *P&P0
NO STATE!
>
NO STATE! とい う エ ラーはサブルーチンのRETURNコマン ド を実行した時に現れる ものです。戻 るべき文番
号が無いために 発生 し ます。サブルーチンで注意すべき こ とはRETURNで 戻 らないで GOTOで 戻 してはなら
ないこ と です。(必ずRETURNで戻 して 下 さい)こ う する と 覚 えてお いた 戻 り 番地が 消費 されないために メ モ
リ 上にどんどん 蓄積 され30回ほ どで エ ラー停止を 招 き ます。
これまでのこ と をま とめる とプログ ラ ムはタ ス ク、 メ インプログ ラ ム、サブルーチンによ ってよ く 整理し て
記述すべきだ と い う こ と です。 モード切 り 替えなど全体に 関わ る こ とはマルチタ ス ク を使用し て別のプロ
グ ラムを起動する よ う な見通しの良い構成にし ます。
*LOOP
GOSUB *P&P1
GOSUB *CHACK
GOSUB *P&P0
GOSUB *P&P2
GOSUB *RELS
GOSUB *P&P0
GOTO *LOOP
*P&P1
OFF HANDDWN,STOP
TIME 50
ON HANDMAE
TIME 100
ON HANDDWN
TIME 100
RETURN
*P&P2
OFF HANDDWN
ON STOP
TIME 50
ON HANDMAE
TIME 100
ON HANDDWN
TIME 100
RETURN
*CHACK
ON VACUM
TIME 80
RETURN
*RELS
OFF VACUM
ON AIR
TIME 20
OFF AIR
RETURN
3-5
*P&P0
OFF HANDDWN
TIME 80
OFF HANDME
TIME 50
RETURN
パルス発生1 (モードの選択)
P 版でのパルス発生 (MPG-303 から出力 )
MPC-816での パルス 発生は基本的にはMPG-303を使用し ます。また パ ルス 発生の方法にはMODE5とMODE6
があ り ます。 MODE5はス テ ッ プモータの 駆動に用い、 MODE6はサー ボ モータ に使用し ます。 こ れは、 多 く
のス テ ッ プモータ ド ラ イ バ が10μか ら20μsec以上の パルス 幅 を必要と し ている こ と に対し て、 サーボ ド ラ
イ バは、1μsec度に設定されてい る こ と に対応し ている ためです。パ ルス 発生の パルス レ ー ト はACCELコマ
ン ド で設定し ます。 次の 表はACCELコマン ド で与 えた数値に対し てどの よ う な 周波数で パ ルスが出力され
るかを示し ています。
MP G でパ ルス 発生 させるためには最低次のサンプルプ ロ グ ラ ムの機能設定が必要です。 こ こ では 4 相のス
テ ッ プモータ で最大ス ピ ード を8kpps と し ています。
MPG-303カラパルス発生
*LOOP
PG 1
MODE 5
OVRUN 0
D45 0
ACCEL 8000
SETPOS 0 0
MOVE
TIME
MOVE
GOTO
REV 3.2(Pバージョン)
MODE 5
n
10000 0
100
0 0
*LOOP
MOVE
MODE 6
JOG
MOVE
JOG
50000 -45000 --
---
56.3
51.6
14.6
13.7
40000 -35000 --
---
44.2
38.6
12.0
10.8
30000 29.0
25000 26.5
20000 21.1
13.7 32.5
12.0 26.8
8.9 21.3
9.3
7.9
6.4
15000 15.7
10000 10.4
6.2 15.8
3.9 10.3
4.9
3.3
8000
4000
3.0
1.4
2.6
1.3
8.2
4.1
8.2
4.1
2000
2.0
0.7 2.3
0.8
パルス幅
20 μ sec 4 μ sec
(単位 kpps)
最初に設定すべき コマン ド はPG です。MPG-303は、 1 つの シ ス テ ムで 3 枚 まで使用でき ます。 こ のため、 コ
マン ド をどち らのMPG に対し て 与 え るかを最初に 選択する必要があ り ます。 PG 1で シ ョ ー ト ピ ンが一番目
に設定されたMPGに対し て有効 と な り ます。次にMODEコマン ド でモー ド を 選択 し、 オーバ ラ ンの 設定を ク
リ ア し て お き ます。OVRUNが 設定さ れている とMPGの パルス動作が入力の状態によ って停止し ます。D45は
直線補間の方法 を決める コマン ド で通常の直線補間では0と し ます。 コマン ド の詳細は各 コマン ド リ フ ァ レ
ン スを 参照 し て 下 さ い。 コマン ド SETPOSよ り は実際 の動作プロ グ ラ ムです。 実際 のプロ グ ラ ムではパ ルス
発生 に先立 ち原点復帰 を し ますが これは次の節 に ゆず り ます。 コマン ドSETPOSは現在位置に指定し た値 を
与 え る コマン ド です。 これで現在位置を0,0 と し て 原点復帰 に代 え ます。 そのあ とは10000パ ルスの位置まで
ス テ ップモータ を 進 め、タ イ マー1秒後にまた0の位置まで も ど り ます。こ のプロ グ ラ ムを実行する とACCEL
の処で時間待 ちが発生 し ます。 こ れはACCELコマン ド が加減速テ ーブルを 内部計算で作成する ために発生
する ロ ス タ イ ムです。 ACCEL 8000ではさ ほ どの時間 とはな り ませんが50kppsぐ らいにな る と無視できな く
な り ます。こ の時間は加減速の距離が長ければ長い ほ ど多 く な り ます。な おプ ロ グ ラ ム中で パルス 発生のス
ピ ー ド を 変更するにはFEEDコマン ド を使用し ます。ACCELで 設定された 範囲内で15段階 でス ピ ー ド 変更 で
き ます(FEED 0~FEED 15)。 前記の実験 をする 前にMPG と ド ラ イ バ の接続方法は次の様 にな り ます。 こ こ で
は フォ ト カ プ ラ入力のものを 想定し ています。TTL レ ベル入力や差動入力の場合はイ ン ター フェ ースが用意
さ れていますので第2章「PIF-422」 を 参照 し て 下 さ い。
3-6
尚、MPG を使用し た場合の原点復帰の入力ポー ト はMPG-303上のJ2です。OVRUNの入力ポー ト はMIF-816上
の入力ポー ト 24~31と な り ます。
この間はなるべく短くまた
ツウィストペアを用いる
MPG-303
J4
A
C
C
E
L
C
O
R
P
.
CE PM
P- G09 30
6C 3F
J2
(+5V)
XCW
(+5V)
XCCW
各種ドライバ
CW
CCW
・ドライバは2パルス方式に設定する
RA1
・入力LEDに抵抗が入っている場合は
RA1(100Ω)を低いものと取り替える。
P 版でのパルス発生 (MIF-816 J5 から出力)
PG -1 と す る と MIF-816 J5か ら パル ス を出力 し ま す。小規模シ ス テ ム 向 き です。MPG-303の パル ス 発生に 準
拠 し た コ マン ド 体系 ですが、 下記の相違点があ り ま す。
・ PG -1はCTRL+Aで リ セ ッ ト さ れ ます。 プ ロ グ ラ ム先頭 に記述 し て く だ さ い。
・ ど の タ ス ク か ら で も パル ス 発生が 可能ですが、 その間はマルチ タ ス ク が停止 し ま す。
・ 原点 セ ン サーポー ト はMIF-816の入力SW(16)~(23)を用い ます。
・ STOP コ マ ン ド 、 MODEコ マ ン ド は無効です
・ 途中停止はOVRUNだ けです。 OVRUN セ ン サーポー ト はSE(24)~(31)を用い ます。
・ 最高周波数は約60kppsです。
・ 「SHOM x,y,s」 で s (原点復帰 ス ピ ー ド ) はPPS単位で設定 し ます。 (1~200pps)
・ 「FEED n」 のnは0~63です。 MAX60kで ほぼ1kpps単位で指定で き ます。
・ JOG, PULSE コ マン ド は使え ま せん。
Z 版でのパルス発生
従来MIF-816 J5か ら の パル ス 発生は Z 版 で行い ま し たが、 前記のPG -1サポー ト に よ り Z版は保守版 と な り
ま し た。 新規作成はP版で使用 し て く だ さ い。
3-7
パルス発生2 (XYステージ・原点復帰・ティーチング・パレタイズ)
パルス発生を用いた応用の中で、 比較的難し く なるのがXYステージの制御です。 これはXYステージではロ
ボ ッ ト 的な動作を要求される こ とが多く なるためです。その一番の応用例はパレ タ イズです。こ こ では次の
様な簡単な応用例にも とづいて解説し ます。
X軸
モータ
X軸回転センサ
X軸方向センサ
Y軸方向センサ
Y軸回転
センサ
Y軸
モータ
サーボドライバ
J2-2 XS2
センサは軸方向についてはスリットセンサ、回転方
向としてはエンコーダのZ相を用いるのが一般的で
す。Z相をMPG-303の入力に接続するにはト
ランジスタやフォトカプラで信号を変換しなければ
なりません。
J2-4 YS2
J2-3 YS1
J2-1 XS1
サーボドライバの入力にはフォトカプラ、差動入力、
TTLレベルなどがあります。単純なフォトカプラ
の場合MPGと直接接続することもできます
が、適合しない場合や長い引き回しが必要な場合に
は、PIF-422を用います。
J4-2 XCW
J4-4 XCCW
J4-6 YCW
J4-8 YCCW
原点復帰について
原点復帰は通常 2 つのセンサによ って実施し ます。 1 つは実際のテーブルの移動方向に取 り 付けられたス
リ ッ ト センサ、も う1つは回転軸に取 り 付けられたス リ ッ ト センサです。サーボモータの場合はZ相検出を用
いるかサーボ ド ラ イバ自体に備えられた原点検出機能を使用し ます。MPCで原点復帰する場合には次の2つ
のコマン ドが重要です。
SHOM 2 8 10
HOME &HA 100 100
SHOMコマン ドは原点復帰のパルス発生の方向とパルス発生のスピード を定めます。前記の様な設定例では
XY軸と もにCCW方向に原点復帰パルス出力し ます。 逆にCWで原点復帰する場合は
SHOM 1 4 10
と な り ます。SHOMの最後の引き数は原点復帰パルスのパルスレー ト で、ACCELで設定されたパルスレー ト
とは独立して設定し ます。 MODE5,6での原点復帰パルスレー ト は次の様に計算し ます。
f=8Mhz/(1841+208×n)
例えば前記の様に10とすれば2040.3と な り 約2kHzと な り ます。 またパルス幅はデューテ ィ 50%と なってい
ます。HOMEの最初の引き数は原点復帰入力の目的とするビ ッ ト パタ ンを表しています。通常、遮光センサ
は常時ONでス リ ッ ト の遮光でOFF と な り ます。 またサーボのZ相はZ相検出でON と な り ます。 次の表の通
り 、 HOMEの最初の引き数は目的とするセンサパタ ン値 (原点復帰後の最下段) を与えます。
3-8
J2 方向 センサ 原点復帰前 原点復帰後
1 XS1 X 方向 遮光センサ ON (1)
OFF (0)
2 XS2 X 回転 Z 相
OFF (0)
ON (1)
3 YS1 Y 方向 遮光センサ ON (1)
OFF (0)
4 YS2 Y 回転 Z 相
OFF (0)
ON (1)
&H5
&HA
尚、 こ の 値は関数HPT(0) で直接読み取る こ と がで き ます。 関数HPT()はMP G 動作中には使用で き ません。
HOMEの2番目 と 3番目の 引 き数は原点復帰に先立つ退避移動量 です。 こ の例の 様にHOME&HA 100 100 と す
る と 原点復帰前 にC W 方向 に100 パ ルス ずつ移動 し ます。 こ れは原点復帰時には一定の方向 か ら 原点復帰 を
し ない と 一定の 精度 を 確保で き なかっ た り 、 Z相検出 (C相) が一回転 ズレ て し ま う こ と があ る ためです。 必
要の無い場合は0、 0と し ます。 又、 Z相検出 (C相) ではパル ス 幅や動作の不安定 さ か ら 検出 ミ スする こ と が
あ り ます。 こ れを 防ぐ のにSHRDコ マン ド で6~15までの値 を 与 え ます。 電源投入後は4 と なってい ます。 こ
の場合の 原点復帰の パ ルス レ ー ト は次の通 り です。
f=8MHZ/(709+RX(n×52+283))
*RはSHRDの 設定値。 nはSHOMの 設定値
*Z相は メ ー カ に よ ってC相 と 表記 さ れ る こ と も あ る。
PG -1での原点復帰
PG -1では原点セ ンサーをMIF-816の入力ポート に接続し ま す。MPG-303 J2コ ネ ク タ と の対応は次の通り です。
セン サ MPG-303 J2
XS1 1番ピン
XS2 2番ピン
YS1 3番ピン
YS2 4番ピン
US1 5番ピン
US2 6番ピン
ZS1 7番ピン
ZS2 8番ピン
MIF-816 J4
1番ピン (SW(16))
3番ピン (SW(17))
5番ピン (SW(18))
7番ピン (SW(19))
9番ピン (SW(20))
11番ピン (SW(21))
13番ピン (SW(22))
15番ピン (SW(23))
SHOMの原点復帰方向指定、 HOMEの セ ンサーパ ターン指定はMPG-303 と 同様です。
ティーチング
点データ にはあ ら か じ め 設定し てあ る場合 と 、 装置が 組上がってか ら 設定するべ き データ の2通 り があ り ま
す。 次に点デー タ の扱い方について例示し ますがその前に点データ (ベ ク ト ル) 配列P( n ) と 成分配列X ( n ) ,
Y(n),Z(N),U(n)の 関係について解説 し ます。MPCには予約配列 と し てAR(n)は純粋に 演算用の配列ですが、他
は点データ と し ての意味 を も っ てい ます。点データ はP(n)であらわされ、その各成分はX(n),Y(n),Z(n),u(n)
で表されています。 点配列P(n)は通常の演算で使用する こ とができ ません。 受け付ける コマン ドはMOVE,
JMPZ,JUMP,PRINTの点データに基づく移動コマン ド と表示コマン ドのみです。 これに対してX(n)~U(n)は
予約配列と して単体で演算中で使用する こ とができ ます。
①点データはコマン ドSETP, STPZUで設定でき る。
>SETP 1 100 200
>STPZU 1 300 400
②点データは各配列成分に演算で設定でき る。
>X(1)=100
>Y(1)=200
>Z(1)=300
>U(1)=400
③点データはプログ ラ ム中で設定でき る。
>10 SETP 1 100 200
20 STPZU 1 300 400
3-9
④点データはプログ ラ ム中で変更でき る。
>10 X(1)=X(1)+D0
20 Y(1)=Y(1)+D1
点データはこのよ う にして様々な方法で設定 ・ 変更でき ます。 またこの使用方法は様々です。 次の3つの例
はいずれも同等の意味を持ちます。
① MOVE P(1)
② MOVE X(1) Y(1)
③ A0=X(1)
A1=Y(1)
MOVE A0 A1
も う 1つの点データの設定方法は、 テ ィーチコマン ドによ る ものです。 テ ィーチコマン ドはイ ンチング動作
(JOG動作) によ り 機械体を目的の位置まで移動させ、 その点を教示する ものです。 テ ィ ーチモードに移る
にはT<ENTER>と し ます。単純な初期化が終わった時点では、次の様にデタ ラ メ な値が表示されますので所
定の初期化を実施し ます。テ ィーチモードに移って最初に押すキーは0~3のいずれかです。このキーによ っ
てイ ンチング量を選択し ます。実際に移動させる コマン ドは、XでCW,xでCCWです。 これはX軸の場合で、
他の軸の場合はY, Z, Uキーです。 目的の場所への移動が終了したら、 Pを押し ます。 する と改行し て番号
の入力を促してきます。 こ こで指定された番号のP(n) に現在位置が登録されます。 次の例では点1 と点3に
データ を設定し、テ ィーチモード終了後PRコマン ドで表示しています。尚、テ ィ ーチモードの終了はQです。
>MPCINIT
PG 2#(X,Y,Z,U) 2048 28691 2048 28691 [XYZ,U] 400 400(ここでT<ENTER>を実行しています)
>PG 1
>MODE 5
>ACCEL 15000
>SETPOS 0 0
>STPZU 0 0 0
PG 1#1(X,Y,Z,U) 0 0 0 0 [XYZ,U] 200 200 (ここでもT<ENTER>を実行しています)
>
PG 1#1(X,Y,Z,U) 400 0 0 0 [XYZ,U] 200 200
P1
PG 1#1(X,Y,Z,U) 800 0 0 0 [XYZ,U] 200 200
P3
PG 1#1(X,Y,Z,U) 800 0 0 0 [XYZ,U] 200 200
>PR P(1) P(3)
400 0 0 0 800 0 0 0
主 な テ ィ ーチモードでの操作 キ ャ ラ ク タは次の通 り です。 参照 コマン ド : T
Xx
X軸のイ ンチング移動 (小文字でマイ ナ ス方向)
Yy
Y軸のインチング移動 (小文字でマイ ナ ス方向)
Zz
Z軸のイ ンチング移動 (小文字でマイ ナ ス方向)
Uu
U軸のイ ンチング移動 (小文字 でマイ ナ ス方向)
0 1 2 3 インチング 量の 選択
P
点データの 設定
Q
テ ィ ーチモードの 終了
3-10
ティーチングプログラム
装置に テ ィ ーチング タブ レ ッ ト を装備 して テ ィ ーチング機能を 備 える こ とは多 く あ り ます。I/Oに次の図 の
様にス イ ッチ ボ ッ ク スを接続 し て XY ス テ ー ジ などをならい教示させる ものです。 この テ ィ ーチングには
JOG命令 を使 う 方法 とRMOVによ って構成する場合の2通 り があ り ます。
ティーチングBOXを使った制御例
MPC
パルス
I/O
XYロボット
ドライバ
ハンド
パレット
ティーチングBOX
RMOVを使用する場合
RMOVは現在位置よ り の相対移動です。ス イ ッチ入力によ って、RMOV を実行し イ ンチング動作させます。点
の教示ではSETPコマン ド を使用し ます。 次のプロ グラ ムはX軸1軸の場合の例です。 イ ンチング 量 を 変更す
る場合はRMOV の引 き数を 変数と して、 変数を デジ ス イ ッチで設定する よ う にし ます。 また、 点番号の設定
も同様 な方法 を と る もの と し ます。
1000
1010
1020
1030
1100
1110
1200
1210
1300
1310
IF SW(0)=1 GOSUB 1100
IF SW(1)=1 GOSUB 1200
IF SW(2)=1 GOSUB 1300
GOTO 1000
RMOV 10,0
RETURN
RMOV -10,0
RETURN
SETP 1,X(0),Y(0)
RETURN
JOG命令を使用する場合
MPG での JOG機能はJOG コマン ド と XRANG~URANG までの領域設定コマン ド よ り 成立 しています。 JOG コ
マン ドはSTOPコマン ドで停止と な り ます。 次に X1軸のみで JOG コマン ド を使用し た例を示し ます。
910 XRANG 10000,-10000
1000 IF SW(0)=1 GOSUB 1100
1010 IF SW(1)=1 GOSUB 1200
|
1100 JOG 100,1
1110 WAIT SW(0)=0
1120 STOP 1
1125 TIME 5
1130 RETURN
1200 JOG 100,2
1210 WAIT SW(1)=0
1220 STOP 1
1225 TIME 5
1230 RETURN
点の 教示などは先の例と同様 なので 省略 し てあ り ます。動作範囲の 設定はXRANG(YRANG,URANG,ZRANG)
で定めて お き ます。 また、 STOP後のTIME 5はMPG待 ちです。
※ これは標準入力を使用した テ ィ ーチングのためのプロ グラ ム例です。
純正テ ィ ーチング ペ ン ダ ン ト 「 MPC-10KE Y」 はMPCのプロ グラ ムポー ト に接続 して ダ イ レ ク ト コマン ド
で制御するため入出力や テ ィ ーチングのためのプロ グ ラ ミ ングは必要あ り ません。
3-11
パレタイズについて
点データの中には、パレ ッ ト のよ う に大量の点を必要とする ものがあ り ます。これを前記の様に点データの
教示によ って実現し よ う とする と たいへんな労力と な り ます。 パレ タ イ ズコマン ドはこのよ う な規則的な
点データ を少ない基本的な点データから生成する ものです。 次のプログ ラム例では点1、 2、 3を基本点とす
る5*5のパレ ッ ト の点を定義し、 データは関数PL(n)で取 り 出しています。
100 PALET 1 2 3
110
120
130
140
P(3)
MTRX 5 5
FOR I=1 TO 25
MOVE PL(I)
NEXT I
P (4)
’
P(1)=PL(1)
P(2)=PL(5)
|
P(3)=PL(21)
P'(4)=PL(25)
P(1)
P(2)
パレ ッ ト はP版の場合同時に2つ設定する こ とができ ます。 コマン ドはPALET1 とMTRX1です。 対応するパ
レ ッ ト 関数はPL1(n)です。さ らに点データ と同じ よ う にパレ ッ ト 点はX、Yの各成分で得る こ とができ る よ う
に関数PLX(),PLY()が用意されています。尚、パレ ッ ト 点PL(n)はX,Y,Z,Uの4成分を含んでいますがパレ タ イ
ズされているのはX,Yの2次元のみでU,Z成分についてはPALETコマン ドの最初の点の座標値にならいます。
前記の例では、 P(1)のZ,U値が各PL1(n)のU,Z成分と な り ます。
3-12
実際のプログラム
ずい ぶん と 前置きが長く な り ま したが、これで実際 の応用の 準備ができ ま した。次にMPG-303でのモデルプ
ログ ラ ムを例示し ます。 自動、 テ ィ ーチング、 原点復帰 を単純 なモデルで 表現し ています。 流れと 基本的な
コマン ド をつかんで 下 さい。
#DEFS START 1
#DEFS HOMES 2
メイン操作スイッチ
#DEFS TEACH 4
'
#DEFO READY 1
#DEFO ERR 2
'
#DEFS SNS1 5
インタロック用センサ
#DEFS XCW 6
#DEFS YCW 7
各軸のJOGキー
#DEFS XCCW 8
#DEFS YCCW 9
#DEFS PENT 10
現在位置記憶スイッチ
#DEFS OP1 11
パレット交換完了スイッチ
#DEFO PALET 5
パレット交換表示
'************
'INIT
'************
PG 1
MPG-303初期化
MODE 5
この例のようにPG選択、モード設定、OVRUN、
OVRUN 0
D45等を初期してからACCELを実行する
D45 0
ACCEL 15000
PALET 11,12,13
パレット宣言点11,12,13を使って5×5のパレット構成
MTRX 5,5
'************
*MAIN
'************
IF SW(START)=1 GOSUB *START
メインプログラム
IF SW(HOMES)=1 GOSUB *HOME
自動、原点復帰、ティーチングの動作を分類する
IF SW(TEACH)=1 GOSUB *TEACH
GOTO *MAIN
'************
*START
'************
MOVE P(1)
ON PALET
出力パレットのONはオペレータにパレット交換を促す
WAIT SW(OP1)=1
OP1はオペレータスイッチで作業完了を意味する
OFF PALET
J=0
3-13
*LOOP
WAIT SW(SYS1)=1
パレットとパルス発生の組み合わせ例
MOVE PL(J)
移動スピードを変更する場合は’FEED’を使用します
GOSUB *PLACE
IF J=25 THEN *END
GOTO *LOOP
*PICK
チャッキング動作
'PICK MOTION
RETURN
*PLACE
プレース動作
'PLACE MOTION
RETURN
*END
RETURN
'************
*HOME
原点復帰動作
'************
サーボのZ相を読み取る場合は他にSHRDを必要とします
SHOM 2,8,10
(SHRD 6~SHRD 15)
HOME &H000A,100,100
RETURN
'************
*TEACH
'************
IF SW(XCW)=1 THEN *XMV
IF SW(YCW)=1 THEN *YMV
IF SW(XCCW)=1 THEN *XMVN
ティーチングスイッチによる分岐
IF SW(YCCW)=1 THEN *YMVN
IF SW(PENT)=1 THEN *PENT
GOTO *TEACH
*XMV
JOG 100,1
WAIT SW(XCW)=0
GOTO *MV_END
*XMVN
JOG 100,2
各軸のJOGコマンドと停止
WAIT SW(XCCW)=0
停止はスイッチを離す(開放)ことによって行っています。
GOTO *MV_END
スピードを変更したい場合はJOGの100を変更します。
*YMV
JOG 100,3
WAIT SW(YCW)=0
GOTO *MV_END
*YMVN
JOG 100,4
WAIT SW(YCCW)=0
*MV_END
STOP 1
JOGコマンドはSTOPによって停止します
TIME 10
停止後0.1秒程のタイマを入れます
GOTO *TEACH
*PENT
A=IN(2)^&H000F
A1=IN(2)/16
A1=A1*10
ティーチング点はデジスイッチで指定することを前提としています
A=A+A1
入力16~23にDSWが2ヶあると想定しています
SETP A,X(0),Y(0)
RETURN
3-14
パルス発生3
パルス発生の作業の中で最もやっかいなのがパルス発生中の途中停止です。パルス発生はI/O制御と異な り
停止が必要と なった時点でどのよ う な状態であるか、 あ るいはどのよ う に停止したいかによ って処理が変
わ り ます。 残念ながらMPC-816での途中停止は仕様追加によ って構成されているためわか り に く いもので
あった り 、コマン ドが対称的にサポー ト されていなかった り し ます。この節では代表的なパルス停止の方法
を紹介し ます。
パルス停止の注意事項
QUITの禁止
マルチタ ス クの使用方法に習熟して く る と、 ある作業の停止には QUIT が便利だとい う こ とがわか り ます
が、 これは、 パルス発生の場合にはあてはま り ません。 パルス発生中のタ ス クに対して不用意にQUITする
と それ以降MPGに対し てのコマン ドが無効になる こ とがあ り ます。
悪い例
*LOOP
FORK
1100*PG
TIME
QUIT
1100
TIME
*LOOP
*PGGOTO
RMOV
1000
1000
TIME
50
RMOV
-1000
-1000
TIME
50
GOTO *PG
良い例
*LOOP
FORK
1100*PG
TIME
STOP BSY(1)<>0
4
WAIT
QUIT
15
STOP
GOTO *LOOP
*PGRMOV
1000
1000
TIME
50
RMOV
-1000
-1000
TIME
50
GOTO *PG
STOP後の処理(STOPさせても次の命令は有効)
MPGにSTOPをかけても イ ン タプ リ タの停止が止ま るわけではあ り ません。 パルス発生中のコマン ドが停止
させられるだけです。 このため、 STOPによ って完全に動作を中断させるには次の様な 工夫 が必要です。
悪い例
FORK
1SW(1)=1
*MPG
WAIT
STOP
1
END
*MPGRMOV 100 0
GOTO *MPG
良い例
FORK SW(1)=1
1 *MPG
WAIT
STOP
1
END
*MPGRMOV 100 0
WAIT
GOTO BSY(0)=1
*MPG
悪い例ではRMOV 100 0が1回停止させられてもすぐ次のコマン ドが実行されて、 再びRMOV 100,0が実行さ
れます。 良い例ではRMOV ご とにWAIT BSY(0)=1のチェ ッ ク をし てお り 1度STOPで停止させられる と こ こで
条件待ち と な り ます。
JOG,STOP後の現在位置読み取り
テ ィ ーチング用のプログ ラムを作る場合に JOG とSTOPを 組み合わせますが、STOP実行後ただちに現在位置
を読み取る 関数を実行する と、 STOPが無効にな り ます。 次に1軸の テ ィ ーチングプロ グラ ム例を示し ます。
STOP後に0.1秒 のタ イマを入れています。 これはSTOPの実行とMPGの停止の間には時差があ り 、 この間に
MPGに対して指示を 与 える と誤動作してし ま う こ とがあるためです。
*TEACH
IF SW(1)=1 THEN *XCW
IF SW(2)=1 THEN *XCCW
IF SW(3)=1 THEN *END
GOTO *TEACH
*XCW
3-15
JOG 100,1
WAIT SW(1)=0
STOP 1
TIME 10
X=X(0)
GOTO TEACH
*XCCW
JOG 100,2
WAIT SW(2)=0
STOP 1
TIME 10
X=X(0)
GOTO *TEACH
0.1秒タイマ
0.1秒タイマ
このこ とは通常のRMOVやMOVEでも同様です。 次の例のよ う にSTOP停止をかけたあ とでMPGの実際 の停
止をBSY()関数によ って監視する必要があ り ます。
悪い例
良い例
PG 1
FORK 1,*PG
TIME 100
STOP 1
X1=X(0)
END
*PG
MOVE 10000,0
END
PG 1
FORK 1,*PG
TIME 100
STOP 1
WAIT BSY(1)<>0
X1=X(0)
END
*PG
MOVE 10000,0
END
複数のタスクからのコマンド
プロ グラ ムの設計時には各 タ ス クの用途は整理されて、 パ ルス 発生用、 I/O制御用と分類されていますが最
終的な段階ではこの秩序が保ちきれな く なる こ とがあ り ます。例えば、前記の例にあったよ う に他のタ ス ク
が停止コマン ド を実行するために 座標読み取 り は他のタ ス クが実施 し ます。 又、 複数のユニ ッ ト がからみ
あった位置決めでは複数のタ ス クから同一のMP G に対して指示を 与 えた く なる こ とがあ り ます。 こ う した
場合には、交通整理をきちん と しなければな り ません。 セ マ フォ を使 う場合 (複数のタ ス クが同じMPGにコ
マン ド を出力) 次の 様に セ マ フォ関数を使えば複数のタ ス クがコマン ド を出しても問題は発生 し ません。
①セ マ フォ の場合
*TASK1
WAIT RSV(-1)=0
MOVE 1000,0
OFF -1
GOTO *TASK1
*TASK2
WAIT RSV(-1)=0
RMOV -1000,0
OFF -1
GOTO *TASK2
*TASK1
A=1
WAIT A=0
GOTO *TASK1
*TASK2
B=1
WAIT B=0
GOTO *TASK2
②パルス 発生 を 1 つのタ ス クにま とめた場合
*PG
IF A=1 THEN *MV
IF B=1 THEN *RV
GOTO *PG
*MV
MOVE 1000,0
A=0
GOTO *PG
*RV
RMOV -1000,0
B=0
GOTO *PG
3-16
STOP コマンド
引
様 味
減速
パ 発生
続 パ 発生
STOP コ マン ド は1~5ま での き 数が あ り 次の に意 が異な り ます。
STOP 1 停止
STOP後
し その後停止 し ます。
STOP 2 停止
STPO後ただちに ル ス
中止 し ます。
STOP 3
次に く ル ス
コ マン ド に対 し てのみ有効なI/O監視停止
減速
急
STOP 3,10,1
MOVE 10000,0
V
命令です。
減速
こ の例ではポー ト 10がONにな っ た ら 次のMO E コ マ ン ド で
停止 し ます。
STOP
MP コ マン ド 付を一時停止 し ます。
STOP 5
STOP に よ る一時停止を
し ます。
ルス
を停止す る コ マン ド は、 こ の にO RUNがあ り ま す。 O RUNは常時入力ポー ト を監視 し て
が成 す る と ル ス
を中止 し 、 イ ン タ プ リ タ の実行を停止 し ます。 こ のため ラ ー
が必要な場合は
STOP 1 STOP 2を監視 タ ス ク か ら 実行 し ます。 、 STOP STOP 5は ル ス
コ マン ド その も の を停止す
る こ と がで き る ので こ れ を み合 せ る と 非常停止は簡単に実現す る こ と がで き ます。
4
パ
G
発生
立
パ
,
発生
組
*MAIN
*EMG
*PG
4
4
わ
受
他 V
又
解除
V
4,
パ
発生
エ
回復
条件
FORK 1 *PG
IF SW(1)=1 THEN *EMG
IF SW(2)=1 THEN *JOB1
| その他の処理
GOTO *MAIN
STOP 4
STOP 1
WAIT BSY(1)<>0
| | 後処理
QUIT 1
STOP 5
GOTO *EMG
MOVE
WAIT
MOVE
WAIT
GOTO
MPGへのコマンド実行停止設定
MPGのパルス発生中止
停止確認
タスクの停止
MPG停止の解除
1000 0
SW(3)=1
0 0
SW(4)=1
*PG
お
発生
ぐ
W BY = 組 込
パ
発生
も し STOP を先に実行 し て かない と 、 STOP 1はその時実行 さ れてい る ル ス
コ マン ド のみに有効で
すか ら ル ス
中止後す に次の コ マ ン ド を実行 し て ル ス
し て し ま い ます。 も う 一つの方 は、
移動 コ マ ン ド に AIT S (0) 1を み んで き ます。
パ
*PG
FORK
TIME
STOP
WAIT
QUIT
END
パ
お
発生
1 *PG
1
BSY(1)<>0
1
RMOV 1000,0
WAIT BSY(1)=1
GOTO *PG
STOPで停止すると次へは進まない
3-17
法 各
PG -1 でのパルス停止 G
パ
発生前 V
W 4
P -1ではSTOP コ マン ド が使用で き ません。 ル ス
にO RUN コ マ ン ド でMIF-816の入力(S (2 )~
(31))の タ ーン を指定 し ます。 次は指定例 と サ ン プルプ ロ グ ラ ム です。
V
パ
O RUN指定例
OVRUN
OVRUN
OVRUN
OVRUN
&HFF
&H01
&HFFFF
&HFF01
"SW(24)~(31)のどれかがONで停止
"SW(24)がONで停止。使わないポートは一般入力OK
"SW(24)~(31)のどれかがOFFで停止
"SW(24)がOFFで停止。使わないポートは一般入力OK
サ ン プルプ ロ グ ラ ム
ACCEL 3000
FEED 0
FEDZ 0
OVRUN &HFF
MOVE 10000 10000
IF IN(3)<>0 THEN *OVRUNERR
"SW(24)~(31)のどれかがONで途中停止
"パルス発生
"停止原因確認。OVRUNならエラー
3-18
MPG-301の使用例
G
汎 パ 発生 :X
搭載 お
途
① kpps 超 高速パ 発生
②パ 発生
速度 減即 変更 字 減速
途
③エ
ダカウ
G
途 詳
ュ
当社Web
製品
ュ
参照
ュ
紹介
パ
ボ
テ
パ
続
差
バ
パ
続発生
速度 変更
G
内部レジ
参照 ・ 変更 可
MP -301は 用の ル ス
IC 3202を
し て り 、 次の よ う な用 に対応で き ま す。
50
を える
ルス
ルス
中での
や加
の
、S 加
な ど を必要 と す る 用
ン コー
ン タ の入力
MP -301には別 、 細マニ アル (
サイ ト 、
別マニ アル) が用意 さ れてい ま すので、 使用
例については こ ち ら を
し て く だ さ い。 こ のマニ アルでは簡単な例を一つ
し ま す。 接 は、 MP 301の ル ス出力を サー モー タ あ る いは ス ッ プモー タ の ル ス入力に接 す る だけです (MP -301の出
力は 動出力 ド ラ イ です)。 プ ロ グ ラ ム例では ル ス を連
さ せなが ら 、 入力0か ら 7の に し たが っ
て
を
し 、IN8をONにす る と 停止す る と い う も のです。 こ の例で見 る よ う にMP -301は リ アル タ イ ム
で
スタの
が 能です。
続
G
値
G
ステップ/サーボモータドライバ
MPG-301
ドライバ
Driver 入力 CW+
Driver 入力 CWDriver 入力 CCW+
Driver 入力 CCW-
MPG-301 J4
1 (CW+)
2 (CW-)
3 (CCW+)
4 (CCW-)
※接続には ツウ ィ ス ト ペ ア を推奨 し ます。 ま た、 100 k 以上の 高速パル ス 発生には、 高速信号伝達に 配慮 さ
れた ケ ーブル を ご 使用 く だ さ い。
"SW(8) ONで停止
'"N0-IN7 DSWの読み取り
ST_REG 0,250
ST_REG 3,100
ST_REG 4,1000
ST_REG 5,100
ST_REG 6,100
CMND &HA0
CMND &H06
IF SW(8)=1 GOTO *STOP
R4=IN(0)
R4=R4*20
ST_REG 4,R4
GOTO *LOOP
*STOP
CMND &H31
WAIT REG(-1)=&H20
WAIT SW(8)=0
GOTO *MAIN
"周波数倍率250の時倍率は1/1
"起動周波数100pps
"最高周波数1000pps
"加速レート100pps2
"減速レート
"動作完了フラグリセット
"連続駆動
"読み取り値の20倍の値を速度とする。
"周波数変更
"減速停止命令
"動作完了待ち
3-19
RS-232C通信
MPC 間の通信
MPC間で通信をす る 場合は次の3つの コ マ ン ド で
CNF # INPUT# PRINT#
G,
,
充分です。 参照 : 5章 コ マ ン ド リ フ ァ レ ン ス
MPC-1
MPC-2
10 CNFG# 2 0 2
20 ON 1
30 PRINT# 1
40 INPUT# A
50 IF A=0 THEN *ERROR
60 OFF 1
70 GOTO 20
1000 *ERROR
1010 ・
・
10 CNFG# 2 0 2
20 INPUT# A
30 ON 1
40 TIME 100
50 IF SW(1)=0 THEN *ACK
60 OFF 1
70 PRINT# 1
80 GOTO 20
1000 *ACK
1010 PRINT# 0
ホ
値 送
セ ジ 受
テ
待
継続 業 変更
高度
様
こ の例ではMPC-1が ス ト と な り 30で数 1 を 出 し てい ま す。 こ れに対応す る のはM PC -2 のINPUT# で
MPC-1か ら え ら れた メ ッ ー を け取 る と 次の ス ッ プ みま す。MPC-1は、MPC-2に指示を 出す る
と 0のINPUT#でMPC-2か ら の信号を ち ます。 こ こ で注意す る のは、返っ て く る 数 には0 と 1の2
があ
り 、 それに よ っ てMPC-1の
作 も
さ れ ます。 こ の よ う に通信に よ る イ ン タ ロ ッ ク では、
が数
と し て扱え る ため イ ン タ ロ ッ ク を
な も の と す る こ と がで き ます。 、通信を け取 る で ル ス
と し て使用す る 場合は次の に な り ます。
与
4
MPC-1
MPC-2
|
100 PRINT# X1 Y1
120 INPUT# A
130 IF A<>7 THEN *ERR
|
5
10
20
30
40
進
値
又
受
送
種類
情報 値
側 パ 発生器
*LOOP
INPUT# A B
RMOV A B
PRINT# 7
GOTO *LOOP
パソコンと MPC の通信(CH1 を使用した場合)
パソコン(N88BASIC)
MPC側
10 OPEN "COM1:E71XN" AS #1
|
|
100 PRINT#1,A,B
110 INPUT#1,C
|
|
5
10
20
30
40
注意すべ き こ と は、 通信の手順を あ
簡単に通信が実現で き ま す。
CNFG# 2 0 2
INPUT A B
RMOV A B 0
PRINT# 7
GOTO 10
わせ る こ と です。 N88BASIC と MPCの通信 コ マ ン ド は良 く 似 てい る ので
複雑なプロトコルに対応
Y
字キャ
様
関
パソ
等
固
フォ
備
器 計測器 ・ 表 器 等
側
GET#() PUT# PUTS# GETN# SKIP# FIND#
こ こ では、 電圧計測器 か ら 次の 様 な フォ ーマ ッ ト で デー タ が 送 ら れて く る も の と し ます。
[SP]X1=230.13[SP][SP]Y1=156.17[SP][CR]
こ の場合、 通常のINPUT#文では ” X1” や ” =” 等 の文字 が 邪魔 にな り 、 正常な数値 の取 り 込 みがで き ま せん。
こ う し た場合、 次の 様 なプ ロ グ ラ ム を 組 めばデ ー タ を取 り 込む こ と がで き ます。
T N F S C では文
ラ ク タ の操作のために次の な コ マン ド や 数がサポー ト さ れてい ます。 対
コ
ン、対MPC の通信の場合は こ う し た コ マ ン ド を使用す る 必要は無いのですが、 定の通信
ーマ ッ ト を
え た機
(
示 ) に対 し ては、 MPC でプ ロ ト コ ル を整合 さ せ る 必要が あ り ます。
3-20
当
100
110
120
130
140
150
160
170
180
190
200
210
220
SKIP# &H3D
GETN# X0
SKIP# &H2E
GETN# X1
SKIP# &H3D
GETN# Y0
SKIP# &H2E
GETN# Y1
SKIP# &H0D
X0=X0*100
X0=X0+X1
Y0=Y0*100
Y0=Y0+Y1
字
&H3Dは‘=’
230を変数X0にとりこむ
&H2Eは‘.’
13を変数X1にとりこむ
156を変数Y0にとりこむ
17を変数Y1にとりこむ
&H0Dは‘CR’
X0には23013がセットされる
Y0には15617がセットされる
検索 G
デ
様
字 ・ 字列
込
再
与
変
代
前
デジボ
ピ オ
込
字列
SKIP#は相 す る文 コ ー ド を
し 、 ETN#は数
文
のみを 数に 入 し ます。 こ の例は リ ド
を んで 1 つの ー タ を 2 つの整数 ー タ と し て取 り み後で 合成 し てい ます。 記は ー タ の読み み
で し たが、 装置に よ っ てはRS-232Cで コ マン ド を え る も の も あ り ます。
ルに対 し て次の文
を出
力 し なければな ら ない時は例の に し ま す。
挟
デ
"CH1 DAT"[CR]
字
字
他
デ
【例1】 100 'CH1 DAT
110 PUTS# STR(-1)
120 PUT# &HOD
【例2】 100 PUT# &H43,&H48,&H31
110 PUT# &H20,&H44,&H41
120 PUT# &H54,&HOD
Y 内部 デ
お
関 n
受 キャ
キャ
類
率 悪
率
こ の よ う に文 を文 コ ー ド と し て扱 う こ と に よ っ てT N F S C
で ー タ を処理で き る よ う に し てい ま
す。 通信プ ロ グ ラ ム で に有効な コ マン ド と し て え て き たいのは、 数RS( ) と TST#(0)です。 RS( )は コ
マ ン ド で処理 さ れていないが、 ッ
にた ま っ てい る 信
ラ ク タ の数を知 ら せ ます。TST#(0)はCH1だ
けに ら れ ますが ー タ を読み出 さ に け取っ てい る
ラ ク タ を分 し ま す。 I N P U T # や E T # ( 0 ) は
ラ ク タ を け取っ てい な く て も
ラ ク タ ちの状態 と な る ため実行効 が く な り ます。 R S ( ) や
TST#(0)で 信状態を
の上プ ロ グ ラ ム を め る と よ り 効 の良いプ ロ グ ラ ム を記述で き ます。
キャ
限
受
受
デ
確認
バ ファ
ず 受
キャ
覚
進
待
n
G
n
パソコンと MPC の通信(CH 0 を使用する場合)
こ こ では、プロ グラ ム 用CHを パソ コ ン に接続し て使用する 方法について述べま す。次の 様な簡単な例に 基づき
専用プロ グ ラ ム を つく る こ と にし ま す。プロ グ ラ ム は、 与えら れた データ に 基づいてポート を ON/OFFし ま す。
10 'SAMPLE
20 INPUT B
30 QUIT 1
40 OFF A
50 A=B
60 FORK 1,1000
70 GOTO 20
1000 ON A
1010 TIME 20
1020 OFF A
1030 TIME 20
1040 GOTO 1000
これに対応する
プログラムは次
の様になります
ソフ ・ セ
ソフ ・ セ
B
エ
割 込 禁
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
180
190
200
'INITIAL
OPEN "COM1:E71XN" AS #1
PRINT#1,CHR$(&H1);
IF INPUT$(1,#1)=">" THEN #START
GOTO 40
'
*START
PRINT#1,"RUN";CHR$(&HD);
'
'MAIL LOOP
IF INPUT$(1,#1)="?" THEN *RSPNS ELSE 110
*RSPNS0
INPUT "PLEASE SET DATA PORT NUMBER ",A
IF A>B THEN *RESET
PRINT#1,A;CHR$(&HD);
GOTO 110
'
*RESET
INPUT "CAN I RESET FASIC !!(Y/N)",C$
IF C$="Y" THEN 30 ELSE *RSPNS
”
” >” レ
捨
,
$
;”
” ?” キ ・
Z版 パ
こ の例では、 MPCの
ト リ ッ ト が使用 さ れてい ます。 01H コ ー ド で PRINT#1 CHR (&H1)
によ っ
てMPCは
ト リ ッ ト し ます。 ASICのプ ロ グ ラ ム中では、
の ス ポ ン ス と INPUTの
を ー
ラ ク タ と し て使用 し てい ます。 コ ー
ッ ク は全て読み て と な り ます。 こ う し たや り と り で注意す
る こ と は、 MPCが り み 止 と な っ てい ないだ ろ う か と い う こ と です。 り み 止は、
での ル
キャ
・バ
?
3-21
割 込 禁
発生
お
キャ
受 可
> 待 ず キャ
送 続
続
基本
解説
外
身
持
< >+< >キ
シャ
セ ジ 等
外
限
ず” ”
送
内容 破壊
様 基本
ソフ ・ セ
,
,
等 デ
詳説
ス
時に こ り 、 こ の時M PC はただ1つの
ラ ク タ のみ 付 能でそれ以上は ら ない よ う に し ま す。
ま た、 ス ポ ン ス ( ) を た に
ラ ク タ を り け る と プロ グ ラ ムの
が
される こ と があ り ま
す。 こ の よ う に、 CH 0に接 し てMPCを制御す る こ と も で き ますが こ れにはMPCのプ ロ ト コ ルつい て 細
に知 る 必要が あ り ま す。 次に
プ ロ ト コ ルについて
し ます。 MPCでは、 次の な
プ ロ ト コルを
ち ます。例 は、 コ マ ン ド 自 が通信出力を つ場合、 CTRL A
ーに よ る
ト リ ッ ト の場合、 さ
らにイニ
ルの メ ッ ー 出力 の場合です。 例 コ マ ン ド は、 TEACH PRINT INPUT の ー タ 入出
力 コ マ ン ド に ら れ ます。 こ こ では ま 、 ON 1 を例 と し てプ ロ ト コ ル を
し ます。
レ
《TERMINAL》
O
N
[sp]
1
[cr]
命令 エ
このよ う に
を コー
す。 例えば、 一行入力 《MPC》
O
[echo] echo:
N
[echo] sp:
[sp] [echo] cr:
1
[echo] lf:
[cr] [echo]
命令実行
[cr]
[lf]
>
詳
持
エコーバック
スペース
リターン
ライン・フィートを意味します。
バ ッ ク し 、 実行終了 と と も に [lf] > を出力 し ます。 プ ロ グ ラ ム の入力 も 全 く 同様 で
” 10 ON 1” の場合は次の様 にな り ます。
《TERMINAL》
1
O
[sp]
O
N
[sp]
1
[cr]
《MPC》
1
[echo]
O
[echo]
[sp] [echo]
O
[echo]
N
[echo]
[sp] [echo]
1
[echo]
[cr] [echo]
命令実行
[cr]
[lf]
>
こ の 資料 でプ ロ ト コ ルの全て を 前記の 様 に記述す る のは困 難で あ り ますので、 次の 様 な 略 記法 を用い ます。
エ コ ー部は、 ( )で囲ま れた部分です。 レ ス ポ ン ス は、 キャ ラ ク タ と ヘキ サで表記 し ます。 ヘキ サは、 [&H_ ]
と 表 現 し ます。
☆★☆★☆★☆ 特殊プロトコル一覧 ☆★☆★☆★☆
(NEW[&HD])
[&HD][&HA]>
(10 ON 1[&HD])
[&HD][&HA]>
(20 ON 2[&HD])
[&HD][&HA]>
(30 TIME 100[&HD])
[&HD][&HA]>
(LIST[&HD])
[&HD][&HA]10[&HA]ON 1
[&HD][&HA]20[&H9]ON 2
[&HD][&HA]30[&H9]TIME 100
[&HD][&HA]>
(INPUT A B[&HD])
[&HD][&HA]?(1234 567[&HD]) [&HD][&HA]>
(PRINT A B[&HD])
[&HD][&HA] 1234 567
[&HD][&HA]>
(TEACH[&HD])
[&HD](X,Y,Z,U) 0 0 210 0 [XYZ,U] 100 100
[&HD][&HA]>
実
ミ
(*Q)
際 の詳細が不明の場合はFTMWディ ス ク に 含 ま れ るACTERM を使用 し て下 さ い。 ACTERM は無手順 タ ー
ナル ソ フ ト で受 け取っ た コ ン ト ロ ール コ ー ド も 表示で き ます。
3-22
デジタル社タッチパネルとの接続
ザ
ャ ネ
デジ
社「
ホ
表 器 G シ リ ー ズ」 の
込 /書込みで パ
MPC-816のRS-232Cユー ーチ ン ル (CH1) と
タル
プ ロ グ ラ マブル 示
P70
メ モ リ リ ン ク 通信のサ ン プルです。メ モ リ リ ン ク ではMPCが ス ト と な り 、 P メ モ リ の読 み
ルを コ ン ト ロ ール し ま す。
ネ
G 「「割 込
」
際 部品
「割 込
」
レ シ テ デ エ
各
W
来
G 待
法 利
デ
得
G
G 画面 デザ
」 「
W」 「 」
押
「 」
お 押
識
G 「W」
・G ボ
押
レ
可
超
パネ デザ 向
例1)は Pの
り み出力 を用いた例です。 こ のプ ロ グ ラ ム を実行す る には、 Pの
を
イ ンす る
に、
の出力を
り み出力 と し て 定 し ま す。
り み出力 と は ワ ー ド S
や Tタ グ の
ワ ー ド ア ド ス を ス ム ー タ リ ア 13 に り て る と 、 それ を し た と き に 定数 をRS-232C出
力す る と い う も のです。 ワ ー ド S やT タ グ に 有の 定数 を 定 し て けば、 さ れた も のの 別が出
ます。 MPCはその出力を ET#で っ てい る だけです。 ラ ン プ のMPCか ら の出力は Pの
コマン ド
で行っ てい ます。 こ の方 の 点は、 プ ロ グ ラ ム が簡単 常時ループ し ない
Pの タ ン を し た と き の
ス ポ ン ス が良い、 な どが あ り ます。 し か し 、 出力 能な定数は1 イ ト (&HFFは不 ) なので、 こ れ を え
る ー タ は ら れ ま せん。MPC と リ ン ク で き る
の
と 数 も ら れ ます。簡単な
ル
イ ン きで
す。
設
「割
「 」 割 当
固 「 」
・
可
部品 種類
パネ
込 G 「」
法 利
デ
デ
込
欠
レ
低下
レ
ペ ジ 部品
レ 1回
4ビ
程度
込
設
等
バ
限
書込
G 「W」
G 「 値表 器」 「設 値表 器」
度
デ
ペ ジ
範
限
範 設
レ
低下
感
例2)は
ルか ら の読 みを Pの R コ マン ド で行っ てい ます。
みは例1 と 同 じ Pの
コ マン ド です。
こ の方 の 点は ワ ー ド ー タ が扱え る こ と です。 Pの 数
示
や
定
示
な ど の16 ッ ト
ー タ の読 みがで き ま す。 点は、 プ ロ グ ラ ム が複雑、 常にループす る 、 一 に多 く の ー タ を入力す る
と スポン スが
し ま す。 ス ポ ン ス については、 ー 単位で入力 囲を制 すれば良いで し う 。(同
一 ー の
のア ド ス は
のR E A D で読め る 囲に 定す る ) こ のサ ン プルでは1 ループで ワ ー ド
(6
ッ ト ) をREAD し てい ますが、 こ の
な ら スポン スの
はあ ま り じ ら れ ません。
GPの通信設定
: キ-互換
設 : 伝送速度9 bps デ
bit
式:
G
G 画
説明
」
ビ
ょ
4
通信プ ロ ト コ ル ア ス
通信 定
600 、 ー タ 長8 、 ス ト ッ プ ッ ト 1、
リ
無
通信方
RS-232C
メ モ リ リ ン ク プ ロ ト コ ル、 P操作、 P作 につい ては
タ ル の 取扱
を
さ い。
こ れはRS-232C通信を
す る ためのサ ン プルプ ロ グ ラ ム です。 実 に タ ッ チ
ル を接 す る には
M K-816 を用い ます。
※
※
「 B
例1)
'************
' GP-H70
' SAMPLE
'-----------' USE T-TAG
' & SYS Adr13
'============
'GPH70S10
' 980818
'************
CNFG# 4,0,2
FORK 1,*RS_RCV
*LP1
A=600
S=IN(0)
GOSUB *WRITE
WAIT IN(0)<>S
GOTO *LP1
*WRITE
PUT# &H1B,&H57
S0=A^&HF000
S0=S0/&H1000
GOSUB *WRITE1
S0=A^&H0F00
S0=S0/&H0100
GOSUB *WRITE1
S0=A^&HF0
S0=S0/&H10
GOSUB *WRITE1
ビ
パ ティ
デジ 社 各 説明書 ご覧下
際
パネ
続
"入力用のタスク
"書込みアドレス
"書込みデータ
"ESC W
"アドレス(hex表記)をアスキーコードで出力
3-23
S0=A^&H0F
GOSUB *WRITE1
S0=S^&HF000
S0=S0/&H1000
GOSUB *WRITE1
S0=S^&H0F00
S0=S0/&H0100
GOSUB *WRITE1
S0=S^&HF0
S0=S0/&H10
GOSUB *WRITE1
S0=S^&H0F
GOSUB *WRITE1
PUT# &H0D
RETURN
*WRITE1
IF S0>9 GOSUB *A_F
ELSE_GOSUB *0_9
PUT# S0
RETURN
*A_F
S0=&H37+S0
RETURN
*0_9
S0=&H30+S0
RETURN
'************
*RS_RCV
R=GET#(0)
PRINT R
OUT R,0
GOTO *RS_RCV
例2)
'************
' GP-H70
' SAMPLE
'-----------'USE GP
' READ/WRITE
' COMMAND
'============
'GPH70S20
' 980818
'************
S=0
CNFG# 4,0,2
*LP1
A=600
S=IN(0)
GOSUB *WRITE
'
FOR A=500 TO 503
GOSUB *READ
NEXT A
'
GOTO *LP1
*WRITE
PUT# &H1B,&H57
S0=A^&HF000
S0=S0/&H1000
GOSUB *WRITE1
S0=A^&H0F00
S0=S0/&H0100
GOSUB *WRITE1
S0=A^&HF0
S0=S0/&H10
GOSUB *WRITE1
"データをアスキーコードに変換して出力
"入力待ち
"READ,WRITEとも同一タスク
"書込みアドレス
"書込みデータ
"A=読込みアドレス
3-24
S0=A^&H0F
GOSUB *WRITE1
S0=S^&HF000
S0=S0/&H1000
GOSUB *WRITE1
S0=S^&H0F00
S0=S0/&H0100
GOSUB *WRITE1
S0=S^&HF0
S0=S0/&H10
GOSUB *WRITE1
S0=S^&H0F
GOSUB *WRITE1
PUT# &H0D
RETURN
*WRITE1
IF S0>9 GOSUB *A_F
ELSE_GOSUB *0_9
PUT# S0
RETURN
*A_F
S0=&H37+S0
RETURN
*0_9
S0=&H30+S0
RETURN
'************
*READ
PUT# &H1B,&H52
S0=A^&HF000
S0=S0/&H1000
GOSUB *READ1
S0=A^&H0F00
S0=S0/&H0100
GOSUB *READ1
S0=A^&HF0
S0=S0/&H10
GOSUB *READ1
S0=A^&H0F
GOSUB *READ1
PUT# &H30,&H30,&H30
PUTS# 1
PUT# &H0D
'
SKIP# &H41
INPUT# D
O=A-500
OUT D,O
RETURN
*READ1
IF S0>9 GOSUB *A_F
ELSE_GOSUB *0_9
PUT# S0
RETURN
"ESC R
"アドレス(hex表記)をアスキーコードで出力
"読込みデータ数=1
"Aまで読み飛ばし
"CRまで入力
3-25
MBK-816 の使用方法
前節 では タ ッ チパネ ル イ ン タ ー フェ ース をRS-232Cで実現 し ま し たが、複雑な用途 にはプ ロ グ ラ ムが 煩雑に
な り 保守 し に く い も のにな り ます。本格 的な タ ッ チ パネ ルの応用にはMBK-816が 適 し てい ます。こ こ では簡
単にMBK-816の 紹介 を し ます。 (詳 し く は当社Webサ イ ト 、 製品別マニ ュ アル を 参照 く だ さ い。)
MBK-816を用い る と 次の よ う な メ リ ッ ト があ り ます。
①RS-422接続 と な る ため、 信頼性が 向上 し 、 通信速度 も 速 く な る 。
② イ ン タ ー フェ ー ス コ マン ド がON/OFF/SW()/OUT/IN()な ど のI/O コ マ ン ド にな り 扱いやす く な る
注意 と し て次の事柄 があ り ます。
①MBK-816の 消費電流が大 き いので設計時に注意
②IF SW(5000)=1 THEN ~ と い う 記述が出来 ない。 A0=5000, IF SW(A0)=1 THEN ~ と す る 。
MBK-816
Butaface
タッチパネルディスプレイ
MIF-816
MPC-816
3-26
いろいろなトラブル
出力トランジスタの破損
MPCの ト ラ ブルで最 も 多いのが出力 ト ラ ン ジ ス タ の 破損 です。 こ れは通電 し た ま ま 配線 チ ェ ッ ク を し た り 、
配線チ ェ ッ ク し ない ま ま パ ワ ー オ ン し た場合に 発生 し てい ます。いずれに し て も 初歩的な ミ ス です。十分に
注意 し て 配線 は 確 かめて 下 さ い。 修 理は ト ラ ン ジ ス タ 交換 と な り ま す。
バッテリバックアップ関係のトラブル
テ ィ ウ 電池 バ
持
バ テ バ
設
変
MPC-816のRAMは、 リ
ム
で ッ ク ア ッ プ さ れてい ます。 こ れに よ り 定 さ れた 数、 ポ イ ン ト
ー タ が無通 中 も 保 さ れ ます。 し か し 、 ッ リ ッ ク ア ッ プは リ ー ト な保 方 のため相応の注
意が必要 と な り ます。
デ
電
組立時の注意
電
テ ィ ウ 電池
箔 包
デ
変わ
安 確
デ ケ
活
電池放電
持 法
鉄
又 静電気 放
組立
MPC-816は無通 中に も リ
ム
に よ り SRAMが か さ れてい ます。 こ の ためMPC-816を やアル ミ
の に直接置い た り アル ミ に んだ り す る と
やSRAMの ー タ が
さ れ ます。 、
の
を ける こ とによ っても ータが
っ て し ま い ます。
時には 記を考慮の上扱 う こ と と 、
後は
MPCINITの初 化を行 う こ と が 全で 実です。
板
電 受
期
組立
デ
前
破壊
パソコンと接続した時
装置に 組 み込 まれたMPC と 外部 の パソ コ ン を接 続す る と き にMPCのRS-232Cポー ト に 電気 的な シ ョ ッ ク が
発生 し ま す。特に、200V系の装置では こ の 度合が大 き く 甚だ し い場合は イ ン タ ー フェ ー ス のICを 壊 し て し ま
い ます。 こ れは、 パソ コ ン と 装置のアース を 共 通にす る こ と に よ り 回 避で き ますが、 現場ではなかなか難 し
い こ と です。MPC-816では、RS-232C イ ン タ ー フェ ース 回路 を フォ ト カ プ ラ で 絶縁 分離 し て 外乱 か ら 内部回
路 を保護 し てい ます。
プログラム上の問題
登載
Y
9 9年 来フ ィ
仕様 古
供
誤解
ソフ
バ
MPC-816に
さ れたTN FSCは1 8 以
ール ド で実用に さ れてい る
ト です。 こ のため、 グ
は相
ら さ れ てい ま すが、
が い ためにい く つか
上の
を ま い た り 用 が不
であ っ た
り す る 場合が あ り ま す。
当減
FORKについて
概念
発生
質
普
ね
パソ
法
明確
等
お目
FORKはマルチ タ ス ク を
さ せ る コ マ ン ド ですが、 ふだん 通のプ ロ グ ラ ム (
コ ン ) では
にか
かれ ません。 こ のため、 性 がつかみに く か っ た り 、 初 的な用 の り を く こ と が あ り ま す。 例えば、
次の例です。
前
B
味
始
歩
5 *LOOP
10 IF SW(1)=0 THEN *NEXT
20 FORK 1 *SUB
30 *NEXT
40 GOTO *LOOP
50 *SUB
60 ON 0
70 TIME 10
80 OFF 0
90 END
W
値
B
限 何度
法 誤
招
期待
記の例ではS (1)の が1になっ た時にプロ グ ラ ム *SU が動作する こ と を
し ている のですが、こ れでは
*SU プロ グ ラ ム が動作し ま せん。こ れはFORKが実行さ れた時点でプロ グ ラ ム *SU を 実行し める と いう 意
になる ためです。 こ の例では、 S (1)が1になっ ている り
も FORKが実行さ れその に*SU から 実
行し めま す。 つま り 、 プロ グ ラ ム が 行する に 起動かけら れてし ま いま す。 し く は次の にし ま す。
W
進
前 再
5 *LOOP
10 IF SW(1)=0 THEN *NEXT
12 FORK 1 *SUB
14 WAIT SW(1)=0
16 QUIT 1
30 *NEXT
40 GOTO *LOOP
3-27
B
正
度
始
B
様
再
反応が遅いと思われる場合
多 く の入力で制御を分
合が あ り ます。
類す る場合に、 IF文 と SW(n)関数を 組み合わ せて 何行 も 記述す る と 反応が遅 く な る 場
5 *LOOP
10 IF SW(1)=1 THEN *WORK1
20 IF SW(2)=1 THEN *WORK2
30 IF SW(3)=1 THEN *WORK3
(中略)
200 IF SW(20)=1 THEN *WORK20
210 GOTO *LOOP
n
関
こ の よ う な場合は、 IN( )で入力 数を
減 ら し た方が有利 です。
5 *LOOP
10 A=IN(0)~&HFE
20 IF A=2 THEN *WORK1
30 IF A=4 THEN *WORK2
40 IF A=8 THEN *WORK3
|
50 IF A=128 THEN *WORK7
60 A=IN(1)
|
HSW(n)を使用した場合の注意
節
げ Wn ノ ズ 策
Wn等
関
限 高速反
度
問題
組 込
関
度
先の で と り あ たS ( )は イ 対 のための2 読み機能が み まれてい ます。 こ れに対 し て2 読み
を し ないのがH S ( ) H の付 さ れた 数です。 こ のため こ の 数を使えばプ ロ グ ラ ム が ン グル タ ス ク で
ある り
応す る プ ロ グ ラ ム と な り ます。
は こ れ を マルチ タ ス ク で使用す る と 効 と な る こ と
です。
シ
逆 果
10
20
30
40
50
FORK 1 *PRG1
FORK 2 *PRG2
*LOOP
IF A=1 THEN *SUB1
IF B=1 THEN *SUB2
|
100 GOTO *LOOP
200 *PRG1
210 A=HSW(1)
220 GOTO *PRG1
230 *PRG2
240 B=HSW(2)
250 GOTO *PRG2
こ のプ ロ グ ラ ム では、 *PR G1 と *PRG2の中でHSW (1) と HSW (2)を使 う こ と に よ っ て 高速 を 期待 し てい ま すが
逆効果 と な り ます。 結果 と し てはSW(1), SW(2) と し た方が 総合的には高速 と な り ます。 こ れは、 マルチ タ ス
ク に お け る 時間 資源 の有効活用 と い う 難 し い 内容 にな り ます。と り あ え ず こ こ では、1つの タ ス ク でHSW ()等
を使用す る 場合にのみ高速応答 が 期待 で き る と い う こ と を御了解下 さ い。
エラー停止
Y
エ
発生
下
セ ジ を 表示 し ますが こ の文番号は
セ ジ 発生 し た ト ラ ブル を 表現 し てい
TN FSC は ラー
と 同時に イ ン タ プ リ タ を停止 し て文番号 と メ ッ ー
メ イ ン タ ス ク の文番号 と な っ てい ます。 こ れに対 し て ラ ー メ ッ ー は
ますのでマルチ タ ス ク では読み方に注意が必要 と な り ます。
エ
>LIST
10 FORK 1,*TASK2
20 FOR I=1 TO 10
30 ON I
40 TIME 5
50 OFF I
60 NEXTI
70 GOTO 20
80 *TASK2
90 PG 3
3-28
100 RMOV 1000,0
110 GOTO 100
>RUN
#40
!!Out of Range
>
前記の例ではあ たか も #40で ” Out ogf Range” と な っ て し ま っ た よ う に見え ま すが、本当の 問題は90のPG3で
発生 し てい ます。 マルチ タ ス ク で エ ラ ー停止 し た時は こ の後にMON コ マ ン ド を使っ て停止文番号を 参照 し
ます。
>MON
TASK1# 40 TASK2# 90
!!Out of Range
>
こ の よ う にMON コ マン ド で
各 タ ス ク の停止番号を 参照 し どれが メ ッ セー ジ に対応す る か を 調べ ます。
瞬間停電について
,
瞬 電検
隔 滅
赤
秒程度 隔 ゆ
4Vへ 過負荷
4V 著 低下
瞬 電 原因
赤
. 秒程度
発生
電 ほ
滅 確認 下
MPC-816K KFには 間停
出機能があ り ま す。DC2 が し く
し た場合、MPCの いLEDが0 1
の間 で点 し ま す。 MPC-816の いLEDの点 は、 プロ グ ラ ム のラ ン タ イ ム ラ ーでも
し ま す。 こ の
場合は一
の間 で っ く り と し た点 です。 間停 の
と し ては、 A C ラ イ ン の停 の かに、
DC2
の
が考え ら れま す。装置が間 的に停止する よ う な場合、 いLEDの点 を
し て さ い。
滅
歇
滅
エ
赤
言語の制限
Y
易言語です。 簡単な整数演算 と 制限 さ れた分岐制御文 し かあ り ません。 TNYFSCで
純にす る こ と に よ っ て 高速性を保っ てい ます。
MPC-816のTN FSCは簡
はイ ン タ プ リ タ の
を単
構造
変数の制限
MPC-816で使用で き る
286個の 数です。
計
変
A
B
C
|
Y
Z
A0
B0
C0
|
Y0
Z0
変数はA~Z ま でのアル フ ァ ベ ッ ト と 数字 を 組み合わ せた も のに 限 ら れてい ます。 合
A1
B1
C1
|
Y1
Z1
・・・ A8 A9
・・・ B8 B9
・・・ C8 C9
・・・ Y8 Y9
・・・ Z8 Z9
又演算は、 3byte長整数のみで表現で き る 範囲は±8388608です。 (Z版では±32767の2byte長整数です。)
配 列
配列要素 と し て用意 さ れてい る のは、 AR()です。 AR()はAR(0)~AR(31)の32個のみです。 又、 P版ではM(n)を
使用す る こ と がで き ます。AR()はSFTL、SFTR コ マン ド にて デー タ を ロ ー テ ー シ ョ ンす る こ と がで き ま す。点
デー タ と し てX()、 Y()、U()、 Z()の 4つが用意 さ れてお り 配列 と し て使用す る こ と がで き ます。要素は各1~300
です。 X(0)、 Y(0)、 U(0)、 Z(0)は特別な意 味 を 持 ち 配列 と し て使用す る こ と がで き ま せん。
コメント・文字列の限界
シ
ォ
続
字 内
限
字 内
*
英 及び ‘ ^ ’ ‘ ’ ペ
除
限
” B”
字列
様
許
及び
字 英 及び ‘ ^ ’ 除
頭
字
字列
MPC-816での コ メ ン ト 行は ン グル ク ー ト に く 12文 以 です。 さ れ る文 は 数
を く
記号に ら れ ます。 ラ ベルは11文 以 です。 ラ ベルの場合は (ア ス タ リ ス ク ) を に付 し ま す。 文 は
数
と (ス ース ) を く 記号に り ます。 コ メ ン ト
ラ ベル行は文
出力に使用で
き ます。 例えば、 RS-232CのCH1に対 し て A C と い う 文
を出力す る サブルーチン を作 る 場合は次の
に し ま す。
3-29
*ABC
GOSUB *ABC
|
PRINT# STR(-1)
RETURN
関数STR(-1)は1行前の文字列 ( ラ ベル も し く は コ メ ン ト ) を指定 し ます。複雑な コ メ ン ト を必要 と す る 時は、
ソ ー ス フ ァ イ ルにのみ可能ですが” (ダ ブル ク ォ ー ト ) に続 く 文字 がプ ロ グ ラ ム を読み込む時に切 り 捨 て ら
れ る ため コ メ ン ト と し て使用で き ま す。但 し こ の方法 は、 ソ ー ス フ ァ イ ルのみに有効なのでMPC上で見 る こ
と はで き ません し 、 パソ コ ン へ 上書 き 保 存す る と 消 え て し ま い ます。
制御文
X G
B G
ず
G B 5
G
飛び
又G
G B 混
G B 4byte
X
ネ
B及び
MPC-816の制御文はFOR~NE T、 OSU 、 OTO、 IF~THEN、 IF~ OSU の つです。 OSU
FOR
~NE Tでは ス タ ッ ク を用いた制御を行っ てい る ので、 ス ト の さ と 制御文中か ら の
出 し に注意 し て
さ い。 あ り がち な ト ラ ブルは次の場合でい れ も 止事 です。 、 OTO と OSU を 同 し て使用 し て
い る 場合 も 多 く あ り ますので注意 し て さ い。
制御用の ス タ ッ ク は タ ス ク と も 8
と な っ てい ます。こ れに対 し て OSU では、
FOR~NE Tでは
6
スタックを
し ます。 こ のため OSU のみでは11、 FOR~NE Tのみでは8ま での ス ト が さ れ ま
すが、
す る 場合は次の で 現 さ れ ます。
8
( OSU の さ )* (FOR/NE Tの さ )*6
下
X
下
各
4 byte
byte
消費
G B
混在
式 表
4 ≧ G B 深 4+
X 深
禁
ネ
項
深
X
許
【例1】
【例2】
10 ON A
10 FOR A=1 TO 10
20 OFF B
20 ON 4,5
30 GOSUB *WORK1
30 IF SW(5)=1 THEN 70
40 WAIT SW(1)=1
40 TIME 10
このようにIF文などでFOR
50 OFF 1
50 OFF 4,5
文からは飛び出せない。何度も
100 *WORK1
60 NEXT A
飛び出すうちにエラーとなる。
110 ON 1,2,3
70 ON 1,2
120 OFF 5,4
80 OFF 4,5
130 GOTO 40 RETURNで戻らずGOTOで戻すとエラーとなる
【例1の修正】
【例2の修正】
10 ON A
10 A=1
20 OFF B
15 *LOOP
30 GOSUB *WORK 1
20 ON 4,5
40 WAIT SW(1)=1
30 IF SW(5)=1 THEN 70
50 OFF 1
40 TIME 10
|
50 OFF 4,5
100 *WORK 1
60 A=A+1
110 ON 1,2,3
65 IF A<11 THEN *LOOP
120 OFF 5,4
70 ON 1,2
130 RETURN
80 OFF 4,5
又
_
IF文では、 ELSE を使用す る こ と がで き ま す。 ELSEはIF文の直後に置 き ます。 ELSE にはELSE THEN と
ELSE OSU が あ り ます。 (P のみ にはあ り ま せん)
_G B
版
【例3】
IF SW(0)=1 THEN *SUB1
ELSE_THEN *SUB2
*SUB1 作業1
*SUB2
作業2
Z
【例4】
IF SW(0)=1 GOSUB *SUB1
ELSE_GOSUB *SUB2
*SUB1
作業1
RETURN
*SUB2
作業2
RETURN
3-30
記述の制限
一行に対する制限
残念 なが ら MPC-816では次のIF文が記述で き ません。
a. IF X(1)=100000 THEN 200
し か し 、 次のIF文は
受付 ら れ ます。
b. IF X(1)=10000 THEN 200
Y 内部 問題
お 限界
byte 内 収
long
セ ジ
byte 内
b.
規則
b.
!! oo
こ れは、 TN FSCの
の
なのですがプ ロ グ ラ ム文は メ モ リ 上で16
以 と な っ てい ま す。 こ の
はIF文に いて
と な っ てい ます。
では100000が3
と ら れ る のに対 し て の10000は2
です。
では16
以 に ま る のに対 し て
では16
を え て し ま い ます。 こ う し た場合 イ ン タ プ リ タ は T
と い う メ ッ ー を出力 し ます。 PRINT文では次の記述がで き 、 最後の70000が さ れて し ま い ます。
a.
a.
byte 超
byte
ず
byte
略
10 PRINT SQR(50000)、60000、70000
LIST
10 PRINT SQR(50000)、60000
>
引き数に対する制限
各 コ マ ン ド の引 き数は3つま で と な っ てい ま す。 例えば、 ON、 OFFコ マ ン ド では次の記述が可能です。
ON 1
ON 1,2
OFF 1,2,3
4 目の入力を し て も 無視 さ れ ます。 又引 き 数は変数、 定数 も し く は関数です。 式は記述で
プ ロ グ ラ ム中に つ
き ません。
ON A
OUT IN(0),0
OUT &HAA,0
変数
関数
定数
>ON IN(IN(IN(0))
???
エラーとなる
関数の関数 も 処理す る こ と はで き ま せん。
演算に対する制限
演算は2項演算のみです。 ま た、 式の長 さ は16文字以内 です。 次の 様 な記述をす る と 問題 をお こ し ます。
>10 A1=C(1000)^&HFF
>LIST
10 A1=C(1000)^&HOOFF
>LIST
10 A1=C(1000)^&HOOOF
>
(15文字)
カーソルアップリタンする(17文字)
FFがFとなってしまう
こ れは、 最初の入力の時15文字 以内 であ っ たのが リ ス ト を と る と ヘキ サ デ ー タ が 4文字固 定表 現のため17文
字 と な っ て し ま い ま す。 こ こ で カ ー ソ ル を上に移動す る と 式が17文字 と な り 最後の1文字 が略 さ れ意味が 変
わ っ て し ま い ます。 こ れは、 プ ロ グ ラ ム を セーブす る と 同様の問題 と な り ますので注意 し て 下 さ い。 ヘキ サ
表現はで き る だけ 変数に置 き 換 え て おいた方が 安全です。
H0=&HOOFF
H1=&HFFOO
A1=C(1000)^H0
A2=C(1000)^H1
演算は+,-,*,/,%,^ ,|,x の8種です。+,-,*,/は電卓 と 同 じ く 加減乗除 を意味 し ま す。他は次の通 り です。
3-31
%
^
|
x
余 り を 算出す る (パー セ ン ト )
論 理 積 (ハ ッ ト )
論理和 (パ イ プ)
排他的論理和 (ス モール エ ッ ク ス )
通信の制限
ザ
MPC-816では、 CH1 と い う ユー ー用のRS-232C を
ん。 ま た、 600
ル ー ー ト ではプ ロ グ ラ ム の
9 bpsフ ボ レ
文字列の扱い
字列
外
関
備 え てい ま すが文字列処理はあ ま り 得意ではあ り ませ
組み方に よ っ て 問題 を起 こ す こ と が あ り ます。
値デ
限
INPUT#、 PRINT#は文
を扱 う こ と がで き ま せん。 MPC と のや り と り は数
ー タ に っ た方が見通 し が
良 く な り ます。 ただ、 例 的に次の な応用が あ り ます。
STR() 数の使用
PRINT#、 PUTS#ではSTR() 数を使用す る こ と がで き ます。 こ れに よ り 、 コ メ ン ト 文に かれた文
を出
力す る こ と がで き ま す。
FIND#、 SKIP#、 ET#()
ら れて く る通信 ー タ に文
が ま れて く る こ と は ま ま あ り ま すが、 M P C は こ れを無視す る こ と がで
き ます。 ま た、 ET#()に よ り 1文 を ア ス ー コ ー ド と し て扱 う こ と がで き ます。
関
G
デ
G
送
様
書
字列
字列 含
字
キ
通信時のトラブル
10 GETN# A
20 A1=GET#(0)
30 SKIP# &H000D
前記のプ ロ グ ラ ム は一見 う ま く 動作 し そ う なのですが、 シ ス テ ム的な問題に よ り 20のGET#(0)で正確に文字
が読み取れない こ と があ り ます。 こ れはG ETN#が 内部 的に 割 り 込み禁 止を 伴 う 演算 を し てい る ために 発生
し ます。 つま り 、 文字列 を 受 取 り なが ら GETN#は処理を 開始 し ますが、 割 り 込 み禁 止 と す る ため こ の間文 字
を 受 け取 ら な く な っ て し ま い ます。 こ れ を さ け る には、 次のプ ロ グ ラ ム と す る のが完全です。 関数RS(1)に
よ っ て文 字列 が 貯 ま る の を 待 ち、 バ ッ フ ァ に 貯 ま っ た文字列 を処理す る と こ う し た 問題 は 発生 し ません。
問題
5 WAIT RS(1)>10
10 GETN# A
20 A1=GET#(0)
30 SKIP# &H000D
様 発生
留
下
文字がある程度貯まるのを待つ
ネ
この
は、 INPUT#で も 同 に
し ます。 INPUT#を使用す る 場合は、 CR、 LFで タ ー ミ ー ト さ れてか ら
ただちに次の文
を け取 る プ ロ ト コ ルが ない ために
と な る こ と はあ ま り あ り ませんが、 同 の
を かかえ てい る こ と に 意 し て さ い。
問題
字列 受
少
問題
3-32
様