· 

SDS7102からpythonで波形取得(3)

OWON SDS7102からpythonで波形取得...できたらいいなーと思っている。引き続きLabVIEWと格闘する。

 

で、いきなり、ここなんだが、Case Structureっていうらしい。入力に応じてあらかじめ決めてある出力をするってことで、C言語だとswitchとcaseに該当するんだとは思うけど...

上のリストボックス(今"2"ってなってる)を変えると、Array(今"time base 4"ってなってる)が変わっていくんだけど...中を見たりいじったりする方法がわからん。ていうかまずぱっと見で中身が見えないって見通し悪すぎ。それとArrayの位置がそれぞれビミョーに違うってことから、これってページ(?)を切り替えながら全ページに手で貼り付けたってこと..?!くそめんどくさい!!そんな、信じられない。

が、下の絵のようにArrayから値をクリップボードにコピーはできるので、ページをめくりながらひとつづつ取り出してみる。

で、取り出した。

で、Python化

  1. timebase_list_base_mantissa=np.array([1,2,5])
  2. timebase_list_base=np.append(timebase_list_base_mantissa*1e-9,timebase_list_base_mantissa*1e-8)
  3. for index_part in range(-7,3,1):
  4.     timebase_list_base=np.append(timebase_list_base,timebase_list_base_mantissa*(10**index_part))
  5. timebase_start_indexes=np.array([2,2,1,0,0,0,0,1,1,1,2,1])
  6. timebase_start_index=timebase_start_indexes[timebase_index_out]
  7. timebase_selected=timebase_list_base[timebase_start_index::]

ArrayサイズがLabVIEWと異なってしまう場合があるけど、ここから選ぶはずなので、変な選ばれ方はしないと信じてそっとしておく。

 

choose CHのところはCH1だとTrue、CH2だとFalseが出力されるようにしているだけっぽいので、一旦ほっといて後で考える。

 

次はこいつです。

ダブルクリックで開くと

で、Show Block Diagram

なんじゃこりゃーorz

 

最初のでっかい四角はwhileらしい。で、何してる?連続しているデータを探しているように見える。で、その値は67, 72, (49 or 50)って、'CH1' or 'CH2'やん。これしきの事でこんな記述になるなんて...

ではpython化

  1. # find 'CHx' index
  2. channel_selected=1
  3. channel_indicator_list=np.array([ord('1'),ord('1'),ord('2')])
  4. array_C=(msg_array==ord('C'))
  5. array_H=(msg_array==ord('H'))
  6. array_x=(msg_array==channel_indicator_list[channel_selected])
  7. index_CHx=((np.where(array_C[0:-2:1]*array_H[1:-1:1]*array_x[2::1]))[0])[0]

まぁまぁかな。こういうのって知恵の出しどころだけど、小生の知識じゃこれが限界。

はい次ー。

下から行こう。見つけたCHxのインデックスに39を足して、そのインデックスの値を使って配列を選択している。また、全ページの配列の値を取り出すんかいっ。しんどっ。

で、そのほか、設定を取り出していそうな部分を調べていく。この辺は何となくでpython化できそうなので、まずはデバッグで実行させてみて値を見てみる。

で、面倒なのでまるっと

  1. mantissa_base=np.array([1,2,5])
  2. timebase_list_base=np.append(mantissa_base*1e-9,mantissa_base*1e-8)
  3. for index_part in range(-7,3,1):
  4.     timebase_list_base=np.append(timebase_list_base,mantissa_base*(10**index_part))
  5. timebase_start_indexes=np.array([2,2,1,0,0,0,0,1,1,1,2,1])
  6. timebase_start_index=timebase_start_indexes[timebase_index_out]
  7. timebase_list_selected=timebase_list_base[timebase_start_index::]
  8.  
  9. vertical_list_base=np.append(mantissa_base*1e-3,mantissa_base*1e-2)
  10. for index_part in range(-1,3,1):
  11.     vertical_list_base=np.append(vertical_list_base,mantissa_base*(10**index_part))
  12. vertical_start_indexes=np.array([1,4,7,10])
  13.  
  14. # find 'CHx' index
  15. channel_selected=1
  16. channel_indicator_list=np.array([ord('1'),ord('1'),ord('2')])
  17. array_C=(msg_array==ord('C'))
  18. array_H=(msg_array==ord('H'))
  19. array_x=(msg_array==channel_indicator_list[channel_selected])
  20. index_CHx=((np.where(array_C[0:-2:1]*array_H[1:-1:1]*array_x[2::1]))[0])[0]
  21.  
  22. vertical_start_index=vertical_start_indexes[msg_array[index_CHx+39]]
  23. vertical_list_selected=vertical_list_base[vertical_start_index::]
  24. vertical_selected_precision=vertical_list_selected[msg_array[index_CHx+35]]
  25.  
  26. timebase_selected_M=timebase_list_selected[msg_array[index_CHx+27]]

pythonもなかなか難解ですが、これで実行すると。

 

vertical_selected_precision

Out[3]: 1.0

 

timebase_selected_M

Out[4]: 4.9999999999999996e-06

 

となるので、たぶんあっていると思います。

 

LabVIEWのProbeの番号をリセットする方法を知りたい。消しては追加消しては追加ってしているとどんどんどんどん数字が大きくなっちゃう。

ここによると、LabVIEWそのものを一度落として再度起動すれば良いっぽい。

 

...まじしんどいので休憩。