= asynSetTracemask の指定について = PDF文書にも記載していますが、ioc shell 上でデバッグする際に どのようなメッセージが行き来しているかをみることは重要です。 正式なドキュメントは本家のサイト http://www.aps.anl.gov/epics/modules/soft/asyn/ からasynDriverへのリンクを参照してください。 == 書式 == {{{ asynSetTraceMask(portName,addr,mask) asynSetTraceIOMask(portName,addr,mask) }}} 定義は公式ドキュメントのTrace Interfaceの項か、ソース{{{ ${EPICS_BASE}/../modules/soft/asyn/[ver]/asyn/asynDriver/asynDriver.h }}} を参照。 (バージョンによって違いがあり、下の例はR4-31) {{{ Trace Interface /*asynTrace is implemented by asynManager*/ /*All asynTrace methods can be called from any thread*/ /* traceMask definitions*/ #define ASYN_TRACE_ERROR 0x0001 #define ASYN_TRACEIO_DEVICE 0x0002 #define ASYN_TRACEIO_FILTER 0x0004 #define ASYN_TRACEIO_DRIVER 0x0008 #define ASYN_TRACE_FLOW 0x0010 #define ASYN_TRACE_WARNING 0x0020 /* traceIO mask definitions*/ #define ASYN_TRACEIO_NODATA 0x0000 #define ASYN_TRACEIO_ASCII 0x0001 #define ASYN_TRACEIO_ESCAPE 0x0002 #define ASYN_TRACEIO_HEX 0x0004 }}} デフォルトでは !TraceMask が 0x1, TraceIOMask が 0x0 になっているので、 エラーが出たときのみログが表示されるようになっている。 == 使用例: iocsh上での操作 == お勧めは * 通常時はデフォルトのまま {{{ asynSetTraceMask(PS1, 0, 0x1) asynSetTraceIOMask(PS1, 0, 0x0) }}} * デバッグ時には traceError と traceIODriver を有効にして {{{ asynSetTraceMask(PS1, 0, 0x9) asynSetTraceIOMask(PS1, 0, 0x4) }}} としておけば、バイナリ列がどのように行き来しているか分かる。(ASCIIで読みたいときにはIOMaskを0x1に) とにかく全部見たい場合、まずは {{{ asynSetTraceMask(PS1, 0, -1) asynSetTraceIOMask(PS1, 0, -1) }}} とかやっても良いです(後で適切なマスクにした方が幸せになれます)。 == 使用例: !AsynRecord GUI == デバッグ用にもともと用意されているレコード類を使うことも便利です。 まずはスタートアップスクリプト st.cmd 内の iocInit より'''前の位置'''において {{{ cd $(ASYN) dbLoadRecords("db/asynRecord.db","P=asyn,R=Test,PORT=PS1,ADDR=0,IMAX=0,OMAX=0") cd ${TOP}/iocBoot/${IOC} iocInit }}} とします。そしてGUIの起動は例えば {{{ medm -x -macro "P=asyn,R=Test" /pf/epics/R315.5/modules/soft/asyn/4-31/opi/medm/asynRecord.adl }}} のように直接指定すれば良いです(バージョンは使っているioc, asyn と合わせたほうが無難です)。 CSS BOY, medm, edm のGUIが用意されていますので、お好きなモノをお使いください。最新の asyn(R4-31) ではcaqtdm ファイルもあります。 注:PF内でやる場合、他の人とレコード名が衝突しないよう、P=の引数は '''自分の名前+asyn'''にするようにしてください。