【理化学計測】オウンドメディア:電気化学測定(02)
【理化学計測】オウンドメディア:電気化学測定(02)に関するFAQ
QVersion 10.00 リリースノート
Version 10.00 リリースノートのダウンロード (PDF:2MB)
Q0を中心に±に振れる信号があります。正側を5倍、負側を3倍にしたい
FAQ ID:s068
以下のサンプルファイルを例にします。
この信号に対して0より大きい値を5倍、0より小さい値を3倍にします。
最初に必要なのでは、0より大きい信号を見つけることです。ある条件を設定し、値を抽出するためには関数SearchLevelを利用すると便利です。
resp = SearchLevel( Data, 2, 0, 0, 0, 0, 0, 0)
この関数を実行すると、0より大きい値を抽出します。
この信号を5倍して、元のデータに戻すことで目的を達成します。信号を5倍にするためには単純に5を掛ければよいです。元のデータに値を戻すには関数”Set”を利用します。
SearchLevelの結果はXY波形です。Set関数の第2引数にXデータ、第3引数にYデータを指定します。
Data = Set( Data, resp.X, resp.Y*5)
以上で結果は正側のみ5倍になります。
この後、負側も同様に行います。
以上です。
シーケンスは以下の通りです。
;***********************************************
;
; 正側を5倍、負側を3倍にします
;
;***********************************************
; 後でデータを比較するためにコピーします。
Data = sintest1
; 正側のデータを抽出します
resp = SearchLevel(Data, 2, 0, 0, 0, 0, 0, 0)
; 負側のデータを抽出します
resm = SearchLevel(Data, 1, 0, 0, 0, 0, 0, 0)
; 元のデータに演算結果を戻します
Data = Set(Data,resp.X, resp.Y*5)
Data = Set(Data,resm.X, resm.Y*3)
QNI社DIADEM .tdmsファイルを読み込みたい。
Ver 6.3から標準で読み込みに対応しています。ただし、NI社が公開するAPIが必要です。
NI社が公開するAPI(TDM C DLL)ファイルを解凍後、下記へコピーして下さい。 なお、NI社が公開するAPIについてのサポートはできませんのでご了承下さい。
・32bit OSの場合
tdm_c_dll\Dominonilibddc\dev\bin\32-bit フォルダー内の全ファイルを
C:\Program Files\imc\shared\Extensions フォルダーへコピーして下さい。
・64bit OS + 32bit FAMOSの場合
tdm_c_dll\Dominonilibddc\dev\bin\32-bit フォルダー内の全ファイルを
C:Program Files (x86)\imc\shared\Extensions フォルダーへコピーして下さい。
・64bit OS + 64bit FAMOSの場合
tdm_c_dll\Dominonilibddc\dev\bin\64-bit フォルダー内の全ファイルを
C:\Program Files\imc\shared\Extensions フォルダーへコピーして下さい。
Q4 マイクロホンの手入れや取扱はどのようにすれば良いですか。
FAQ ID:セクションⅥ:メンテナンスと取扱方法
Q表示しているウィンドウのY軸を一度にdB (or リニア)に変更したい
QシーケンスでUFFファイルへ波形を保存したい。
UFFファイルなど、[ファイル]>[保存]から選択できるファイルフォーマットへ、FileOpenFAS()関数により開いたファイルへ保存できます。第2引数に指定するエクスポートDLL名とパラメーターは[エクストラ]>[オプション]から[インポートフィルター]の[ID]で確認できます。
「Q.BBM社PAK softwareで読み込み可能なUFFファイルをFAMOSから出力するには?」もご参照下さい。
例)
_id = FileOpenFAS("C:¥imc¥Datsintest1.uff", "#UffImportExport.dll|Universal File Format", 1)
SetComm(sintest1, "// Time Response")
FileObjWrite(_id, sintest1)
FileClose(_id)
Qパルス信号を回転数に変換したい
FAQ ID:s067
パルス信号を回転数データに変換することはできますか?
可能です。
以下のデータを対象とします。"pulse"はパルス信号、"signal"は加速度信号です。
以下の図はパルス信号の拡大図です。
最初にこのパルス信号の各パルスの立ち上がりポイントを取得します。
この位置を取得するためには関数"SearchLevel"を利用します。
res = SearchLevel( pulse, 2, 1, 0, 2, 0, 0, 1)
関数のパラメータを簡単に設定するためにはSearchLevelと記述した後で、関数の上にカーソルを置いてSHIFT+F1を押してください。以下のダイアログが表示され、パラメータを簡単に設定できます。
上の設定は1V以上の立ち上がりの変化ポイントを検出します。
この結果は変数リストに以下のように表示されます。
注意:
下図のように表示されない場合、変数リストの上で右クリックして、”コンポーネント表示”を選択してください。
結果は以下のように条件が成立した点だけ取得しますので、等間隔データではなく、XY波形となります。
この"res.X"変数はパルスの立ち上がりポイントのX座標を示します。
この結果を利用して回転数を求めます。
各ポイントのX座標の間隔は前後のデータのX座標の差分です。データ数を合わせるために1つずらしたデータを作成します。
res1 = CutIndex( res.X, 1, leng?(res.X)-1) res2 = CutIndex( res.X, 2, leng?(res.X))
これらの差分が各パルスの時間間隔です。
DiffTime = Res2-Res1
回転数(RPM)に変換するためには以下のようにします。
RPM = 1/DiffTime*60
以上よりRPM信号を取得できます。
例えば、この結果を利用して、加速度波形のRMSを求めてXYグラフを作成すると以下のようになります。
Acc = MvRMS(Signal,0.04,0.04) Result = XYof(RPM,ACC)
シーケンスは以下の通りです。
;*********************************************** ; ; パルス信号をRPMに変換 ; ; pulseという変数にパルス信号を入力してください ;*********************************************** ;パルスの立ち上がりを検出します。 res = SearchLevel(pulse, 2, 1, 0, 2, 0, 0, 1) ;パルスの立ち上がり時間間隔からRPMを算出します res1 = CutIndex( res.X, 1, leng?(res.X)-1) res2 = CutIndex( res.X, 2, leng?(res.X)) DiffTime = Res2-Res1 RPM = 1/DiffTime*60 ;この部分はおまけです。XY波形を作成します Acc = MvRMS(Signal,0.04,0.04) Result = XYof(RPM,ACC)
Q情報トレースに表示されるdB表示が小数点一桁までしか表示されない
QVersion 9.00 リリースノート
Version 9.00 リリースノートのダウンロード (PDF:2MB)
QVersion 8.30 リリースノート
Q間欠的な振動波形を波形毎に切り出してFFTしたい
FAQ ID:s039
下図のように間欠的に振動が発生します。このデータをFFTすると、振動の途中でウィンドウを切り出してしまい上手くデータ処理されません。 各振動波形を切り出してからFFTできますか?
以下のシーケンスでは各振動波形を切り出して、最後にFFT処理を行っています。
;ドリフト成分を除去します
_temp1 = FiltHP(data, 0, 0, 8, 1)
_temp2 = ExpoRMS(_temp1, 0.02, 0.02)
_temp3 = SearchLevel(_temp2, 2, 1, 0, 0, 0, 0, 1)
;ここではSearchLevelでどのような処理をするのでしょうか?
;----------------------------------------------------
;各振動波形を分離するための座標を取得しています。
;結果を確認したければ、_temp2を表示させ、その上に_temp3を重ね書きしてください
;その後で_temp3のスタイルを丸などに変更すると結果を確認できます。
_temp4 = Leng(0,1024)
show _temp4
; Leng(0,1024)では波形が”0”になっています。どういう事でしょうか?
;なぜShowにて表示するのでしょうか?
;----------------------------------------------------
;計算途中を表示するために長さ1024の空の波形を作っています。
_temp6 = Leng(0,0)
; Leng(0,0)では波形が”0”になっています。どういう事でしょうか?
;----------------------------------------------------
;後のループで値を代入するために_temp6というダミー波形を作成しました。
_i=1
while _i<Leng?(_temp3)
_temp5 = Cut(_temp1, _temp3[_i].X-0.1, _temp3[_i+1].X-0.1)
_temp4 = Leng(_temp5, 1024)
_temp6 = Join(_temp6, _temp4)
_i=_i+1
end
;これらの行でどのような処理をされているのでしょうか?
;----------------------------------------------------
;SearchLevelで検出した各振動波形毎にデータを切り出し、
;そのデータ長さを1024点に拡張して、再構成しています。
Result = AmpSpectrumRMS_1(_temp6, 1024, 0, 0, 1)
QBBM社PAK softwareで読み込み可能なUFFファイルをFAMOSから出力するには?
Qグラフの表示更新速度を速くしたい、遅くしたい。
QVersion 8.20 リリースノート
Qデータサイズが大きすぎてExcelに貼り付けられません
FAQ ID:s037
通常、波形エディターに数値データを表示させて、Excelにコピーしています。
今回データサイズが大きすぎてExcelに貼り付けられません。対策はありますか?
波形をExcelで処理できるデータ数に分割してから貼り付ける必要があります。
これを自動化したシーケンスを以下に示しますので参考にしてください。
;------------------------------------ ;サンプルデータの作成 ;------------------------------------ data = sin(Ramp(0,1,100000)) ;------------------------------------ ;定義 ;------------------------------------ ;Excelの最大行 RowMax = 65000 ;出力したい列番号 Col = 1 ;------------------------------------ ;データ転送 ;------------------------------------ ;区切り文字の指定 DDESepar( "\r\n") ;シート数の算出 _SheetNum = Floor( Leng?(data)/65000)+1 _page=1 while _page<=_SheetNum ;転送先アドレス _cellAdr = "R1C"+TForm(col,"F00")+":R"+TForm(RowMax,"F00")+ "C"+TForm(col,"F00") ;波形を切り出し _temp = CutIndex(data, (_page-1)*RowMax+1, _page*RowMax) ;データ転送 _err = DDESet("Excel", "Sheet"+TForm(_page,"F00"), _cellAdr, _temp, 1) _page=_page+1 end
QExcel形式で保存した場合に16384行しか保存できない
Qアクティブなウィンドウのみオートスケール
QVersion 8.00 リリースノート
Q一度に違う形式のデ―タを読み込みたい
FAQ ID:g066
メニュー"ファイル/開く"を選択して表示された標準のFAMOSダイアログでは、同じ種類のファイルは複数読み込めますが、異なる種類のファイルは読み込めません。
代替案
シーケンスを使用すれば、実現可能です。
以下にサンプルを示します。
;****************************************************************
; 拡張子が異なるファイルを開く方法
;
; FAMOSの標準的な方法(ファイル/開く)では同じファイルの種類しか
; 開くことができません。
; シーケンスを用いて対応します。
;****************************************************************
;; ファイルキットを使うと便利です。
;; ダイアログで複数のファイルを選択してください
fid = FsDlgSelectFiles("ファイル選択","c:\temp","*.uff;*.lst",0)
fmax = FsFileListGetCount(fid)
i=1
While i<=fmax
filename = FsFileListGetName(fid,i)
fileext = FsSplitPath(filename,3)
If TComp(fileext,"uff")=0
id = FileOpenFAS(filename,"UFFインポートファイル",0)
End
If TComp(fileext,"lst")=0
id = FileOpenFAS(filename,"LSTインポートファイル",0)
End
;共通の処理
cnt = FileObjNum?(id)
n=1
While n<=cnt
varname = FileObjName?(id,n)
<varname> = FileObjRead(id,n) n=n+1
End
FileClose(id) i=i+1
End
FsFileListClose(fid)
Qsmo関数のパラメータ指定方法について
FAQ ID:s036
平滑する幅は奇数ポイントになるように指定しないといけないのでしょうか?
偶数ポイントになるような指定をするとどのような処理になるのでしょうか?
平滑化する幅が5点より大きいければ、重み関数は三角形の形状で、奇数ポイントとなります。
選択された間隔が5点ならば、関数"Smo5"と同じです。3点ならば関数"Smo3"と同じです。
偶数ポイントを指定した場合、指定した値に対して最も大きい奇数ポイントで計算します。
以下のサンプルでご確認ください。
a=ramp(0,1,20)
i=1
while i<=20
if mod(i,2)=1
a[i]=-a[i]
end
i=i+1
end
b1=smo(a,1)
b2=smo(a,2)
b3=smo(a,3)
b4=smo(a,4)
b5=smo(a,5)
b6=smo(a,6)
b7=smo(a,7)
b8=smo(a,8)
b9=smo(a,9)