[Back]
Block display

SAD Ver.1.0.10.9a1 のCaMonitor/CaGet Name:M. Satoh Date:2017/12/25(Mon) 14:51:23 No.687

お世話になっております.
Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.

e.g.)
PVnameの内容が,
SP_AT_0
である場合,

data=CaMonitor["PVname"];
Print[data@Value[]]
をsadで実行すると,最初の三文字である,
SP_
が取得される.

 取り急ぎ,ご報告いたします.

Re: SAD Ver.1.0.10.9a1 のCaMonitor/CaGet Name:Akio Morita Date:2017/12/25(Mon) 17:45:26 No.688

> お世話になっております.
> Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
>
> e.g.)
> PVnameの内容が,
> SP_AT_0
> である場合,
>
> data=CaMonitor["PVname"];
> Print[data@Value[]]
> をsadで実行すると,最初の三文字である,
> SP_
> が取得される.
>
コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした

ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
ca@WaitValue[];
Print[ca@Value[]];
SP_AT_0

In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
Out[2]:= {"SP_AT_0",17,3,0}

Re^2: SAD Ver.1.0.10.9a1 のCaMonitor/CaGet Name:M. Satoh Date:2017/12/25(Mon) 18:17:32 No.689

> > お世話になっております.
> > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> >
> > e.g.)
> > PVnameの内容が,
> > SP_AT_0
> > である場合,
> >
> > data=CaMonitor["PVname"];
> > Print[data@Value[]]
> > をsadで実行すると,最初の三文字である,
> > SP_
> > が取得される.
> >
> コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
>
> ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> ca@WaitValue[];
> Print[ca@Value[]];
> SP_AT_0
>
> In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> Out[2]:= {"SP_AT_0",17,3,0}


ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.

In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}

Re^3: SAD Ver.1.0.10.9a1 のCaMonitor/CaGet Name:Akio Morita Date:2017/12/25(Mon) 18:40:11 No.690

> > > お世話になっております.
> > > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> > >
> > > e.g.)
> > > PVnameの内容が,
> > > SP_AT_0
> > > である場合,
> > >
> > > data=CaMonitor["PVname"];
> > > Print[data@Value[]]
> > > をsadで実行すると,最初の三文字である,
> > > SP_
> > > が取得される.
> > >
> > コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> > DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
> >
> > ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> > ca@WaitValue[];
> > Print[ca@Value[]];
> > SP_AT_0
> >
> > In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> > Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> > Out[2]:= {"SP_AT_0",17,3,0}
>
>
> ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
>
> In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
> Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
>
DBF_STRINGなPV読み出しで、CaReadが正常、CaMonitor@Value[]でデータが腐るという症状のバグが、
V1.0.10.9aからV1.0.10.9a1の途中に存在しています
当該バグは、Revisionev.6304で修正され patch levelが a1へバンプされています

r6304の修正対象は、要素数 2以上のDBF_STRING PVからのValue callback時にて受信データからSAD上のString Listオブジェクトを構築する際に設定するStringオブジェクトの寿命スコープに誤りがあり、GCによりList内のStringオブジェクトの領域が破棄されるといバグです

BFA[5148]: Fix CaMonitor crash by DBF_STRING waveform
-Fix character pointer handling for Fix DBR_TIME_STRING ValueCB
-Fix String object scope for DBR_TIME_STRING waveform(n > 1)

Re^4: SAD Ver.1.0.10.9a1 のCaMonitor/CaGet Name:M. Satoh Date:2017/12/26(Tue) 18:02:01 No.691

