From fe4654959417fc64b648f43d717a89fcd44388ee Mon Sep 17 00:00:00 2001 From: hadaq Date: Mon, 23 Jun 2008 13:31:01 +0000 Subject: [PATCH] genrunid.db is a separate record now. Sergey Yurevich --- ebctrl/ioc/db/evtbuild.db | 71 ++++++++++++++++++--------- ebctrl/ioc/ebctrlApp/Db/Makefile | 1 + ebctrl/ioc/ebctrlApp/Db/genrunid.db | 2 +- ebctrl/ioc/ebctrlApp/src/evtbuild.c | 24 ++++----- ebctrl/ioc/ebctrlApp/src/genrunid.c | 29 +++++------ ebctrl/ioc/iocBoot/iocebctrl/envPaths | 2 +- ebctrl/ioc/iocBoot/iocebctrl/st.cmd | 8 +-- 7 files changed, 81 insertions(+), 56 deletions(-) diff --git a/ebctrl/ioc/db/evtbuild.db b/ebctrl/ioc/db/evtbuild.db index f36c927..9e83622 100644 --- a/ebctrl/ioc/db/evtbuild.db +++ b/ebctrl/ioc/db/evtbuild.db @@ -25,6 +25,8 @@ record(genSub,"HAD:$(eb)") { field(FTH,"LONG") field(FTI,"LONG") field(FTJ,"LONG") + field(FTK,"LONG") + field(FTL,"STRING") field(FTVA,"LONG") field(FTVB,"LONG") field(FTVC,"LONG") @@ -35,6 +37,8 @@ record(genSub,"HAD:$(eb)") { field(FTVH,"LONG") field(FTVI,"LONG") field(FTVJ,"LONG") + field(FTVK,"LONG") + field(FTVL,"SRTING") field(NOA,"50") field(NOB,"50") field(NOC,"50") @@ -45,6 +49,8 @@ record(genSub,"HAD:$(eb)") { field(NOH,"50") field(NOI,"50") field(NOJ,"50") + field(NOK,"50") + field(NOL,"50") field(NOVA,"1") field(NOVB,"1") field(NOVC,"1") @@ -55,72 +61,100 @@ record(genSub,"HAD:$(eb)") { field(NOVH,"1") field(NOVI,"1") field(NOVJ,"1") + field(NOVK,"1") + field(NOVL,"1") field(OUTA,"HAD:$(eb):nrOfMsgs PP NMS") field(OUTB,"HAD:$(eb):byteWrit PP NMS") - field(OUTC,"HAD:$(eb):evtsComp PP NMS") - field(OUTD,"HAD:$(eb):evtsDisc PP NMS") - field(OUTE,"HAD:$(eb):evtsDataErr PP NMS") - field(OUTF,"HAD:$(eb):evtsTagErr PP NMS") - field(OUTG,"HAD:$(eb):evtbuildBuff PP NMS") + field(OUTC,"HAD:$(eb):evtComp PP NMS") + field(OUTD,"HAD:$(eb):evtDisc PP NMS") + field(OUTE,"HAD:$(eb):evtDataErr PP NMS") + field(OUTF,"HAD:$(eb):evtTagErr PP NMS") + field(OUTG,"HAD:$(eb):ebBuff PP NMS") field(OUTH,"HAD:$(eb):status PP NMS") - field(OUTI,"HAD:$(eb):evtsCompletePS PP NMS") - field(OUTJ,"HAD:$(eb):bytesWrittenPS PP NMS") + field(OUTI,"HAD:$(eb):evtCRate PP NMS") + field(OUTJ,"HAD:$(eb):byteWRate PP NMS") + field(OUTK,"HAD:$(eb):evtDRate PP NMS") + field(OUTL,"HAD:$(eb):byteWRateStr PP NMS") } + +record(stringin,"HAD:$(eb):byteWRateStr") +{ + field(DTYP,"Soft Channel") + field(SCAN,"Passive") + field(INP,"Constant") +} + record(longin,"HAD:$(eb):nrOfMsgs") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } + record(longin,"HAD:$(eb):byteWrit") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(longin,"HAD:$(eb):evtsComp") + +record(longin,"HAD:$(eb):evtComp") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(longin,"HAD:$(eb):evtsDisc") + +record(longin,"HAD:$(eb):evtDisc") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(longin,"HAD:$(eb):evtsDataErr") + +record(longin,"HAD:$(eb):evtDataErr") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(longin,"HAD:$(eb):evtsTagErr") + +record(longin,"HAD:$(eb):evtTagErr") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } + record(longin,"HAD:$(eb):status") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(longin,"HAD:$(eb):evtsCompletePS") + +record(longin,"HAD:$(eb):evtCRate") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(longin,"HAD:$(eb):bytesWrittenPS") + +record(longin,"HAD:$(eb):byteWRate") { field(DTYP,"Soft Channel") field(SCAN,"Passive") field(INP,"Constant") } -record(waveform,"HAD:$(eb):evtbuildBuff") + +record(longin,"HAD:$(eb):evtDRate") +{ + field(DTYP,"Soft Channel") + field(SCAN,"Passive") + field(INP,"Constant") +} + +record(waveform,"HAD:$(eb):ebBuff") { field(DTYP,"Soft Channel") field(SCAN,"Passive") @@ -128,14 +162,7 @@ record(waveform,"HAD:$(eb):evtbuildBuff") field(NELM,"100") field(FTVL,"LONG") } -record(sub,"HAD:genRunId") { - field(DESC, "subroutine") - field(SCAN, "1 second") - field(INPA, "HAD:$(eb):byteWrit") - field(INPB, "HAD:$(eb):status") - field(INAM, "genRunId_init") - field(SNAM, "genRunId_proc") -} + record(sub,"HAD:writeRunId") { field(DESC, "subroutine") field(SCAN, "1 second") diff --git a/ebctrl/ioc/ebctrlApp/Db/Makefile b/ebctrl/ioc/ebctrlApp/Db/Makefile index 4bd02a7..c31c4d5 100644 --- a/ebctrl/ioc/ebctrlApp/Db/Makefile +++ b/ebctrl/ioc/ebctrlApp/Db/Makefile @@ -12,6 +12,7 @@ include $(TOP)/configure/CONFIG # databases, templates, substitutions like this DB += evtbuild.db DB += netmem.db +DB += genrunid.db DB += user.substitutions DB += userHost.substitutions diff --git a/ebctrl/ioc/ebctrlApp/Db/genrunid.db b/ebctrl/ioc/ebctrlApp/Db/genrunid.db index 2818a71..e3fbd6d 100644 --- a/ebctrl/ioc/ebctrlApp/Db/genrunid.db +++ b/ebctrl/ioc/ebctrlApp/Db/genrunid.db @@ -5,4 +5,4 @@ record(sub,"HAD:genRunId") { field(INPB, "HAD:$(eb):status") field(INAM, "genRunId_init") field(SNAM, "genRunId_proc") -} \ No newline at end of file +} \ No newline at end of file diff --git a/ebctrl/ioc/ebctrlApp/src/evtbuild.c b/ebctrl/ioc/ebctrlApp/src/evtbuild.c index c5d627d..c9cb986 100644 --- a/ebctrl/ioc/ebctrlApp/src/evtbuild.c +++ b/ebctrl/ioc/ebctrlApp/src/evtbuild.c @@ -33,7 +33,7 @@ long evtbuild_init( struct genSubRecord *pgsub ) long evtbuild_proc( struct genSubRecord *pgsub ) { - + unsigned long *out[11]; static unsigned long temp[10] = {0}; int i; @@ -57,18 +57,20 @@ long evtbuild_proc( struct genSubRecord *pgsub ) if( Worker_getStatistic( "daq_evtbuild", "nrOfMsgs", out[0] ) == -1) { *out[7] = 0; /* status: Event Builder is off */ if(evtbuildDebug) - printf("Worker_getStatistic failed for nrOfMsgs!\n"); + printf(" evtbuild.c: Worker_getStatistic failed for nrOfMsgs!\n"); } else { *out[7] = 1; /* status: Event Builder is on */ - if(evtbuildDebug) - printf("Worker_getStatistic::nrOfMsgs = %lu\n", (*out[0])); + if(evtbuildDebug) { + printf(" evtbuild.c: Worker_getStatistic::nrOfMsgs = %lu\n", (*out[0])); + printf(" evtbuild.c: status = %lu\n", (*out[7])); + } } if( Worker_getStatistic( "daq_evtbuild", "bytesWritten", out[1] ) == -1) { *out[9] = 0; /* zero data rate */ if(evtbuildDebug) - printf("Worker_getStatistic failed for bytesWritten!\n"); + printf(" evtbuild.c: Worker_getStatistic failed for bytesWritten!\n"); } else { /* calculate data rate and convert from Bytes to kB */ @@ -86,7 +88,7 @@ long evtbuild_proc( struct genSubRecord *pgsub ) if( Worker_getStatistic( "daq_evtbuild", "evtsComplete", out[2] ) == -1) { *out[8] = 0; /* zero evtComp rate */ if(evtbuildDebug) - printf("Worker_getStatistic failed for evtsComplete!\n"); + printf(" evtbuild.c: Worker_getStatistic failed for evtsComplete!\n"); } else{ if( ((long)(*out[2]) - (long)temp[2]) >= 0 ) @@ -100,10 +102,10 @@ long evtbuild_proc( struct genSubRecord *pgsub ) if( Worker_getStatistic( "daq_evtbuild", "evtsDiscarded", out[3] ) == -1) { *out[10] = 0; /* zero evtDisc rate */ if(evtbuildDebug) - printf("Worker_getStatistic failed for evtsDiscarded!\n"); + printf(" evtbuild.c: Worker_getStatistic failed for evtsDiscarded!\n"); } else { - if( (*out[3] - temp[3]) > 0 ) + if( ((long)(*out[3]) - (long)temp[3]) > 0 ) *out[10] = *out[3] - temp[3]; /* calculate evtDisc rate */ else *out[10] = *out[3]; @@ -113,11 +115,11 @@ long evtbuild_proc( struct genSubRecord *pgsub ) if( Worker_getStatistic( "daq_evtbuild", "evtsDataError", out[4] ) == -1) if(evtbuildDebug) - printf("Worker_getStatistic failed for evtsDataError!\n"); + printf(" evtbuild.c: Worker_getStatistic failed for evtsDataError!\n"); if( Worker_getStatistic( "daq_evtbuild", "evtsTagError", out[5] ) == -1) if(evtbuildDebug) - printf("Worker_getStatistic failed for evtsTagError!\n"); + printf(" evtbuild.c: Worker_getStatistic failed for evtsTagError!\n"); char buf[100]; for( i=0; i<(*out[0]); i++ ) { @@ -126,7 +128,7 @@ long evtbuild_proc( struct genSubRecord *pgsub ) if( Worker_getStatistic( "daq_evtbuild", buf, out[6] ) == -1) { if(evtbuildDebug) - printf("evtbuild.c: Worker_getStatistic failed for %s!\n", buf); + printf(" evtbuild.c: Worker_getStatistic failed for %s!\n", buf); } else { if(evtbuildDebug) diff --git a/ebctrl/ioc/ebctrlApp/src/genrunid.c b/ebctrl/ioc/ebctrlApp/src/genrunid.c index 264fe5d..35ace32 100644 --- a/ebctrl/ioc/ebctrlApp/src/genrunid.c +++ b/ebctrl/ioc/ebctrlApp/src/genrunid.c @@ -26,33 +26,26 @@ long genRunId_proc( struct subRecord *psub ) int status = 0; struct timeval tv; - /* Get HOSTNAME (name of a local machine) and - * EBMASTER (name of the Event Builder Master). + /* EBTYPE is a type of the IOC: master/slave. + * EBTYPE is set up in st.cmd * The Event Builder Master synchronizes other Event Builders, * which means that only the Master should generate the runId. */ - char* hostname = getenv( "HOSTNAME" ); - if( hostname == NULL ) { - hostname = "HOST_UNDEFINED"; + char* ebtype = getenv("EBTYPE"); + if( ebtype == NULL ) { + ebtype = "slave"; if(genrunidDebug) - fprintf( stderr, " genrunid.c: env variable HOSTNAME is undefined!\n"); + fprintf( stderr, " genrunid.c: EBTYPE env variable is undefined! Must be master/slave\n"); } - char* ebmaster = getenv( "EBMASTER" ); - if( ebmaster == NULL ) { - ebmaster = "MASTER_UNDEFINED"; - if(genrunidDebug) - fprintf( stderr, " genrunid.c: env variable EBMASTER is undefined!\n"); - } - - /* If a local machine name is the name of the Event Builder Master, + /* If this IOC is a master, * generate the runId and put it to a VAL (to be read by other IOCs). */ - if( strcmp(ebmaster,hostname) != 0 ) { + if( strcmp(ebtype,"master") != 0 ) { if(genrunidDebug) - printf( " genrunid.c: %s is not a master (%s).\n", hostname, ebmaster); + printf( " genrunid.c: the IOC is a %s.\n", ebtype); } else{ @@ -62,7 +55,7 @@ long genRunId_proc( struct subRecord *psub ) if( status == 0 ) { if( genrunidDebug ) { printf( "genrunid.c: Event Builder is off, status: %d\n", status ); - printf( "genrunid.c: Check permissions of EB shared memory segment\n"); + printf( "genrunid.c: You might check permissions of EB shared memory segment.\n"); /* * One of the reasons for this message might be closed permissions * for (/dev/shm/daq_evtbuild.shm) shared memory access. @@ -98,7 +91,7 @@ long genRunId_proc( struct subRecord *psub ) if( genrunidDebug ) printf( " genrunid.c: runId = %lu runIdOld = %lu\n", runId, runIdOld ); - } /* end of EBMASTER condition */ + } /* end of EBTYPE condition */ return(0); } diff --git a/ebctrl/ioc/iocBoot/iocebctrl/envPaths b/ebctrl/ioc/iocBoot/iocebctrl/envPaths index 6950d1f..279023c 100644 --- a/ebctrl/ioc/iocBoot/iocebctrl/envPaths +++ b/ebctrl/ioc/iocBoot/iocebctrl/envPaths @@ -1,4 +1,4 @@ epicsEnvSet(ARCH,"linux-x86") epicsEnvSet(IOC,"iocebctrl") -epicsEnvSet(TOP,"/home/scs/daq/ebctrl/ioc") +epicsEnvSet(TOP,"/home/scs/yurevich/ebctrl/ioc") epicsEnvSet(EPICS_BASE,"/home/scs/base-3.14.9") diff --git a/ebctrl/ioc/iocBoot/iocebctrl/st.cmd b/ebctrl/ioc/iocBoot/iocebctrl/st.cmd index efd71ff..694ef98 100644 --- a/ebctrl/ioc/iocBoot/iocebctrl/st.cmd +++ b/ebctrl/ioc/iocBoot/iocebctrl/st.cmd @@ -2,8 +2,10 @@ ## You may have to change ebctrl to something else ## everywhere it appears in this file +## Set EPICS environment < envPaths +epicsEnvSet(EBTYPE,"master") cd ${TOP} @@ -13,9 +15,9 @@ ebctrl_registerRecordDeviceDriver(pdbbase) ## Load record instances dbLoadTemplate "db/userHost.substitutions" -dbLoadRecords("db/evtbuild.db","eb=eb02") -dbLoadRecords("db/netmem.db","eb=eb02") -##dbLoadRecords("db/genrunid.db") +dbLoadRecords("db/evtbuild.db","eb=eb01") +dbLoadRecords("db/netmem.db","eb=eb01") +dbLoadRecords("db/genrunid.db","eb=eb01") ## Set this to see messages from mySub var evtbuildDebug 1 -- 2.43.0