プロが教えるわが家の防犯対策術!

デジタイザーという数値変換機を使ってグラフを数値化するプログラムを
作成したいと思っています。
デジタイザーはPCに認識済みでプログラム中でOPEN文でCOM1ポートを
開こうと思っていますが、実行するとエラーが出てしまいます。
通信ポートや通信速度等の設定は問題ないと思われます。
どなたか詳しい方がいらっしゃったら教えてください。
お願いします。

下にプログラムの一部を記します。
このプログラム中の4680行で
メッセージの定義されていないエラーです、と
エラーが必ず出ます。
他に何か間違いがあったら指摘して貰えたら嬉しいです。

4220 CLS 3
4230 WINDOW(0,0)-(639,399)
4240 VIEW(0,0)-(639,399)
4250 DIM X(1000),Y(1000),Q(12000)
4260 INPUT "FILE NAME >> ";AA$
4270 BB$="C:\"+AA$+".FCV"
4280 AA$="C:\"+AA$+".DAT"
4300 INPUT "何分?",TTTT : INPUT "AU?",AAAA
4305 CHANGE=TTTT/3
4310 INPUT "カラム温度は";CT
4320 INPUT "流量は";FR
4325 INPUT "空隙率は";E
4326 CLS 3
4330 FOR I=0 TO 3
4340 LINE(100+I,40+I)-(500-I,300-I),5,B
4350 NEXT I
4580 WINDOW(40,40)-(3880*CHANGE,3860)
4590 VIEW(100,40)-(500,300)
4610 FOR I=1 TO 7
4620 LINE(40+I*500*CHANGE,3860)-(40+I*500*CHANGE,3700),5
4630 NEXT I
4650 FOR I=1 TO 7
4660 LINE(40*CHANGE,3860-(40+500*I))-(150*CHANGE,3860-(40+500*I)),5
4670 NEXT I
4680 OPEN "COM:N83NN" FOR OUTPUT AS #1
4690 OPEN AA$ FOR OUTPUT AS #2
4700 BEEP

A 回答 (6件)

こんばんは。


お使いの環境は N-88BASIC(86)でしょうか。
DOS版 N-88BASIC(86)で、上記のプログラムを実行してみましたが、
問題なく動作しました。
そちらの環境が分かりませんので想像ですが、
「メッセージの定義されていないエラーです」というエラーは、
たぶん未定義のエラーという意味だと思いますので、
プログラムの他の行で、"ON ERROR GOTO" 文を使っているのなら、
その部分で何か仕掛けがしてあるのかもしれません。

その他は、N88BASIC本体が壊れているとか、
RS-232Cポートに何か問題でもあるとか、
BASICを実行できる他の環境で実行してみる等、
そのあたりを、もう一度調べてみてはどうでしょうか。

この回答への補足

さっそくのお返事ありがとうございます。
すいません、環境を書くのを忘れていました。
N88互換BASIC for Windows95という
フリーソフトを使用しています。
指摘していただいた、"ON ERROR GOTO"文は使っていません。
RS-232Cポートは何度も確認しましたが、問題はないと思います。
現在、通信ポートCOM1に接続していると思うのですが、
今現在どの通信ポートに接続しているのかを確認する方法はあるのでしょうか?
デバイスマネージャーでは確認できませんでした。
また、DOS版 N-88BASIC(86)とはいかなるソフトなのでしょうか?
フリーで配布されているのでしょうか?
質問が増えましたが、初期の質問ともどもヨロシクお願いします。

補足日時:2001/06/30 00:49
    • good
    • 0

こんばんは。

Takochu です。
"N88互換BASIC for Windows95 Ver1.10"をダウンロードし、
問題のプログラムを実行してみましたが、
エラーは出ませんでした。

> 現在、通信ポートCOM1に接続していると思うのですが、
> 今現在どの通信ポートに接続しているのかを確認する方法はあるのでしょうか?
> デバイスマネージャーでは確認できませんでした。

デバイスマネージャーで確認できないということは、
当然、通信はできないと思います。
"コントロールパネル"の"ハードウェア"を実行して、
Windows上から認識できるように試みて下さい。
認識できれば、エラーは消えるんじゃないでしょうか。

> また、DOS版 N-88BASIC(86)とはいかなるソフトなのでしょうか?
> フリーで配布されているのでしょうか?

