tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル応答なし、約1分後に回復
記事No15567
投稿日: 2012/08/13(Mon) 09:17
投稿者南向秀樹
初めての投稿です。

VB.6(SP3)でPOSレジを開発しています。
OSはXPで、DB(MDB:Access 2000)をODBC接続しています。

商品の呼出を、商品コードで商品マスタから呼びだし、
購入品目をスプレッド(SPREAD3)に表示し、
精算時に、合計実績・単品実績・ジャーナルのテーブルに書き込んでいます。

30会計くらい行うと、「応答なし」になってしまいます。
この時、リソースやCPUの稼働率は10%も行っていずマシンに負担はかかっていないよ
うです。
また、MDB自体はAccessで開けるので固まっているようでもありません。
約1分ほどで「応答なし」は自然に解消され、また30会計くらい動き「応答なし」に
なります。

Windows Updateやウィルスソフトは無効にしてみましたが同様です。
別マシンでWindows7の環境を作りましたが同様なので、マシンの特性でもないようで
す。

どのときに、どのタイミングで「応答なし」になると言うことはなく、
なかなか追跡ができずに困っています。
何か思い当たることや、試してみるべき事を教えていただければ助かります。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: 応答なし、約1分後に回復
記事No15568
投稿日: 2012/08/13(Mon) 10:16
投稿者魔界の仮面弁士
> VB.6(SP3)でPOSレジを開発しています。
> OSはXPで、DB(MDB:Access 2000)をODBC接続しています。
OS は XP Embedded でしょうか、XP Professional でしょうか。

VB6 SP3 で開発中とのことですが、XP Pro に付属のランタイムは、
VB6 SP5 のものよりも後のバージョンのものです。互換性維持のために
VB6 SP6 で開発されることを強くおすすめします。

如何に、主だったランタイムバージョンを列挙しておきます。
(なお、XP Embedded には VB6 ランタイムが同梱されていません。Home/Pro/MCEには同梱されていますが)

 Ver.6.0.98.21 : KB983234
 Ver.6.0.98.15 : KB970157, Windows Vista(SP2), Windows Server 2008, Windows 8 Developer Preview
 Ver.6.0.98.02 : KB941029, Windows Vista(SP1)
 Ver.6.0.97.97 : Windows Vista
 Ver.6.0.97.82 : Visual Studio 6.0(SP6), Windows Server 2003(SP1)
 Ver.6.0.96.90 : Windows Server 2003, Windows 2000(SP4), Windows XP(SP2)
 Ver.6.0.96.32 : KB307211
 Ver.6.0.93.30 : SharePoint Services
 Ver.6.0.92.37 : Windows XP, Windows XP(SP1)
 Ver.6.0.91.15 : KB291103, KB297108
 Ver.6.0.89.64 : Visual Studio 6.0(SP5), Commerce Server 2002同梱
 Ver.6.0.88.77 : Visual Studio 6.0(SP4), Commerce Server 2002本体
 Ver.6.0.84.95 : Visual Studio 6.0(SP3), Windows 2000 Server, Office XP, SQL Server 2000(Rel.A)
 Ver.6.0.84.50 : SQL Server 2000, SBS 2003
 Ver.6.0.82.68 : Visual Studio 6.0(SP2), Office 2000
 Ver.6.0.82.44 : Windows NT4(SP4)
 Ver.6.0.81.76 : Visual Studio 6.0


それと、JET 4.0 も最新のものにしておきましょう。
http://support.microsoft.com/kb/239114/ja


> 精算時に、合計実績・単品実績・ジャーナルのテーブルに書き込んでいます。
> 30会計くらい行うと、「応答なし」になってしまいます。
プログラム中のどの行を実行したときに時間がかかっているかを特定できていますか?

それともVB側ではなく、SPREAD3側に問題がありそうなのでしょうか。
SPREAD 側は最新版(3.0.0.52)に更新してありますか?



> 約1分ほどで「応答なし」は自然に解消され、また30会計くらい動き「応答なし」に
> なります。
処理に時間がかかっているか、メモリの確保と解放に時間がかかっている感じです。
コード側の問題なのか、コンポーネント側の問題かを特定し、SPREAD3 側の
問題であるようなら、メーカーに問い合わせて、後継バージョン(SPREAD7.0J)などへの
移行も検討した方が良いでしょう。