> > > > お世話になっております.
> > > > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> > > >
> > > > e.g.)
> > > > PVnameの内容が,
> > > > SP_AT_0
> > > > である場合,
> > > >
> > > > data=CaMonitor["PVname"];
> > > > Print[data@Value[]]
> > > > をsadで実行すると,最初の三文字である,
> > > > SP_
> > > > が取得される.
> > > >
> > > コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> > > DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
> > >
> > > ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> > > ca@WaitValue[];
> > > Print[ca@Value[]];
> > > SP_AT_0
> > >
> > > In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> > > Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> > > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> > > Out[2]:= {"SP_AT_0",17,3,0}
> >
> >
> > ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
> >
> > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
> > Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
> >
> DBF_STRINGなPV読み出しで、CaReadが正常、CaMonitor@Value[]でデータが腐るという症状のバグが、
> V1.0.10.9aからV1.0.10.9a1の途中に存在しています
> 当該バグは、Revisionev.6304で修正され patch levelが a1へバンプされています
>
> r6304の修正対象は、要素数 2以上のDBF_STRING PVからのValue callback時にて受信データからSAD上のString Listオブジェクトを構築する際に設定するStringオブジェクトの寿命スコープに誤りがあり、GCによりList内のStringオブジェクトの領域が破棄されるといバグです
>
> BFA[5148]: Fix CaMonitor crash by DBF_STRING waveform
> -Fix character pointer handling for Fix DBR_TIME_STRING ValueCB
> -Fix String object scope for DBR_TIME_STRING waveform(n > 1)

tfEPICSCA.c において
static int bDebug = 10;
に変更してためしてみました.
(gcc 4.9.2, CentOS 4.9, EPICS base R3.14.12 および R3.16.1)

<17-12-26(Tue) 17:30:40><-tcsh-></usr/users/masanori/work/sad/><masanori@pistachio>sadmope test5.sad
*** Welcome to SAD Ver.1.0.10.9a1 built at 2017-12-26 17:24:12 +0900 ***
*** Today: 17:30:44 Tuesday 12/26/2017 ***
cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
OFF LOG ECHO;READ 77 ; 23
cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1792
*** SADScript Initialization: /usr/new/pkg/operation/SAD_mt/share/Packages/init.n ***
*** Runtime Environment: /usr/new/pkg/operation/SAD_mt/share/Packages/init.local.n ***
RFSW RADCOD RAD FLUC INTRA POL COD DAPER EMIOU CMPLO FOURI SMEAR
F F F T F F T F F F F T
Design orbit length = 1.0000000000000000

BpmName=CaMonitor["LIiBM:BPM_SYNC:NAMELIST"];
eca_init
eca_chid_new: extend table size from 0 to 1024
eca_chid_new: allocate slot[1] for chid[0x9ed9cc8]
eca_fd_register: fd[5] open (nil)
CaOpen[LIiBM:BPM_SYNC:NAMELIST]
eca_chid_cas: Update slot[1] chid from 0x9ed9cc8 to 0xa1183b8
TkSense[1];
eca_fd_callback: >>> enter
eca_constatcb[LIiBM:BPM_SYNC:NAMELIST]: id=1 up conn=2
eca_evid_new: extend table size from 0 to 1024
eca_evid_new: allocate slot[1] for evid[0xb4dab02c]
eca_evid_cas: Update slot[1] evid from 0xb4dab02c to 0xa273890
eca_chid_inc: increment slot[1] reference count to 1
eca_fd_callback: exit <<<<
eca_fd_callback: >>> enter
eca_fd_callback: exit <<<<
eca_fd_callback: >>> enter
eca_valuecb[LIiBM:BPM_SYNC:NAMELIST]: id=1 conn=2 stat=1 DBR_TIME_STRING[99] {"SP_AT_0", "SP_AT_1", "SP_AT_2", "SP_A1_G", "SP_A1_0", "SP_A1_1", "SP_A1_M", "SP_AS_1", "SP_AS_2", "SP_AS_3", "SP_A2_1", "SP_A2_3", "SP_A2_4", "SP_A3_2", "SP_A3_4", "SP_A4_2", "SP_A4_4", "SP_B1_4", "SP_B2_4", "SP_B3_4", "SP_B4_4", "SP_B5_4", "SP_B6_4", "SP_B7_4", "SP_R0_01", "SP_R0_02", "SP_R0_14", "SP_R0_22", "SP_R0_32", "SP_R0_42", "SP_R0_51", "SP_R0_62", "SP_R0_63", "SP_C1_4", "SP_C2_4", "SP_C3_4", "SP_C4_4", "SP_C5_4", "SP_C6_4", "SP_C7_4", "SP_C8_4", "SP_11_4", "SP_12_4", "SP_13_5", "SP_15_T", "SP_16_5", "SP_17_2", "SP_17_44", "SP_18_2", "SP_18_49", "SP_21_2", "SP_21_4", "SP_22_2", "SP_22_4", "SP_23_2", "SP_23_4", "SP_24_1", "SP_24_2", "SP_24_3", "SP_24_4", "SP_26_1", "SP_26_2", "SP_26_3", "SP_26_4", "SP_27_2", "SP_27_4", "SP_28_2", "SP_28_4", "SP_DC_2", "S8_DN_01U", "SP_DN_12", "SP_DN_21", "SP_DN_31", "S8_DN_42U", "SP_DC_4", "SP_32_4", "SP_34_4", "SP_36_4", "SP_38_4", "SP_42_4", "SP_44_4", "SP_46_4", "SP_48_4", "SP_52_4", "SP_54_4", "SP_56_4", "SP_58_0", "SP_58_4", "SP_61_3", "SP_61_6", "SP_61_8", "SP_61_D1", "SP_61_D2", "SP_61_H1", "SP_61_A1", "SP_61_A3", "SP_61_F1", "SP_61_F4", "SP_61_F5"}
Segmentation fault