NECから発売されている、DOS上で動作する、純正のBASICです。
(現在は、発売されていないかもしれません。)
たぶん定価で4~5万円位します。
今更、買う価値のあるものではないでしょう。

この回答への補足

Takochuさん、たびたびスイマセン。助かります。
通信ポートに関してですが、
デジタイザーに添付のドライバーを使ってマウスとして
認識していたので、既にポートが開いていて
エラーが出たのかもしれません。
1回、デバイスマネージャでデジタイザー関連のデバイスを
削除しなおしたら、マウスとしてではなく認識できました。
(言っている意味が???であるとは思いますが、すいません)
フリーのデジタイザーを使うソフトをDLして試しましたが、
今回は大丈夫なようで、デジタイザーとして認識しているようです、
ちなみに、デバイスマネージャのポート(COMとLPT)の
通信ポートCOM1は表示されているのですが、特に何が接続しているとは
表示されていません。これは問題ないのでしょうか?

プログラムに関してですが、エラーも無く先まで進むことが出来ました。
が、デジタイザーのカーソルをクリックしてもプロットもされず、
数値かもされません。デジタイザーのコマンドの設定がいけないのでしょうか?
この先のプログラムで何か問題のあるところがあるようでしたら
指摘して貰いたいと思います。お願いします。
4680 OPEN "COM:N73NN" FOR OUTPUT AS #1 'RS232Cのオープン
4690 OPEN AA$ FOR APPEND AS #2
4700 BEEP
4710 F=1 'Fボタン 1=Z,2=1,4=2,8=3
4711 I=1             
4720 WHILE (F=1)
4730 BEEP
4740 PRINT #1,"P" 'デジタイザーをPモードへ
4750 INPUT #1,X(I),Y(I),F
4751 PRINT X(I),Y(I),F
4810 X(I)=((X(I)-40)*12/300)*TTTT
4880 Y(I)=((Y(I)-40)*.05/390)*AAAA*10
4980 PRINT #2,X(I),Y(I)
4990 CIRCLE(X(I)*20!+100,3860-Y(I)*12000),10*CHANGE,6
5010 I=I+1
5020 WEND
5090 CLOSE #1,#2

補足日時:2001/07/02 18:39
    • good
    • 0

こんばんは。

また、Takochu です。

> ちなみに、デバイスマネージャのポート(COMとLPT)の
> 通信ポートCOM1は表示されているのですが、特に何が接続しているとは
> 表示されていません。これは問題ないのでしょうか?

問題ないと思います。それで正常です。
ただ、"通信ポート"の、"プロパティ"の、"ポートの設定"を、
"OPEN" 文の設定と一致させておいて下さい。

プログラムについてですが、
デジタイザーの制御コードを知りませんので、
コマンドの設定や制御方法等は、すみませんが私には分かりません。

「クリックしてもプロットもされず」ということですが、
4751行の PRINT の内容は、表示できているのでしょうか?
表示できているのであれば、おそらくプロットされない原因は、
4580~4590行の "WINDOW" 文と、"VIEW" 文にあると思われます。
それは、なぜかといいますと、これらの命令は、
"N88互換BASIC" ではサポートされていないからです。
しかもサポートされていない命令は、無視されます。

だから、実際には WINDOW の設定は元のままですので、
プロットはできているが、
表示の枠外になっていると思います。

解決方法として以下のような関数を作ってみました。
DEF FNWX(X)=100+X*(500-100)/(3880*CHANGE-40)
DEF FNWY(Y)= 40+Y*(300- 40)/(3860 -40)
参考になれば幸いです。

この回答への補足

