MPC-68 Q&A |
関連記事= 1999年以前のFAQ
目次
最新情報は MPC-68 BBS
136 MPC-684 文字列の中からの数値の取り出し
135 MPC-684 ローカル変数の数
134 MPC-684 I/Oエラーに関する表示
133 MPC-68x 変数をBCDでパラレル出力するには
132 MPG-314 複数の軸の停止確認
131 MPG-314 でパレタイズ
130 MPC-684 ランタイムエラーの確認方法
129 MPG-314 フォトカプラ アノードコモンタイプのドライバとの接続
128 MPG-314 補間コマンドはいずれかの軸のリミットが入っていると動かない
127 MPG-314 ソフトリミット設定/解除について
126 MPC-684 「WAIT 条件式 TMOUT 時間」はWS0()、WS1()に影響しないか?
125 MPC-684 で時計をつかいたい。SYSCLKの最大カウントは?
124 MPG-314 出力状態を読む方法は?
123 MPC-684 IF文のマルチステートメント
122 MPG-314 エンコーダ入力のフォトカプラの応答性
121 MPC-684 括弧が不整合です
120 MPC-684 IF -- THEN ELSE -- END_IF
119 MPG-314 リミットセンサーについて
118 MPC-684 ローカル変数の制限
117 MPG-3202 直線補間はできるか
116 MPG-314 パルス発生が終わらない
115 MPC-684 サブルーチンの引き数に式を与えるとPGアドレスが変る
114 MPC-684 システムの省コスト、省スペース
113 MPG-314 で STOP X_A IN3_OFF とした場合は減速停止?即停止?
112 MPG-314 1枚のMPGで同時に2組の円弧補間ができるか
111 MPG-314 MOVTによる連続移動のサンプル
110 MBK-816,MBK-SH,MBK-RS デジタル社タッチパネルのページが換わらない
109 MPC-684 バッテリ交換時の注意点、寿命について
108 MPC-684 RS-232Cで受信したHEX表現文字列を数値に変換する方法
107 MPG-405、MPG-68K パルスセンサー停止
106 MBK-RSの結線
105 MPG-314 MOVT(円弧補間)コマンドについての補足
104 MPC-684 TASK(n)関数で返される値
103 MPC-684 RS-232C受信で a$=INP$#0(1) とするとハングする?
102 MPC-684でMPG-405のACCEL設定を確認するときの注意
101 MPG-314のタスク割り付けについて
100 MBK-RSとMBK-68/SHの違い
099 MPG-314 原点センサ入力の読み方
098 MPC-684 FTMW32E(英語版FTMW)でプログラムが読み込めない
097 MPC-684 DC24V消費電流実測値
096 MPC-684 文字列配列AR$()のファイル化
095 MPG-314 差動入力非対応のモータドライバの接続方法
094 MPC-684 RUNしたとき裏タスクはどうなる
093 MPC-LNK2 DSWの設定
092 MBK-SH タッチパネルを2台付けたい
091 MPG-314 HOMEコマンド後のACCELパラメータの確認はできるか
090 MBK-SH MBK-68から置き換えるときのソフト的な変更点
089 MPC-684 セマフォ関数RSVを論理結合できるか
088 MPG-314 2相エンコーダのカウントが正常にできない
087 MPC-68K,684 入力したプログラムの後ろが消える
086 MPC-68K,684 プログラムのマルチステートメントのコロンが無いとどうなる
085 MPC-68K,684 RS-232Cのバッファのサイズはどのくらいですか?
084 MPG-314 XYサーボモータ、UステップモータのACCEL設定・移動
083 MPG-314 INPOSが有効にならない
082 MPG-314 軸指定予約定数について
081 MPG-314 WARPの途中停止
080 MBK-68 対応タッチパネルについて
079 MPC-684 浮動小数点について
078 MPC-68 SELECT_CASE文で複数の条件を同一処理するには
077 MPC-68シリーズ UL認定について
076 MPG-314 原点復帰で残パルスクリアの例
075 MPG-314 変数の文字数
074 MPG-314 インポジション信号幅はどのくらい?
073 MPG-314 パルス発生後の完了確認は必要か
072 MPG-314 入力モニタの表示
071 MPG-314 原点復帰後 自動的にサーボドライバの溜りパルスをクリアできるか
070 MPC-684 改版データの取得
069 MPC-684 プログラム保存後にLISTコマンドを実行したら全行表示してしまう
068 MPG-314 カウンタ入力X(-1)〜Z(-1)は何バイト
067 MPG-314 ACCELコマンドのlong,min値を同じ値にしたらエラー
066 HOUT 2(X_A;NOP,1)とSTOP X_A IN0_OFFの違い
065 MPG-314のINPOSを有効にしたらプログラムはその行で停止するのか
064 MPG-405に電源を入れたらFL1から煙が出た
063 MPC-684にMBK-68またはMPS-324からDC5V給電する場合
062 初期MPC-684 INPUT文で多量のキャラクタを受信するとポイントデータが壊れる
061 MPC-68K/684 点データが変更できない
060 MBK-68 7セグメントの表示内容
059 MOP-096とMIP-096のコネクタの違い
058 デジタルGP-2400イーサネットの実験
057 新旧MPCとMOP-048の適合について
056 MPC-684 P_SVコマンドで保存される点データ数
055 MPC-684のSV_Mをロングワードで使用したとき、飛ばされた点配列の内容は?
054 MPC-684の今後
053 MPCの初期化ってなに?
052 プログラムを作成するとき文番号は付けなければならないのか?
051 MPC-684の変数は電源を切ったらどうなる?
050 MPG-314 各軸-OUT4、OUT5の出力方法
049 外部機器の入力とMOP出力の接続
048 潟fジタル GP2400 CFカード〜MPC-684点配列間のデータ転送
047 MPG−314 ALM入力について
046 MPG−314 RRのビット位置
045 MPG−314で互換コマンドのSTOPは使えるか
044 MPG−314のリミット検出
043 MPG−314の原点復帰例
042 MPC−684 挙動不審
041 MPG−314パルス出力実測 2つ
040 大きなプログラムをLOADしたらFTMWがフリーズ
039 四捨五入
038 「余分な引き数、或はパルス発生条件文に異常があります」エラー
037 RAMモード時にFIX(FROMへの書き込み)ができない
036 RSE()にMRS−402のチャンネルを指定すると戻り値は255
035 プログラムLOAD時のエラー行検索
034 MBK−68でシステムローダーが動作しない
033 S−LINKのバンクナンバーはどうなってるの?
032 [MPC-684]GOSUB、IF〜END_IFなどの入れ子の数とCASEの数
031 MPGにもSRAMバックアップのバッテリがあるが..
030 PC−LNKの起動不具合
029 変数<->BCD 変換
028 MPG-3202とオリエンタルモータ CFK,PMCシリーズのパルス信号の接続
027 MPG-68KからMPG-405に交換したらPULSEコマンドが異常?
026 684でDC5Vを外部から供給する場合
025 WAIT A=1 などとするとタスク効率が悪くなる
024 MPC-684 コプロを必要とするコマンド
023 ACCELコマンド実行時間について
022 MPG-405の拡張ACCELコマンド
021 文字列変数の文字数
020 MPC−68Kシリーズ 消費電流
019 MBK−68 T1のピン配
018 HOMEコマンドを実行するとタスクスワップが遅くなる?
017 RUN後に"間"が空く
016 MPC-68K プログラム・ポイント・配列変数のサイズ
015 MBKでGPの2ワード(32ビット)データを読み込む方法
014 MPG-68K アドレス設定
013 MPG-3202 ティーチングサンプルプログラム
012 システムローダーが動かない
011 LOAD時間比較
010 クロックスピード変更コマンド
009 プログラムポートのボーレート変更
008 MPC-68K〜デジタル社GP 通信サンプル
007 電源を切ると変数が化ける?
006 MOP-048 prgで操作していないのに勝手に出力
005 文字列処理でprg停止
004 ポイントデータ破壊
003 MPC-68K RUNすると Illegal instructionエラー
002 ACCELコマンドでハングアップ
001 SELECT_CASE文でCASE_ELSEを省略しないで下さい
●136 MPC-684 文字列の中からの数値の取り出し 030820 ◆例1 GET_VALで配列に取り込む 固定フォーマットのデータならGET_VALコマンドを使で簡単に文字列から数値を取り出せます。 10 DIM ABC(10) 20 T1$="T1T1,+0320.000,+0240.000,+2330.000,-0020.000," 30 T2$="+0000033.000" 40 A$=T1$+T2$ 50 PRINT A$ 60 GET_VAL A$ ABC(1) 70 FOR I=0 TO 9 80 PRINT I ABC(I) 90 NEXT I #RUN T1T1,+0320.000,+0240.000,+2330.000,-0020.000,+0000033.000 0 0 1 1 2 1 3 320000 4 240000 5 2330000 6 -20000 7 33000 8 0 9 0 ※このデータは57文字で、文字列変数に一度に格納できないので分けて取り込んでいます(20,30,40行目) ◆例2 STRCPYで切り出す 固定長データならSTRCPYコマンドを使って切り出すことも可能です。 下記は少数点以下を無視した場合のサンプルです。 (実際、この文字列なら上記のGET_VALの方が簡単です) #PR A$ T1T1,+0320.000,+0240.000,+2330.000,-0020.000,+0000033.000 /* A$の中身 #STRCPY A$ X1$ 5 5 /* A$の5文字目から5文字をX1$にコピー #PR X1$ /* 確認 +0320 #X1=VAL(X1$) /* 数値に変換 #PR X1 320 #STRCPY A$ Y2$ 35 5 /* A$の35文字目から5文字をY2$にコピー #PR Y2$ /* 確認 -0020 #Y2=VAL(Y2$) /* 数値に変換 #PR Y2 -20
●135 MPC-684 ローカル変数の数 030807 【Q】 ローカル変数の数は? 制限数を超えるとどうなるか? 【A】 ローカル変数は26個です。それを超えるとエラーになります。 下記はプログラム読み込み(LOAD)時の例です。 FORK 1 *TASK1 GOSUB *SUB1 END *TASK1 GOSUB *SUB1 END '---------- *SUB1 VARI01!=1 VARI02!=2 VARI03!=3 VARI04!=4 VARI05!=5 VARI06!=6 VARI07!=7 VARI08!=8 VARI09!=9 VARI10!=10 VARI11!=11 VARI12!=12 VARI13!=13 VARI14!=14 VARI15!=15 VARI16!=16 VARI17!=17 VARI18!=18 VARI19!=19 VARI20!=20 VARI21!=21 VARI22!=22 VARI23!=23 VARI24!=24 VARI25!=25 VARI26!=26 VARI27!=27 RETURN ↑このプログラムをFTMWで読み込む (Line:35) 34 VARI27!=27 ・・・・・ローカル変数が多すぎます see also #118
●134 MPC-684 I/Oエラーに関する表示 030729 サポート外のI/Oにアクセスしたり、存在しないMPC-SLINKに出力しようとすると エラーメッセージが出てプログラムが停止します。下記はその例です。 これはコマンド・関数のパラメータに変数を使ったときに起こり易いエラーです。 エラー停止時に表示される文番号でエラー内容・変数の値を確認できます。 (強調文字がエラーメッセージです) @メインタスクでエラーになった場合 ・OUTコマンド 10 ' 20 FOR I=0 TO 2000 30 OUT 0 I 40 NEXT I #RUN #30 !! Out of IO AREA ← 文番号30で停止したことを表します #PR I ← 変数の値を確認 98 # ・IN関数 10 ' 20 FOR I=0 TO 2100 30 PRINT IN(I) 40 NEXT I #RUN 0 (略) 0 #30 ・・・・・異常な演算です ← 文番号30で停止したことを表します #PR I ← 変数の値を確認 97 # A子タスクでエラーになった場合 ・OUTコマンド 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=0 TO 2000 50 OUT 0 I 60 NEXT I #RUN タスク停止 *1 [50]!! Out of IO AREA ←タスク1が文番号50で停止 #PR I 98 ・ONコマンド 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=0 TO 2100 50 ON I 60 NEXT I #RUN # タスク停止 *1 [50]・・・・・サポートI/Oの範囲を超えました PR I 776 # ・IN関数 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=0 TO 2100 50 PRINT IN(I) 60 NEXT I #RUN #0 0 (中略) 0 タスク停止 *1 [50]・・・・・異常な演算です PR I 97 ・SW関数 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=0 TO 2100 50 PRINT SW(I) 60 NEXT I #RUN #0 0 (中略) 0 タスク停止 *1 [50]・・・・・異常な演算です *0 [20] *1 停止 #PR I 776 BMPC-SLINKのエリアをアクセスした場合 ・MPC-SLINKのI/Oエリアは2000からです。 MPC-SLINKを実装せずに(または異なるアドレス設定をして)このエリアに出力した場合。 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=2000 TO 2100 50 OUT 0 I ← OUTではエラーになりますが、ONではエラーになりません。 60 NEXT I #RUN タスク停止 *1 [50]SLINKに正常に書き込めません。(存在しないか、入力ポートへの書込) #PRINT I 2000 ・IN、SW関数ではエラーにはなりません 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=2000 TO 2100 50 PRINT IN(I) ←IN関数 60 NEXT I #RUN #255 255 255 (略) 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=2000 TO 2100 50 PRINT SW(I) ←SW関数 60 NEXT I #RUN #1 1 1 (略) C更に上のエリア ・10000からはMPC-LNKのエリアですが、ここより上はボードが有っても無くても エラーにはなりません。 10 FORK 1 *TASK1 20 END 30 *TASK1 40 FOR I=10000 TO 11000 50 OUT 0 I 60 NEXT I 70 PRINT "completed" RUN #completed ※このように、コマンド・関数・エリアによってメッセージやエラーとしての扱いが異なります。
●133 MPC-68x 変数をBCDでパラレル出力するには 030728 【A】 例えば 4321 という10進数を 出力のバンク1(上位2桁)とバンク0(下位2桁)へ パラレルで出したい。 【Q】 @10進数で表される各桁を取り出します。 AOUTコマンドで出力します。その際、上位ニブルは16倍して4ビットシフトします。 10 sorce=4321 /* 出力したい数値 20 fig1=sorce%10 /* 1の桁取り出し 30 fig10=(sorce%100)/10 /* 10の桁取り出し 40 fig100=(sorce%1000)/100 /* 100の桁取り出し 50 fig1000=sorce/1000 /* 1000の桁取り出し 70 PRINT fig1000 fig100 fig10 fig1 /* 確認表示 80 OUT fig1000*16+fig100 1 /* 1000と100桁をバンク1へ出力 90 OUT fig10*16+fig1 0 /* 100と1桁をバンク0へ出力 RUN 4 3 2 1 /* 各変数に各桁の数値が入っています 上のプログラムを実行すると、出力の状態は次のようになります。 出力ポート bit 状態 - 00 = on - | 01 = off | &B0001=1 | 02 = off | bank | 03 = off - 0 | 04 = off - | 05 = on | &B0010=2 | 06 = off | - 07 = off - - 08 = on - | 09 = on | &B0011=3 | 10 = off | bank | 11 = off - 1 | 12 = off - | 13 = off | &B0100=4 | 14 = on | - 15 = off -
●132 MPG-314 複数の軸の停止確認 030520 複数の軸の全停止を確認するには、RR()関数に軸指定定数をビット演算の論理和("|"記号) で与えます。下記@ X_A、U_Aなどは予約定数で、それを論理和して与えることでRR()はそれらの軸を同時に 検査します。 A、Bでは正常に動作しません。 10 PG &H400 20 ACCEL X_A 5000 30 ACCEL U_A 1000 40 FEED ALL_A 0 50 STPS 0 0 0 0 60 RMVS X_A 5000 /* ┓X,U同時にスタートするが停止はズレる。 70 RMVS U_A 10000 /* ┛ 80 WAIT RR(X_A|U_A)==0 /* @ 検査する軸を 論理和 で与える。X,U両方の停止待ち 90 PRINT P(0) /* 座標表示 #RUN 5000 0 10000 0 ------- 80 WAIT RR(X_A&U_A)==0 /* A 80 WAIT RR(X_A AND U_A)==0 /* B
●131 MPG-314 でパレタイズ 030515 【Q】 MPG-314で、XY直行ロボットと単軸2本のシステムの場合 ・パレットの定義は、4軸のポイント全ての成分が必要か。 ・X軸U軸、Y軸Z軸の組み合わせでのパレットは可能か。 ・XY直行でパレットを使用した場合。他の単軸2本は問題無く動作させることはできるか? 【A】 PALETは3つの点データと縦横の分割数から全部の升目のXYUZのデータを演算しますが、 MOVLなどの移動コマンドに対しては、その中で必要な成分だけを与えることができます。 下記はP(1)〜P(3)がパレットの座標データ、P(4)をX,Yだけを取り出すための一時的なデ ータとして使っています。 10 PG &H400 20 SETP 1 100 100 0 0 /* P(1)データ作成。ティーチングでもok 30 SETP 2 500 100 0 0 /* P(2)データ作成。ティーチングでもok 40 SETP 3 100 500 0 0 /* P(3)データ作成。ティーチングでもok 50 PALET1 P(1) P(2) P(3) 5 5 /* PALET宣言。25個の升目の座標を演算してPL1(1)〜PL1(25)に入れます 60 FOR N=1 TO 25 /* ↓パレット上の各升目に移動します 70 SETP 4 PL1(N) /* 各升目の座標をP(4)にコピー 80 MOVL X(4) Y(4) VOID VOID /* P(4)のX、Y成分だけを使用。UZは他で使用可能。 90 WAIT RR(X_A|Y_A)==0 /* パルス発生終了待ち 100 PRINT N P(0) /* 現在点表示 110 NEXT N #run 1 100 100 0 0 2 200 100 0 0 3 300 100 0 0 4 400 100 0 0 5 500 100 0 0 6 100 200 0 0 7 200 200 0 0 8 300 200 0 0 9 400 200 0 0 10 500 200 0 0 11 100 300 0 0 12 200 300 0 0 13 300 300 0 0 14 400 300 0 0 15 500 300 0 0 16 100 400 0 0 17 200 400 0 0 18 300 400 0 0 19 400 400 0 0 20 500 400 0 0 21 100 500 0 0 22 200 500 0 0 23 300 500 0 0 24 400 500 0 0 25 500 500 0 0 上記のサンプルでY軸とU軸を入れ替えてみました。 10 PG &H400 20 SETP 1 100 0 100 0 /* XとU軸で点データを作成 30 SETP 2 500 0 100 0 40 SETP 3 100 0 500 0 50 PALET1 P(1) P(2) P(3) 5 5 60 FOR N=1 TO 25 70 SETP 4 PL1(N) 80 MOVL X(4) VOID U(4) VOID /* XとU軸移動 90 WAIT RR(X_A|U_A)==0 100 PRINT N P(0) 110 NEXT N #run 1 100 0 100 0 2 200 0 100 0 3 300 0 100 0 4 400 0 100 0 5 500 0 100 0 6 100 0 200 0 7 200 0 200 0 8 300 0 200 0 9 400 0 200 0 10 500 0 200 0 11 100 0 300 0 12 200 0 300 0 13 300 0 300 0 14 400 0 300 0 15 500 0 300 0 16 100 0 400 0 17 200 0 400 0 18 300 0 400 0 19 400 0 400 0 20 500 0 400 0 21 100 0 500 0 22 200 0 500 0 23 300 0 500 0 24 400 0 500 0 25 500 0 500 0
●130 MPC-684 ランタイムエラーの確認方法 030424 【Q】 自動実行中にMPC-684の赤LEDが点滅した。これは何? 【A】 赤LED点滅はRUNタイムエラーです。 エラー内容の確認方法は @一番手っ取り早いのは FTMW を接続し実行てみることです。 何かエラーメッセージが出ると思います。 A自動運転中の装置に対しては、FTMWを接続して停止後、Ctrl+Mで各タスクの停止行を 確認して、プログラムを追いかける..です。 BLOGコマンドでログを確認する 次のプログラムを自動実行すると 40 でエラーになり 赤LEDが点滅します。 その状態で FTMW を接続してプログラム停止後 ダイレクトコマンドで LOG を実行します。 自動実行中にプログラムポートから出力されたメッセージを確認できます。 10 FORK 1 *TASK1 20 DO : LOOP 30 *TASK1 40 ON 99999 50 END #LOG ← PRG停止後 LOG[Enter] RUN<AUTO> タスク停止 *1 [40]・・・・・サポートI/Oの範囲を超えました ←自動実行中のエラー MPC-684f ADVFSC(r) REV-3.84m BASIC like + multi tasking Created by ACCEL Crp.~2003 ※タスク0で発生したエラーはlogできません。 また、タスク0がend終了していてもlogできません。
●129 MPG-314 フォトカプラ アノードコモンタイプのドライバとの接続 030418 【Q】 パルスI/Fがフォトカプラ入力でアノード側がコモンになっているドライバーを接続する には? 【A】 MPG-314のSP3をショートするとパルスI/Fの内部DC5VがJ5(電源コネクタ)2番ピンに出力されます。 これをアノード側に接続し、カソード側はJ3(パルス出力)の(-)側に接続します。 これにより負論理で引き込みます。
●128 MPG-314 補間コマンドはいずれかの軸のリミットが入っていると動かない 030414 「補間ドライブにおいても、ドライブする各軸のハードリミット、ソフトリミットは作動します。 補間ドライブ中、いずれの軸のリミットがアクティブになっても、補間ドライブは停止します」 (MCX314 取扱説明書 より) 例えば、MOVLのXY直線補間動作で、X軸の移動方向のリミットが入っているとX軸Y軸両方 動きません。MOVSではX軸は動きませんがY軸は動きます。
●127 MPG-314 ソフトリミット設定/解除について 030414 【A】 ソフトリミットを有効にする SLMT_ON はあるのに SLMT_OFF は無いのか? 解除はどうする? 【Q】 SLMT_OFF は有りません。 入力設定時に INSET_314 ALL_A SLMT_ON|LMT_ON|MD_2PLS とすればソフトリミットは有効 INSET_314 ALL_A LMT_ON|MD_2PLS のように設定しなければ(または、設定し直せば)無効になります。
●126 MPC-684 「WAIT 条件式 TMOUT 時間」はWS0()、WS1()に影響しないか? 030312 【Q】 REV-3.84j で WAIT 条件式 TMOUT 時間 というように、WAIT文にタイムアウト機能が付加されたが、従来のタイムアウト付き関数 WS0()、WS1()のTMOUTの値には影響はないか? TMOUT 10 WAIT A==10 TMOUT 100:GOTO *ERR IF WS0(0)==1THEN GOTO *ERR END_IF END *ERR END のような場合、先頭のTMOUTの設定が10 -> 100に変わってしまうなんてないですよね。 【A】 変りません 実験prg 10 A=0 20 TMOUT 2 30 SYSCLK=0 40 WAIT A==10 TMOUT 500 : GOTO *NEXT 50 *NEXT 60 PRINT "1 " SYSCLK 70 SYSCLK=0 80 IF WS1(0)==1 THEN 90 GOTO *TMOUT 100 END_IF 110 END 120 *TMOUT 130 PRINT "2 " SYSCLK #run 1 100 /* 100*5mSec=500mSec 2 400 上記の40のTMOUT設定値を変える 40 WAIT A==10 TMOUT 100 : GOTO *NEXT #run 1 20 /* 20*5mSec=100mSec 2 400 /*WS1()のタイムアウト時間=変化無し
●125 MPC-684 で時計をつかいたい。SYSCLKの最大カウントは? 030129 【Q】 MPC-68Kから684に変更するのですが、68KではカレンダICを搭載して使用していました。 684にはカレンダ機能は搭載していないのでしょうか。 【A】 MPC-684はカレンダICを搭載していません。 現状で時計を使うにはデジタル社タッチパネルGPを接続するのが最も簡単な方法です。 684ではtime$、date$でGPの時計・カレンダを取得できます。 【Q】 SYSCLKはいくつまでカウントできるのでしょうか。 【A】 MPC-68K/684は4バイト長ですからSYSCLKのカウントも最大&H7FFFFFFF(2147483647)です。 1カウントは5msecですから約124日分です。
●124 MPG-314 出力状態を読む方法は? 021224 MPG-314の出力(axis-SON、OPn等)の状態を読み込むことはできません。 これはPG-IC MCX314の仕様的な問題でライトレジスタ(WRn)を読むことができないためです。 どうしても自分が出力した状態を知りたいのであれば、プログラムで記憶(管理)させてく ださい。
●123 MPC-684 IF文のマルチステートメント 021004 【Q】 次のIFで repeat%2 が0(余りが0)のときは PRINT 0 が実行されるが、それ以外のときに PRINT 1 が実行されない。 IF repeat%2=0 THEN : PRINT 0 ELSE PRINT 1 : END_IF 【A】 原因はELSEの後に':'がないことです。下記の様に記述してください。 IF repeat%2=0 THEN : PRINT 0 ELSE : PRINT 1 : END_IF /* ELSEの後ろにコロン追加 または IF repeat%2=0 THEN /* マルチステートメントをやめる PRINT 0 ELSE PRINT 1 END_IF
●122 MPG-314 エンコーダ入力のフォトカプラの応答性 020917 【Q】 MPG-314のエンコーダ入力で質問です。 取り説の回路図を見るとエンコーダ入力はフォトカプラになっていますが、読みとり可能 な周波数はどのくらいでしょうか?出力と同様に4Mpps程度可能でしょうか? 【A】 TLP2630というフォトカプラを使用してますが、メーカデータシートで10Mbdということに なっています。周辺が最良の状態ででの性能です。4Mbdは配線に注意すればフォトカプラ は通ると想定されます。 またMCX314カウント入力性能は、4てい倍相当で、tCYC*2+20nsです。 tCYC=1/16Mhzなので、145n---->約7Mhzです。 つまり一てい倍パルスとしては1.75Mhzということになります。
●121 MPC-684 括弧が不整合です 020729 【Q】 10 WAIT (IN(-1~Lng) & &H78563412)==0 ・・・・・括弧が不整合です これはどういう意味ですか??? 【A】 これは式中にスペースが有るのでエラーです。 MPCのエラーメッセージには、もともといい加減なところ(というか エラー内容を厳密に判定できない)があり、'括弧が不整合です'と いうのも変なメッセージですが、こんなものだと思ってください。 上の式からスペースを取れば文法的にはokです。 10 WAIT (IN(-1~Lng)&&H78563412)==0
●120 MPC-684 IF -- THEN ELSE -- END_IF 020729 【Q】 下記(a)のプログラムは正常動作しますが、(b)のように変更したところ、 「対応する終端が有りません。」と表示され、SW1以外何を押してもSW2になってしまいま す。(c)のようにしてみても同じです。どうしたら良いのでしょう? (a) DO swbuf!=P_IN(0) LOOP WHILE swbuf!==0 SELECT_CASE swbuf! CASE &H01 : PRINT "SW1 On" CASE &H02 : PRINT "SW2 On" CASE &H04 : PRINT "SW3 On" CASE &H08 : PRINT "SW4 On" CASE &H10 : PRINT "SW5 On" CASE &H20 : PRINT "SW6 On" CASE &H40 : PRINT "SW7 On" CASE &H80 : PRINT "SW8 On" CASE_ELSE : PRINT "?" END_SELECT (b) DO swbuf1!=P_IN(0) LOOP WHILE swbuf1!==0 IF (swbuf1!&&H01)==1 THEN :PRINT "SW1 On" ELSE IF (swbuf1!&&H02)==1 THEN :PRINT "SW2 On" ELSE IF (swbuf1!&&H03)==1 THEN :PRINT "SW3 On" ELSE IF (swbuf1!&&H04)==1 THEN :PRINT "SW4 On" ELSE PRINT "?:sw_in" PRX swbuf1! : WAIT P_IN(0)==0 END_IF (c) DO swbuf1!=P_IN(0) LOOP WHILE swbuf1!==0 IF (swbuf1!&&H01)==1 THEN :PRINT "SW1 On" ELSE IF (swbuf1!&&H02)==1 THEN :PRINT "SW2 On" :END_IF ELSE IF (swbuf1!&&H03)==1 THEN :PRINT "SW3 On" :END_IF ELSE IF (swbuf1!&&H04)==1 THEN :PRINT "SW4 On" :END_IF ELSE PRINT "?:sw_in" PRX swbuf1! : WAIT P_IN(0)==0 END_IF 【A】 IF --- THEN : ---- : ELSE : ----- : END_IF でセットです。 一対のIF 〜 END_IF 中にELSEを複数使うことはできません。 下記@はSW(26)がonしても PRINT "26"は実行されません。 Aは動作します。 @ 5 DO 10 IF SW(24)==1 THEN 20 PRINT "24" 30 ELSE 40 IF SW(25)==1 THEN 50 PRINT "25" 60 END_IF 70 ELSE 80 IF SW(26)==1 THEN 90 PRINT "26" 100 END_IF 110 END_IF 120 LOOP A 5 DO 10 IF SW(24)==1 THEN 20 PRINT "24" 30 ELSE 40 IF SW(25)==1 THEN 50 PRINT "25" 70 ELSE 80 IF SW(26)==1 THEN 90 PRINT "26" 100 END_IF 105 END_IF 110 END_IF 120 LOOP
●119 MPG-314 リミットセンサーについて 020705 【 Q 】 MPG-314のリミットセンサーについて質問します。 J2に接続するX-LMTM〜Z-LMTPですが、プログラムにはどのように記述するのでしょうか? またマニュアルには、常時有効とありますが、リミットセンサーで停止した場合の復帰は、 どうするのでしょうか? 【 A 】 リミットの検出設定は INSET_314 コマンドで行います。 INSET_314 X_A LMT_ON /*リミットon(NO接点)で検出 INSET_314 X_A LMT_OFF /*リミットoff(NC接点)で検出 入力を無効にすることはできません。 LMTPはCW方法のオーバーランリミット信号です。CW方向のドライブパルス出力中にアク ティブになると停止します。LMTMはその逆です。 リミットが入って停止しても、反対方向のパルスは出ます。例えば、LMTPが入って停止し てもCCW方向には動きます。
●118 MPC-684 ローカル変数の制限 020705 【 Q 】 ローカル変数の使用上の制限はなんでしょうか。 確か26個までとか、制限が有ったような気がしますが。制限以上使うとボーソーすると聞 きました。一つのタスクで1個使うと1個と数えるのでしょうか。同じ変数名のものならば 32タスクで使っても1つと数えるのでしょうか。 【 A 】 たとえば、I!というのを一個使うと、タスク0〜31まで、I!を使うことができ、それぞれ 別の値を持ちます。つまりタスク1用とかタスク2用とか区別はされません。 !のついたラベルの数が26個に制限されています。ラベルはグローバルで、値だけローカル 変数です。 現在では26個以上使おうとするとプログラムロード時にはエラーになると思います。
●117 MPG-3202 直線補間はできるか 020513 【 Q 】 MPG-3202を使用して「2軸直線補間」ができるか? もし、不可ならMPG-314を使用すればよいか? 動作時のMAXパルスレートは20000pps。 MPG-314はエンコーダカウントは出来るか? 【 A 】 MPG-3202は2軸のパルス発生ができますが補間機能ありません。 MPG-314のパルス出力はMax4Mppsで、直線補間、エンコード機能があります。 エンコード機能にはオプションのフォトカプラ(TLP2630)が必要です。お客様にて軸数分 購入して取り付けてください。 ●116 MPG-314 パルス発生が終わらない 020513 【 Q 】 MPC-684 & MPG-314を使用中に変な動作が発生した。 座標 (0,0)から 座標(26200,450)への移動で、プログラム1は WAIT RR(ALL_A)=0 で 停止してしまう。その時の座標は(25733,442)。 プログラム2のようにFEEDを変更すると終了する。 プログラム1 ***************************** FEED X_A 200 FEED Y_A 200 MOVL 26200 450 VOID VOID WAIT RR(ALL_A)=0 /* ここで停止している(25733,442) ***************************** プログラム2 ***************************** FEED X_A 199 /* 変更 FEED Y_A 199 /* 変更 MOVL 26200 450 VOID VOID WAIT RR(ALL_A)=0 /* 正常通り処理する ***************************** 【 A 】 最低速度を遅くしておくと、条件によってはパルス発生ICの減速の最後が1ppsや0ppsとか になって、最後の1パルスを出すのに恐ろしく時間がかかったり、あるいは出しきれずに ハングするということが発生します。 パルス発生IC 「MCX-314」のハード的なバグというかクセです。 なるべく回避するように、最低速(自起動周波数)に0はセットできないようにはしてあり ますが、ACCELの設定をご確認ください。 ACCELの条件で自起動を10pps程度にしておけば回避できると思います。 もし、パラメータを省略しているのであれば、省略せずに記述してみて下さい。 ACCEL 1000 1000 0 /* 0はNG ACCEL 1000 1000 10 /* 最低速度を大きく
●115 MPC-684 サブルーチンの引き数に式を与えるとPGアドレスが変る 020510 【 Q 】 下記のプログラムのように、サブルーチンの引数に演算を含めると、PGアドレスが変化 します。(このプログラムの場合はTASK2のPGアドレスが変化します。) 引数に演算を含めるのは、よくないことなのでしょうか。 ちなみに、S_MBKや、GETFなどの命令は、 S_MBK A+100 100 GETF A+100 のように、演算も含めて使用していますが、これは問題ないのでしょうか。 <<プログラム実行前>> #PG 指定されているPGアドレス-&H420 TASK 0 for PG &h420 TASK 1 for PG &h420 (略) <<プログラム実行後>> PG 指定されているPGアドレス-&H420 TASK 0 for PG &h420 TASK 1 for PG &h000 (略) <<プログラム>> #LIST 10 FORK 2 *TASK2 20 FORK 1 *TASK1 30 END 40 *TASK1 50 A=100 60 TIME 1000 70 GOSUB *TEST A+100 /*サブルーチンの引き数が式 80 _RET_VAL A 90 PRINT A 100 END 110 *TEST 120 _VAR I 130 I=I*10 140 RETURN I 150 *TASK2 160 PG 2 170 END 【 A 】 GOSUB引数に演算がはいった場合の対応が整合しておりませんでしたので、修正版をベータ サイトにアップしました。REV-3.82xです。 なお、この問題は、gosub引数が後で追加された特殊な処理のために発生したもので、その 他コマンドの一般的な引数演算につきましては、長年の実績がありますので、安心してご 使用ください。
●114 MPC-684 システムの省コスト、省スペース 020425 ■I/Oボードについて MOP-096は96点出力ボード、MIP-096は96点入力ボードです。それぞれ、MOP-048、MIP-048 の2倍の点数ですが、価格は2倍ではありません。 ※ただし、MOP-096、MIP-096には全ビット別のモニタLEDは付いていません。 ■パルスボードについて MPG-68K、MPG-405で単軸非同期制御を行う場合、軸数分のボードが必要でした。 MPG-314は4軸の単軸非同期制御が可能です。 例えば、MPG-68Kで4軸の非同期制御をする場合、MPG-68Kが4枚必要ですが、MPG-314なら 1枚で可能です。3軸直線補間+1軸単独制御なども可能で、ハードウェアのリソースを無駄 なく活用できます。 ■ラックについて 従来は6スロットを超える構成の場合、複数のラックを連結キットでつないでいました。 現在は3スロット、6スロットに加え13スロットラックがあります。上記の96点I/Oボード とMPG-314を使えば、大抵のシステムは13スロットラック1つで収まるようです。
●113 MPG-314 で STOP X_A IN3_OFF とした場合は減速停止?即停止? 020422 STOPにMPGの入力ポートを指定した場合の停止は ・加減速ドライブであれば減速停止 ・定速ドライブであれば即停止 となります。 下記の@で、RMVSは加減速ドライブですから、減速停止です。AのPLSCは定速ドライブで すから、即停止です。 MPG-314は、入力ポートを指定したハード停止とソフト停止のSTP_I、STP_Dとは異なるレ ジスタを使用し STOP X_A IN3_OFF|STP_I というような条件の結合はできません。 (INn_ON,INn_OFFとSTP_I,STP_Dとは異なる機能です) @ 10 PG &H400 20 ACCEL 5000 30 STOP X_A IN3_OFF 40 RMVS X_A 50000 /*加減速ドライブ 50 WAIT RR(X_A)==0 60 STOP X_A 0 A 10 PG &H400 20 ACCEL 5000 30 STOP X_A IN3_OFF 40 PLSC X_A 1000 /*低速ドライブ 50 WAIT RR(X_A)==0 60 STOP X_A 0
●112 MPG-314 1枚のMPGで同時に2組の円弧補間ができるか 020411 【 Q 】 1枚のMPG-314で同時に2組の円弧補間ができるか。 【 A 】 MPG-314には4軸あり、円弧補間には2軸を使用します。軸の組み合わせは任意ですが、 同時に2組の円弧補間はできません。排他制御なら可能です。 例えば XY組 と UZ組 の2組を同時に円弧補間することはできません。どちらか片方ずつ なら動かせます。
●111 MPG-314 MOVTによる連続移動のサンプル 020314 連続補間コマンドMOVTの先読みとは? 移動中のコマンド実行は? mpg-314のmovtによる連続移動のサンプル
●110 MBK-816,MBK-SH,MBK-RS デジタル社タッチパネルのページが換わらない 020221 MPC-816 Q&A 087 に同記事
●109 MPC-684 バッテリ交換時の注意点、寿命について 020128 020130 【 Q 】 MPC-684に使われているCR2032は保証期間が5年となっている。 交換する際の注意点は?(バックアップを取った方が良いなど。) 【 A 】 電池交換の原則は以下のとおりです。 FTMを接続して、パソコンにデータのバックアップをとってください。 (プログラムセーブ、点データセーブします。) 電池交換後、FTMからMPCINIT(初期化)を実行します。そのあと再ロードです。 初期化は、ボードをハンドリングする時にRAMデータが化けることがあるためです。 MPC-684ではプログラムはフラッシュROM部に固定されておりバックアップデータである 点データ、配列変数、MBK変数に依存しないプログラムを搭載しないかぎり、バッテリの 有無にかかわりなく動作します。 バックアップに依存するプログラムを製作した場合は、 点データや配列のチェックサムをプログラム中に記述する。 MBK変数の場合はMBK(-1)により状態を確認する。 等の配慮を御願いします。 電池の寿命については、 220mAhに対して無通電で2.5μAの消費が出荷基準です。 220mAh/2.5μA=88000h->3666days->10year です。稼動中は電流を消費しません。 5年としているは、各電池メーカが5年以上の長寿命(すくなくとも5年という表現です)と しているところから表記しています。 【 Q 】 稼動中は電流消費しないということだが、消費ゼロと考えてよいのか? 【 A 】 通電中、電池はダイオードスィッチに(1s1588)より外部回路と遮断されています。 【 Q 】 2.5μAで通電し続けた場合でも電池寿命は約10年となるが、物理的には大丈夫なのか? 液漏れが発生してしまうことなど考えられるか? 【 A 】 液漏れなどの化学的安定性については電池メーカの補償範囲なのでそちらの資料を参照し ていただけるのが良いと思います。長期安定性については、各メーカとも曖昧な記述しか ありません。Panaの公開している資料では3μA連続放電で220mAhとなっており、ここから すくなくとも5年以上の寿命があると推察されます。東芝は少なくとも5年とカタログにう たってあります。 出荷時に搭載しているのはPanasonic CR2032Pです。電子手帳などを対象にした一般に市 販されている汎用品です。一般的な使用状況からも液漏れは無いかと思います。 以前の製品には実装の都合上タブ端子を取り付けた電池を用いており、メーカの加工ミス (クラック発生)による液漏れがありました。その経緯から汎用の電池に切り替えました。
●108 MPC-684 RS-232Cで受信したHEX表現文字列を数値に変換する方法 020123 【 Q 】 @外部機器からRS-232CでHEX表現の文字列データが送られてくる。 例えば 10進255 は文字列"FF"(コードは&H46&H46)。 それを数値に変換するには? Aまた、その逆は? 【 A 】 @文字列として受信し、"&H"と結合してVAL関数で数値に変換します。 AHEX$関数でHEX表現の文字列に変換します。 CNFG#0 "9600b8pns1XON" INPUT#0 a$ b$="&H"+a$ v=VAL(b$) /* @ HEX文字列から数値へ PRINT "&H"+a$ "=" v PRINT#0 HEX$(v)+"\n" /* A 数値からHEX文字列へ 実行結果 RUN ← CH0へ"FF"(&H46&H46)と入力 &HFF=255 → CH0から"FF"+crlf と出力される RUN ← CH0へ"123"(&H31&H32&H33)と入力 &H123=291 → CH0から"123"+crlf と出力される
●107 MPG-405、MPG-68K パルスセンサー停止 020109 【 Q 】 センサがオンしたらパルスを止めたい。RMOVで1発出してセンサ確認というやり方では遅い。 他に方法は? 【 A 】 MOVE,RMOVコマンドにはUNTILで停止条件を与えることが出来ます。 ただし、複数の条件を論理結合することはできません。 SW(192)==1 OR SW(193)==1 などは不可。 また、減速停止のみです。 PG &HE0 ACCEL 1000 CLRPOS MOVE 10000 0 0 UNTIL SW(192)==1 /* ここの'='は必ず2つ入力して下さい。 SELECT_CASE BSY(-1) CASE 1 : PRINT "正常停止" /* 10000パルス出し切ったら 1 CASE 256 : PRINT "減速停止" /* センサー停止したら 256 CASE_ELSE : PRINT "??" BSY(-1) END_SELECT (確認 MPC-68K | MPC-684 with MPG-68K | MPG-405)
●106 MBK-RSの結線 011221 MPC-684 RS-232C CH0 でGPダイレクトアクセス(MBK-RS)するときの結線です。 MPC-684 CH0(J2コネクタ) デジタルGP (シリアル25P) FG 1 1 FG TXD 2 ─────────── 3 RD RXD 3 ─────────── 2 SD RTS 4 ─┐ ┌─ 4 RS CTS 5 ─┘ └─ 5 CS DTR 10 6 NC SG 7 ─────────── 7 SG 20 ER 伝送速度 9600bps データ長 8 ストップビット 1 パリティ 無 制御方式 ER制御 (XON・XOFF無し) 通信方式 RS232C
●105 MPG-314 MOVT(円弧補間)コマンドについての補足 011220 PDFドキュメント
●104 MPC-684 TASK(n)関数で返される値 011219 END終了すると -1 が返って来る。 [例1] TIMEでディレイ中は残タイマー値が帰る [例2] SW待ちの場合は0または5が返る(5はSW()関数の2度読みタイマ) [例3] だから、タスク実行中の判定はTASK(n)が0より小さいか否か。(負ならタスクは停止中) [例1] 10 FORK 1 *task1 20 WAIT TASK(1)<0 /* "<>"ではない 30 PRINT TASK(1) 40 END 50 *task1 60 TIME 5000 70 END #run -1 /* 5秒後 [例2] 10 FORK 1 *task1 15 DO 30 PRINT TASK(1) 35 LOOP 40 END 50 *task1 60 TIME 5000 70 END #run 0 4995 /* 残タイマ値 4990 4980 (以下略) [例3] 10 FORK 1 *task1 20 END 30 *task1 40 WAIT SW(0)==1 50 END #run #pr task(1) 5 #pr task(1) 0
●103 MPC-684 RS-232C受信で a$=INP$#0(1) とするとハングする? 011219 【 Q 】 RS-232C受信で a$=INP$#0(1) とするとハングするのですが、外部からCh0に送信してバッ ファに文字をいれてやると、ハングから回復するのでしょうか。 何かを待っているような感じでハングアップしているみたいなので... 【 A 】 INP$#0(n)はバッファにn文字溜まるまで待ちます。 [例1]では 30 で待ち状態となり、1キャラクタ受信すると次の行の進みます。 停止しないようにするには、[例2]のようにLOF(n)でバッファのキャラクタの有無の調 べてから読み込みます。 [例1] 10 DO 20 CNFG#0 "19200b8pns1NONE" 30 a$=INP$#0(1) 40 PRINT a$ 50 LOOP [例2] 10 CNFG#0 "19200b8pns1NONE" 20 i=0 30 DO 40 IF LOF(0)>0 THEN : GOSUB *RS_GET : PRINT a$ : END_IF 50 i=i+1 : OUT i 0 : TIME 10 60 LOOP 70 *RS_GET 80 a$=INP$#0(1) 90 RETURN
●102 MPC-684でMPG-405のACCEL設定を確認するときの注意 011218 下記のようにMPG-405を軸毎にACCEL設定した後、ACCEL<ent>で確認すると4行表示します が、これらは各軸の内容を表すものではありません。 4行表示されるのはMPG-314対応のためで、MPG-405の場合は4行とも最後の設定が表れます。 (ACCELリクエストに対してMPG-450は1行分しかレスポンスが無いためです) # PG &HE0 # ACCEL 0 &H41 # ACCEL 1000 # ACCEL 0 &H42 # ACCEL 2000 # ACCEL 0 &H43 # ACCEL 4000 #accel 最大スピード 16000 L or PPS 800 最小スピード 800 /* ↑ 最大スピード 16000 L or PPS 800 最小スピード 800 /* |4行全部 最後に設定された値 最大スピード 16000 L or PPS 800 最小スピード 800 /* | 最大スピード 16000 L or PPS 800 最小スピード 800 /* ↓ (確認 MPC-684 REV-3.82k)
●101 MPG-314のタスク割り付けについて 011217 【 Q 】 MPC-816とMPG-303ではタスク0がPG1,2,3選択、タスク1〜3がPG1、タスク4〜7がPG2と決 まっているがMPG-314ではどうなのか? また、1枚のMPG-314の各軸を非同期制御するにはどのようにタスクに割り付けるのか? 【 A 】 MPC-684ではMPC-816のような固定的な割り付けはありません。 PG &H400 1 PG &H410 2 第一引き数=MPG-314アドレス 第二引き数=タスク番号 というようにプログラムで任意のタスクに割り付けます。 1枚のMPG-314を複数のタスク使うには PG &H400 1 PG &H400 2 と割り付け、タスク1で MOVS X_A 1000 /* X軸絶対座標移動 タスク2で MOVS Y_A 1000 /* Y軸絶対座標移動 という具合になります。 '********************************************************* 'MPG-314超シンプル単軸制御サンプル ' 011228 ' IOボードは IOP-048を使って入力出力を1対1接続 '********************************************************* FORK 1 *X_AXIS FORK 2 *Y_AXIS FORK 3 *U_AXIS FORK 4 *Z_AXIS FORK 5 *IOP048 END *X_AXIS PG &H400 ACCEL X_A 100 STPS X_A 0 DO MOVS X_A 10000 WAIT RR(X_A)==0 : '停止待ち TIME 1000 MOVS X_A 0 WAIT RR(X_A)==0 TIME 1000 LOOP *Y_AXIS PG &H400 ACCEL Y_A 1000 STPS Y_A 0 DO MOVS Y_A 10000 WAIT RR(Y_A)==0 TIME 1000 MOVS Y_A 0 WAIT RR(Y_A)==0 TIME 1000 LOOP *U_AXIS PG &H400 ACCEL U_A 10000 STPS U_A 0 DO MOVS U_A 10000 WAIT RR(U_A)==0 TIME 1000 MOVS U_A 0 WAIT RR(U_A)==0 TIME 1000 LOOP *Z_AXIS PG &H400 ACCEL Z_A 100000 STPS Z_A 0 DO MOVS Z_A 10000 WAIT RR(Z_A)==0 TIME 1000 MOVS Z_A 0 WAIT RR(Z_A)==0 TIME 1000 LOOP *IOP048 DO FOR IO=0 TO 255 OUT IO 0 OUT IO 1 OUT IO 2 TIME 10 IF IN(3)<>IO OR IN(4)<>IO OR IN(5)<>IO THEN PRINT "IO ERROR" END END_IF NEXT IO LOOP
●100 MBK-RSとMBK-68/SHの違い 011217 【 Q 】 MPC-684のRS-232C CH0でデジタル社タッチパネル「GPシリーズ」とダイレクト接続が可能 というのはMBK-68と同じ機能と考えてよいのか? また、タッチパネルからティーチングや定数の設定は可能か? 【 A 】 MPC-684のCH0のタッチパネル通信機能を「MBK-RS」と呼んでいます。 タッチパネル制御に関しては、通信スピードを除きMBK-68/SHと同じです。 通信スピードはMBK-68/SHは38400bpsですがMBK-RSは9600bpsです。またMBK-RSはMPC-684の CPUに負担がかかりますので、プログラムによっては全体のパフォーマンスに影響がでる かもしれません。(今のところそのような事例報告はありません) それと、MBK-RS実行時はタスク31が使えなくなります。 ちなみに、MBK-68は製造を中止しました。今後は上位機種のMBK-SHになります。 主な違いは、データメモリが 68=全800ワードに対してSH=全8000ワードと大きいこと、 オムロン、三菱シーケンサと上位リンクできることです。 MBK-RSのコマンド・関数はMBK-SHとほとんど同じです。MBK-SHの資料はホームページに 「製品別マニュアル」として掲載していますのでご参照ください。 タッチパネルにはFTMのティーチング(TEACH)や変数設定の標準機能はありません。 お客様で、画面・プログラムを作って頂いています。 ------------------------------------------------------------- <<MBK-SH>> <<MBK-RS>> I/F RS-422 RS-232 通信スピート 38400bps 9600bps データエリア 7900word 7900word I/Oエリア 100word 100word その他 シーケンサと上位リンク可 RS-232ポート ch0占有 PCとプロトコル通信可 タスク31が使えない タスクモニタアドレス可変 タスクモニタアドレス固定 専用CPU メインCPUに負担? 1スロット占有 内部DC5V 300mA消費
●099 MPG-314 原点センサ入力の読み方 011214 MPG-314のXS1〜ZS2(コネクタJ4 11〜18番ピン)はMPG-68KのようにHPTで読めます。 しかしその戻り値にはXS1〜ZS2以外の状態も含まれていますので、必要に応じてマスクし てください。 XS1(11番ピン)がONの時 #PRX HPT(0) 0001 XS1(11番ピン)とX-INPOS(1番ピン)がONの時 #PRX HPT(0) 00010001 ◆プログラム IF HPT(0)&&H1=0 THEN /* XS1を調べる RMOV 50000 0 0 /* CW退避移動 END_IF ◆HPT戻り値各桁の意味 #PRX HPT(0) 00000000 表示データ | | H5----0 桁 下位<-------->上位ビット H0: XS1,XS2,YS1,YS2 (コネクタJ4) H1: US1,US2,ZS1,ZS2 (J4) H2: X-IN2 〜 Z-IN2(差動入力) (J1) H3: X-IN3 〜 Z-IN3 (J2) H4: X-INPOS 〜Z-INPOS (J4) H5: X-ALM 〜 Z-ALM (J2) ◆I/Oチェックは INCHK_314 コマンドで行えます。 #INCHK_314 X_S1 ON Y_S1 __ Z_S1 __ U_S1 __ X_S2 __ Y_S2 __ Z_S2 __ U_S2 __ XIN2 __ YIN2 __ ZIN2 __ UIN2 __ XIN3 __ YIN3 __ ZIN3 __ UIN3 __ X-INP ON Y-INP __ Z-INP __ U-INP __ X-ALM __ Y-ALM __ Z-ALM __ U-ALM __ XLMT+ __ XLMT- __ YLMT+ __ YLMT- __ ZLMT+ __ ZLMT- __ ULMT+ __ ULMT- __ #
●098 MPC-684 FTMW32E(英語版FTMW)でプログラムが読み込めない 011213 【 Q 】 FTMW32EでMPC-684にプログラムを読み込む時と「There is a Japanese(Kanji,Kana)--」 警告メッセージが出る。 【 A 】 プログラム(コメント含む)に日本語は有りませんか? ネイティブWindowsで日本語キャラクタは表示できませんしPCがフリーズすることがあった ので、英語版ではLOAD時に日本語キャラクタに対して警告を出します。 対策は..プログラムから日本語を削除してください。
●097 MPC-684 DC24V消費電流実測値 011210 MPC-684ファミリのDC24V消費電流の実測値です。電源容量としては、これらにI/O機器の 消費電流を加え、突入電流を加味してください。 MPC-684 単体静止120mA MIP-048、MOP-048、MPG-405、MPG-314挿入時170mA MIP-048 全入力OFF 0mA 全入力ON 150mA MOP-048 全出力OFF 0mA 全出力ON 90mA MPG-405 静止 70mA 全入力ON 100mA 全入力ON+パルス(3軸)出力時110mA MPG-314 静止 30mA 全入力ON 50mA 全入力ON+パルス(3軸)出力時60mA RACK-68K 0mA
●096 MPC-684 文字列配列AR$()のファイル化 011204 【 Q 】 文字列配列AR$()をファイル保存・読込みする方法は? 【 A 】 AR$は下図のようにポイントデータと同じメモリ領域のうしろを使っています。 ポイント DIM_AR$ n m |X,Y,U,Z| <-P(13000) AR$(0) | | | n文字*mバイト | | ↓ (nはデリミタNULを含む) | | AR$(m-1) | | | | |X,Y,U,Z| <-P(1) ( ※1ポイントデータが1AR$に対応しているわけではありません。) ですから点データ操作でAR$もファイル化できます。 しかし点データ全部を読み書きすると、とても時間がかかりますからAR$領域の先頭を調 べて保存範囲を限定します。 AR$の先頭はDIM_AR$<ent>で調べられます。 DIM_AR$ 35 100 なら #DIM_AR$<ent> Length=35 Count =100 P(MAX)=12781 でAR$の領域はP(12782)〜P(13000)と判ります。 FTMWまたはPointEditorで点データの保存範囲を設定してファイル保存してください。 FTMWの点データ読み込み時は必ずNEWPします。AR$領域以外の点データをそのままで読み 込むにはPointEditorで「NEWPする」をアンチェックし実行してください。 MPC-684のバージョンはREV-3.82i以上をお使いください。
●095 MPG-314 差動入力非対応のモータドライバの接続方法 011126 【Q】 MPG-314でNSKのメガスラストモータドライバを駆動したら、パルス入力数が不安定 【A】 アプリケーションノート参照 ・確認ドライバ NSK ESY-Y2020A23-21 (メガスラストモータドライバ) 潟nーモニックドライブシステムズ HA-650 シリーズ
●094 MPC-684 RUNしたとき裏タスクはどうなる 011126 【 Q 】 裏で走っているタスクがあるときRUNすると、そのタスクはどうなる? 【 A 】 RUNすると裏タスクは全停止します。 プログラムを変更、LOADしても止まります。 SAVEでは止まりません。(FTMW32 Ver6.31から停止)
●093 MPC-LNK2 DSWの設定 011122 複数のMPC-684システムをMPC-LNKでネットワークする場合のDSWの設定です。 DSW1はシステム内のアドレスを設定します。1ラックにMPC-LNKが1枚ならDSW1は1です。 DSW3ネットワーク上のMPC-LNKのアドレスです。 システム#1 システム#2 システム#3 --------- --------- --------- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | --------- --------- --------- 684 LNK 684 LNK 684 LNK | || | ------------ ------------ DSW1=1 DSW1=1 DSW1=1 DSW3=1 DSW3=2 DSW3=3
●092 MBK-SH タッチパネルを2台付けたい 011116 【 Q 】 装置の前後に同じタッチパネル(デジタル社GP)を1台ずつ付けたい。方法は? 【 A 】 MBK-SHは2つのポート(コネクタJ2,J3)でMEWNET-FPプロトコル準拠の通信ができます。 どちらもRS-422で接続可能、ピン配も同じですから、2台のタッチパネルを全く同じにつ なぐことができます。 ただし、J2は通信速度が初期値で9600bpsですからプログラムで "S_MBK 1 8065"として 38400bpsにして下さい。
●091 MPG-314 HOMEコマンド後のACCELパラメータの確認はできるか 011105 【 Q 】 HOMEコマンド等を実行後、ACCELパラメータ破壊を確認しようとしたのですが壊されてい ないようです。どのようにしたら破壊を再現できますか。 【 A 】 HOMEはMCX314のスピード設定のレジスタを操作するので、ACCELで設定した内容が変って しまいます。しかしそれを見ることはできません。 #PG &H400 #ACCEL 3000 #FEED X_A 0 #HOME X_A IN0_ON -200 /* XS1(NEAR ORG)がOFFになるまでCCW FEED=200 上記のようにコマンドを実行した後ACCEL(パラメータ無し)で再確認しても値は変って いません。 #accel Max. speed 3000 L or PPS 150 Min. speed 150 Max. speed 3000 L or PPS 150 Min. speed 150 Max. speed 3000 L or PPS 150 Min. speed 150 Max. speed 3000 L or PPS 150 Min. speed 150 実験方法としては上記のHOMEの実行前後で #RMVS X_A 1000 /* X軸CW1000パルス のスピードの変化を見て下さい。HOME後は遅くなります。 PRSET_ACCEL X_A /* ACCELパラメータ復帰、停止条件クリア FEED X_A 0 /* FEED再設定 でHOME前のスピードに戻ります。PRSET_ACCELの代わりにACCELを再実行しても同じです。
●090 MBK-SH MBK-68から置き換えるときのソフト的な変更点 011102 データエリアがMBK−68(以下68)の0〜701に対して、MBK−SH(以下S H)は0〜7899に拡張されています。 またI/Oエリアは、68の70000〜79715に対して、SHは70000〜79 915に拡張されています。 68からSHに置き換えるとき、これらのデータエリアとI/Oエリアだけを使用してい るプログラムなら変更は不要です。 しかし、下表の68アドレスにアクセスしている場合にはSHアドレスへの書き換えが必 要です。 データエリア -------------------------------------- | 68アドレス | 内容 | SHアドレス | -------------------------------------- | 853 | MBKバージョン | 8053 | | 860 | CH0 BCCエラーカウント | 8060 | | 861 | CH1 BCCエラーカウント | 8061 | | 862 | CH0 コマンドエラーカウント | 8062 | | 863 | CH1 コマンドエラーカウント | 8063 | | 864 | タスクモニタアドレス設定 | 8064 | -------------------------------------- 例えば、68で S_MBK 100 864 は SHでは S_MBK 100 8064 、 A==MBK(853) は A==MBK(8053) となります。 デジタルGPとの接続(ピン配、通信設定など)は相違ありません。
●089 MPC-684 セマフォ関数RSVを論理結合できるか 011101 【 Q 】 セマフォ関数を論理結合して使用するとどうなるか? また、リセットでRLSとOFFするのとは違うのか? 【 A 】 --実験プログラム-- PG &H400 PG &H400 1 PG &H400 2 ACCEL X_A 1000 STPS X_A 0 OFF -256 FORK 1,*TASK1 FORK 2,*TASK2 END *TASK1 DO *TASK1_LOOP IF RSV(-256)==0 AND SW(-1)==0 THEN /*@_1 GOTO *TASK1_NEXT /*@_2 ELSE /*@_3 GOTO *TASK1_LOOP /*@_4 END_IF /*@_5 *TASK1_NEXT /* WAIT RSV(-256)==0 AND SW(-1)=0 /*A /* WAIT RSV(-256)==0 MOVS X_A 1000 WAIT RR(X_A)=0 PR "TASK1" dummy=RLS(-256) /*リセット == OFF -256 TIME 10 LOOP *TASK2 DO WAIT RSV(-256)==0 MOVS X_A 0 WAIT RR(X_A)=0 PR "TASK2" dummy=RLS(-256) /*リセット TIME 10 LOOP ----------------- RSVを論理結合することはできます。 ランタイムエラーやシンタックスエラーにはなりません。 しかし... @またはAが有効の時 -1がOFFの場合はこのプログラムは期待通りに*TASK1→*TASK2→*TASK1→と動きます。 しかし、-1がONになると @_1で引っかかってタスク1はループ状態にはいります。 このときRSV()で-256はセット(1になる)されるのでタスク2も動かなくなります。 その後OFF -1としても-256はONのまま保持される(リセットされない)のでやはりこの プログラムは動きません。 というように訳のわかり難い事態にはまりそうです。 値を返すだけのSW()などとは違い、RSV()は動作を含む関数なので論理結合には注意して ください。 また、 セマフォのリセット関数RLS()はOFFと同等です(RLS(-256) は OFF -256と同じ)。 プログラム上RSVに対する操作を明示的に表現するために用意された関数です。
●088 MPG-314 2相エンコーダのカウントが正常にできない 011015 【 Q 】 2相エンコーダのカウントが正常にできない。 【 A 】 MPG-314のカウンタは起動時にはUp/Down入力モードになっています。 2相パルス入力モードにするにはINSET_314を実行して下さい。 例) #PG &h400 #INSET_314 X_A LMT_ON /*カウンタを2相パルス入力にするためINSET_314を実行する #PR X(-1) /*カウンタ読み込み カウンタはデフォルトで"4てい倍"となっています。 (2倍,1倍)率を与えるにはINSET_314の設定値に&H400(2倍)、&H800(1倍)をORします。 #INSET_314 X_A &H800|INP_OFF /*1倍で読み取り ※Up/Down入力モードが使えるのは搭載ICが「MCX314A」以降です。 Up/Down入力モードは分周されません。
●087 MPC-68K,684 入力したプログラムの後ろが消える 011011 【 Q 】 10 IF a==0 AND b==0 AND c==0 AND d==0 THEN と書いてもLISTを見ると 10 IF a==0 AND b==0 AND c==0 AND d==0 というように、最後のTHENが消えてしまう。なぜ? 【 A 】 MPC-68K,684の制約として1文の(スペースで区切られた)文字列の数は8個までとなってい ます。 上の入力したプログラムには9個の文字列が有るので最後のTHENが消えてしまいます。 10 IF a==0 AND b==0 AND c==0 AND d==0 THEN 1 2 3 4 5 6 7 8 9
●086 MPC-68K,684 プログラムのマルチステートメントのコロンが無いとどうなる 011011 【オリジン】 10 WAIT SW(192)==1 : GOSUB *sub : PRINT "After" /* コロン有り 20 PRINT "END" 30 END 40 *sub 50 PRINT "SUB" 60 RETURN #run SUB After END /* 期待通り 【MPC-68Kの場合】 10 WAIT SW(192)==1 : GOSUB *sub PRINT "After" /* PRINT文の前のコロン無し 20 PRINT "END" 30 END 40 *sub 50 PRINT "SUB" 60 RETURN #run SUB END /* サブルーチンの後のPRINTが無い 【MPC-684の場合】 10 WAIT SW(192)==1 : GOSUB *sub PRINT "After" /* PRINT文の前のコロン無し 20 PRINT "END" 30 END 40 *sub 50 PRINT "SUB" 60 RETURN #run #10 ・・・・・引き数が適合しません /* RUN TIME エラーになる (赤LED点滅)
●085 MPC-68K,684 RS-232Cのバッファのサイズはどのくらいですか? 011010 MPC-68K,684とも内部リングバッファは256bytesです。 INPUT#0 A$ B$=A$+"123" などとした時の文字列サイズや文字列演算での最大長は、68Kでは80文字以下、684で 128文字以下を想定しています。
●084 MPG-314 XYサーボモータ、UステップモータのACCEL設定・移動 010910 【 Q 】 XY軸はサーボモーター、U軸はステッピングモーターを制御する。 MOVLで3軸直線補間移動させる場合にXYの移動量が小さいとU軸がACCELで設定したMAXの値 より速いスピードで回転する。 XYは直線補間で移動したいが、U軸はACCEL MAX値以下で移動するようにできないか? 【 A 】 MOVLでは与えられたパラメータで直線補間をしてしまいます。 U軸のみ速度を変更する必要がある場合は、U軸をMOVLでは制御しないで、MOVSを用います。 ACCEL X_A XYspeed ACCEL U_A Uspeed MOVL Xpos Ypos VOID VOID MOVS U_A Upos WAIT RR(X_A|Y_A|U_A)==0 と上記のように記述してください。 U軸はACCEL U_A に従いします。 同時スタートで終了はそれぞれになります。 //----- XYUを3軸直線補間した場合ACCELのパラメータ優先順位は X>Y>U。 Uの出力数が最も多くなったとしてもUが(DDAでいうところの)主軸にはならずXの移動開始 ・停止にUが同期して高速化してしまう。 このような組み合わせでは3軸直線補間は無理。 -----//
●083 MPG-314 INPOSが有効にならない 010803 【Q】 次のプログラムでINPOSが有効になりません。J4のX-INPOSをGNDに落としたり離したりし て動作をチェックしていますが、INP_ONとしても信号を無視しています。 PG &h400 ACCEL 100000 INSET_314 X_A ALM_ON|INP_ON RANGE 0 <--これを入れるとINPOSが無視される。入れなければOK。なぜ? CLP DO MOVS 10000 10000 10000 10000 WAIT RR(ALL_A)==0 MOVS 0 0 0 0 WAIT RR(ALL_A)==0 LOOP 【A】 RANGE nは旧来のコマンドと互換性を保つために作られたもので、新しいコマンド体系と 組み合わせると具合が悪くなります。 RANGE nコマンドを実行すると、INSET_314で設定されるパラメータをクリアしてしまいま す。これはRANGEがSLMT_ONを含む実行をするためです。RANGE nを使う必要のある場合 は、RANGE n実行後INSET_314で改めて必要なモードを設定してください。 RANGEの新しい設定は RANGE X_A Max Min というものになります。こちらはINSET_314と組み合わせて使用します。 上のプログラムではINSET_314 X_A ALM_ON|INP_ONをRANGE nのあとで実行すればよいです。
●082 MPG-314 軸指定予約定数について 010803 【Q】 軸指定予約定数を用いる全ての命令は論理和で指定できるのですか? 例)RANGE X_A|Y_A -1000 1000 【A】 本的にはコマンド体系をそのように考えて作成していますが、例外もあるかと思います。 もし不具合などありましたら連絡ください。RANGEについては以下のようにorが有効です。 10 PG &H410 20 RANGE X_A|Y_A 1000 -1000 25 INSET_314 X_A|Y_A SLMT_ON 30 CLRPOS # このあとteachでjogすると、リミットが有効なのを確認できる。
●081 MPG-314 WARPの途中停止 010803 【Q】 WARP実行中にパルス発生を途中停止することは可能ですか? 下降動作に入ればSTOP命令で停止できますがそれ以外はできません。 【A】 以下のサンプルで試してみましたが、問題ありません。どこでも停止します。 10 PG &H410 15 PG &H410 1 17 LIMZ 500 18 CLRPOS 20 ACCEL 5000 30 SETP 1 100 100 100 1000 40 SETP 2 10000 100 100 2000 50 GO P(1) 55 FORK 1 *aho 60 WARP 100 P(2) 200 70 WAIT RR(ALL_A)==0 80 CP 90 END 100 *aho 110 TIME 500 120 STOP X_A|Y_A|U_A STP_D # シングルタスクで考えているのであれば、WARPは複合コマンドのため、Zの下降が始まる まで次のコマンドを実行しません。以下がワープの仕様の全てです。下降前の停止はWHEN を用いて記述してください。これは目的点の上空までいきます。 REV-3.81f(314使用ではかなり修正されているので最初は注意して動作させてください。) 機能追加・修正など ◆WARP [軸指定] [Upz] P(n) [Dwnz] [WHEN 論理式] [軸指定] 省略するとX_A|Y_A|U_Aとなっています。 X_A,Y_A,X_A|Y_Aを指定してU軸使わない場合やX,Y軸のいずれかを使う ようにできます。 WARPで使わない軸は他のタスクで単独軸として使用できます。 [Upz] 省略するとゲートモーションとなります。 また、10以下の値は指定できません。 [Dwnz] 省略するとゲートモーションとなります。 また、10以下の値は指定できません。 この値はリアルタイムでACCEL設定値から計算して制御されますので精 度がよくありません。最初大き目に設定してください。 また、最小速度を0とした近似計算のため、最高速度と最小速度の比が 1/10の以下の場合は不正確になります。 [WHEN 論理式] Z軸をおろし始めるところで条件式が成立していることを確認して下 降にはいります。成立していないとZ下降をしません。 WHEN文を省略すると無条件でワープジャンプとなります。 WARP X_A 1000 P(3) 1500 WHEN 1==HSW(-1)&HSW(-2) <- X軸とZ軸のみの条件付ワープ WARP 1000 P(3) 1500 <- XYU軸とZ軸のみの無条件ワープ WARP X_A|Y_A 1000 P(3) 1500 WHEN 1==HSW(-1) <- X/Y軸とZ軸のみの条件付ワープ
●080 MBK-68 対応タッチパネルについて 010712 【Q】 MBK−68はデジタル社のGP2000シリーズでは使用できますか? またオムロンのタッチパネル(NS12等)での使用は確認できていますか? 【A】 GP2000シリーズはすでに多くの実績があります。 オムロンについては未サポートです。 現在のMBK−68にはPanasonic MEW−NETプロトコル準拠のポートが 2CHあり、一方をパソコンとの通信に利用できます。 MPC側の通信プログラムは不要です。パソコン側はVBなどでプロトコル通信による ホストアプリケーションを作成します。
●079 MPC-684 浮動小数点について 010712 【Q】 複数の小数点データを記憶し、そのデータをMPC−LNKやRS−232Cでデータ転 送をしたいのですが、684オプションのコプロセッサを装着すれば可能でしょうか? 【A】 演算そのものは、浮動小数点としてできますが、684のインタプリタが浮動小数点型を 持たないので、ロング型整数(固定小数点)として変数保存していただくことになります。 浮動小数点の入出力については、細部の対応が粗いところもありますので、要望があれば、 検討させていただきます。 例: PRINT#0 FP0 とかで直接出力するとか・・ MPC−LNKは、ワードイメージの変数共有なので、浮動小数点を扱う場合はRS−2 32Cのようなメール通信のほうが向いていると思います。
●078 MPC-68 SELECT_CASE文で複数の条件を同一処理するには 010704 010712 SELECT_CASEで複数の条件を同一処理する場合は、例@のように式を記述せずにCASE文を 並べます。 例Aは条件をORで連結していますが、期待通りの結果は得られません。 また、例Bのようにコメント文を書いてもだめです。 例@ 10 SELECT_CASE a 20 CASE 0 30 CASE 1 40 CASE 3 : PRINT "(^_^)v " a 50 CASE_ELSE : PRINT "(-_゚)? " a 60 END_SELECT #a=0 RUN (^_^)v 0 #a=1 RUN (^_^)v 1 #a=2 RUN (-_゚)? 2 #a=3 RUN (^_^)v 3 例A 10 SELECT_CASE a 20 CASE 0 OR 1 OR 3 : PRINT "(^_^)v " a 30 CASE_ELSE : PRINT "(-_゚)? " a 40 END_SELECT #a=0 RUN (^_^)v 0 #a=1 RUN (-_゚)? 1 #a=2 RUN (-_゚)? 2 #a=3 RUN (-_゚)? 3 例B 10 SELECT_CASE a 20 CASE 0 : 'comment0 30 CASE 1 : 'comment1 40 CASE 3 : PRINT "(^_^)v " a 50 CASE_ELSE : PRINT "(-_゚)? " a 60 END_SELECT #a=0 RUN #a=1 RUN #a=2 RUN (-_゚)? 2 #a=3 RUN (^_^)v 3 --確認:MPC-684 ADVFSC(r)eREV-3.81m--
●077 MPC-68シリーズ UL認定について 010626 【Q】 MPC−68シリーズのUL認定は? 【A】 製品としてのUL認定は特に受けておりません。 ..まず、使用電源をDC24V以下に限定していること、大電流を扱う機能を有しないこ とから、その必要性は無いものと考えておりました.. しかしながら、 PCB(生基板)についてはUL認定工場にてUL94−V0品を使用するようにしており ます。 使用コンポーネント、コネクタについては、できる限りUL94−V0相当品を使用して います。 電源系へのタンタルコンの使用はしておりません。 カードケージの樹脂部についてもUL94−V0品を使用しています。 例外として 付属のカードプラがUL−94V0相当品が無く、HBグレードとなっています。 またMBKに搭載されているモレックス製コネクタがUL94−V2品です。 実質的にUL94−V0に統一するためには、カードプラの交換、上記モレックス製コネ クタをとり外す。ということが想定できますが、今のところそうした仕様指定の受注は困 難です。 MBKにつきましては近々モデルチェンジの予定があり、モレックス製コネクタは廃止と なります。 ------------------------------------ 【Q】 UL認定の予定は? 【A】 今のところ不勉強もあってその予定はありません。 m(_ _;)m
●076 MPG-314 原点復帰で残パルスクリアの例 010615 ドライバのトルクが十分でなかったり、装置に大きな摩擦がある場合、原点復帰時に残留 パルスが残る場合があります。 こうした場合、サーボドライバの残りパルスをZ相検出時にクリアすると原点復帰の精度 を確保することができます。 MPG-314にはこうした機能が無いため、以下のようなソフトで代替します。 ここではJ4のOP1~OP4をリセット信号として使用します。 10 '原点復帰で残パルスクリアの例 20 'Near Orgin 30 HOUT &HF0 : ' Servo On 40 HOME X_A 100 IN0_ON 50 HOME Y_A 100 IN0_ON 60 HOME Z_A 100 IN0_ON 70 HOME U_A 100 IN0_ON 80 WAIT RR(ALL_A)==0 90 'Detect Z phase 100 '必要に応じて他タスクpause 110 ' pause 3 4 5 120 HOME X_A 10 IN1_ON 130 HOME Y_A 10 IN1_ON 140 HOME Z_A 10 IN1_ON 150 HOME U_A 10 IN1_ON 160 a=0 170 'RR(ALL_A)の値をHOUTに反映 180 'Zのビットが4Uが8となるので注意 190 '論理反転してリセット信号とする。 200 WHILE a<>&HFF : HOUT a=(15-RR(ALL_A))|&HF0 : WEND 210 TIME 10 220 HOUT &HF0 : 'カウンタリセットクリア 230 ' cont 3 4 5 200のWHILE a<>&HFF : HOUT a=(15-RR(ALL_A))|&HF0 : WEND この行を実行している間は(ニアオリジンからZ検出までの区間)はタイミングの配慮が必 要です。応答速度は他タスクを休止させた状態で0.5m秒です。このため1kPPS以上での原 点復帰は精度が保証できません。100pps程度の場合は10m秒程度の余裕があるため十分に 対応できます。
●075 MPG-314 変数の文字数 010607 【Q】 A=X_A|Y_A とか A=INP_ON|ALM_OFF とか、変数に予約定数を代入するとき、この変数は何 文字有効ですか? 【A】 式の記述制限のみです。一つの連続した文字列では37文字以内になっていたと思います。 10 INSET_314 X_A ALM_ON|INP_ON|LMT_OFF 10 INSET=ALM_ON|INP_ON|LMT_OFF ぐらいははいりますが・・
●074 MPG-314 インポジション信号幅はどのくらい? 010607 【Q】 インポジションを有効に設定した場合、INP信号幅はどのくらい必要ですか? 【A】 不明です。ICのデータシートに書いてないのです。 たぶん、ICとしては内部の1クロック1μ秒で十分なはずです。 フォトカプラの反応速度を配慮すると200μSEC以上としてください。
●073 MPG-314 パルス発生後の完了確認は必要か 010607 【Q】 MPG-314のマニュアル25ページ最後に 例)Z軸のINPOSを有効にする | | 40 DO 50 RMVS Z_A 10000 60 RMVS Z_A -10000 70 LOOP とありますが、これは間違い? つまり、RMVS、MOVS等を使用した最後には必ずインポジションの有効無効に関わらず WAIT RR(?_A)==0 で終了したのを確認しなければいけないのではないか? 【A】 上のプログラムは間違いではありません。上のプログラムではMOVSと異なり現在位置取得 がないため、順次パルス発生し往復運動と なります。 inposが無効の場合、上の移動はサーボが溜まりパルスを持ったまま反転するため、微妙 に端までいかなくなります。 INPOSを有効にするとかならずパルスを出し切るのを待つため、かならず端までいきます。 WAIT RR(Z_A)=0などを必要とするのは、パルスを出し切った、あるいはINPOSまで検出した ことを知るために必要です。 つまり普通の制御では必要です。従来のように移動完了検出をコマンドに組み込んでいな いのは停止するまでに他の作業をすることが実際の応用では多いためです。
●072 MPG-314 入力モニタの表示 010607 【Q】 INSET_314 ALL_A 0 とし INCHK_314 モニタします。 (X,Y,ZのLMT入力(+-)にノーマリオンの接点がはいっています) XLMT+ ON XLMT- ON YLMT+ ON YLMT- ON ZLMT+ ON ZLMT- ON ULMT+ __ ULMT- __ と表示され、Z軸のLMT+のセンサを働かすと ZLMT+ __ と表示が変わります。 次にINSET_314 ALL_A LMT_OFF とし INCHK_314 でモニタします。 XLMT+ __ XLMT- __ YLMT+ __ YLMT- __ ZLMT+ __ ZLMT- __ ULMT+ ON ULMT- ON と表示が反転します。 Z軸のLMT+のセンサを働かすと ZLMT+ ON と表示が変わります。 これはいったいどういうことなのでしょうか? INSET_314 ALL_A ALM_OFF と INSET_314 ALL_A 0 とではALM部の表示、入力動作は同じで した。 【A】 ONというのは有効という意味です。通常のON/OFFではありません。 LMT_OFFとはオフ状態でリミットが有効になるという意味です。 この場合LMT_OFFに設定したためノーマリオン状態ではリミット検出にはならず、 センサがオフになるとON、つまり有効になるという意味です。 ON状態ではパルス発生もできません。 INSET_314 ALL_A ALM_OFF と INSET_314 ALL_A 0 のALM部の表示の違いは内部の機能の差 によるもので、LMTはIC内部の処理を経て出力されるためにこのようになります。 この件はマニュアル不備ですね。修正します。
●071 MPG-314 原点復帰後 自動的にサーボドライバの溜りパルスをクリアできるか 010524 【Q】 MPG−314原点復帰で、サーボZ相を検出して停止したとき、サーボドライバの溜り パルスをハード的(インタプリタプログラムではなく)にクリアできないか? 【A】 使用しているICにはそのような機能はありません。したがって、実現するとなるとインタ プリタで組んでいただくしかないですね。 homeコマンドは以前との互換性とか簡便性を主体に搭載されているので、これをつかわず、 通常の条件停止と同じように考えて組んで、実行環境さえ整えれば、実用範囲の自動たま りパルスリセットは実現できると思いますがどのみち、そんなに早く動作させることはで きないわけで1Kで動作させた場合、1msecの時間余裕があり、684では十分に対応できると 思いますが・・
●070 MPC-684 改版データの取得 010511 010514 MPC-684 REV-3.81cから予約文字列変数VER$に改版データが入っています。 #PRINT VER$ MPC-684 ADVFSC(r)eREV-3.81c BASIC like + multi tasking Created by ACCEL Co.'~2001 その中からREV番号を取り出すサンプル 10 GOSUB *GET_VER 20 END 30 *GET_VER 40 FOR BEGIN=0 TO LEN(VER$) 50 STRCPY VER$ DEST$ BEGIN 3 60 IF DEST$=="REV" THEN 70 BREAK NEXT 80 END_IF 90 NEXT BEGIN 100 FOR TERM=BEGIN TO LEN(VER$) 110 STRCPY VER$ DEST$ TERM 1 120 IF DEST$==CHR$(13) THEN 130 BREAK NEXT 140 END_IF 150 NEXT TERM 160 STRCPY VER$ DEST$ BEGIN TERM-BEGIN 170 PRINT DEST$ 180 RETURN #RUN REV-3.81c 実際には改版データ1行目の文字位置は変えないので(というお約束) #DEST$="" #STRCPY VER$ DEST$ 18 9 #PR DEST$ REV-3.81c でもOkです。
●069 MPC-684 プログラム保存後にLISTコマンドを実行したら全行表示してしまう 010405 【Q】 MPC-684でプログラム保存後にLISTコマンドを実行したら全行表示してしまう。 原因と対策は? 【A】 MPC-684はRev-3.81aからLISTコマンドの第2パラメータを保持します。 例えば LIST 100 50[Enter] とすると 文番号100から50行表示しますが、次のLISTコマン ドで第2パラメータを省略しても 50 は有効です。 FTMは保存時にLIST 0 0 と実行し、全行を一括出力させてPCへ保存していますが、保存作 業終了後もその設定のままになっており、次のLIST n[Enter]で全行表示となります。 Ctrl+MやMerge時にはLIST n 1としているので、その後のLISTが1行しか表示されなくなっ てしまいます。 FTMW32.EXE(Windows版)はVer6.22から、作業後にLIST第2パラメータを20に強制変更して います。 PC98DOS、DOS/V版FTMは非対応です。作業後のLIST表示には LIST 1 20[Enter]のように 第2パラメータを与えてください。
●068 MPG-314 カウンタ入力X(-1)〜Z(-1)は何バイト 010322 【Q】 MPG-314のカウンタ入力X(-1)〜Z(-1)は何バイトか? 【A】 4バイト長(±2147483647)です。 #PG &h400 #STPS X_C 2147483647 /*カウンタ設定 #PR X(-1) /*カウンタ読み込み 2147483647 ●067 MPG-314 ACCELコマンドのlong,min値を同じ値にしたらエラー 010322 【Q】 @のようにACCELのlong,minを同じ値にしたらエラーになったので、Aのようにした。 エラーにはならないがこれで良いのか? @ 10 PG &H400 20 ACCEL X_A 1 1 1 30 RMVS X_A 10 RUN #20 起動スピードが最大スピードよりも大きい A 10 PG &H400 20 ACCEL X_A 1 1 1/2 30 RMVS X_A 10 #run # *0 停止 【A】 @はACCELの仕様外の設定ですからエラーになります。Aはminが0と解釈されるので ACCELのパラメーターチェックには引っかからずエラーにはなりませんが、正しい数値で はありませんので、このような指定は不可です。 また、上記は1ppsの定速パルス発生を目的としています。低速パルス発生はPLSCコマンド を使用します。 5 PG &H400 10 PLSC X_A 1 10 /* 1ppsで10パルス 20 WAIT RR(X_A)==0 /* パルス発生終了待ち
●066 HOUT 2(X_A;NOP,1)とSTOP X_A IN0_OFFの違い 010312 【Q】 HOUT 2(X_A;NOP,1)とSTOP X_A IN0_OFFのコマンドの意味の違いはあるのか。 又、使い分けはあるのか。 【A】 どちらも同じです。 HOUTは出力/レジスタ設定の汎用的なコマンドですが難解です。 STOPは機能を限定してわかりやすくした後発コマンドです。 ●065 MPG-314のINPOSを有効にしたらプログラムはその行で停止するのか 010312 【Q】 INPOS(インポジション)信号を接続して有効にし、ネイティブコマンドにてパルス発生を した場合、プログラムはパルス終了まで次の行に進まずINPOS信号を待つのか。 【A】 INPOSを有効にしても次の行へ進みます。 #INSET_314 X_A INP_ON ←X軸INPOS有効 #RMVS X_A 10000 ←この行を実行して、すぐ次へ # INPOSが有効になっていて、INPOS信号がOFFの場合は #INSET_314 X_A INP_ON #RMVS X_A 100000 ←実行後すぐ次へ進む #RMVS X_A -100000 ←この行を実行してもINPOSがONするまでパルスは出ない パルス終了を待つのは次のようになります。 この場合INPOSもONにならなければWAIT文の次へは進みません。 5 PG &H400 10 INSET_314 X_A INP_ON 20 RMVS X_A 100000 30 WAIT RR(X_A)==0 ←X軸パルス終了待ち
●064 MPG-405に電源を入れたらFL1から煙が出た 010226 【Q】 MPG-405の電源コネクタ(J5)にDC24Vを給電したらFL1から煙が出た。同じ電源のMPC-684、 MOP-048、MIP-048は問題無し。なぜ? 【A】 電源コネクタのピン配の違いに注意してください(下表)。 MPG-405、MPG-314の電源コネクタ(J5)の2番ピンはSGとなっています。 MIP,MOP仕様(1・2番ピンに+DC、3・4にGND)で作った電源コネクタをMPGに接続するとFL1 が過電流となります。 ------------------------------ | |MPG-405|MOP-048/096|MPC-684| | |MPG-314|MIP-048/096|MPC-68K| | | |IOP-048 | | ------------------------------ |1 | +DC | +DC | +DC | |2 | SG | +DC | NC | ←ここ! |3 | GND | GND | GND | |4 | FG | GND | FG | ------------------------------ SGは基板パルスI/F回路のDC5V、GNDは+DCのリターンです。
●063 MPC-684にMBK-68またはMPS-324からDC5V給電する場合 010214 MPC-684システムにMBK-68のコネクタT1、またはMPS-324からDC5Vを給電する場合はMPC-684 のヒューズF1(透明ケースのジャンパーみたいな部品)を抜いてください。 この場合でもMPC-684の電源コネクタJ5にはDC24Vは必要です。
●062 初期MPC-684 INPUT文で多量のキャラクタを受信するとポイントデータが壊れる 010202 実験レポート
●061 MPC-68K/684 点データが変更できない 010201 【Q】 点配列Y(n)に&H66000000〜&H66FFFFFF(1711276032〜1728053247)を入れるとX(n)の数値が 変更できなくなる。なぜ? #Y(1)=&H66000000 #X(1)=1 ・・・・・定数は変更できません #U(2)=1728053247 #Z(2)=2 ・・・・・定数は変更できません # 【A】 システムのバグでMPC-68KでもMPC-684でも出ます。 このバグは設定しようとしている次の番地(※参照)の点配列のトップバイトに&h66がは いっていると定数変数と勘違いしてしまうというバグです。 かなり大きな数なので(17億台)、普通は使われない範囲と思いますが、なんらかの原因で RAMにこの値がはいるとこうした状態に陥ります。 SETPではこのバグはありませんので、こうした現象が確認されたら以下のように修正して ください。 X(PointNo)=xxx Y(PointNo)=yyy U(PointNo)=uuu Z(PointNo)=zzz と配列を使って代入するところを、SETPで設定します。 SETP PointNo xxx yyy uuu zzz このバグは明確なエラー停止になります。つまりランニング中にエラーメッセージを出力 し、赤LEDの点滅状態となります。インタプリタは停止となりますので、演算を誤ったり、 暴走の原因にはなりません。 ※点配列は以下のように並んでいます。 X(1)-> Y(1) ->Z(1) ->U(1) ->X(2) ->Y(2) ->Z(2) ->U(2) ->X(3) .... 【改版】 MPC-684 REV-3.80zwで修正しました。 (MPC-68Kは改版無し)
●060 MBK-68 7セグメントの表示内容 001226 MBK-68の7セグメントには、各タスクの文番号、MBK I/F バージョン、通信エラー数 を表示します。 初期表示はタスク0の文番号表示で、SW1またはSW2を押す毎に切り替わります。 SW3は表示の一時停止です。 --------- SW2 --------- --------- --------- --------- *→| task23 |−→| task0 |→| Version |→| BCC Err |→| Cmnd Err|→* *←| |←−|(Default)|←| |←| Er1xxxx |←| Er2xxxx |←* --------- SW1 --------- --------- --------- --------- ◆表示内容 task [nnxxxxx] nn(緑)はタスク番号、xxxxx(赤)は実行中の文番号です。 (表示するタスクはMPC-684でも0〜23です。) Version [--02xxx] 1000番台はGPメモリーリンク、2000番台はGP NEWNET-FPプロトコル xxxは改版番号。 BCC Err [Er1xxxx] 10000番台はBCC(ブロックチェックコード=水平パリティーチェック)エラーです。 ノイズ混入、配線不良による文字化けなどで発生します。 Cmnd Err [Er2xxxx] 20000番台は不正コマンド受信エラーです。 MBKが予期せぬコマンドを受信した場合に発生します。
●059 MOP-096とMIP-096のコネクタの違い 001225 010124 【Q】 @どうして、2社のコネクタにしているか? AMIP-096は3M、MOP-096はヒロセだが、圧接ケーブル用のコネクタはヒロセ製でいいのか? 【A】 @色を違えてMOPとMIPが識別できるようにしています。MOPは黒、MIPは灰色です。 Aどちらも勘合しますが、稀に、3Mのハウジングにヒロセの圧接フラット用を使うと接触 不良になることがあるようです。ヒロセの圧接は接触面が1面しかないためと思われます。 両者共通で使うにはJAEがよさそうです。JAEの圧接は2面のコンタクトでピンを挟む構造 となっています。 しかし、本来コネクタはオスメス同一メーカーを使うもので、異メーカー間での保証は無いそうです。 実装コネクタに関してはMIP-096、MOP-096マニュアルをご覧下さい。
●058 デジタルGP-2400イーサネットの実験 001222 GP-2400のイーサネットを使ってMPC-684のデータにアクセス出来るかどうかという基礎的 な実験です。 68K-B01 デジタルGPシリーズイーサネット実験.pdf
●057 新旧MPCとMOP-048の適合について 001221 MOP-048には基板型式 CEP-013(8255使用)、CEP-013A(8255使用)とCEP-013B(8255不使用) があります。 フラッシュROM版以降のMPC-68KとMPC-684ではどれでも使えますが、EP-ROMのMPC-68K にCEP-013Bは使えません。 CPU基板型式 対応MOP-048 CEP-011? (MPC-68K(FSC) EP-ROMタイプ) CEP-013、CEP-013A CEP-041? (MPC-68K フラッシュROMタイプ 現行版) 全MOP-048が使用可能 CEP-054? (MPC-684 フラッシュROMタイプ 現行版) 〃 入力ボード MIP-048にも8255使用タイプ(CEP-012、CEP-012A)と8255不使用(CEP-012B)タ イプがありますが、こちらにはCPUの不適合はありません。
●056 MPC-684 P_SVコマンドで保存される点データ数 001220 MPC-684のP_SVコマンドでフラッシュROMに保存される点データは、フラッシュROM容量の 都合でP(1)〜P(5000)です。
●055 MPC-684のSV_Mをロングワードで使用したとき、飛ばされた点配列の内容は? 001220 SV_MコマンドはMBKメモリ(GPデータエリア)からMPC点配列(X(n)〜Z(n))へ一括コピーします。 SV_Mをロングワード(32ビット長)で指定するとコピー先の点配列へは1つおきにデータが 入ります。そのとき、飛ばされた点配列のデータは変更されません。 SV_M X(9019) 19 3 4 X(9019)←──────DT20(上位ワード)・DT19(下位ワード) X(9020)=不変 X(9021)←──────DT22(上位ワード)・DT21(下位ワード) X(9022)=不変 X(9023)←──────DT24(上位ワード)・DT23(下位ワード) X(9024)=不変 ●054 MPC-684の今後 001219 【Q】 MPC-684のライフタイムとその保証は? 【A】 684は68Kからの継承互換品ですでに8年くらい互換性を保ちつつ進化しているところです。 816については当初のZ版からそろそろ15年になろうとしています。 どこかの大手シーケンサメーカの自社互換性よりはよほどマシだと自負していますが・・ ただ、保証ということになると、このところの半導体部品の製造中止が多く、なんとも申 し上げかねます。 MPC-684ではモトローラのMC68340というCPUを使っていますが、実のところ68000系で生き 残った数少ないCPUです。 ただ、基幹半導体は常に一年から二年程度のストックを持ち、たとえ製造中止になっても、 一年程度でなんとか準互換品をつくるということで鋭意努力継続しています。 【Q】 過去に816や68KなどCPUの生産中止にもかかわらず上位互換のボードを出しているが、 今後684に同じ事態が起きた時も上位互換路線を続けられるか? 【A】 既に多くのお客様で継続採用して頂いている現状から、製造中止で全く違うものを作るな どということはできません。このMPC-68K(FSC)の基本仕様は等分不滅のデファクトです。 【Q】 MPC-684が発売されて約1年になるがこれまでにどの程度の販売実績があるのか? 【A】 稼動ベースの数量の上ではまだ150程度ですが、今のところフィールドで故障した話はあ りませんので、製品としては安定していると考えています。 【Q】 パルス発生にはMPG-405とMPG-314の選択のどっちを選べば良いか? 【A】 新規設計の装置でMPG-405のTRコマンド使用を前提とされていなければ、MPG-314を選択し ていただいたほうが良いと思います。 314は405より安価ですし、かなり互換性もあります。また、守備範囲が広いという特徴も あります。 MPG-405に使用しているICもつい先日、製造中止の宣言が出ました。この夏に確認したら そんな話はないということだったのですが、裏切られてしまいました。
●053 MPCの初期化ってなに? 001208 通常(弊社では)「MPCの初期化」というと、MPCINITとERASEコマンドを実行してSRAMと FROM(フラッシュROM)内のデータを出荷状態に戻すことをいいます。プログラム・点デー タ・パラメータが全部消えます。 ボード搬送時や取り扱い時に静電気の印加などでSRAMデータが化けることがあります。 ボードを装置に実装して電源を入れたら、プログラムを入れる前に初期化して下さい。 また、システムデータをバージョンアップしたときも初期化して下さい。 これに対して、「変数やMPGの初期化」というとちょっと違います。 変数の初期化といえば、変数を0やそれ以外の所定の数値に設定することで、MPGの初期化 といえば、加減速テーブルや最高速などの動作条件を設定することを言います。(例外も ありますが..)これらはダイレクトコマンドでも設定されますが、必ずプログラムにも 記述して下さい。 ●052 プログラムを作成するとき文番号は付けなければならないのか? 001208 ターミナルソフト「FTMW32.EXE」(黄色の三角形のアイコン)を使い、オンラインで直接MPC 内のプログラムを編集する場合は文番号を付けます。文番号をつけないとダイレクトコマ ンドとして扱われます。 既存プログラムの行間に挿入するのに、Ctrl+Nとすると自動的に番号が入ります 100 ON 0 110 OFF 0 ↓ 110の上にカーソルを置き、Ctrl+Nする 100 ON 0 105 ←文番号を付けて1行挿入 110 OFF 0 外部エディタでプログラミングするのには文番号は要りません。FTMW32でMPCに読み込ん だ後自動生成されます。
●051 MPC-684の変数は電源を切ったらどうなる? 001207 MPCはダイレクトコマンド操作時やプログラム実行時には、プログラム・変数・点データ・ コマンドパラメータなどのデータ全てをバッテリバックアップSRAMで扱います。 電源を切ってもそれらのデータは消えませんが、MPC-684は電源投入時にFROM(フラッシュ ROM)に書かれているプログラム・変数・コマンドパラメータをSRAMに戻します。これらの データはプログラム編集時の「RUN」によって書き込まれたものなので、電源投入のたび に過去に戻ってしまう、ということになります。 しかし、点データだけはFROM読み書きを行わないのでバックアップ変数として使用するこ とができます。 ただし、MPC-684の「RAMモード」ではFROMへのアクセスが無効となり、プログラムも含め て全てのデータがSRAMだけで扱われます。これは、旧MPC-68Kの互換とデバッグ時の時間 短縮(書き込みメッセージが出ない)のためのモードで、通常稼動にはお勧めできません。 ノイズなどでSRAMのデータがダメージを受けるとプログラム自体が動作しなくなることが あります。RAMモードでデバッグした後はROMモードに戻してRUNして下さい。 (参照コマンド RAM、ROM) MPC-816ではFROMに読み書きされるのはプログラムだけなので、変数・点データどちらも バックアップ変数として使うことができます。 また、変数はパソコンに保存できませんが、点データはFTMでファイルとして保存するこ とができますし、配列変数としても使用できます。
●050 MPG-314 各軸-OUT4、OUT5の出力方法 001122 020228 J2,J4の各軸-OUT4,OUT5の主目的はカウンタ比較結果の出力です。 例えば HOUT &H80+4 (X_A;NOP,3) とすると OUT4:論理/実位置カウンタがCOMP+レジスタより大きいときHiレベルに、小さいときLowレベルになります。 OUT5:論理/実位置カウンタがCOMP-レジスタより大きいときHiレベルに、小さいときLowレベルになります。 これらポートは次のように用いると汎用出力としても使用できます。 論理は0がON、1がOFFとなります。パラレル操作のみです。 HOUT &h304 (X_A;NOP,3) /* X-OUT4(J2-17)=OFF X-OUT5(J2-18)=OFF HOUT &h204 (X_A;NOP,3) /* X-OUT4(J2-17)=ON X-OUT5(J2-18)=OFF HOUT &h104 (X_A;NOP,3) /* X-OUT4(J2-17)=OFF X-OUT5(J2-18)=ON HOUT &h004 (X_A;NOP,3) /* X-OUT4(J2-17)=ON X-OUT5(J2-18)=ON /~~~~~ /~~~~~~~~~ 出力データ X軸WR3設定 | (下位の'4'はWR3 D2(SACC)を1にするため) 注意: SACCはS字加減速を有効にするためのビットです。ACCEL設定時にこのビットもS字の有無に よって設定されます。 このため、この出力ポートの操作で下位バイトの値を04とするか00とするかはS字の要・ 不要にしたがって設定してください。xx04の場合がS字有効です。 ------------------------------------------------------------- これらの操作はMCX314のレジスタWR3を操作するものです。 以下はMCX314リードライトレジスタ WR3 (モードレジスタ3)の概要です。(MCX314取扱説明書から抜粋) | H | L | | D15 D14 D13 D12 | D11 D10 D9 D8 | D7 D6 D5 D4 | D3 D2 D1 D0 | WR3| 0 0 0 0 | OUT7 OUT6 OUT5 OUT4 | OUTSL 0 0 EXOP1| EXOP0 SACC DSNDE MANLD | D0 加減速定量ドライブにおける減速を自動減速にするか、マニュアル減速にするかを設定します。 0:自動減速 1:マニュアル減速 D1 加減速ドライブの減速時の減速度を加速度の値にするか、個別の値にするかを設定します。 0:加速度の値を使用 1:減速度の値を使用 D2 直線加減速/S字加減速の設定をします。 0:直線加減速 1:S字加減速 D3,4 外部入力信号によるドライブ操作を設定します。 D7 出力信号OUT7〜4を汎用出力として使用するか、ドライブ状態を出力するかの選択をします 0:汎用出力として使用します。D11〜D8の内容がOUT7〜4端子に出力されます。 1:OUT7〜4にドライブ状態を出力します。 OUT4/CMPP:論理/実位置カウンタがCOMP+レジスタより大きいときHiレベルに、小さいときLowレベルになります。 OUT5/CMPM:論理/実位置カウンタがCOMP-レジスタより大きいときHiレベルに、小さいときLowレベルになります。 OUT6/ASND:ドライブ命令実行中、加速状態になると、Hiレベルになります。 OUT7/DSND:ドライブ命令実行中、減速状態になると、Hiレベルになります。 D11〜8 出力信号OUT7〜4の汎用出力として使用するときの値を設定します。 O:Lowレベル出力 1:Hiレベル出力 ※MPG-314ではD11,10(OUT7,6)はコネクタへは出ていません。 D2は1に設定して下さい(MPG-314はS字加減速がデフォルト)。
●049 外部機器の入力とMOP出力の接続 001122 【Q】 接続機器の入力回路が、内部12V→電流制限抵抗→フォトカプラ→IN端子となっています。 MOPの駆動電源が24Vの場合、MOP出力ピンを相手の入力端子と直結しても問題ないですか。 それともフォトカプラを介在させるべきでしょうか? 【A】 MOPの出力はオープンコレクタなのでそのまま接続できます。オープンコレクタは相手か らみるとショートとオープンしかありません。 昔のMPC−816ではサージ抜きダイオードがコレクタからDC24に向かって接続さ れていて、MPCの電源を切ると外部機器からはオン状態に見えるという問題もありまし たが、現在ではそうした寄生ダイオードは使用しないことにしているので、電源OFFでの 出力はハイインピーダンス(OFF状態)になります。 なおMOPはMPCとは関係の無い(別電源)DC12〜24Vで使用できます。5Vでもノイズマージン を配慮してもらえれば駆動できるように設計してあります。
●048 潟fジタル GP2400 CFカード〜MPC-684点配列間のデータ転送 001113 001214 /********************************************************************** /*甘゙ジタル GP2400 CFカード〜点配列間の多数データ転送のサンプルプログラムです。 /* MBKのデータエリアにはサイズ的な制約があるのでCFカードのデータをブロックに分けています。 /* 今回は100データ/ブロックで3ブロックのデータ転送を行いました。 /* GPの設定、ファイリングデータの編集についてはApplication Note 68K-006 参照。 /* /* このプログラムを実行するには、下記の様にプロジェクトマネージャを設定して下さい。 /* また、ファイリングデータを下記の書式で作成してCFカードに転送し、GPに装着してください。 /* CFカード内のファイリングデータと書式が合致しないと動作しません。 /* /* CFTEST2.F68 001113 001214 /********************************************************************** /* ●GPコントロールアドレス /* DT20 CF->SRAM トリガ /* DT21 SRAM->MBK モード /* DT22 SRAM->MBK ファイル番号 /* DT23 SRAM->MBK ブロック番号 /* DT24 SRAM->CF モード /* DT25 SRAM->CF ファイル番号 /* /* ●●プロジェクトマネージャ(V4.0)の設定 ([〆]=チェックboxをチェック) /* /* ●メニュー 「画面/設定」「ファイリングデータ」「ファイリング動作設定..」 /* [〆] ファイリング動作を行う /* [ ] 複数フォルダを使用する /* /* 転送準備(ファイリングデータ → SRAM) /* コントロールワードアドレス DT0020 /* 書込み完了ビットアドレス X0000 /* /* 転送設定(SRAM ←→ PLC) /* [〆] 転送をPCよりコントロール /* コントロールワードアドレス DT0021 /* 書込み完了ビットアドレス X0001 /* /* ●ボタン 「GPシステムの設定」「拡張機能設定」 /* CFカードデータ保存設定 /* [〆] データ保存 /* コントロールワードアドレス DT0024 /* /* ●ファイリングデータ書式 /* ファイル番号 1 /* ブロック数 3 /* データ数 100 /* 格納先頭アドレス DT600 /* データ形式 16ビット /********************************************************************** /*【メモリイメージ】 /* GP2400 MPC /* |<--------------------------------->|<----------------------------->| /* SRAM MPC-684点配列 /* +--- -------- -------- --- /* | | data0 | | X(100) | ↑ /* | | data1 | | : | | /* | ブロック| : | | : |1ブロック分 /* | 0 | : | | : | | /* | | data98 | MBK-68データエリア | : | | /* | | data99 | 1ブロック分 | X(199) | ↓ /* | -------- ------- |--------- --- /* ------ | | data0 | | DT600 | | X(200) | /* | | | | data1 | | DT601 | SV_M | : | /* | CF | --->| ブロック| : | ---> | : | ---> | : | /* | CARD | <---| 1 | : | <--- | : | <--- | : | /* | | | | data98 | | DT698 | LD_M | : | /* ------ | | data99 | | DT699 | | X(299) | /* | -------- ------- |--------| /* | | data0 | | X(300) | /* | | data1 | | : | /* | ブロック| : | | : | /* | 2 | : | | : | /* | | data98 | | : | /* | | data99 | | X(399) | /* +--- -------- -------- /* CF〜SRAM間は GP〜点配列間はMBKデータエリアを経由して /* 全ブロック一括で転送 1ブロックずつ(100データ)転送 /* /********************************************************************** /* *INIT FOR I=20 TO 25 S_MBK 0 I NEXT I OUT 0 70000 BN=0 *MAIN PR "1 CF->MBK" PR "2 MBK->CF" INPUT A IF A=1 THEN : GOTO *CF2MBK : END_IF /* CFカードからMPC X()へ転送 IF A=2 THEN : GOTO *MBK2CF : END_IF /* MPC X()からCFカードへ転送 GOTO *MAIN *CF2MBK S_MBK &H101 20 /* CF CARDからGP バックアップSRAMへファイリングデータを転送 WAIT SW(70000)=1 /* 転送完了待ち OFF 70000 /* 完了ビット リセット S_MBK 0 20 /* トリガ リセット PR "CF -> SRAM copy" ' FOR BN=0 TO 2 /* BN = ブロック番号 S_MBK 1 22 /* ファイル番号 S_MBK BN 23 /* ブロック番号 S_MBK &H1 21 /* GP バックアップSRAMからMBKへファイリングデータを転送 WAIT SW(70001)=1 /* 書き込み完了 OFF 70001 /* 完了ビット リセット S_MBK 0 21 /* トリガ リセット TIME 200 /* 次の転送までにトリガOFF時間 150msec以上必要 SV_M X(BN+1)*100 600 100 /* MBKメモリ->X配列へコピー PR "block" BN "copy" NEXT BN END *MBK2CF /******************************************************************** /* 画面転送直後は1回CFカードからSRAMへ転送しておかないとMBKからSRAMへ転送できない。 /* おそらく、GPのSRAM上にファイリングデータのイメージが無いと作業が出来ないのでは.. /* 2回以降は不要だが、害は無さそうなので入れておく。 S_MBK &H101 20 /* CF CARDからGP バックアップSRAMへファイリングデータを転送 WAIT SW(70000)=1 /* 転送完了待ち OFF 70000 /* 完了ビット リセット /******************************************************************** FOR BN=0 TO 2 LD_M X((BN+1)*100) 600 100 /* X配列->MBKメモリへコピー S_MBK 1 22 /* ファイル番号 S_MBK BN 23 /* ブロック番号 S_MBK &H101 21 /* MBK->GP バックアップSRAM へファイリングデータを転送 WAIT SW(70001)=1 /* 書き込み完了 OFF 70001 /* 完了ビット リセット S_MBK 0 21 /* トリガ リセット TIME 200 /* 次の転送までにトリガOFF時間 150msec以上必要 PR "block" BN "copy" NEXT BN ' S_MBK 1 25 /* ファイル番号 (ファイル内の全ブロックを転送) S_MBK 1 24 /* GP バックアップSRAM -> CF CARDへ転送 WAIT MBK(24)=0 /* 完了待ち PRINT "SRAM->CF copy" END '*************** *CREATE_DAT /* 確認用ダミーデータ作成 FOR I=100 TO 399 X(I)=I NEXT I END
●047 MPG−314 ALM入力について 001101 MPG-314 コネクタJ2の ALM(4,8,12,16番ピン)入力には二通りの方法があります。 @HPTで読む #PRX HPT(0) 00100000 /* X-ALM(4番ピン)がON状態 HPT(0)は各軸ALM入力をいつでも読むことができます。 単なる入力(標準I/Oの代用)として使うならこれでもOK。 ARRで読む #INSET_314 X_A ALM_ON /* X軸 ALMをONで有効にする #PRX RR(X_A,ALM@) 0010 /* X-ALM(4番ピン)がON状態 パルス発生とALM入力を連動させるにはINSET_314で有効にしなければなりません。 INSET_314でALMを有効にするとRRで読むことができるようになります。 ●046 MPG−314 RRのビット位置 001101 コネクタ J2 X-LMTM(2番ピン)、X−ALM(4番ピン)がON状態のときRRでは下記の様になります。 #INSET_314 X_A ALM_ON #PRX RR(X_A,ALM@|LMTP@|LMTM@) 0018 ここで表されるビット位置は次のようになっています。 (上位) |ビット| &H20| 10 | 8 | 4 | 2 | 1 | (下位) |信号 | EMG | ALM | LMTM | LMTP | 0 | 0 | 0018なら 0 1 1 0 0 0
●045 MPG−314で互換コマンドのSTOPは使えるか 001031 MPG-314専用コマンドであるMOVSやRMVSには互換STOPは使えません。 互換コマンドはMPG-68K、MPG-405用のプログラムのためにあります。 314専用コマンドに対してのFEEDやSTOPなどは拡張ステートメントで対応します。 下のプログラムは互換STOPのようにタスク0からタスク*XA,*YAのパルス発生を停止していますが、 MOVSは実行後すぐに次のステップに以降するので、タスク *UAのように同一タスクで処理するほうが 判りやす場合もあります。 PG &H400 PG &H400 1 PG &H400 2 ACCEL X_A|Y_A 5000 /*FEED 0 /* 軸指定しない場合は0~64 各軸共通 FEED X_A 0 FEED Y_A 255 /* 軸指定した場合は設定範囲は0~255 STPS 0 0 VOID 0 PRINT P(0) FORK 1,*XA FORK 2,*YA FORK 3,*UA INPUT "HIT ENTER YKEY" A /*STOP 2 1 /* MOVSには互換のSTOPは使えない STOP X_A STP_I TIME 500 INPUT "HIT ENTER YKEY" A STOP Y_A STP_I TIME 500 END *XA MOVS X_A 100000 /* 実行後すぐ次のコマンドへ WAIT RR(X_A)=0 /* 停止待ち PR "PULSE STOP X" END *YA MOVS Y_A 100000 /* 実行後すぐ次のコマンドへ WAIT RR(Y_A)=0 /* 停止待ち PR "PULSE STOP Y" END *UA PG &H400 ACCEL U_A 1000 FEED U_A 0 MOVS U_A 100000 /* 実行後すぐ次のコマンドへ WAIT SW(192)=1 STOP U_A STP_I PR "PULSE STOP U" END ●044 MPG−314のリミット検出 001031 MPG−314のリミット検出はHPT()ではなく、RR()で行います。 #PG &H400 #INSET_314 X_A LMT_ON /*リミットonで検出 #PRX RR(X_A,LMTM@) /*コネクタJ2 2番ピン入力 0008 /*リミットはONしている #PRX RR(X_A,LMTP@) /*コネクタJ2 3番ピン入力 0004 /*リミットはONしている #PRX RR(X_A,LMTP@|LMTM@) /*コネクタJ2 2,3番ピン入力 000C /*リミットは両方ONしている ※表示されるビットとコネクタピン番号は整合しません。
●043 MPG−314の原点復帰例 001019 /********************************************************* /* MPG-314 原点復帰 /* 第1段 NEAR ORGまで高速で原点復帰 (NEAR ORGはNCのリミットSW) /* 第2段 Z相がオンになるまでゆっくり原点復帰 /********************************************************* PG &H400 ACCEL 300000 FEED X_A 0 DO IF HPT(0)&&H1=0 THEN RMOV 50000 0 0 /* CW退避移動 END_IF HOME X_A IN0_OFF -200 /* XS1(NEAR ORG)がOFFになるまでCCW FEED=200 WAIT RR(X_A)=0 HOME X_A -1000 IN1_ON /* XS2(Z相)がオンになるまでCCW 1000pps WAIT RR(X_A)=0 STPS 0 0 0 0 /* 現在点を0にする PR P(0) PRSET_ACCEL X_A /* ACCELパラメータ復帰、停止条件クリア FEED X_A 0 /* FEED再設定 TIME 1000 MOVE 100000 0 0 TIME 1000 LOOP
●042 MPC−684 挙動不審 001017 【症状】 IOが勝手にON,メモリデータ消失など 【原因】 コプロ挿入不良 【補記】 概ね動作するが異常な動作がありコプロを搭載している場合、 コプロの挿入確認(再挿入)をお願いします。 PLCCソケットは正しく挿入されないと接触面の絶縁破壊が中途半端となり 時間経過後接触不良となる場合があります。
●041 MPG−314パルス出力実測 2つ 001005 S字加減速移動 非対称加減速移動
●040 大きなプログラムをLOADしたらFTMWがフリーズ 000913 FTMWはLOADプロセスの最後にRENUMを行います。 この時MPC-684は文番号で60000を超えると自動的に5間隔にしていましたが それでも60000に収まらない大きなプログラムでは結果的にFTMWがLOADの最後でフリーズ してしまいます。 MPC-684を改版して文番号間隔を5->4->3とプログラムサイズに合わせて自動変更するよう にしました。 MPC-684 ADVFSC(r)eREV-3.80zm BASIC like + multi tasking Created by ACCEL Co.'~2000
●039 四捨五入 000905 MPCには一発で演算結果を四捨五入できるコマンド・関数はありません。 下記はMPC−684で除算して1の位を四捨五入する例です。 (!付きの変数はローカル変数です) /* MPC-684 一桁目の四捨五入 GOSUB *round 10 4 _RET_VAL ANS PRINT ANS END *round _VAR round0! round1! /* round0! = 割られる数 round1! = 割る数 IF round0!*10/round1!%10>4 THEN /* 桁上げして割り、1の位を調べる round0!=round0!/round1!+1 ELSE round0!=round0!/round1! END_IF RETURN round0! /* round0! = 戻り値
●038 「余分な引き数、或はパルス発生条件文に異常があります」エラー 000830 【Q】 MPC−68KにプログラムをLOADしてRUNしたら HOME &H2A 50 0 0 '原点復帰 という文で「余分な引き数、或はパルス発生条件文に異常があります」というメッセージ が表示される。 構文、パラメータは間違っていない。 MPC−68KはRev−2.21。 【A】 原因はコメントです。 Rev−2.21は94頃のEP−ROMタイプのMPC−68K(FSC)で、 上記のように後ろにコメントを書くとエラーになるコマンドがあります。 現状で対応するにはコメントの前に:(コロン)を入れてマルチステートメント化します。
●037 RAMモード時にFIX(FROMへの書き込み)ができない 000825 【Q】 RAMモード時にFIXはできないか。 【A】 できませんm(_`_)m。 一旦ROMモードに戻ってからFIXして下さい。
●036 RSE()にMRS−402のチャンネルを指定すると戻り値は255 000825 【Q】 RSE()関数にMRS-402のチャンネル(3~8)を指定すると戻り値が255になる。なぜ? 【A】 RSE()はMRSをサポートしていませんm(_"_)m。
●035 プログラムLOAD時のエラー行検索 000809 FTMWはMPC−68K/684にプログラムをLOADするとき、 高速化のために文番号を付けていません。 LOAD中にシンタックスエラーがあった場合は番号と内容が表示されますが、 番号は送信行のカウントで、ソースの/*コメント行や空行はカウント外のため エディタ上の行番号と一致せずエラー個所を見つけ難いことがあります。 そこでMPCエディタ Ver1.30に、LOAD時の番号と一致する行番号を表示する モードをつけました。 プログラムを読み込んだ後、メニュー「その他」→「LOAD番号モード」をチェックしてください。
●034 MBK−68でシステムローダーが動作しない 000801 システムローダーでMBK−68のシステムデータを転送するのに、 ショートピンSP1を2−3ショートにするとパソコンのRS−232Cを直接接続できることがあります。 しかし、レベル的にはRS−232の規格外ですから使用できないパソコンもあります。 その場合はSP1は1−2ショートでRS−422/232コンバータを使って下さい。 2000年版68KユーザーズマニュアルP7−25ボード図下のSP1に関する記述は誤りで、 1−2ショートRS−422(出荷時)、3−2ショート RS−232 です。
●033 S−LINKのバンクナンバーはどうなってるの? 000713 MPC-SLINKのI/O番号は2000からです。 バンク番号も2000から8ビット単位です。 | ON/SW|IN/OUT | | (BIT)|(BANK) | --------------- | 2000 | | | | | 2000 | | 2007 | | --------------- | 2008 | | | | | 2001 | | 2015 | | --------------- | 2016 | | | | | 2002 | | 2023 | | --------------- | ↓ | ↓ |
●032[MPC-684]GOSUB、IF〜END_IFなどの入れ子の数とCASEの数 000710 ◆GOSUB GOSUBのネストには制限があります。 サプルーチンを呼ぶときにメモリのスタックエリアに戻り番地が積まれ、RETURNで下ろされます。 その数は各タスク約170個ずつです。 10 i=0 20 *sub 30 i=i+1 : PRINT i 40 GOSUB *sub 50 GOTO *sub RUN 1 2 (中略) 170 171 #40 ・・・・・スタック・オーバーフロー 制御のネストが深すぎるか, 制御文の異常な使用法によるものです また_RET_VALが実行されていません。 ◆DO〜LOOP,IF〜END_IF,FOR〜NEXT これらはRUN時(プログラム整理中..の時)にラベル展開されます。そのためスタックを消費しませんから、 事実上制限はありません。しかし入れ子が深くなるとプログラムが難解になりますから注意して下さい。 10 i=0 : a=0 20 *lp 30 DO 40 i=i+1 : PRINT i 50 IF a==0 THEN 60 GOTO *lp 70 END_IF 80 LOOP RUN 1 2 (中略) 1327 1328 (後略--限り無く続きます) ◆CASE SELECT_CASEのCASEもIFと同様で、事実上制限はありません。 (MPC-684 REV-3.80x現在)
●031 MPGにもSRAMバックアップのバッテリがあるが.. 000706 【Q】 MPG-68KやMPG-405にもSRAMバックアップのバッテリが有るが何のため? 使用前にMPGに直接パラメータ設定など何かしなければならないのか? 【A】 MPGのSRAMにはACCELやSHOMコマンドなどのパラメータが保存されています。 こればティーチングモードやダイレクトコマンド実行時の便宜を計るための機能です。 MPGの使用前にボードに直接接続してパラメータを設定することはありません。(PGのアドレスだけです) プログラムの実行に必要な設定を全てプログラム中に記述しておけばMPGのバッテリも不要です。 その逆に、ダイレクトコマンドで設定しただけのパラメータに依存しているプログラムの場合、 バッテリが抜けたりボードを乗せ替えたりした場合に正常に動作しなくなることがあります。 プログラムで使うパラメータは必ず記述するようにして下さい。
●030 PC−LNKの起動不具合 000620 デジタル社のパネコンにPC−LNKを実装した際、 BIOSの起動時にPC−LNKが通信障害をおこすことがあります。 ◆確認事例 ◎機種 デジタル BOX型FAコンピュータ PL-B900 BIOS Award Modular v4.51PG OS Windows NT4.0 ※ このパネコンは BIOS SETUP 、 FEATURES SETUP 項で使用領域メモリーのマスクが必要です 例) LNKをD000から使う場合 D0000-D3FFF Shadow を Enabled から Disabled に変更 ◎症状 電源を投入したすぐ後のBIOS起動時の「プッ」という音とともにPC-LNKが誤動作。 LNK-048が全ONになったり赤LEDが点灯(通信不具合)になる。 ◎原因 BIOSが初期化時に不正なデータ(&HFF)を書いていると思われる。 ◎確認方法 LNKCHK.EXEを起動して、My lnk address($210) が1、Support address($211)が5であればOk。 もしも255などの値で、mem_initボタンを押して正常復帰するようであれば該当。 尚、起動タイミングによっては完全にフリーズすることがある。この場合はmem_initでは回復しないので 再トライしてください。 ◎対策 起動から通信開始までを遅延(約13秒)したROMと交換。 ROMは弊社技術係までご請求下さい。 ●029 変数<->BCD 変換 000614 変数からBCDへ一発変換するコマンド・関数はありません。 /* 10進 解体 #A=123 #A3=A/100 #A=A-A3*100 #A2=A/10 #A=A-A2*10 #A1=A #PRINT A3 A2 A1 1 2 3 /* 10進 合体 #A4=A3*100+A2*10+A1 #PRINT A4 123 /* 10進 文字変数にして解体 #A=789 #A$=STR$(A) #STRCPY A$ A3$ 0 1 #STRCPY A$ A2$ 1 1 #STRCPY A$ A1$ 2 1 #PR A3$ " " A2$ " " A1$ 7 8 9 # PR VAL(A3$) VAL(A2$) VAL(A1$) 7 8 9 /* 16進 解体 #A=&H123 #A3=A&&HF00/&H100 #A2=A&&HF0/&H10 #A1=A&&HF #PRINT A3 A2 A1 1 2 3 /* 16進 合体 #A4=A3*&H100+A2*&H10+A1 #PRX A4 0123 ●028 MPG-3202とオリエンタルモータ CFK,PMCシリーズのパルス信号の接続 000428 CFK,PMCシリーズのパルス入力はC-MOSレベル入力です。 SGを共通にして、3202のパルス出力の負論理側(-)をドライバと接続します。 MPG-3202 MOTOR DRIVER ---R-->5V CW(+) □1 | 3.3KΩ CW(-) □2 ---------------□---+----R--- CWパルス入力 100Ω ---R-->5V CCW(+)□3 | 3.3KΩ CCW(-)□4 ---------------□---+----R--- CCWパルス入力 100Ω SG □25---------------□---信号入力用GND端子 ==== ------□---+5V | PS | ロジック用電源入力 ==== ------□---GND ==== ------□---+24V | PS | モータ用駆動電源入力 ==== ------□---GND (参考:PMCシリーズの取り説) ●027 MPG-68KからMPG-405に交換したらPULSEコマンドが異常? 000407 【 Q 】 PGボードをMPG-405に交換すると、PULSEコマンドのところが高速で動作します。(およそ4,5倍くらいか?) なぜ? 【 A 】 MPG-68KとMPG-405のPULSEコマンドは仕様が異なります。 パラメータは3つで、スピードは周波数を設定します。 情報不足で申し訳ありませんでした。 _■書 式 PULSE axis acnt h axis 軸 1〜8 (1:x-cw 2:x-ccw 3:y-cw 4:y-ccw 5:u-cw 6:u-ccw 7:z-cw 8:z-ccw) acnt パルス数 h パルス周波数 _■解 説 定速パルス発生です。hで指定された周波数でacntパルスをa xisで指定された軸に出力します。 第3パラメーターには周波数を設定します。 デューティーは50%固定です。 |<-1/h sec->| _____ _____ | | | | ----- ----- ----- ●026 684でDC5Vを外部から供給する場合 000307 MPS-324やBUSからDC5Vを供給する場合は、68Kと同じくF1(68KはJP1)を抜いてください。 この場合でもDC24V(J5)は給電して下さい。 システム構成が3ラックとなる場合はCPU、電源ボードは中央のラックに配置してください。 ●025 WAIT A=1 などとするとタスク効率が悪くなる 000307 WAITに変数を与えるとタスクの効率は悪くなります。 変数条件待ちのタスクが多いほど全体の効率は下がります。 これは、とくにバグというわけではなく、現在の仕様です。 基本的には変数の条件待ちはしないほうがよいです。 タスク間のインターロックにはメモリーI/Oを用います。 ただしこれは68Kでは効果的ですが、684ではもともと内部効率がよいので それほどの効果はありません。 タスク効率が著しく低下するのは DO-LOOPで演算を繰り返実行するなどです。 DO A=A+1 /*タイマ要素の無いDO LOOP LOOP 【実験PRG】 10 TASKC=1 20 A=0 30 FOR I=1 TO TASKC 40 FORK I *WAITTASK 50 NEXT I 60 SYSCLK=0 70 FOR I=1 TO 50000 80 ON 0 90 NEXT I 100 PRINT SYSCLK 110 END 120 *WAITTASK 130 WAIT A==1 140 END 【結果 SYSCLK数】 ◆MPC-684 REV-3.70f 130 WAIT A==1 のとき TASKC=1のとき 746 TASKC=23のとき 853 130 WAIT SW(-1)==1 としたとき TASKC=1のとき 745 TASKC=23のとき 822 ◆MPC-68K REV-2.68j 130 WAIT A==1 のとき TASKC=1のとき 1398 TASKC=23のとき 2265 130 WAIT SW(-1)==1 としたとき TASKC=1のとき 1387 TASKC=23のとき 2011 ●024 MPC-684 コプロを必要とするコマンド 000222 2000/2/22現在コプロで実行されるコマンドは下記のものです。 AFFIN GETDG ATAN2 TAN SIN COS ATAN 不動小数点演算(整数インタプリタのため簡易方式) ※コプロ未搭載でこれらを実行するとシステムがサスペンドします。
●023 ACCELコマンド実行時間について 000218 ACCELを実行するとPGコマンドで引当てられたMPGが加減速テーブルを作成します。 MPG-68Kの場合この加減速テーブルは内部ソフトの演算により作成され、 最高速や加減速域の違いで所要時間が変化します。 【 実測 】 10 PG &HE0 20 PUT &H15 /* FTMW32 STOP watch start 30 ACCEL 1000 10000 100 40 PUT &H16 /* FTMW32 STOP watch stop 30 ACCEL 5000 5000 100 のとき 約1.5sec 30 ACCEL 10000 10000 100 のとき 約3.1sec 30 ACCEL 1000 1000 100 のとき 約0.3sec 30 ACCEL 1000 10000 100 のとき 約3.1sec ※MPG-405はパルス発生ICのレジスタへ書き込む(加減速の演算はしない)ので瞬時に終了し、所要時間は一定です。 ●022 MPG-405の拡張ACCELコマンド 000216 拡張ACCELコマンドは軸別に加減速レートを設定するときに使用します。 宣言は各軸毎に@拡張ACCELA標準ACCELの順に行います。 軸の順番は前後してもかまいません。(@XYAUBZが@ZAXYBUでもOK) /* XY ACCEL 0 &H41 /* 4倍 ACCEL 100000 /* U ACCEL 0 &H02 /* 1倍 ACCEL 50000 /* Z ACCEL 0 &H03 /* 1倍 ACCEL 25000 ※全軸同一設定なら標準ACCELで400Kppsまで設定できます。 ※「ユーザーズマニュアル'97」P6-9 ACCELの解説で「ACCEL 0 &H40 --X+Y軸に対して4倍に設定」 とあるのは「ACCEL 0 &H41 --X+Y軸に対して4倍に設定」の誤りです。 ●021 文字列変数の文字数 000216 メモリー内には32個分の連続した文字列変数エリアがあり、1個あたり130文字分のメモリが割り当てられています。 しかし、文字格納時の文字数チェックは無いため、文字列を連結して130文字を超えてしまうと 次の文字列変数を侵食します。 例えば下記のように a$,b$,c$,d$,e$,f$,g$が連続してあります。(使われた順番に並びます) 30文字ずつ入ったa$からe$までを連結してf$に入れます。 すると20文字g$にはみ出してしまします。この場合でもf$は150文字の文字列変数として扱えます。 つまりg$の内容を無視すれば、f$は130*2文字の文字列変数として扱うことができます。 #vlist ・・現在定義されているラベル ・・現在定義されている定数 ・・現在定義されている変数 int timer int SYSCLK int TASKN char* time$ char* date$ char* a$ char* b$ char* c$ char* e$ char* f$ char* g$ char* d$ ・・予約文字列(比較演算子・関数・配列ラベル) == >= => <= =< <> >< SW HSW IN HIN PEEK NOT ABS IOR SWP HEX$ CHR$ RSV RLS P_SW P_IN ASC SQR SQ LEN INP$#0 INP$#2 VAL LOF STR$ P_HSW INPUT$ TASK X Y Z U P WS0 WS1 WIR PEEK HPT BSY PL1 PL2 PL3 PL4 ADR RSE MC MCT PGS INP$#3 INP$#4 ZC CMN LCL LNK MX MR M_X PEEKB AR$ INP$#5 INP$#6 MBK REG REG3 #a$="12345678901234567890123456789!" #b$="12345678901234567890123456789#" #c$="12345678901234567890123456789$" #d$="12345678901234567890123456789%" #e$="12345678901234567890123456789&" # #f$=a$+b$+c$+d$+e$ #print f$ /* 実際には150文字入っていますがftmw32の都合で100文字しか表示できません。 12345678901234567890123456789!12345678901234567890123456789#12345678901234567890123456789$1234567890 #print g$ /* はみ出した20文字 1234567890123456789& # (確認バージョン MPC-68K ADVFSC(r)m REV-2.68g) ●020 MPC−68Kシリーズ 消費電流 000215 001208 <<消費電流 (内部5V)>> MPC-684 300mA(Hi FCLK時500mA) MPC-68K 250 MPG-68K 150 MPG-405 180 MPG-314 200 MOP-048 80 MIP-048 30 IOP-048 50 MIP-096 100 MOP-096 200 MPG-3202 200 MBK-68 200 MRS-402 50 MPC-LNK 150 MPC-SLNK 200 MPC-68Kの供給能力は1A(自己含む) これを超える場合はMPS-324使用 ●019 MBK−68 T1のピン配 000215 MPC-68K/684の5V供給能力は自己消費も含めて1Aまでです。 不足した場合は3A電源ボード「MPS-324」を用いますが、「MBK-68」を使用していれば T1にパワーサプライから5Vを給電することが出来ます。 T1 ------- | 4 | 3 | J3 |---|---| ____ | 2 | 1 | |oooo| =========================基板 1 , 3 番ピン +DC(+5V) 2 , 4 番ピン GND コネクタ メーカー :モレックス 実装側 :5569-04A1 ケーブル側 :5557-04R ※基板シルク印刷のピン番は違うので注意して下さい ●018 HOMEコマンドを実行するとタスクスワップが遅くなる? 000201 {MPC-684} 【 Q 】 HOMEコマンドを実行中のタスクがあるとタスクのスワップが遅くなり、 全体のパフォーマンスが下がるような気がする。 HOMEコマンド特有の何かがあるのか? 【 A 】 下記のprgで実験しましたがHOMEコマンドによるスワップ効率の低下はありません。 インタプリタの仕様からもHOMEコマンドによる効率の低下は考えられません。 HOME実行中に他のタスクで何かしていませんか? 【実験した684のバージョン】 MPC-684 ADVFSC(r)eREV-3.70b BASIC like + multi tasking Created by ACCEL Co.'91~99 【実験PRG基本形】 10 PG &HE0 20 ACCEL 10000 30 PG &HE0 1 40 FORK 1 *PG 50 PUT &H15 ←スタート 60 FOR I=0 TO 100000 70 ON 0 80 NEXT I 90 PUT &H16 ←ストップ 100 END 110 *PG 120 RMOV 10000000 0 0 ←上のFOR~LOOP中パルス発生持続 130 SHOM &H5 5000 140 HOME &H5 200 200 0 ←上のFOR~LOOP中パルス発生持続 150 END RMOVを実行したとき 120 RMOV 10000000 0 0 130 'SHOM &H5 5000 140 'HOME &H5 200 200 0 約13.6sec HOMEを実行したとき 120 'RMOV 10000000 0 0 130 SHOM &H5 5000 140 HOME &H5 200 200 0 約13.6sec タスク起動無し 40 'FORK 1 *PG 約13.6sec 【後日談】 やはり、HOME時に裏タスクのDO〜LOOPで、インタプリタにとって重い仕事をしている。 ●017 RUN後に"間"が空く 000201 {MPC-684} 68KはRUN直後にメッセージを表示してから、プログラムの整理をしてFROMに書き込みます。 684はプログラムを整理した後メッセージを表示してFROMに書き込みます。 つまり整理と表示が逆になってしまい、"間"があきました。 バグといえばバグですが、実害は無いので、折を見て直します。 ●016 MPC-68K プログラム・ポイント・配列変数のサイズ 000127 ◆MPC-68K L model プログラム :340Kbyte (1ステップ20バイトとして17000ステップ) ポイントデータ数 :5000個 配列 :15配列 全5000個 M model (出荷時) プログラム :230KByte (1ステップ20バイトとして11500ステップ) ポイントデータ数 :10000個 配列 :15配列 全10000個 S model プログラム :168KByte (1ステップ20バイトとして8400ステップ) ポイントデータ数 :200個 配列 :15配列 全2000個 ※EP-ROM時代はSモデルを標準としていましたが、現在はMモデルが出荷時状態です。 L,Sモデルへはシステムローダーで変更します。 ◆MPC-684 (Rev-3.70c 00/02/23) プログラム :500KByte (1ステップ20バイトとして25000ステップ) ポイントデータ数 :10000個 配列 :15配列 全10000個 ●015 MBKでGPの2ワード(32ビット)データを読み込む方法 000125 MBKのIN()は通常1ワード読み込みです。 2ワードのデータは2回に分けて読み、上位を2バイトシフトします。 例えば、500と501の2ワードデータを読み込むには (500〜501には1234567が入っているとすると) HDAT=IN(50100) LDAT=IN(50000) DAT=HDAT*&H10000+LDAT PRINT DAT 1234567 ●014 MPG-68K アドレス設定 000121 (SP2 OPEN,SP3 OPEN) SW2 SW1 PGアドレス E 0 &HE0 出荷時 E 4 &HE4 E 8 &HE8 E C &HEC F 0 &HF0 F 4 &HF4 F 8 &HF8 F C &HFC (SP2 SHORT,SP3 OPEN) SW2 SW1 PGアドレス E 0 &H100 E 4 &H104 E 8 &H108 E C &H10C ●013 MPG-3202 ティーチングサンプルプログラム 000120 {684} /************************************************************ /* MPC-684で拡張されたRSE(1)を使ったティーティング /*----------------------------------------------------------- /* RSE(n)はRS-232Cポートのエラーを検出する関数ですが、 /* n=1 のときはCH1(PRGポート)からの1キャラクタ入力となります。 /* サポート MPC-684 ADVFSC(r)eREV-3.70c (000120) /************************************************************ *__BEGIN GOSUB *GP_SET DO GETCHR=RSE(1) SELECT_CASE GETCHR CASE &H58: GOSUB *XCW /* X key CASE &H78: GOSUB *XCCW /* x key CASE &H51: /* Q key CASE &H71: PRINT "おしまい " : END /* q key CASE_ELSE : PRINT "invalid data" END_SELECT LOOP *XCW ST_REG &H101 10 /*出力パルス数 CMND &H1A0 /*動作完了フラグリセット CMND &H102 /*定速インデックス駆動(+)実行 GOSUB *WAIT_CMP RETURN *XCCW ST_REG &H101 10 /*出力パルス数 CMND &H1A0 /*動作完了フラグリセット CMND &H103 /*定速インデックス駆動(-)実行 GOSUB *WAIT_CMP RETURN *GP_SET ST_REG &H100 250 /*周波数倍率 ST_REG &H103 100 /*起動周波数 ST_REG &H152 1 /*カウンタA=内部発振パルスカウント CMND &H150 /*カウンタA リセット RETURN *WAIT_CMP WAIT REG(-1)=&H20 /* 動作完了待ち PRINT REG3(&H121) /* カウンタA 表示 WHILE LOF(1)<>0 dummy=RSE(1) WEND RETURN *__END ●012 システムローダーが動かない 000120 {684} ボクのDESK TOP PCでシステムローダーが「MPCの電源が入りました」状態のままフリーズ。 【 原因 】 MPC-684のシステムローダーのボーレートは19200bps。 PC RS-232Cポート → 自作中継ケーブル → D-SUB25雄雌変換アダブタ →RS-232C分配器 → MPC prgケーブル → MPC-684 という接続で信号が減衰し 19200bps でNG。 それに加えて自作中継ケーブルのバンダ付けが良くなかった。 (´o`; トホ ●011 LOAD時間比較 000119 約8300行(約260Kバイト)のプログラムを読み込んだ場合 68K 9600bps 816sec 68K 19200bps 740sec 684 9600bps 508sec 684 19200bps 422sec 684 38400bps 385sec ※ ※ケーブル等の条件により文字化けの可能性が高くなります。 実用範囲は19200まででしょう。 ●010 クロックスピード変更コマンド 000119 <<FCLK>>システム ・・{MPC-684}クロックスピード変更 FCLK n n:変数、定数 nの値 クロック(MHz) -5 11.53 MPC-68K相当 -4 12.58 -3 13.63 -2 14.64 -1 15.73 0 16.78 1 17.82 2 18.87 3 19.92 4 20.97 5 22.02 デフォルト 6 23.06 要クーリング 7 24.12 要クーリング *** MPC-684のクロックスピード変更。 MPC-68Kの実行速度に依存する タイミングがある、などの場合は クロックスピードを調整してください。 電源OFFで初期状態に戻ります。 ●009 プログラムポートのボーレート変更 000119 {MPC-684} ----------------------- | | SP7 | SP8 | ----------------------- | 9600 | OPEN | OPEN | | 19200 | SHORT | OPEN | | 38400 | OPEN | SHORT | ----------------------- ※出荷時は9600bps ●008 MPC-68K〜デジタル社GP 通信サンプル メモリリンクプロトコルのチェックサム付き拡張アスキーモードの通信サンプルです。 アスキー互換モードは通信エラーのチェックができません。 チェックサムを確認することにより信頼性が向上します。 【GPの設定 (GP377R-TC)】 初期設定→I/Oの設定→通信の設定 伝送速度 9600 データ長/ストップビット 8/1 パリティビット 無し 制御方式 X制御 通信方式 RS-232C 動作環境の設定→モード選択 通信プロトコル 拡張 動作環境の設定→拡張モード設定 通信形式 1:1 通信形式 アスキー ETX,チェックサム 有 ターミネータ CR (次頁) ACK 有 NAK 有 【PRG】 *INIT CNFG#0 "9600b8pns1NONE" *MAIN DO FOR DAT=0 TO &HF ADR=600 GOSUB *GP_WRITE /*ADR=500 GOSUB *GP_READ IF ANS<>DAT THEN PRINT "DATA CHECK ERROR" ELSE OUT ANS 0 END_IF NEXT DAT LOOP END *GP_WRITE /* GPへ書き込み ADR$=HEX$(ADR) /* アドレスデータを作成 FOR I=3 TO LEN(ADR$) STEP -1 ADR$="0"+ADR$ NEXT I DAT$=HEX$(DAT) /* 書き込みデータ作成 FOR I=3 TO LEN(DAT$) STEP -1 DAT$="0"+DAT$ NEXT I COM$=CHR$(&H1B)+"W" COM$=COM$+ADR$+"0001"+DAT$ /* 0001はデータ数 ' CHKSUM=0 /* チェックサムの計算 FOR STRCONT=0 TO LEN(COM$)-1 STRCPY COM$ TMP$ STRCONT 1 CHKSUM=CHKSUM+ASC(TMP$) NEXT STRCONT CHKSUM=CHKSUM&&HFF CHK$=HEX$(CHKSUM) IF LEN(CHK$)=1 THEN /*チェックサムが1桁なら0を付加 CHK$="0"+CHK$ END_IF 'PRINT "CheckSum " HEX$(CHKSUM) ' COM$=COM$+CHK$+"\r" PRINT#0 COM$ WAIT LOF(0)>0 TMP$=INP$#0(1) SELECT_CASE ASC(TMP$) CASE &H06 'PRINT "ok" CASE &H15 PRINT "error" CASE_ELSE PRINT "unknown" END_SELECT GOSUB *RS0_BUFCLR RETURN *GP_READ /* GPから読み込み ADR$=HEX$(ADR) /* アドレスデータを作成 FOR I=3 TO LEN(ADR$) STEP -1 ADR$="0"+ADR$ NEXT I COM$=CHR$(&H1B)+"R" COM$=COM$+ADR$+"0001" /* 0001はデータ数 ' CHKSUM=0 /* チェックサムの計算 FOR STRCONT=0 TO LEN(COM$)-1 STRCPY COM$ TMP$ STRCONT 1 CHKSUM=CHKSUM+ASC(TMP$) NEXT STRCONT CHKSUM=CHKSUM&&HFF CHK$=HEX$(CHKSUM) IF LEN(CHK$)=1 THEN CHK$="0"+CHK$ END_IF 'PRINT "CheckSum " HEX$(CHKSUM) ' COM$=COM$+CHK$+"\r" PRINT#0 COM$ TMP$=INP$#0(1) RES$="" SELECT_CASE ASC(TMP$) CASE &H1B 'PRINT "ok" WAIT LOF(0)>8 RES$=INP$#0(8) GOSUB *RS0_BUFCLR CASE &H15 PRINT "error" GOSUB *RS0_BUFCLR CASE_ELSE PRINT "unknown error" GOSUB *RS0_BUFCLR END_SELECT 'PRINT RES$ ' IF RES$<>"" THEN CHKSUM=&H1B /* 最初のESCコード FOR I=0 TO 5 /* "A"からETX(&H03)まで足す STRCPY RES$ TMP$ I 1 CHKSUM=CHKSUM+ASC(TMP$) NEXT I CHKSUM=CHKSUM&&HFF STRCPY RES$ TMP$ 6 2 /* チェックサムデータ部分の取りだし GETSUM=VAL("&H"+TMP$) /* チェックサムデータを変数化 IF GETSUM<>CHKSUM THEN PRINT "check sum error" ELSE STRCPY RES$ TMP$ 1 4 /* データ部分を取りだす ANS=VAL("&H"+TMP$) END_IF END_IF RETURN *RS0_BUFCLR DO /* バッファクリア TMP$=INP$#0(1) LOOP UNTIL TMP$=CHR$(&HD) RETURN ●007 電源を切ると変数が化ける? フラッシュROM版MPC-68KはRUNの時、prgと一緒に変数エリアもフラッシュROMに書き込みます。 書き込まれたデータはパワーオンでSRAMに展開されます。 つまり、自動実行時に変数の値が変わってもパワーオンリセットした時点で、RUNで書き込まれた時点の値へ戻ってしまいます。 バックアップ変数はポイントデータを使用してください。 ポイントデータはフラッシュROMにR/Wされません。 ●006 MOP-048 prgで操作していないのに勝手に出力 【症状】 MOP-048 ON 122,124状態で ON 120,121すると 勝手に 137,138,140,142がONする。 IN(17)で見ると0 ボード構成 << RACK#1>> (1)MPC-68K (2)MPC-LNK (3)MPG-405 (4)MPG-405 (5)MPG-405 (6)MPG-405 << RACK#2>> (7)MPG-405 (8)MPG-405 (9)MPG-405 (10)MPG-68K (11)MPS-324 (12)MOP-048 << RACK#3>> (13)MOP-048 (14)MOP-048 /*このボード の出力がおかしい (15)MIP-048 (16)MIP-048 (17)MIP-048 (18)MIP-048 【原因】 BUS反射 【対策】 RACK#1のMPC-68KをRACK#2へ。 3ラックになったらCPU、電源は真中へ。 ●005 文字列処理でprg停止 【症状】 文字列処理コマンド・関数 (INPUT#、INP$#、PRINT str$、str$=a$+b$ など)でprgが停止する 【原因】 文字列処理中に外部タスクからQUITされると、文字列処理のためのテンポラリメモリを開放できず、以降の処理ができなくなる。 【対策】 文字列処理中にはQUITしない。 ●004 ポイントデータ破壊 991201 【症状】 MPC-68Kのポイントデータの特定のエリアが特定の数値に変わった。 SETP 1 808464432 808464432 808464432 808464432 /* 808464432=&H30303030 SETP 2 808464432 808464432 808464432 808464432 (中略) SETP 120 808464432 808464432 808464432 808464432 SETP 121 808464432 808464384 0 0 /* 808464384=&H30303000 SETP 122 0 0 0 0 【原因】 特定エリアのデータ破壊の原因としては、 ・ 電磁波によるもの、 ・ RAMの素子そのものの劣化・初期不良、 ・ ユーザプログラムのバグによる ・ 電源の瞬間停電 などが考えられるが、本件のような意味ありげな数値(&H30)で埋まるというのはどういうことだろうか? 電磁波、瞬間停電、素子の劣化ではこのようなことはまず起りえないし、ユーザーprgにもバグは見あたらない。 明確な原因は特定できなかったが、2つの原因を想定して実験を行った。 【 実験 1 】GPとの通信に異常があった場合 << 仮説 >> 本件の装置はMPC-68KのRS-232Cユーザーポートを使ってデジタル社のタッチパネルと常にメモリーリンク通信を行っている。 GP-377RへのRコマンドで大きな読み込みデータ数を与えると大量の"0"(&H30)が返ってくる。 GPのプロトコルマニュアルにデータ数は 0000〜0040と記載されているが、その範囲以外の数値を与えてもエラーにはならない ( 0F0F位から上位通信エラーになるようだ) 正しくは PRINT#0 ESC$+"R"+"0064"+"000C"+CR$ と送信されるデータがノイズなどで不正になったと仮定する。 << 実験 >> 1 NEWP 2 RD$="000F" 3 RD1$="" : RD2$="" 4 PRINT#0 ESC$+"R"+"0064"+"0542"+CR$ /* 不正な読み込みデータ数 5 INPUT#0 RD2$ : TIME 2 6 PRINT P(121) 7 END << 結果 >> #pls 120 点120 X= 808464432 Y= 808464432 U= 808464432 Z= 808464432 /*808464432 = &h30303030 点121 X= 808464432 Y= 808452096 U= 0 Z= 0 /*808452096 = &h30300000 点122 X= 0 Y= 0 U= 0 Z= 0 GPから5384個の"0"(&H30)が返って来て、ポイントデータエリアが侵食された。 0542という数値に特に意味はないが、この値で今回の不具合内容と酷似。 P121が808464384にならないのは不明 (&H30が1個少ない)。 << 対策案 >> 本prgはアスキー互換プロトコルで、エラーに対しては無防備。 ソフト的な対策としては ・GPとの通信をチェックサム有りのプロトコルにする ・INPUTでまとめて入力するのではなく、INP#$で1文字ずつカウントしながら受信する ・受信前にLOFでキャラクタ数を確認する。 など。 RS-232C ch0は255バイトのリングバッファになっており、これを超えてもオーバーフローすることはないが INPUT#で受信待ち状態ではバッファから即座に文字列変数へ取り込まれる。 【 実験 2 】文字列変数の処理の異常 << 仮説 >> サブルーチン*W2の変数STRCNTの値が不正となり非常に多くの"0"が文字列変数W$に結合されたと仮定する。 *W2 W$="" STRCNT=B-LEN(W1$) DO WHILE STRCNT<>0 W$=W$+"0" STRCNT=STRCNT-1 LOOP << 実験 >> オリジナルprgの先頭に下記prgを追加してRUN 1 NEWP 2 WD2$="" 3 FOR BYTE=1 TO 5647 4 PRINT BYTE 5 WD2$=WD2$+"0" 6 NEXT BYTE 7 END (この処理には時間がかかる 239Sec) << 結果 >> #pls 120 Point120 X= 808464432 Y= 808464432 U= 808464432 Z= 808464432 Point121 X= 808464432 Y= 808464384 U= 0 Z= 0 Point122 X= 0 Y= 0 U= 0 Z= 0 文字列変数エリアを超えてポイントデータエリアまで"0"が書き込まれる。 5647という数値の意味は不明。 << 対策案 >> データ結合前に変数の数値を確認する。 << 付記 >> これらはあくまでも可能性。 どちらの場合もMPC-68Kがハングアップしたりエラーを表示することはない。 <<総合的な対策案>> INPUT#受信後にデータ長、内容チェック。 ポイント移動前にデータチェック。 SP、LPはSRAMの固定エリアに保存される=FROMを交換しても残る。 SmodelでSPにより点データ保存。もし壊れていたらLPで復旧。 SRAMデータのチェックはチェックサム。 (SP,LP(sモデルのみ),P_LD,P_SV参照) ●003 MPC-68K RUNすると Illegal instruction エラー 【症状】 RUNすると Illegal instruction (1111) になる。((1111)は有ったり無かったり) 【原因】 自分自身のタスクをFORK。 【対策】 自分自身をFORKしない。 /****************************************** /* Illegal instruction の再現 /*<このプログラムをloadして> /* プログラム整理中!! 整理後ROMに書き込みます。-----+++++Ok /* Illegal instruction /* #RUN /* Hexadecimal number expected /* こういう表示も有る /* Illegal instruction (1111) /* 表示が無いときもある /****************************************** /*確認 991118 /* MPC-68K ADVFSC(r)m REV-2.68g /* BASIC like + multi tasking /* Created by ACCEL Co.'91~99 /****************************************** *__BEGIN FORK 1,*TASK1 END *TASK1 FORK 1,*TASK1 /* 自分をFORK *__END ●002 ACCELコマンドでハングアップ 【症状】 prgをRUNするとACCELコマンドでハングアップ。 ダイレクト入力で復帰する。 【原因】 ACCELパラメータ化け。=ACCEL実行中のTASKを再FORK。 ●001 SELECT_CASE文でCASE_ELSEを省略しないで下さい CASE_ELSEは必ず記述して下さい。68K動作不安定の原因になります。 SELECT_CASE vari CASE 0 : GOTO *job CASE_ELSE : PRINT "invalid data" END_SELECT ---END---