TS工房 -技術者と研究者とモノづくり-

音楽や芸術のスタジオやアトリエの様な雰囲気の工房で、研究者として・技術者として”ものづくり”をしたい

MENU

【LabVIEW】LabVIEWにCプログラムを組み込む方法

最近LabVIEWの話題ばかり。他のことにも手を出したいけれども、LabVIEWウィークが続いているのでこればかりは仕方が無い。

さて、今回はLabVIEW上で、Cプログラムを動かす方法についてです。一年ほど前に調べて成功していたんですが、当時は記録を一切取っておらず、またCを組み込みたいなと思っても記憶がゼロ。Google It!!ということで諸先輩のお力をお借りして、今回は簡単にでもまとめておきたいと思います。

 

1.C/C++でdllファイルを作る

そもそもdllファイルとは?

Windowsのシステムディレクトリを見ると星の数ほどdllが存在します。このよく分からないdllファイルですが、実はC/C++で自分用にも作れます。これができるようになってくるとプログラムがうまくなったような自己満足に浸れます。

さて、dllはダイナミックリンクライブラリ(Dynamic Link Libraries)の略です。動的リンクは実行時にリンクされるライブラリで、これにより、実行可能ファイルから別のファイルに格納された関数を呼び出したり、リソースを使用したりすることができます。要は今回で言えば、C/C++で作成した自作関数をdllファイルとして一度作成し、このdllファイルをLabVIEW側で読むことにより、関数を呼び出すことができると言うことです。

 

C/C++でdllファイルを作る

①VisutalStudio新規プロジェクト>ダイナミックリンクライブラリ作成

ソリューションとプロジェクトを同じディレクトリに配置するはオフにしておきましょう。習慣です。

 

②プロジェクトプロパティから追加のインクルードディレクトリを設定。バージョンは違うけど基本的に以下のディレクトリにNI 提供のヘッダファイルなどが入っている。

C:\Program Files (x86)\National Instruments\LabVIEW 2018\cintools

 

ソースコードを適当に書く

 

④ビルドするとDebugフォルダにdllファイルが生成される

エラーが吐き出される場合はエラーコードを確認。プロジェクトファイルのプロパティからC/C++の「プリコンパイル済みヘッダーは使用しない」にしておくとよい。デバックではないよ。

 

ちなみに、③のソースコードを、適当にmath.cppとか作って以下のようなのをテストで書いておくとよいでしょう。和と差を計算できます。

#include "extcode.h"
#include "pch.h"
#include <windows.h>

_declspec (dllexport) int Sum(int a, int b);
_declspec (dllexport) int Sub(int a, int b);

_declspec (dllexport) int Sum(int a, int b){return(a + b);}

_declspec (dllexport) int Sub(int a, int b){return(a - b);}

 

 

2.LabVIEWでdllファイルを呼び出す

 

ライブラリ関数呼び出しノード

LabVIEWでは、ライブラリ関数呼び出しノードを使用することで、CやC++で作成されたDLLを呼び出すことができます。ライブラリ関数呼び出しノードでは、使用するDLLやそのDLLの中から呼び出す関数を選択することができます。

 

①ブロックダイアグラム上で配置

接続>ライブラリ&実行可能ファイル>ライブラリ関数呼び出しノード

 

②dllファイルを選択する

ライブラリ関数呼び出しノード>構成>ライブラリ名またはパス

呼び出し規約はC(デフォルト)のままとする

 

③パラメータを設定する

関数名を設定する。

返り値をタイプとinputパラメータを設定する。今回はC言語で書いた関数の引数は二個なので数値のパラメータを2個定義しておく。

 

 

とりあえずざっとこのような流れでLabVIEW上でCプログラムを読み込みすることができる。一年ぶりだっため途中つまずくところが多かった。使いながらもう少し内部について知っておきたい。

 

参考にしたページ

 

 

Project Eulerを始めてみようと思う

C/C++スキルアップをしたい

どうも私にはプログラミングスキルが(圧倒的に)足りていないようだ。少し時間を遡るが、緊急事態宣言を受けて少し時間に余裕ができたことから、新しいことにチャレンジしようと思いGEANT4ツールキットを使ったシミュレーションをしようと決意した。

一週間ほどでWindows用の環境構築をしてSampleプログラムを動かしてみるものの、そこから先が続かない。サンプルプログラムを必死に読み解きながら、なんとか自分がシミュレーションしたい体系(DetectorConstruction)を何とか組めても、Scoringの方法が意味分からんし、Rootの使い方意味分からんし、Opticalクラスは意味分からんし、、、、と意味分からんことしか出てこない。ぴえん。

というか、GEANT4以前に、GEANT4が記述されているC++にそもそも馴染みがない。最初はクラスとかオーバーロードとかの概念の全く知らない。今でこそいわゆる入門編のレベルまでの知識は一通り目は通したものの、いかんせん手(キーボード)が動かない。

GEANT4と平行して、C/C++のプログラミングスキルを向上せねばならないと思い一念発起。実は過去にも何度かそのようなタイミングがあり、その都度参考書などを進めようとするが三日坊主で続かなかった。原因は自分の継続力の無さが一番だが、何より参考書や例題が面白くなかった。

そこで今回の標題、Project Euler(プロジェクト・オイラー)という英語のサイトを発見した。まずオイラーというサイト名をつけるあたりのセンスが好き。そして問題が数学をベースとした問題が主であり、まさに私にぴったりだと感じた。だから今日からProject Eulerの問題を少しずつチェレンジしていこうではないかと。

ついでにGEANT4の話題も載せようかと思う。

 

Project Euler  Problem 001 / Mutiples of 3 and 5

Problem 001 / Mutiples of 3 and 5

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

とりあえず問題と自分の回答を最後に載せておきます。

 

<感想>

久々にVisual Studioを起動した。まずcoutを使うためのiostreamインクルードすらググったというね。先は長い。。。そして書き始めるけど簡単な問題なのにいきなりエラーばっか。まずはエラーが出て解消するという一連の作業にも慣れる必要があるな。最後は正答を送ると、Congratulationのページが出てきて素直に嬉しい。

でも回答を考えているときが一番楽しい。例えば「3と5の倍数判定をこう記述したらいいな」とか思いつく瞬間というのは脳汁プッシャー状態で、ある意味でハイになれるのだと感じる。

f:id:wannavi:20210203215739p:plain

回答後の画面にたどり着くと嬉しい

 

 

<以下、回答>

#include<iostream>
using namespace std;

bool find_multiple(int num);

int main(){
int i = 0;
int sum = 0;

for (i = 0; i < 1000; i++) {
if (find_multiple(i)) {
//cout << i << endl;
sum += i;
}
}

cout << "The sum of all the multiples of 3 or 5 below 1000 is " << "\"" << sum << "\"" << endl;

return 0;
}

//find_multiple number of 3 or 5.
bool find_multiple(int num) {
bool isBool = false;

if (((num % 3)== 0)||*1
return true;
return false;

*1:num % 5)==0