[Back]
Block display

CaGet[] Name:K.Harada Date:2017/02/08(Wed) 14:51:13 No.185

SAD上でcagetのオプションをつける方法ってありますでしょうか?
コマンドラインでcagetだけで取ってくると"Illigal Value"になり、SADでも
同様、コマンドラインではcagetにオプションとして"-n"をつけると値が取って
こられる、というレコードをSADから値を取りたいのです。

Re: CaGet[] Name:Akio Morita Date:2017/02/08(Wed) 17:47:56 No.186

> SAD上でcagetのオプションをつける方法ってありますでしょうか?
> コマンドラインでcagetだけで取ってくると"Illigal Value"になり、SADでも
> 同様、コマンドラインではcagetにオプションとして"-n"をつけると値が取って
> こられる、というレコードをSADから値を取りたいのです。
>
caget -n しただけなら、Get["!caget -n ..."]とか (fp = OpenRead["!caget -n ..."]; r = Read[fp, String]; Close[fp]; r)で解決な気も…

SADのEPICS CA実装は複数有り、呼び出し関数・改版状態により内部実装・動作が違います
従って、上手く動かないとされる実行形式に対応するsource revisionと呼び出した関数を
特定しないと調べようがありません

問題の cagetの -n オプションは、DBF_ENUMなレコードに関するものなので、
MAIN trunkの”最新版”から関連する動作を抜き出すと以下の通り

* CaMonitor系(src/CaSearch2.c)
** DBR_TIME_LONGでca_add_masked_array_eventする
* CaRead/CaGet/CaWrite/CaPut系(src/CaSearch_.c)
** DBR_TIME_ENUMでca_array_getする
*** struct dbr_time_enumのvalue要素の値を realへ型変換
*** dbr_enum_t型は、epicsUInt16型なので整数値が返ると思われる(caget -nの動作に近いと思うのですが…)
** こちらの内部実装は、2016.02.17に大規模な改修が行われている
*** 以前の実装は、DBR_TIME_DOUBLEで ca_array_getしている

- WebForum -