Takochu師匠へ。
たびたび、本当にすいません。本当に助かります。
おっしゃる通りで、確かに互換BASICには、"WINDOW" 文と、"VIEW" 文はなく、
無視されているので、最初に指定したグラフ
4330 FOR I=0 TO 3
4340 LINE(100-I,60-I)-(397+I,270+I),5,B
4350 NEXT I
の範囲外にあり、表示されていないと思われます。
今回、私のやりたいことは
PC98に接続されていたデジタイザーのプログラムを
WINDOWS機に接続されている新しいデジタイザーを制御する
プログラムに移行したいのです。
新しいデジタイザーは有効読み取り範囲がA4サイズ(297×210)
で、最初にひくグラフも変えました。
以前記したものと変えてあります。
1ドットを1ミリメールとしてみたのですが。
ここで、"WINDOW" 文と、"VIEW" 文が使えないので、
N88BASICで行っていた横軸(X軸)の時間に対する比例関係が
使えなくなってしまいました。
つまり、横軸はデジタイザーの横の長さに対して60分とか決めていくのですが、
実験時間は、60分だけはなく色々変化するので、
変化に対応できるグラフを表示したいと思っています。
先の質問に対する解答で、参考にユーザー定義をなされていましたが、
この関数
DEF FNWX(X)=100+X*(500-100)/(3880*CHANGE-40)
DEF FNWY(Y)= 40+Y*(300- 40)/(3860 -40)
はどこで使えばいいのでしょうか?
また、表示枠外にプロットさていることに関してですが、
プロットは見えないだけで、実際にはプロットされていて
ファイルに出力されはしないのですか?
実際にやってみても、ファイルは作られるのですが
-96 -2.564E-2
というデータが1つだけ記録されています。
なぜでしょうか?
何から何まで質問ですいません。
よろしくお願いします。

補足日時:2001/07/04 19:03
    • good
    • 0

こんばんは。

またまた、Takochu です。

> この関数
> DEF FNWX(X)=100+X*(500-100)/(3880*CHANGE-40)
> DEF FNWY(Y)= 40+Y*(300- 40)/(3860 -40)
> はどこで使えばいいのでしょうか?

この関数は擬似的に "WINDOW" 文と、"VIEW" 文を
実現させるために考えてみました。
(前回の関数は少し間違っていました。忘れて下さい。)
こういうふうに使用して下さい。

4580 DEF FNWX(X)=100+INT((X-40)*(500-100+1)/(3880*CHANGE-40+1))
4590 DEF FNWY(Y)= 40+INT((Y-40)*(300- 40+1)/(3860 -40+1))
     ・      ・      ・
     ・      ・      ・
4620 LINE(FNWX(40+I*500*CHANGE),FNWY(3860))-(FNWX(40+I*500*CHANGE),FNWY(3700)),5

使用方法は、それぞれ次のように対応しています。

WINDOW(wx0,wy0)-(wx1,wy1)
VIEW(vx0,vy0)-(vx1,vy1)

DEF FNWX(X)=vx0+INT((X-wx0)*(vx1-vx0+1)/(wx1-wx0+1))
DEF FNWY(Y)=vy0+INT((Y-wy0)*(vy1-vy0+1)/(wy1-wy0+1))

プログラムの方を修正可能であれば、
処理速度も考え、もっとスマートに記述できるかもしれません。

また、この方法では、相対座標("CIRCLE" 文の半径など)は
利用できませんので、プログラムの方で工夫して下さい。

あと、ファイルに関してですが、
データが1行だけ出力されるということは、
少なくとも、ループを一回は回っているわけですから、
2回目以降の、デジタイザーの制御方法に
誤りはないでしょうか?
誤りがあって、通信が止まっているのかもしれません。

それとも、COMポートの通信が全く出来ていないと仮定した場合、
ひょっとしたら、以前のデータが
更新されていないだけかもしれません。
一度、"*.DAT"ファイルを削除してみてはいかがですか?

いずれにしても、"PRINT I" を色々な所に付け足してみて、
変数 I の値を追跡してみて下さい。
エラーを特定できると思います。

デジタイザーなんて、使ったことありませんので、
(というか、ぜんぜん分かりません。)
私が答えられるのは、これくらいが限界です。

この回答への補足

Takochu師匠、毎回本当に助かります。
デジタイザーですが、ついにクリックした所の数値化に成功しました。
PCとデジタイザー本体、そしてプログラムの設定をもう一回確認し、
PCとデジタイザー再起動させたら出来ました。
これで、グラフの数値化ができます。
これもTakochu師匠のおかげだと思います。
ですが、プロットの表示がまだなのです。
最後に指摘していただいた、ユーザー定義による
WINDOW,VIEW文の代用は、見事にグラフにメモリを振ることが出来ました。
このプログラムは有効読み取り範囲が縦横共に約38cmの大型デジタイザー用
でして、今回Windowsに接続したのは有効読み取りサイズが
A4サイズ(297×210cm)のものです。これは、教えて貰ったユーザー定義の
応用で何とかなるとしまして、
クリックした点がグラフ内にプロットされるプログラムがどうしようか
迷っています。CIRCLE文をうまく操ればできるのでしょうか?
こうなったら師匠だけが頼りです。
どうぞ、宜しくお願い致します。

