回線異常時の処理についてNo.00155
woods さん 99/01/12 13:26
 
こんにちは。
秀termにて、自動ダウンロードのスクリプトを作っています。
遠隔地にある装置(モデム内臓)に蓄積されたデータを定期的にダウンロードしよう
としています。
非常にシンプルに以下のようなスクリプトを書いています。

window minimize
port removectrls=on
getdate #a
gettime #b
download "datafile",xmodemcrc,overwrite
chdir download
copyfile "datafile" ,#a+#b
restoredir
afterhangup AfterClose
hangup
AfterClose:
closehideterm

上記スクリプトにて正常に動作することは確認できたのですが、
何らかの原因で回線異常が発生した時に、エラー"バイナリ転送中に電話が切れてし
まいました”というポップアップが表示されます。このポップアップの「OK」ボタン
をクリックして、再度リダイアルし、スクリプトを実行させるには
どの様に記述すれば良いのでしょう?

教えてください!

[ ]
RE:00155 回線異常時の処理についてNo.00156
かずや さん 99/01/13 04:41
 
こんにちわ

>何らかの原因で回線異常が発生した時に、エラー"バイナリ転送中に電話が切れてし
>まいました”というポップアップが表示されます。このポップアップの「OK」ボタン
>をクリックして、再度リダイアルし、スクリプトを実行させるには
>どの様に記述すれば良いのでしょう?
スクリプトでは不可能です(^-^;

少し横道にそれますが、σ(^-^)も過去、斉藤秀夫さんに
回線がつながらなかった場合のポップアップを、自動CLOSEしたいと
言ったことがあります

ポップアップウィンドウを閉じるのは、スクリプトでは不可能ですが
秀丸エディタのマクロや、WinBatchEh、Sendkeyなど、特定のウィンドウに
SendMassage(API)を実行できるソフトならば、リターンコード(13)を送れば
ポップアップを閉じることができます

(話は戻りますが)しかし、このような場合は、errorlog文を使えばいいと思います
σ(^-^)は errorlog文を使ったことがないので、詳しくは言えませんが
これで、ポップアップウィンドウ自体がでなくなると思います

そのあとの処理は、こちらで確認できないのでコメントできません

今、ヘルプを読み返してみると、アクセスするごとに設定する必要があるようです
それに、errorlog.txt に追加するだけとしか書いていないので
たぶん、回線切断、リダイアル処理は、スクリプトがすることになると思います
(たぶん、エラーがでた時点でホストからの応答がなくなるから切断するしかない)

>教えてください!
こんなもので参考になったでしょうか(^-^;

[ ]
RE:00156 回線異常時の処理についてNo.00157
woods さん 99/01/13 14:19
 
こんにちわ

ありがとうございます。

>(話は戻りますが)しかし、このような場合は、errorlog文を使えばいいと思います
>σ(^-^)は errorlog文を使ったことがないので、詳しくは言えませんが
>これで、ポップアップウィンドウ自体がでなくなると思います

早速errolog文を試してみました。
確かにポップアップウインドウは出なくなりました。

>そのあとの処理は、こちらで確認できないのでコメントできません

>今、ヘルプを読み返してみると、アクセスするごとに設定する必要があるようです
>それに、errorlog.txt に追加するだけとしか書いていないので
>たぶん、回線切断、リダイアル処理は、スクリプトがすることになると思います
>(たぶん、エラーがでた時点でホストからの応答がなくなるから切断するしかない)

もしも通信中にエラーが起ったときに、リダイアルし、スクリプトの最初から再実行
させるには
どのコマンドを利用すればいいのでしょうか?

何から何まで聞いてすみません。

[ ]
RE:00157 回線異常時の処理についてNo.00158
かずや さん 99/01/14 04:49
 
こんにちわ

>もしも通信中にエラーが起ったときに、リダイアルし、スクリプトの最初から
>再実行させるにはどのコマンドを利用すればいいのでしょうか?
connect文を使います
connect文は、アクセスが成功すると、そこで処理は終了します
失敗すると、そのまま処理は次の行に進みます

アクセスしたあとも、処理を続行するばあいは
「自動起動するスクリプト」を使います

>何から何まで聞いてすみません。
いえいえ、σ(^-^)もよい勉強になります

[ ]
RE:00157 回線異常時の処理についてNo.00159
秀まるお さん 99/01/14 13:19
 
 追加レスしてしまいます。

> もしも通信中にエラーが起ったときに、リダイアルし

 errorlog onとやった場合にエラーが発生しているかどうかの判定は、errorlog.
txtというファイルが存在しているかどうかで判断すればいいです。

 「errorlog on」とやっておくと、秀Term用のディレクトリにerrorlog.txtという
ファイルが作成されるので、エラーが起きたかどうかはそのファイルが存在している
かどうかで確認することができます。

 スクリプトの先頭にて

    delfile "errorlog.txt"
    @@error = 0
    afterhangup HangupProc

 とやっておいて、あと、スクリプトの途中の適当な所にて、

    if( existfile( "errorlog.txt" ) )
        @@error = 1
        hangup
    endif

 のような処理を実行するようにしておいて、

HangupProc:
    if( @@error != 0 )
        delfile "errorlog.txt";
        ;エラーの時のリダイヤルの処理とか...
    endif

 ってな風にすればいいと思います。


[ ]
RE:00159 回線異常時の処理についてNo.00160
woods さん 99/01/14 16:44
 
みなさんありがとうございました。
なんとかかんとか、できました。

> errorlog onとやった場合にエラーが発生しているかどうかの判定は、errorlog.
>txtというファイルが存在しているかどうかで判断すればいいです。

> 「errorlog on」とやっておくと、秀Term用のディレクトリにerrorlog.txtという
>ファイルが作成されるので、エラーが起きたかどうかはそのファイルが存在している
>かどうかで確認することができます。

モデムを内臓している装置に電話をかけて、ロギングを停止するコマンドを送って、
その後、ログをダウンロードして、再びロギングを開始するコマンドを送り、
回線を切断するようなことをしていました。

ところがまれに、ダウンロード中にデータ転送がストップする事があり
回線が切れてしまうことがあったのです。

それで今回、回線が切れた場合のリダイアルをさせようとしていたのです。

ところで、afterhangupコマンドは入れ子になっていてもよいのでしょうか。

afterhangup AbortProc
AbortProc:
 if( existfile( "errorlog.txt" ) )
 connect ”ABC”
 endif

afterhangup AfterClose
 hangup
 AfterClose:
closehideterm

このように、異常終了にて回線切断された場合、ABCに接続しに行きます。
(ちなみに、同じABCで使用するスクリプトに上記内容を記述しています)
異常終了しなかった場合、AbortProc:は実行されずに、
afterhangup以降を処理しています。希望する動きになっているのですが、
もんだいないのですよね。




[ ]
RE:00160 回線異常時の処理についてNo.00161
かずや さん 99/01/15 05:44
 
>ところで、afterhangupコマンドは入れ子になっていてもよいのでしょうか。
afterhangup文の中にafterhangup文を使うということでしょうか?
connect文で、アクセスできた場合、connect文以降は処理されず
そこで、スクリプトは終了してしまうので、無意味だと思います
間違っていたらゴメンなさい(^-^;

>afterhangup AbortProc
>AbortProc:
> if( existfile( "errorlog.txt" ) )
> connect ”ABC”
> endif
>
>afterhangup AfterClose
> hangup
> AfterClose:
>closehideterm
>
>異常終了しなかった場合、AbortProc:は実行されずに、
>afterhangup以降を処理しています。希望する動きになっているのですが、
>もんだいないのですよね。
分かってると思いますが、確認のため・・・
afterhangup文は、回線を切断したあと実行するスクリプトを宣言します
簡単に言えば、切断後のgoto文に相当します

↑の処理では、afterhangup文で、AbortProcラベルに行くようになっていますね
そして、errorlog.txtがあればアクセス、なければ、そのまま下の処理へ

次の処理ですが、'afterhangup AfterClose'そして、この下が 'hangup'と
なっていますが、ここでは既に切断されていると思いますよ
つまり、errorlog.txtがなければ、次に実行される処理は closehideterm文です

↑の処理をσ(^-^)風に書くと・・・
-------------------->>--------------------
afterhangup AbortProc    ;← afterhangup文はスクリプト開始時に記述
 - - - - - - - - - - - - - - - -
AbortProc:          ;← 切断後に実行される
if(existfile("errorlog.txt")) connect "ABC"
else closehideterm
goto AbortProc        ;← アクセスが失敗したときの処理
--------------------<<--------------------
・・・こんな感じです(^-^*)

公開用ならば、フラグを立ててアクセス回数を制限したり
errorlog.txtを処理したり、いろいろ追加しますが
非公開用なら、そこまでする必要ないと思います(笑)

[ ]