※ 2018-01-19 技術っぽい追記アリ
GoogleAnalytics
SyntaxHighlighter
2018年1月17日水曜日
2015年7月29日水曜日
かれこれ15年以上LabVIEW使ってるけど数年ごとに「あれ? どうだったっけ?」と悩むのでメモしとく
内部に「Sub1.vi」をサブVIとして含む「Main1.vi」が、以下の様なディレクトリ構成で存在する。
以下のように、「Main1.vi」と「Sub1.vi」が異なるディレクトリにあるとする。
この Temp1 ディレクトリをリネームしてから「Main1.vi」を開いても、サブVIの再サーチはおこなわれず、未保存状態にもならない。
しかし、 Temp1 ディレクトリ内に作成したサブディレクトリへ「Main1.vi」を移動した場合には、
つまり、サブVIというのは、下図のような「相対パスによるリファレンス呼び出しノード」の糖衣構文である、と見做すことができる。
……寝る
- この「Sub1.vi」を、下図のように Temp 以下のサブディレクトリに移動した場合、
- 「Main1.vi」を開く時にサブVIの再サーチがおこなわれ、
- 自動的に「Sub1.vi」が見つかり、
- 「Main1.vi」は未保存状態になる
- 逆に、Temp 以下のサブディレクトリに「Main1.vi」を移動した場合、
- 「Main1.vi」を開く時にサブVIの再サーチがおこなわれる
- しかし「Sub1.vi」が見つからず、ファイルオープンダイアログが開く
- 「Main1.vi」は未保存状態になる
- サブVIは親VI中に絶対パスで保管されているわけではない
- サブVIが見つからない場合のサーチパスには、自身より下位ディレクトリが含まれる
以下のように、「Main1.vi」と「Sub1.vi」が異なるディレクトリにあるとする。
この Temp1 ディレクトリをリネームしてから「Main1.vi」を開いても、サブVIの再サーチはおこなわれず、未保存状態にもならない。
しかし、 Temp1 ディレクトリ内に作成したサブディレクトリへ「Main1.vi」を移動した場合には、
- 「Main1.vi」を開く時にサブVIの再サーチがおこなわれる
- しかし「Sub1.vi」が見つからず、ファイルオープンダイアログが開く
- 「Main1.vi」は未保存状態になる
- サブVIは親VI中に相対パスで保管されている
つまり、サブVIというのは、下図のような「相対パスによるリファレンス呼び出しノード」の糖衣構文である、と見做すことができる。
……寝る
2011年2月28日月曜日
[LabVIEW]俺のLabVIEWがZIPしか圧縮できないわけがない
またこのタイトルですw
以前のエントリで、「『統合アーカイバプロジェクト』プラグインDLLをLabVIEWから使って圧縮が出来るようにするLLBを書く予定は現在のところありませんw」とかホザいてましたが、仕事が手持ち無沙汰だったのでちょっと書いてみました。
…まぁ、ちょっと、というにはかなり手間かかったんスけどねw
ダウンロードと愚痴は続きから
以前のエントリで、「『統合アーカイバプロジェクト』プラグインDLLをLabVIEWから使って圧縮が出来るようにするLLBを書く予定は現在のところありませんw」とかホザいてましたが、仕事が手持ち無沙汰だったのでちょっと書いてみました。
…まぁ、ちょっと、というにはかなり手間かかったんスけどねw
ダウンロードと愚痴は続きから
2011年2月22日火曜日
[LabVIEW]LabVIEWからDLLを遅延バインディングで利用する
前々回・前回の「LabVIEWからSusie plugin DLLを利用する」では、DLL関数に『ライブラリ関数呼び出しノード』を使ってアクセスしていました。このノードの【ダイアグラムでパスを指定】オプションを使うことで、異なるDLLにある関数を実行時に呼び分けることが可能となっていました。
ただし、これはどのDLLでも関数名・引数列が同じだから出来ていたわけで、要するに『ライブラリ関数呼び出しノード』は事前バインディングなわけです。
世の中に存在するプラグインとして機能するDLLが、全てSusie pluginのように「同じ関数名・同じ引数列」ならば良かったんですが、そんなには甘くありませんw
例えば、様々な形式の圧縮・解凍処理をプラグインDLLとして共通化されたAPIから利用しよう、という『統合アーカイバプロジェクト』ってのがあるんですが、このプラグインDLLでは、各機能を持つ関数の引数列は同じですが、関数名が「DLL固有名+機能共通名」とDLL関数によって異なっています。
これだと、LabVIEWの 『ライブラリ関数呼び出しノード』による事前バインディングでは、簡単には対応できません。
というわけで、どうにかならんもんか、と色々調査してみました。
ただし、これはどのDLLでも関数名・引数列が同じだから出来ていたわけで、要するに『ライブラリ関数呼び出しノード』は事前バインディングなわけです。
世の中に存在するプラグインとして機能するDLLが、全てSusie pluginのように「同じ関数名・同じ引数列」ならば良かったんですが、そんなには甘くありませんw
例えば、様々な形式の圧縮・解凍処理をプラグインDLLとして共通化されたAPIから利用しよう、という『統合アーカイバプロジェクト』ってのがあるんですが、このプラグインDLLでは、各機能を持つ関数の引数列は同じですが、関数名が「DLL固有名+機能共通名」とDLL関数によって異なっています。
これだと、LabVIEWの 『ライブラリ関数呼び出しノード』による事前バインディングでは、簡単には対応できません。
というわけで、どうにかならんもんか、と色々調査してみました。
2011年2月20日日曜日
2011年2月13日日曜日
[LabVIEW] Susie pluginを使う
LabVIEWって、、、対応画像ファイルフォーマット、少なくないッスか?
デフォで「BMP・JPEG・PNG」、Vision開発モジュール入れても「JPEG2000・TIFF」、、、こんだけってw
著名なとこだと「GIF」が読めません(昔は特許絡みの問題を避けるためだったんでしょうが…もう切れてるしなぁ)。
「GIF」だけ読めればイイってんなら、ココで紹介されてるようなライブラリを使う、ってのもアリですが、
読みたいフォーマット全てに対して、ローダを一から書くのは、いくら『車輪の再発明大好きっコ』な私でも勘弁願いたいところですw
こういう場合、我々日本人なら、グラフィックビューワ「Susie」に対応した「plugin」を使うのが常道ですね。
ココとかに、色んなフォーマットに対応したpluginへのリンクが貼られています。
というわけで、LabVIEWから「Susie plugin」を使ってみたいと思います。
デフォで「BMP・JPEG・PNG」、Vision開発モジュール入れても「JPEG2000・TIFF」、、、こんだけってw
著名なとこだと「GIF」が読めません(昔は特許絡みの問題を避けるためだったんでしょうが…もう切れてるしなぁ)。
「GIF」だけ読めればイイってんなら、ココで紹介されてるようなライブラリを使う、ってのもアリですが、
読みたいフォーマット全てに対して、ローダを一から書くのは、いくら『車輪の再発明大好きっコ』な私でも勘弁願いたいところですw
こういう場合、我々日本人なら、グラフィックビューワ「Susie」に対応した「plugin」を使うのが常道ですね。
ココとかに、色んなフォーマットに対応したpluginへのリンクが貼られています。
というわけで、LabVIEWから「Susie plugin」を使ってみたいと思います。
2011年2月8日火曜日
[LabVIEW]DirectShowLib_for_LabVIEWのNTSCキャプチャへの対応
以前に紹介した「DirectShowLib_for_LabVIEW」ですが、『PC-SDVD/U2G』のようなNTSCキャプチャーデバイスに対応させるため、一部変更を行いました(ダウンロードは本エントリからどうぞ)。
DS_PrepareFromCameraName.viを、手作業でフィルターピンを繋ぐやり方から、ICaptureGraphBuilder2::RenderStreamメソッドを使うやり方に変更しました。
これにより、NTSCキャプチャーデバイスからの映像処理に必要なクロスバー用フィルタの作成が自動で行われるようになっています。
デジカメ『GE C1033』からのライブビューを『PC-SDVD/U2G』でキャプチャーし、それをLLB同梱のDemo_CameraSnap.viで取り込んだときの様子です。
これで応用範囲が広がりんぐですねw
DS_PrepareFromCameraName.viを、手作業でフィルターピンを繋ぐやり方から、ICaptureGraphBuilder2::RenderStreamメソッドを使うやり方に変更しました。
これにより、NTSCキャプチャーデバイスからの映像処理に必要なクロスバー用フィルタの作成が自動で行われるようになっています。
デジカメ『GE C1033』からのライブビューを『PC-SDVD/U2G』でキャプチャーし、それをLLB同梱のDemo_CameraSnap.viで取り込んだときの様子です。
これで応用範囲が広がりんぐですねw
2011年2月1日火曜日
2011年1月28日金曜日
[LabVIEW]NI-IMAQを使わないでUSB接続Webカメラを使う - 修正編
前回のエントリで最後に作った、Webカメラから静止画をキャプチャするVIですが、
自動でレンダーさせると環境によっては、サンプルグラバーに正しくピンが接続されないことがありました。
というわけで修正編として、ピンを明示的に接続させたものを簡単な解説とともに挙げておきます。
自動でレンダーさせると環境によっては、サンプルグラバーに正しくピンが接続されないことがありました。
というわけで修正編として、ピンを明示的に接続させたものを簡単な解説とともに挙げておきます。
[LabVIEW]NI-IMAQを使わないでUSB接続Webカメラを使う
以前のエントリで、
> さて、次回はUSB接続Webカメラのプレビュー表示です
> …といきたいところですが、そろそろ仕事がヤバげなので、
> どうなるか不明ですw
とか書いてたんですが、しばらく放置ってのもモヤモヤするので、
とりあえずサクっとやってみました。
> さて、次回はUSB接続Webカメラのプレビュー表示です
> …といきたいところですが、そろそろ仕事がヤバげなので、
> どうなるか不明ですw
とか書いてたんですが、しばらく放置ってのもモヤモヤするので、
とりあえずサクっとやってみました。
2011年1月27日木曜日
[LabVIEW]NI-IMAQを使わないで動画再生&静止画キャプチャ その2
前回のエントリでは、LabVIEWフロントパネル内で動画を再生しました。
では、ここから静止画キャプチャを行ってみましょう。
DirectShowでの静止画キャプチャには、
・ [IBasicVideo.GetCurrentImage()]メソッドによるキャプチャ
の実装を行ってみます。
では、ここから静止画キャプチャを行ってみましょう。
DirectShowでの静止画キャプチャには、
- [IBasicVideo.GetCurrentImage()]メソッドによるキャプチャ
- [SampleGrabber]フィルタによるキャプチャ
・ [IBasicVideo.GetCurrentImage()]メソッドによるキャプチャ
の実装を行ってみます。
[LabVIEW]NI-IMAQを使わないで動画再生&静止画キャプチャ その1
前回のエントリで、
> 『YOU、LabVIEWでDirectShow直接叩いチャイなYO!』
という電波を受信したので、色々調べて勉強がてらに、先ずは
・ DirectShowを使ってLabVIEWで動画再生
から作ってみることにしました。
> 『YOU、LabVIEWでDirectShow直接叩いチャイなYO!』
という電波を受信したので、色々調べて勉強がてらに、先ずは
・ DirectShowを使ってLabVIEWで動画再生
から作ってみることにしました。
[LabVIEW]NI-IMAQを使わないで動画再生&静止画キャプチャ その0
私には「仕事の〆切が近づくと必要のないコードが書きたくなる」
という悪癖があります。
しかも「仕事と完全に無関係ではないけど必須ではない」という
微妙なコードが書きたくなってしまうのです。
というわけで、以降、数エントリかけて露悪してみますw
という悪癖があります。
しかも「仕事と完全に無関係ではないけど必須ではない」という
微妙なコードが書きたくなってしまうのです。
というわけで、以降、数エントリかけて露悪してみますw
2010年11月15日月曜日
LabVIEWでスクリーンキャプチャを撮ってみた
先日、同僚から
「Windows環境で、アクティブウィンドウ以外の任意領域のヒストグラムを取るアプリってある?」
と聞かれました。
「探せばあるんじゃないの?」
「さんざん探したけど、どういうワードで検索すればイイかもわかんなかった」
用途を聞いてみると、PCにCCDカメラを接続してて、
ライブビューはカメラ付属のソフトウェアで出来るんだけど、
そのソフトにライブヒストグラム機能が付いてない、ということらしい。
そのPCには、CCDカメラで撮影した画像ファイルの解析のために、
LabVIEWがインストールされているので、
「LabVIEWから直接CCDカメラをコントロールして、
ライブビュー撮ればイイんじゃね?」
とは言ったものの、なんかしっくりきません。
LabVIEWからスクリーンキャプチャを取得して、それを2Dピクチャに出来れば、
あとはどうにでも解析できるはずです。
というわけでテストしてみました。
「Windows環境で、アクティブウィンドウ以外の任意領域のヒストグラムを取るアプリってある?」
と聞かれました。
「探せばあるんじゃないの?」
「さんざん探したけど、どういうワードで検索すればイイかもわかんなかった」
用途を聞いてみると、PCにCCDカメラを接続してて、
ライブビューはカメラ付属のソフトウェアで出来るんだけど、
そのソフトにライブヒストグラム機能が付いてない、ということらしい。
そのPCには、CCDカメラで撮影した画像ファイルの解析のために、
LabVIEWがインストールされているので、
「LabVIEWから直接CCDカメラをコントロールして、
ライブビュー撮ればイイんじゃね?」
とは言ったものの、なんかしっくりきません。
LabVIEWからスクリーンキャプチャを取得して、それを2Dピクチャに出来れば、
あとはどうにでも解析できるはずです。
というわけでテストしてみました。
2010年9月21日火曜日
LabVIEWでオレオレ言語処理系
LabVIEW で計測・制御するVIとか書いてると、解析手法なんかが変わるたびに、いちいちVI 書き換えるのは億劫です。
こういう場合には、「スクリプト言語によるマクロ機能」を持たせるのが常道らしいですよ、奥さん。
「あぁ、~の機能だったらマクロ書いたら簡単にできるよ」とか、言ってみたいですよねw …例えそれが同僚数人しか使わないようなアプリであってもw
とはいうものの、スクリプト言語『で』書くのは楽チンでも、スクリプト言語『(の処理系)を』書くのは面倒です。なんてったって、LabVIEW には yacc がありませんからね(lex っぽいのはある)。
でも、dllで書かれた既存の言語処理系をLabVIEWから呼び出すとか、VBScriptのOCXを叩く、ってのはなんか、勝ち負けで言ったら「負け」な気がします。
で、漢らしくLabVIEW自体でスクリプト言語の処理系を作ってみました。
こういう場合には、「スクリプト言語によるマクロ機能」を持たせるのが常道らしいですよ、奥さん。
「あぁ、~の機能だったらマクロ書いたら簡単にできるよ」とか、言ってみたいですよねw …例えそれが同僚数人しか使わないようなアプリであってもw
とはいうものの、スクリプト言語『で』書くのは楽チンでも、スクリプト言語『(の処理系)を』書くのは面倒です。なんてったって、LabVIEW には yacc がありませんからね(lex っぽいのはある)。
でも、dllで書かれた既存の言語処理系をLabVIEWから呼び出すとか、VBScriptのOCXを叩く、ってのはなんか、勝ち負けで言ったら「負け」な気がします。
で、漢らしくLabVIEW自体でスクリプト言語の処理系を作ってみました。
登録:
投稿 (Atom)