> Windows Updateやウィルスソフトは無効にしてみましたが同様です。
ウィルスソフト ではなく、
ウィルス対策ソフト(アンチウィルスソフト)ですよね? (^^;



> 何か思い当たることや、試してみるべき事を教えていただければ助かります。
> よろしくお願いいたします。
Process Monitor でトレースしてみては如何でしょう。

http://d.hatena.ne.jp/wwwcfe/20100416/processmonitor
http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx


それから、投稿前には掲示板の利用方法を一読願います。
マルチポストに関するルールがあるはずですよ。
http://www.gizcollabo.jp/vbtomo/boards/vbqanda.php?do=spread&num=15396
http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban

[ツリー表示へ]
タイトルRe^2: 応答なし、約1分後に回復
記事No15574
投稿日: 2012/08/14(Tue) 09:21
投稿者南向秀樹
> OS は XP Embedded でしょうか、XP Professional でしょうか。
→Embeddedです。

> VB6 SP6 で開発されることを強くおすすめします。
→済みません、記載間違いで[SP6]でした。

> それともVB側ではなく、SPREAD3側に問題がありそうなのでしょうか。
> SPREAD 側は最新版(3.0.0.52)に更新してありますか?
→SPREADは購入当初のままだったので、パッケージには3.0Jと記載されており、
 SPREADデザイナのヘルプを見ると[3.0.15]となっています。
 グループシティのHPでバージョンアップを探しましたが、
 古すぎて製品情報がなくユーザー登録をメール申請してみました。

> > 約1分ほどで「応答なし」は自然に解消され、また30会計くらい動き「応答なし」に
> > なります。
> 処理に時間がかかっているか、メモリの確保と解放に時間がかかっている感じです。
> コード側の問題なのか、コンポーネント側の問題かを特定し、SPREAD3 側の
> 問題であるようなら、メーカーに問い合わせて、後継バージョン(SPREAD7.0J)などへの
> 移行も検討した方が良いでしょう。
→SPREADを調べてみます。

> ウィルスソフト ではなく、
> ウィルス対策ソフト(アンチウィルスソフト)ですよね? (^^;
→ウィルス対策ソフトでした。

> それから、投稿前には掲示板の利用方法を一読願います。
> マルチポストに関するルールがあるはずですよ。
> http://www.gizcollabo.jp/vbtomo/boards/vbqanda.php?do=spread&num=15396
> http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban
→マルチポスト違反、済みませんでした。
 今一度、掲示板の利用方法を読み直します。
 この件につきましては、今後こちらの掲示板へ集約いたします。

いろいろとご指導をありがとうございました。

[ツリー表示へ]
タイトルRe^3: 応答なし、約1分後に回復
記事No15575
投稿日: 2012/08/14(Tue) 09:44
投稿者魔界の仮面弁士
> > OS は XP Embedded でしょうか、XP Professional でしょうか。
> →Embeddedです。

用途が特殊な OS なので、Embedded かどうかはきちんと書いておいた方が良いですよ。
多くの人は、Windows XP と言えば Professional か Home を連想するでしょうし。


ちなみに、Windows XP Embedded を eXP と呼んだり、
Embedded Visual Basic 3.0 を eVB3 などと書くこともあります。e は小文字です。
(ちなみに、Windows CE Toolkit for Visual Basic 6.0 は "VBCE6" など)

もっとも、検索キーワードとして使いにくいので(eXP だと EXP関数等がヒットしてしまう)、
略さずにそのまま Embedded と書いた方が無難ですが。


> > それともVB側ではなく、SPREAD3側に問題がありそうなのでしょうか。
> > SPREAD 側は最新版(3.0.0.52)に更新してありますか?
> →SPREADは購入当初のままだったので、パッケージには3.0Jと記載されており、
>  SPREADデザイナのヘルプを見ると[3.0.15]となっています。
>  グループシティのHPでバージョンアップを探しましたが、

更新されたバージョンを下記からダウンロードできます。
http://www.grapecity.com/tools/downloads/update/activex

最新版以外を入手したい場合はこちらから。
ftp://ftp.grapecity.com/Patches/

[ツリー表示へ]
タイトルRe^4: 応答なし、約1分後に回復
記事No15577
投稿日: 2012/08/14(Tue) 12:48
投稿者南向秀樹
魔界の仮面弁士 様

ご回答をありがとうございます。


> 略さずにそのまま Embedded と書いた方が無難ですが。
→開発当初は[Windows XP Professional]でしたが、
 実機が[Embedded]で、マシンの特性もあるかもと思い、
 現在は実機でテストしています。

> 更新されたバージョンを下記からダウンロードできます。
> http://www.grapecity.com/tools/downloads/update/activex
→ありがとうございました、ダウンロードできました。

本日テストを繰り返すうちに、スプレッドと客側表示器の表示あたりで
「応答なし」になることが分かりました。
実際にはプリセットキーにしているラベルをクリックするプロシージャ内で、

@Select文で商品データを検索
A品名・単価・消費税などをスプレッドと客側表示器に表示
B合計を計算

を行っており、このプロシージャを500回〜1500回行うと症状が出ます。
ログを吐き出した中では、スプレッドか客側表示器かまだ確定できませんが、
固まっている最中に客側表示器の電源を落としてみると、即復帰しました。
1回の症状が出るのに30分〜1時間ほどテストの継続が必要ですが、
3回症状が出た中で、3回とも客側表示器の電源オフで復帰します。
その部分のソースは下記ですが、[ErrFunc]には飛ばないので、
この中でのタイムアウト待ちの可能性が高いと思われます。

    '---On Error---
    On Error GoTo ErrFunc

    With MSComm2
        'Select com port to open
        .CommPort = iComPort
        
        'Com Port Setting
        'Baud rate  9600
        'Parity     N
        'Data bit   8
        'Stop bit   2
        .Settings = "9600,N,8,2"
        
        'Open com port
        .PortOpen = True
        
        .Output = Chr(12)
        .Output = sGLDH01
        .Output = sGLDH02

        'Close com port
        .PortOpen = False
    End With


そこで質問は、下記の2点です。
@シリアルポートのタイムアウトの時間はVBで設定できますか?
A一般的にポートのオープンは、フォームを開いた時、
 クローズは閉じたときだけですか?
 現行のソースでは、その都度オープンクローズしています。

レベルが低くて申し訳ありませんが、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^5: 応答なし、約1分後に回復
記事No15582
投稿日: 2012/08/15(Wed) 10:04
投稿者オショウ
> そこで質問は、下記の2点です。
> @シリアルポートのタイムアウトの時間はVBで設定できますか?
> A一般的にポートのオープンは、フォームを開いた時、
>  クローズは閉じたときだけですか?
>  現行のソースでは、その都度オープンクローズしています。
>
> レベルが低くて申し訳ありませんが、よろしくお願いいたします。

  横から失礼・・・
  .Output = ...
  で、出力命令を実行し、直後に
  .Portopen = False
  として、ポートをクローズすると、直前の出力命令が終わらないうち
  にポートが閉じられ、正しく通信が行われない場合があります。

  よって、都度、Open/Close したい場合は、送信バッファの内容が空
  になった(出力を終えた)か確認してから閉じるか・・・

  フォームのLoad時にポートをOpenし、フォームを閉じる際にCloseす
  る方が無難。

  ただし、シリアル通信での出力直後にフォームを閉じる動作を行うと
  結局同様の問題が出る可能性があるので、送信バッファの監視を行い
  必ず空になったら次動作を行う流れとして下さい。

※ シリアル通信にはノイズの関係で、受信バッファにゴミが入ってくる
  ことがあります。よって、送信直前に受信バッファをクリアするとい
  う機能を必ず実行して、誤動作を極力無くす仕掛けをして下さい。

※ FA的な環境の場合、器機との通信速度(ボーレート)が早ければ早
  いほど、ノイズに弱くなります。RS-232Cのケーブル長やケーブルの品
  質にも影響されます。一時的な回避方法には、通信速度を遅くすると
  回避できる場合が多いです。覚えていて損は無いので・・・

以上。参考まで

[ツリー表示へ]
タイトルRe^6: 応答なし、約1分後に回復
記事No15583
投稿日: 2012/08/15(Wed) 13:06
投稿者南向秀樹
オショウ様
回答ありがとうございます。

>.Output = ...
>で、出力命令を実行し、直後に
>.Portopen = False
>として、ポートをクローズすると、直前の出力命令が終わらないうち
>にポートが閉じられ、正しく通信が行われない場合があります。
→本日のテストで、クローズの前に時間がかかっていたことがありました。


>よって、都度、Open/Close したい場合は、送信バッファの内容が空
>になった(出力を終えた)か確認してから閉じるか・・・
>フォームのLoad時にポートをOpenし、フォームを閉じる際にCloseす
>る方が無難。
→都度、オープンクローズする必要はなく、たまたま見たサンプルから
 ソースを取ったので、Form_Load時にオープン、Unload時にクローズへ
 変えて見ます。


>ただし、シリアル通信での出力直後にフォームを閉じる動作を行うと
>結局同様の問題が出る可能性があるので、送信バッファの監視を行い
>必ず空になったら次動作を行う流れとして下さい。

いろいろありがとうございました。
試した結果を改めて報告いたします。

[ツリー表示へ]