dポイントプレゼントキャンペーン実施中!

エクセル+VBAで製造工程モニタ(工程実績吸上①対PLC/TakebishiDeviceXPlorer+工程実績吸上②.csvファイルを上位サーバから読出⇒モニタ/分析実施VBA-Prg)を構築し、連続でモニタ運用していますが、発生頻度は少ないですが、②の.csvData読出時に絡むと疑われる(Dataが中途半端)エラーで停止します。
(注)②Dataはサーバ側条件成立でサーバ側で都度上書きされ、モニタ側とのインターロック取っていません。(とゆうか「とれない/できない」・・・)

 エラートラップも試して見ましたが、エラー発生時はDeviceXPlorerの通信Prg記述のクラスモジュールに飛び、原因がはっきりしません。(トラップは見直し中です。)

●現状②のData読出しは『FSO/ Dim bufReadAllTxt As String / bufReadAllTxt = txtStreamObj.ReadAll』の結果を配列に展開しています。

■他方『Open pathname For mode [ Access access lock ] As #filenumber [ Len = reclength ]』のネット上の説明には、OSとのインタロックの記述があり、他のアプリケーションなどから使用申請を遮断とあります。

▲基本的な質問になりますが
▲a:上記FSO/txtStreamObjや、ADO/dbCon.Open/dbRs.Openによる、サーバー側からの.csvDataの吸い上げ時は、上記■の様な「排他使用」のインターロックが効いているのでしょうか?
▲b:FSO/ADOでインターロックを追加できるとしたら、どのような記述になるのでしょうか?

以上、よろしくお願いします。

質問者からの補足コメント

  • siffon9/WindFallerさんありがとうございます。
    (質問再構成です。)
    「実績①工程タイミング制御不可PLC常時監視/Onで読出し→実績②**.csv読出→分析」、②の読出『FSO/ Dim bufReadAllTxt・・・ReadAll』で読出中エラー停止。他方『Open pathname ・・As#filenumber・・』では#filenumberで排他/割込拒否の情報もあります。
    ●そもそもFSO/ADOでサーバー側接続時は排他/割込拒否が効いているのか?
    ▲Application.Interactive=False(Form/KeyBord含め)でFSO/ADO接続中のサーバー上書抑止できるのか?
    ■抑止を有効にするコマンド/プロパティー設定は他にありますか?
    ※電子ゴミ:読出頻度低/Data大な他仕組みでは発生無しです(たぶんOKです。)
    字数で・・・・

      補足日時:2018/02/20 08:42

A 回答 (2件)

最初に、失礼ですが、もう少し、わかりやすく書かれると良いのですが。



>上記■の様な「排他使用」のインターロックが効いているのでしょうか?
「排他使用」のインターロック?

それでは意味がよく分かりません。工業界ではあるのかもしれませんが、VBAでは使わない言葉だと思います。

おそらく「排他制御」のことではないでしょうか。「排他制御」とは複数のアプリで同時に使わせないことです。言い換えれば、「排他制御」は、ファイルの編集のインタラクション(割り込み)を許さないということです。インターロックというのは、複数の命令があっても、最初の命令を優先し同時には、オンにならない設定のことだと思うのです。

>OSとのインタロックの記述があり、他のアプリケーションなどから使用申請を遮断とあります。

「使用申請を遮断」は、「割り込みを拒否」ではありませんか?

「排他制御」が効いていても、マクロの上の読み込みの「排他制御」など、もし、中途で問題が発生すれば、データの吐き出しの前に、マクロがエラーを起こします。

途中の割り込みを禁止させる(排他制御とは違います)
Application.Interactive = False (最初でFalse を宣言して、作業の終わりに Trueで戻します。) 他にも同様のコマンドを加えても良いと思います。

を使います。ふだんはあまり使わないコマンドで、主にユーザーから、実行中に、キーボードから割り込みを入れられたくない時に使うものです。

私が読んで理解した限りにおいて、以下の問題を解決すればよいのではないでしょうか。
>②の.csvData読出時に絡むと疑われる(Dataが中途半端)エラーで停止します。

いつも、こうした問題で、私が申していることですが、その対象ファイル(csvData)の内容が、Text ファイルであると確約できますか。つまりテキストファイルでは除外されているエスケープシーケンスを含む全てのバイナリデータは混入していないか、確認されていますでしょうか。

他の言い方でいうなら、「排他制御」は、この際除外しておいて、まず、「割り込み制御」を設けて、つぎに、テキストのみを通すフィルターを設ければよいのではないかと考えます。そもそも、FSO(FileSystem Object) を使って、bufReadAllTxt これは一括して処理しているようにお見受けしたのですが、電子のゴミも含めてインポートした可能性があるのではと想像しました。テキストファイルのワン・ラインごとに、拾っていったら問題が減るのではないかと考えます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
捕捉を追記いたしましたので、よろしくお願いします。

お礼日時:2018/02/20 08:44

VBAがCSVを読みに行くタイミングはどの様にしているのでしょうか?



私も似たようなプログラムを作ったことがありますが、相手がCSVを更新するタイミングで読みに行くと仰るような障害が発生したので以下の様にしました。

1.CSVの更新時間を定期的(相手側の更新間隔より短い間隔)にチェックする
2.更新されていたら、更新が確実に終了するまで一定時間待ってCSVをローカルにコピー
3.コピーしたCSVを読み取る

相手側のCSV更新頻度、VBAが読みに行くタイミングの取り方によっては使用できないかもしれませんがご参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございました。
捕捉を追記いたしましたので、よろしくお願いします。

お礼日時:2018/02/20 08:44

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