NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

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

解決済み
解決策を見る

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 件の賞賛
メッセージ1/4
1,904件の閲覧回数
解決策
トピック作成者べんけいが受理

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

 

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

 

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

 

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

 

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

0 件の賞賛
メッセージ2/4
1,848件の閲覧回数

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

申し訳ございません。

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

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

 

 

0 件の賞賛
メッセージ3/4
1,824件の閲覧回数

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

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

 

0 件の賞賛
メッセージ4/4
1,814件の閲覧回数