Re^5: SAD Ver.1.0.10.9a1 のCaMonitor/CaGet (解決しました) Name:M. Satoh Date:2017/12/27(Wed) 11:38:48 No.693

> > > > > お世話になっております.
> > > > > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> > > > >
> > > > > e.g.)
> > > > > PVnameの内容が,
> > > > > SP_AT_0
> > > > > である場合,
> > > > >
> > > > > data=CaMonitor["PVname"];
> > > > > Print[data@Value[]]
> > > > > をsadで実行すると,最初の三文字である,
> > > > > SP_
> > > > > が取得される.
> > > > >
> > > > コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> > > > DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
> > > >
> > > > ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> > > > ca@WaitValue[];
> > > > Print[ca@Value[]];
> > > > SP_AT_0
> > > >
> > > > In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> > > > Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> > > > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> > > > Out[2]:= {"SP_AT_0",17,3,0}
> > >
> > >
> > > ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
> > >
> > > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
> > > Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
> > >
> > DBF_STRINGなPV読み出しで、CaReadが正常、CaMonitor@Value[]でデータが腐るという症状のバグが、
> > V1.0.10.9aからV1.0.10.9a1の途中に存在しています
> > 当該バグは、Revisionev.6304で修正され patch levelが a1へバンプされています
> >
> > r6304の修正対象は、要素数 2以上のDBF_STRING PVからのValue callback時にて受信データからSAD上のString Listオブジェクトを構築する際に設定するStringオブジェクトの寿命スコープに誤りがあり、GCによりList内のStringオブジェクトの領域が破棄されるといバグです
> >
> > BFA[5148]: Fix CaMonitor crash by DBF_STRING waveform
> > -Fix character pointer handling for Fix DBR_TIME_STRING ValueCB
> > -Fix String object scope for DBR_TIME_STRING waveform(n > 1)
>
> tfEPICSCA.c において
> static int bDebug = 10;
> に変更してためしてみました.
> (gcc 4.9.2, CentOS 4.9, EPICS base R3.14.12 および R3.16.1)
>
> <17-12-26(Tue) 17:30:40><-tcsh-></usr/users/masanori/work/sad/><masanori@pistachio>sadmope test5.sad
> *** Welcome to SAD Ver.1.0.10.9a1 built at 2017-12-26 17:24:12 +0900 ***
> *** Today: 17:30:44 Tuesday 12/26/2017 ***
> cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
> OFF LOG ECHO;READ 77 ; 23
> cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
> cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1792
> *** SADScript Initialization: /usr/new/pkg/operation/SAD_mt/share/Packages/init.n ***
> *** Runtime Environment: /usr/new/pkg/operation/SAD_mt/share/Packages/init.local.n ***
> RFSW RADCOD RAD FLUC INTRA POL COD DAPER EMIOU CMPLO FOURI SMEAR
> F F F T F F T F F F F T
> Design orbit length = 1.0000000000000000
>
> BpmName=CaMonitor["LIiBM:BPM_SYNC:NAMELIST"];
> eca_init
> eca_chid_new: extend table size from 0 to 1024
> eca_chid_new: allocate slot[1] for chid[0x9ed9cc8]
> eca_fd_register: fd[5] open (nil)
> CaOpen[LIiBM:BPM_SYNC:NAMELIST]
> eca_chid_cas: Update slot[1] chid from 0x9ed9cc8 to 0xa1183b8
> TkSense[1];
> eca_fd_callback: >>> enter
> eca_constatcb[LIiBM:BPM_SYNC:NAMELIST]: id=1 up conn=2
> eca_evid_new: extend table size from 0 to 1024
> eca_evid_new: allocate slot[1] for evid[0xb4dab02c]
> eca_evid_cas: Update slot[1] evid from 0xb4dab02c to 0xa273890
> eca_chid_inc: increment slot[1] reference count to 1
> eca_fd_callback: exit <<<<
> eca_fd_callback: >>> enter
> eca_fd_callback: exit <<<<
> eca_fd_callback: >>> enter
> eca_valuecb[LIiBM:BPM_SYNC:NAMELIST]: id=1 conn=2 stat=1 DBR_TIME_STRING[99] {"SP_AT_0", "SP_AT_1", "SP_AT_2", "SP_A1_G", "SP_A1_0", "SP_A1_1", "SP_A1_M", "SP_AS_1", "SP_AS_2", "SP_AS_3", "SP_A2_1", "SP_A2_3", "SP_A2_4", "SP_A3_2", "SP_A3_4", "SP_A4_2", "SP_A4_4", "SP_B1_4", "SP_B2_4", "SP_B3_4", "SP_B4_4", "SP_B5_4", "SP_B6_4", "SP_B7_4", "SP_R0_01", "SP_R0_02", "SP_R0_14", "SP_R0_22", "SP_R0_32", "SP_R0_42", "SP_R0_51", "SP_R0_62", "SP_R0_63", "SP_C1_4", "SP_C2_4", "SP_C3_4", "SP_C4_4", "SP_C5_4", "SP_C6_4", "SP_C7_4", "SP_C8_4", "SP_11_4", "SP_12_4", "SP_13_5", "SP_15_T", "SP_16_5", "SP_17_2", "SP_17_44", "SP_18_2", "SP_18_49", "SP_21_2", "SP_21_4", "SP_22_2", "SP_22_4", "SP_23_2", "SP_23_4", "SP_24_1", "SP_24_2", "SP_24_3", "SP_24_4", "SP_26_1", "SP_26_2", "SP_26_3", "SP_26_4", "SP_27_2", "SP_27_4", "SP_28_2", "SP_28_4", "SP_DC_2", "S8_DN_01U", "SP_DN_12", "SP_DN_21", "SP_DN_31", "S8_DN_42U", "SP_DC_4", "SP_32_4", "SP_34_4", "SP_36_4", "SP_38_4", "SP_42_4", "SP_44_4", "SP_46_4", "SP_48_4", "SP_52_4", "SP_54_4", "SP_56_4", "SP_58_0", "SP_58_4", "SP_61_3", "SP_61_6", "SP_61_8", "SP_61_D1", "SP_61_D2", "SP_61_H1", "SP_61_A1", "SP_61_A3", "SP_61_F1", "SP_61_F4", "SP_61_F5"}
> Segmentation fault


 結局,gccを4.9.2から5.3.0に変更してmakeしたところ,正常に動作するようになりました.お騒がせいたしました.

Re^6: SAD Ver.1.0.10.9a1 のCaMonitor/CaGet (解決しました) Name:Akio Morita Date:2017/12/27(Wed) 11:56:58 No.694

>  結局,gccを4.9.2から5.3.0に変更してmakeしたところ,正常に動作するようになりました.お騒がせいたしました.
>
だとすると、gfrotran側でのISO Fortran2003/2008の未実装領域 or 実装バグを踏んでいたかなぁ・・・

GCCの開発的には、GCC 5系列は 2017/10/10の GCC 5.5のリリースでサポート終了したようなので、
現時点の推奨はGCC 6.4 or GCC 7.2となります
(afsad*系のSADは、gfortran 6.4 + LLVM/clang 5.0.0)

- WebForum -