本デバイスサポートは、この17K66Aモジュールを、EPICSからXport経由でコントロール する、Asynドライバーです。
Header | Function | コマンド例 | 応答例 |
---|---|---|---|
DLY | 遅延値の設定(0〜65535) | DLY00100<CR> | DLY00100<CR> |
DVD | 分周値の設定 | DVD05120<CR> | DVD05120<CR> |
GET | 状態読み込み | GET<CR> | OEN/DVD05120/DLY00100<CR> |
static struct gpibCmd gpibCmds[] = { /* COMAND 0 set_delay */ {&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "DLY%05ld\r", 511, 511, NULL, 0, 0, NULL, NULL, EOSNL }, /* COMAND 1 set_dev */ {&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "DVD%05ld\r", 511, 511, NULL, 0, 0, NULL, NULL, EOSNL }, /* COMAND 2 read status */ {&DSET_WF, GPIBREAD, IB_Q_LOW, "GET\r",NULL, 0, 8191, rd_wf_data, 0,0,NULL,NULL, EOSNL } };注意点は
static int rd_data(char wav[], long data[]) { /* 012345678901234567890 OEN/DVD12345/DLY12345 */ int i; char wa1[32767]; /* printf("input %s\n",wav); */ strcpy(wa1,strtok(wav,"/")); if (strcmp(wa1,"OEN")==0) { data[0]=0; } else { data[0]=1; } for (i=7;i<12;i++) { wa1[i-7]=wav[i]; } /* printf("DVD %s\n",wa1); */ data[1]=atoi(wa1); for (i=16;i<21;i++) { wa1[i-16]=wav[i]; } data[2]= atoi(wa1); return 0; }といった、実に不細工な関数で行っています。あーはずかし。
#dev17K66A dbd list device(ai,GPIB_IO,devAi17K66A,"DV66A") device(ao,GPIB_IO,devAo17K66A,"DV66A") device(bi,GPIB_IO,devBi17K66A,"DV66A") device(bo,GPIB_IO,devBo17K66A,"DV66A") device(stringin,GPIB_IO,devSi17K66A,"DV66A") device(stringout,GPIB_IO,devSo17K66A,"DV66A") device(longin,GPIB_IO,devLi17K66A,"DV66A") device(longout,GPIB_IO,devLo17K66A,"DV66A") device(mbbi,GPIB_IO,devMbbi17K66A,"DV66A") device(mbbo,GPIB_IO,devMbbo17K66A,"DV66A") device(waveform,GPIB_IO,devWf17K66A,"DV66A")
dbLoadRecords("db/FB_DV.db","PORT=L2, A=1")のように設定します。
drvAsynIPPortConfigure("L2","172.19.**.***:23",0,0,0)