NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

Visual BasicからLabViewで作成したdllを呼びだすと、まれにフリーズしてしまう。

Solved!
Go to solution
Highlighted

LabView 2016でdll(標準)を作成しVisual basicから呼び出して使用しているのですが、まれ(500回に1回くらい)

にフリーズしてしまい、PCを再起動しないと復帰できなくなってしまいます。

dll内ではusb-daqを使用しています。エラー処理があるsub-viはすべてエラー出力を接続し、最後にエラーを結合して

エラーがある場合は戻り値としてエラーを返しています。(DAQのUSBが抜けていたりしてもフリーズはせずエラーが帰ります。)

dllは「標準呼び出し規約」で、プロトタイプは

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int16_t hoge(int32_t PoleNum, double AmplCond, double PhaseMargin, int32_t _0CW_1CCW, uint32_t *OutPut, int32_t *Rotation, double *Voltage, uint8_t BitmapPath[], int32_t length)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

のようなものです。

Visual basicはvisual basic 2010を使用しており、

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Declare Auto Function hoge Lib "hoge.dll" (ByVal V_threshold As Double, ByVal PhaseMargin As Double, ByVal CondDir As Integer, ByRef Judgemet As Integer, ByRef Direction As Integer, ByRef Voltage As Double, ByVal BitmapPath() As Byte, ByVal length As Integer) As Integer

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

のように読み込んでから、プログラム内で関数を呼び出しています。

フリーズするときはあきらかにdllの関数の呼び出しでフリーズしています。

このような状況に関して何か知見をお持ちの方はいらっしゃいますでしょうか。

また、このようなトラブルをTry chatchのようにエラーが起きていてもフリーズせずにやり過ごす手段はないものでしょうか。

よろしくお願いいたします。

0 Kudos
Message 1 of 4
(151 Views)
Solution
Accepted by topic author べんけい

平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。

 

フリーズしていまい再起動しか復帰する方法がないのでしたら、回避策のコードも実行できませんので、原因となる問題を解決する必要があると思います。

 

LabVIEWで作成したDLLに問題があるようですので、まずはLabVIEW側でダイアログ無効ストラクチャを用いてDAQmx関数を使用しないダミーデータを返すようにDLLをビルドして、DAQmxを用いないDLLでフリーズするかをご確認ください。

 

これで問題ないようでしたら、DAQmxを用いたコード側に問題があると絞り込めます。次にDAQmxのサンプルコードをさらに単純化した最小限のコードにしてDLLをビルドし試してみます。

 

そのほかの確認としては、DLL内で使用したリファレンスが必ずすべて閉じてからDLLの処理が終了しているかを確認したり、メモリリークが発生していないかを確認したりしてもよいかと思います。

0 Kudos
Message 2 of 4
(95 Views)

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

申し訳ございません。

使用しているSSDに問題があり、ファイルの書き込みでエラーが発生していたようです。

SSDを交換したところ問題が発生しなくなりました。

 

 

0 Kudos
Message 3 of 4
(71 Views)

ご返答ありがとうございます。SSDの不具合は簡単には気づけないですよね。

無事解決したようで何よりです。

 

0 Kudos
Message 4 of 4
(61 Views)