VxWorksコントローラで外部コードを呼び出す
使用ソフトウェア:
使用ソフトウェア・バージョン: 2009 SP1
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A
問題: cRIO-901x/902xなどの、VxWorks OS搭載のコントローラのLabVIEW Real-Timeアプリケーションから、外部コード(共有ライブラリ)を呼び出す必要があります。LabVIEWを使用して、どのように実装できますか。
解決策: Wind River VxWorksと共に提供されるGNUツールチェーンを使用して、VxWorksコントローラで実行する共有ライブラリをビルドし、LabVIEWの「ライブラリ関数呼び出しノード」を使用してそれを呼び出すことができます。ただし、以下の点に注意してください。
-
LabVIEWはC関数のみを呼び出すことができます。Windowsホストは、VxWorks用にコンパイルされた共有ライブラリのシンボルを確認することはできません。LabVIEWが呼び出すすべての関数は、extern "c"として宣言されている必要があります。
-
Win32 APIは利用できません。VxWorksはWindows API呼び出しをサポートしません。可能であれば、それらをISO CまたはC++呼び出しと置換してください。
-
自動ダウンロードはサポートされていません。LabVIEWはVIが参照する共有ライブラリをVxWorksターゲットにダウンロードしません。必要なモジュールは、FTPを使用して ni-rt/system ターゲットディレクトリに転送してください。
共有ライブラリは、他のLabVIEW Real-Timeターゲット(Phar Lap)とほぼ同じように呼び出すことができます。ただし、VxWorksターゲットは *.outファイルを使用し *.dllは使用しない、という制限があります。これにより、LabVIEW開発環境はVxWorks共有ライブラリのライブラリ情報を読み取ることができないため、「ライブラリ関数呼び出しノード」はスタブDLLで構成する必要があります。以下の手順に従って、外部コードを構成してください。
-
*.out共有ライブラリをコンパイルし、Real-TimeターゲットにFTP転送します。
-
*.out共有ライブラリにエクスポートされたものと同じ関数プロトタイプを使用するスタブDLLをコンパイルします。スタブDLLは通常、関数プロトタイプのみを含み、内容は必要ありません(空の関数)。このスタブDLLはWindowsホストマシンのみで使用されます。また、元の*.out共有ライブラリと同じ名前を使用する必要があります。例: foo.dllとfoo.out
-
「ライブラリ関数呼び出しノード」をブロックダイアグラムに配置し、foo.* をライブラリ名またはパスに指定します。ホストマシンでは、LabVIEWはfoo.dllを参照しますが、Real-Timeターゲットの実行ファイル/VIではfoo.outを参照します。
-
呼び出し規約構成パラメータは無視されることに注意してください。
-
ホスト開発環境のVIからスタブDLLへの相対パスと、Real-Timeターゲットの実行ファイル/VIから共有ライブラリへの相対パスは一致している必要があります。
共有ライブラリコードを呼び出す詳細については、
Configuring the Call Library Function Nodeまたは
cRIO-901xおよび他のVxWorksターゲット対応の共有ライブラリを開発するを参照してください。
関連リンク: 製品マニュアル: LabVIEWヘルプ - Configuring the Call Library Function Nodeチュートリアル: cRIO-901xおよび他のVxWorksターゲット対応の共有ライブラリを開発するチュートリアル: An Overview of Accessing DLLs or Shared Libraries from LabVIEW技術サポートデータベース 4LRA4IQ0: Real-Time コントローラのオペレーティングシステム (OS)
添付:
報告日時: 11/27/2006
最終更新日: 05/10/2017
ドキュメントID: 43QD6TS9
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.