FAMOS

シーケンス / 関数に関するFAQ

Q微分からピークを求める方法

FAQ ID:s060

A

次の波形のピークを求めます。X=0.5付近のピークは簡単に見つけられますが、X=0.7付近のピークは簡単には見つけられそうにありません。
このような場合には微分を使用します。以下の図は上から以下のようになっています。

  • オリジナル
  • 一回微分
  • 二回微分
  • 三回微分

ピークは3回微分した波形から求めることができます。
その条件は、

  • 3回微分した値が負から正の方向に0を横切った時間を求める。
  • 求めた時間に対応して。2回微分した値が負の極小値を持つ。
  • 求めた時間に対応して、オリジナルに設定した閾値より大きい

製品詳細はこちら

回答を閉じる

QDDE通信でExcelにデータを転送できますか?(シーケンスを使用:FAMOS ⇒ Excel)

FAQ ID:g051

A

コマンド”DDESet”を使用します。ここで使用しているコマンドは上のダイアログの操作に相当します。

     Data = Ramp( 0, 1, 10)          ;サンプルデータを作成します。
     DDESepar( "\r\n")          ;区切り文字を設定します。
     (メニュー操作のDDEオプションに相当します。)
     DDEErr = DDESet( "Excel", "Sheet1","R1C1:R10C1", Data,1 )
               ;DDE通信でデータを転送します。

製品詳細はこちら

回答を閉じる

QDDE通信でExcelにデータを転送できますか?(シーケンスを使用:Excel ⇒ FAMOS)

FAQ ID:g053

A

コマンド”DDEInq”を使用します。ここで使用しているコマンドは上のダイアログの操作に相当します。

test = DDEInq( "Excel", "Sheet1", "R1C1:R10C1", 3)

製品詳細はこちら

回答を閉じる

Qエンジンの回転パルスを計測しました。各回転パルス間の時間を求めることはできますか?

FAQ ID:s007

A

関数“SearchLevel”を使用すると簡単に求めることができます。
以下のようなコマンドでパルス間隔を求めることができます。

res = SearchLevel(data, 2, 5, 0, 2, 1, 0, 1)
res1 = CutIndex( res.X, 1, leng?(res.X)-1)
res2 = CutIndex( res.X, 2, leng?(res.X))
DiffTime = Res2-Res1


解説

最初に関数“SearchLevel”を使用して、5Vになった部分を検索します。
結果resには、検索された時間とそのときの値がX、Yのデータとして出力されます。
この結果に対して、インデックスを1つずらした波形を作成します。
これは以下のような処理を行っています。

res1  1個目のX座標  2個目のX座標  3個目のX座標  4個目のX座標
res2  2個目のX座標  3個目のX座標  4個目のX座標  5個目のX座標

これらの値を減算することにより、各パルス時間間隔を求めることができます。以下にサンプルを示します。

;----------------------------------------------------------------
;サンプルパルスデータ作成
;各パルスの間隔が異なるように設定しています。
;----------------------------------------------------------------
;****************************
; Low=0, High=5のパルスデータを作成します。
;****************************
p=0 ;データ処理経過を%で表示
YUnit p %
show p

data = Leng(0,0)

i=1
While i<=720
data = Join( data, Leng(0,10+2*Mod(i,5))+0) ;0のデータを作成

data = Join( data, Leng(0,10+2*Mod(i,5))+5) ;5のデータを作成
p = i/720*100

i = i+1
End

data = XDel( data, 0.001);サンプルレートの設定
XUnit data s
Show data

CvXAxis( data, 0, 0.2, 0)

CvYAxis( data, data, 0, -1, 6, 10000, -2)

;----------------------------------------------------------------
;
これ以降が実際の処理です。
;----------------------------------------------------------------
;****************************
;トリガーポイントの検出
;  関数"SearchLevel"を使用します。
; 結果は立ち上がりエッジのX,Yデータとなります。
;****************************
res = SearchLevel(data, 2, 5, 0, 2, 1, 0, 1)
CvYAxis( data, Res, 0, -1, 6, 10000+5000+400, -2);データ表示。
実際の処理では必要なし

;****************************
;パルス間隔の計算
;****************************
res1 = CutIndex( res.X, 1, leng?(res.X)-1)

res2 = CutIndex( res.X, 2, leng?(res.X))

DiffTime = Res2-Res1
Show DiffTime ;データ表示。実際の処理では必要なし


CvYAxis( DiffTime, DiffTime, 0, 0, 0, 3000+300, -2)
;データ表示。実際の処理では必要なし

CvXAxis( DiffTime, 1, 20, 0)
;データ表示。実際の処理では必要なし

製品詳細はこちら

回答を閉じる