補足日時:2001/07/06 00:05
    • good
    • 0

こんばんは。

またまたまた、Takochu です。

> デジタイザーですが、ついにクリックした所の数値化に成功しました。
> PCとデジタイザー本体、そしてプログラムの設定をもう一回確認し、
> PCとデジタイザー再起動させたら出来ました。
> これで、グラフの数値化ができます。

エラーは全て無くなったということですね。
うまくいって良かったですね!
結局、原因は何だったんでしょうか?

あと、プロットの表示が、まだだということですが、

> クリックした点がグラフ内にプロットされるプログラムがどうしようか
> 迷っています。CIRCLE文をうまく操ればできるのでしょうか?

ちょっと意味が分かりにくいです。
プロットされるプログラム部分を、どうしたいのですか?
具体的にお願いします。

この回答への補足

すいませんTakochu師匠、、、。
またよろしくお願いします。
デジタイザーに関してですが、
デジタイザーの設定を変更したあと、
その設定を反映させるためにデジタイザー本体の再起動が必要だったのです。
何事も設定後は再起動させるものなのですね。
お騒がせしてすいませんでした、師匠。
で、プロットの表示についてですが、
明らかに説明不足でした。
デジタイザーのカーソルをクリックした時に、
その位置に対するプロットを
画面のグラフ内に表示させたいのです。
そのプログラムを作りたいのです。
つまり、このプログラムのような相対座標を含む場合の
プロットの仕方を伝授させてもらいたいのです。
また、CIRCLE文の半径などは利用できないと前回指摘していただきましたが、
半径以外ならCIRCLE文は利用できるのでしょうか?
今回もどうぞよろしくお願いします。
失礼します。

補足日時:2001/07/06 22:45
    • good
    • 0

こんばんは。

毎度、Takochu です。

> デジタイザーの設定を変更したあと、
> その設定を反映させるためにデジタイザー本体の再起動が必要だったのです。
> 何事も設定後は再起動させるものなのですね。

初期化の制御命令などは、ないんですか?
そういえば、昔のスキャナもなかったような気がします。

> また、CIRCLE文の半径などは利用できないと前回指摘していただきましたが、
> 半径以外ならCIRCLE文は利用できるのでしょうか?

前回、"CIRCLE" 文には利用できない、と書きましたが、
思い違いをしていました。(^_^;) 以下のようにすれば解決できます。

DEF FNWR(R)= INT( R *(500-100+1)/(3880*CHANGE-40+1))

使用方法は、前回と同様です。

DEF FNWR(R)= INT( R *(vx1-vx0+1)/(wx1-wx0+1))

これで相対座標に対応できます。

なぜ、思い違いをしていたかというと、
例えば、"WINDOW(0,0)-(100,400)" という設定で、
"CIRCLE(50,200),50" を実行すると、
理屈では、非常に横長な円が描かれると思っていたのですが、
実際に確認してみると、画面ちょうどの大きさで普通の円が描かれます。
つまり、"WINDOW"、"VIEW" 文は横軸にしか連動していないのです。
だから、上記の式で十分に対応できます。

4990 CIRCLE(FNWX(X(I)*20!+100),FNWY(3860-Y(I)*12000)),FNWR(10*CHANGE),6

これで、問題が解決したでしょうか。

ところで、以前から思っていたんですけど、
このグラフ、何のグラフですか?
    • good
    • 0
この回答へのお礼

Takochu師匠、返事が遅れてまことに申し訳ございません。
いつも、本当に助かっております。ありがとうございます。
このグラフの説明ですが、
私たちが行っている研究は超臨界クロマトグラフィーというもので、
実験結果としてピークが出てきます。
そのピークを数値変換して解析を行っていきます。
そこで、必要なのがデジタイザーです。
そのピークを数値変換するのに必要なプログラムを作っているのです。
本来ならば、ピークはデジタルマルチメータというもので、
出てきたピークは自動的に数値化されていくのですが
うちの研究室ではデジタルマルチメーターが非搭載のPCですので
わざわピークをプリントアウトしてデジタイザーを使用して
数値化していくのです。
また、質問があったあらその時はどうぞよろしくお願いします。
ところで、Takochu師匠にポイントをつけたいのですが、
これってポイントをつけた時点で質問の解答受け付け終了に
なってしまうのですか?

お礼日時:2001/07/12 13:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!