- fixed a little bug with hkl: phi limits were not properly tested
- updated powder file writing to properly work with mean and stddev
This commit is contained in:
2
Makefile
2
Makefile
@ -51,7 +51,7 @@ VELOOBJ = velo.o velosim.o velodorn.o velodornier.o
|
|||||||
HDFROOT=/data/koenneck
|
HDFROOT=/data/koenneck
|
||||||
CC=cc
|
CC=cc
|
||||||
EXTRA=
|
EXTRA=
|
||||||
CFLAGS = -I$(HDFROOT)/include -Ihardsup -std1 -g -warnprotos -c
|
CFLAGS = -I$(HDFROOT)/include -Ihardsup -I. -std1 -g -warnprotos -c
|
||||||
#CFLAGS = -I$(HDFROOT)/include -DFORTIFY -Ihardsup -g -std1 -warnprotos -c
|
#CFLAGS = -I$(HDFROOT)/include -DFORTIFY -Ihardsup -g -std1 -warnprotos -c
|
||||||
LIBS = -L$(HDFROOT)/lib -Lhardsup -lhlib -Ltecs -ltecsl -ltcl8.0 -lfor -lmfhdf -ldf \
|
LIBS = -L$(HDFROOT)/lib -Lhardsup -lhlib -Ltecs -ltecsl -ltcl8.0 -lfor -lmfhdf -ldf \
|
||||||
$(HDFROOT)/lib/libjpeg.a -lz -lm -ll -lc
|
$(HDFROOT)/lib/libjpeg.a -lz -lm -ll -lc
|
||||||
|
18
commandlog.c
18
commandlog.c
@ -162,6 +162,7 @@
|
|||||||
char pTime[80];
|
char pTime[80];
|
||||||
pSicsVariable pInst = NULL;
|
pSicsVariable pInst = NULL;
|
||||||
char *pPtr = NULL;
|
char *pPtr = NULL;
|
||||||
|
SConnection *pIntern = NULL;
|
||||||
|
|
||||||
if(fauto)
|
if(fauto)
|
||||||
{
|
{
|
||||||
@ -198,6 +199,23 @@
|
|||||||
pInst->text,pTime);
|
pInst->text,pTime);
|
||||||
WriteToCommandLog("SYS>> ", pBueffel);
|
WriteToCommandLog("SYS>> ", pBueffel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if a file to execute is configured, execute it */
|
||||||
|
pPtr = NULL;
|
||||||
|
pPtr = IFindOption(pSICSOptions,"logstartfile");
|
||||||
|
if(pPtr != NULL)
|
||||||
|
{
|
||||||
|
pIntern = SCCreateDummyConnection(pServ->pSics);
|
||||||
|
if(!pIntern)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SCnoSock(pIntern);
|
||||||
|
SCSetRights(pIntern,usUser);
|
||||||
|
sprintf(pBueffel,"fileeval %s",pPtr);
|
||||||
|
InterpExecute(pServ->pSics,pIntern,pBueffel);
|
||||||
|
SCDeleteConnection(pIntern);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
AutoTask puts a time stamp into the auto log file any hour and
|
AutoTask puts a time stamp into the auto log file any hour and
|
||||||
|
2
danu.dat
2
danu.dat
@ -1,3 +1,3 @@
|
|||||||
5438
|
5451
|
||||||
NEVER, EVER modify or delete this file
|
NEVER, EVER modify or delete this file
|
||||||
You'll risk eternal damnation and a reincarnation as a cockroach!|n
|
You'll risk eternal damnation and a reincarnation as a cockroach!|n
|
@ -7,7 +7,8 @@
|
|||||||
<P>
|
<P>
|
||||||
The commandlog is a file where all communication with clients
|
The commandlog is a file where all communication with clients
|
||||||
having user or manager privilege is logged. This log allows to retrace each
|
having user or manager privilege is logged. This log allows to retrace each
|
||||||
step of an experiment. This log is usually switched off and must be
|
step of an experiment. This log is normally configured in the startup
|
||||||
|
file or can be
|
||||||
configured by the instrument manager. There exists a special command,
|
configured by the instrument manager. There exists a special command,
|
||||||
commandlog, which allows to control this log file.
|
commandlog, which allows to control this log file.
|
||||||
<DL>
|
<DL>
|
||||||
@ -27,6 +28,10 @@ Log files are written to the log directory of the instrument account. There
|
|||||||
<DT>commandlog tail n
|
<DT>commandlog tail n
|
||||||
<DD>prints the last n entries made into the command log. n is optional and defaults to 20. Up to 1000 lines are held in an internal buffer for this command.
|
<DD>prints the last n entries made into the command log. n is optional and defaults to 20. Up to 1000 lines are held in an internal buffer for this command.
|
||||||
</DL>
|
</DL>
|
||||||
|
It is now possible to have a script executed whenever a new log file is
|
||||||
|
started. In order to make this work a ServerOption with the name logstartfile
|
||||||
|
must exist in the instrument configuration file. The value of this option
|
||||||
|
must be the full path name of the file to execute.
|
||||||
</P>
|
</P>
|
||||||
</BODY>
|
</BODY>
|
||||||
</HTML>
|
</HTML>
|
||||||
|
@ -207,39 +207,43 @@ current value.
|
|||||||
<DT> name val
|
<DT> name val
|
||||||
<DD> will drive the device to the new value val. Please note that the same
|
<DD> will drive the device to the new value val. Please note that the same
|
||||||
can be achieved by using the drive command.
|
can be achieved by using the drive command.
|
||||||
<DT> name log on
|
|
||||||
<DD> Switches logging on. If logging is on, at each cycle in the
|
|
||||||
<b>emon</b>
|
|
||||||
the
|
|
||||||
current value of the environment variable will be recorded together with a
|
|
||||||
time stamp. Be careful about this, for each log point a bit of memory is
|
|
||||||
allocated. At some time the memory is exhausted! <b>Log clear</b>
|
|
||||||
frees
|
|
||||||
it again
|
|
||||||
and <b>log frequency</b> (both below)
|
and <b>log frequency</b> (both below)
|
||||||
allows to set the logging time intervall.
|
</DL>
|
||||||
<DT> name log off
|
<h3>Logging </h2>
|
||||||
<DD>Switches logging off.
|
The values of any sample environement device can be logged. There are two
|
||||||
|
features:
|
||||||
|
<ul>
|
||||||
|
<li>Logging to a file wih a configurable time intervall between log
|
||||||
|
file entries.
|
||||||
|
<li>Sums are kept internally which allow the calculation of the mean
|
||||||
|
value and the standard deviation at all times.
|
||||||
|
</ul>
|
||||||
|
The last system is automatically switched on after the first drive or
|
||||||
|
run command on the environment device completed.
|
||||||
|
This system is run through the following commands.
|
||||||
|
<DL>
|
||||||
<DT>name log clear
|
<DT>name log clear
|
||||||
<DD> Clears all recorded time stamps and values.
|
<DD> Resets all sums for the calculation of the mean value and the
|
||||||
<DT>name log gettime
|
standard deviation.
|
||||||
<DD>This command retrieves a list of all recorded time stamps.
|
|
||||||
<DT>name log getval
|
|
||||||
<DD> This command retrieves all recorded values.
|
|
||||||
<DT>name log getmean
|
<DT>name log getmean
|
||||||
<DD>Calculates the mean value and the standard deviation for all logged
|
<DD>Calculates the mean value and the standard deviation for all logged
|
||||||
values and prints them.
|
values and prints them.
|
||||||
<DT>name log frequency val
|
<DT>name log frequency val
|
||||||
<DD> With a parameter sets, without a parameter requests the logging intervall
|
<DD> With a parameter sets, without a parameter requests the logging intervall
|
||||||
for the log created. This parameter specifies the time intervall in seconds
|
for the log file.
|
||||||
|
This parameter specifies the time intervall in seconds
|
||||||
between log records. The default is 300 seconds.
|
between log records. The default is 300 seconds.
|
||||||
<DT>name log file filename
|
<DT>name log file filename
|
||||||
<DD> Starts logging of value data to the file filename. All normal logging to
|
<DD> Starts logging of value data to the file filename.
|
||||||
memory will be
|
Logging will happen any 5 minutes initially. The logging frequency
|
||||||
disabled. Logging will happen any 5 minutes initially. The logging frequency
|
|
||||||
can be changed with the name log frequency command. Each entry in the file is
|
can be changed with the name log frequency command. Each entry in the file is
|
||||||
of the form date time value. The name of the file must be specified relative
|
of the form date time value. The name of the file must be specified relative
|
||||||
to the SICS server.
|
to the SICS server.
|
||||||
|
<DT>name log flush
|
||||||
|
<DD>DigitalUnix buffers output heavily. With this command an update of
|
||||||
|
the file can be enforced.
|
||||||
|
<DT>name log status
|
||||||
|
<DD>Queries if logging to file is currently happening or not.
|
||||||
<DT>name log close
|
<DT>name log close
|
||||||
<DD> Stops logging data to the file.
|
<DD> Stops logging data to the file.
|
||||||
</DL>
|
</DL>
|
||||||
|
@ -670,7 +670,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* new var log for logging values */
|
/* new var log for logging values */
|
||||||
pRes->iLog = 0;
|
pRes->iLog = 1;
|
||||||
if(!VarlogInit(&pRes->pLog))
|
if(!VarlogInit(&pRes->pLog))
|
||||||
{
|
{
|
||||||
DeleteEVController(pRes);
|
DeleteEVController(pRes);
|
||||||
@ -942,7 +942,7 @@
|
|||||||
SCWrite(pCon,"ERROR: insufficient number of commands for varlog",eError);
|
SCWrite(pCon,"ERROR: insufficient number of commands for varlog",eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
iRet = VarlogWrapper(self->pLog,&self->iLog, pCon,
|
iRet = VarlogWrapper(self->pLog,pCon,
|
||||||
argv[2],argv[3],argv[0]);
|
argv[2],argv[3],argv[0]);
|
||||||
if(iRet)
|
if(iRet)
|
||||||
{
|
{
|
||||||
@ -981,7 +981,7 @@
|
|||||||
SCWrite(pCon,"ERROR: insufficient number of commands for varlog",eError);
|
SCWrite(pCon,"ERROR: insufficient number of commands for varlog",eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return VarlogWrapper(self->pLog,&self->iLog, pCon,
|
return VarlogWrapper(self->pLog,pCon,
|
||||||
argv[2],argv[3],argv[0]);
|
argv[2],argv[3],argv[0]);
|
||||||
}
|
}
|
||||||
else /* parameter request */
|
else /* parameter request */
|
||||||
|
4
hkl.c
4
hkl.c
@ -867,13 +867,15 @@
|
|||||||
{
|
{
|
||||||
fSet[2] = 360.0 + fSet[2];
|
fSet[2] = 360.0 + fSet[2];
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
if(fSet[3] < 0.0)
|
if(fSet[3] < 0.0)
|
||||||
{
|
{
|
||||||
fSet[3] = 360.0 + fSet[3];
|
fSet[3] = 360.0 + fSet[3];
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
iTest = MotorCheckBoundary(self->pOmega,fSet[1], &fHard,pError,131);
|
iTest = MotorCheckBoundary(self->pOmega,fSet[1], &fHard,pError,131);
|
||||||
iTest += MotorCheckBoundary(self->pChi,fSet[2], &fHard,pError,131);
|
iTest += MotorCheckBoundary(self->pChi,fSet[2], &fHard,pError,131);
|
||||||
iTest += MotorCheckBoundary(self->pPhi,fSet[4], &fHard,pError,131);
|
iTest += MotorCheckBoundary(self->pPhi,fSet[3], &fHard,pError,131);
|
||||||
if(iTest == 3) /* none of them burns */
|
if(iTest == 3) /* none of them burns */
|
||||||
{
|
{
|
||||||
sprintf(pBueffel,"Solution found at psi = %4.1f",myPsi);
|
sprintf(pBueffel,"Solution found at psi = %4.1f",myPsi);
|
||||||
|
2
mumo.c
2
mumo.c
@ -509,7 +509,7 @@
|
|||||||
}
|
}
|
||||||
pName = strtok(NULL," ");
|
pName = strtok(NULL," ");
|
||||||
}
|
}
|
||||||
if(iTest == 1)
|
if(iTest == 1 && (strcmp(pAlias,"back") != 0) )
|
||||||
return pAlias;
|
return pAlias;
|
||||||
|
|
||||||
pAlias = StringDictGetNext(self->pNamPos,pTestCommand,1063);
|
pAlias = StringDictGetNext(self->pNamPos,pTestCommand,1063);
|
||||||
|
21
nxdata.c
21
nxdata.c
@ -1,9 +1,6 @@
|
|||||||
/*--------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------
|
||||||
N X D A T A
|
N X D A T A
|
||||||
|
|
||||||
a module of utility functions which serve to write Nexus
|
|
||||||
data files.
|
|
||||||
|
|
||||||
This implements the data file writing for the Powder diffractometers
|
This implements the data file writing for the Powder diffractometers
|
||||||
HRPT and DMC.
|
HRPT and DMC.
|
||||||
|
|
||||||
@ -63,6 +60,8 @@
|
|||||||
#include "danu.h"
|
#include "danu.h"
|
||||||
#include "HistMem.h"
|
#include "HistMem.h"
|
||||||
#include "udpquieck.h"
|
#include "udpquieck.h"
|
||||||
|
#include "evcontroller.h"
|
||||||
|
|
||||||
|
|
||||||
#define DMCDETNAM "DMC-BF3-Detector"
|
#define DMCDETNAM "DMC-BF3-Detector"
|
||||||
#define DMCDETOB "detector"
|
#define DMCDETOB "detector"
|
||||||
@ -478,7 +477,9 @@
|
|||||||
int32 *iTVal = NULL;
|
int32 *iTVal = NULL;
|
||||||
pDummy pDum;
|
pDummy pDum;
|
||||||
int bHRPT = 0;
|
int bHRPT = 0;
|
||||||
|
float fMean, fStdDev;
|
||||||
|
pVarLog pLog = NULL;
|
||||||
|
|
||||||
/* open the file & entry */
|
/* open the file & entry */
|
||||||
Nfil = SNXStartFile(pCon,pSics);
|
Nfil = SNXStartFile(pCon,pSics);
|
||||||
if(!Nfil)
|
if(!Nfil)
|
||||||
@ -762,7 +763,6 @@
|
|||||||
pMot = FindMotor(pSics,"a4");
|
pMot = FindMotor(pSics,"a4");
|
||||||
assert(pMot);
|
assert(pMot);
|
||||||
iStat = MotorGetSoftPosition(pMot,pCon,&fStart);
|
iStat = MotorGetSoftPosition(pMot,pCon,&fStart);
|
||||||
assert(iStat);
|
|
||||||
iStat = SNputdata1att(Nfil,"two_theta_start",DFNT_FLOAT32,1,
|
iStat = SNputdata1att(Nfil,"two_theta_start",DFNT_FLOAT32,1,
|
||||||
&fStart,"Units","degrees");
|
&fStart,"Units","degrees");
|
||||||
if(!iStat)
|
if(!iStat)
|
||||||
@ -830,7 +830,16 @@
|
|||||||
pDrive = pDum->pDescriptor->GetInterface(pDum,DRIVEID);
|
pDrive = pDum->pDescriptor->GetInterface(pDum,DRIVEID);
|
||||||
if(pDrive) /* a proper environment device */
|
if(pDrive) /* a proper environment device */
|
||||||
{
|
{
|
||||||
fVal = pDrive->GetValue(pDum,pCon);
|
pLog = EVCGetVarLog( (pEVControl)pCom->pData);
|
||||||
|
if(pLog)
|
||||||
|
{
|
||||||
|
VarlogGetMean(pLog,&fMean,&fStdDev);
|
||||||
|
SNputdata1att(Nfil,"temperature_mean",DFNT_FLOAT32, 1,&fMean,
|
||||||
|
"Units","K");
|
||||||
|
SNputdata1att(Nfil,"temperature_stddev",DFNT_FLOAT32, 1,
|
||||||
|
&fStdDev,"Units","K");
|
||||||
|
}
|
||||||
|
fVal = pDrive->GetValue(pCom->pData,pCon);
|
||||||
}
|
}
|
||||||
else /* a simple variable */
|
else /* a simple variable */
|
||||||
{
|
{
|
||||||
|
2
scan.c
2
scan.c
@ -357,7 +357,7 @@ extern void SNXFormatTime(char *pBuffer, int iLen);
|
|||||||
pVar = (pVarEntry)pPtr;
|
pVar = (pVarEntry)pPtr;
|
||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
sprintf(pItem,"%-10.10s",pVar->Name);
|
sprintf(pItem,"%-9.9s ",pVar->Name);
|
||||||
strcat(pLine,pItem);
|
strcat(pLine,pItem);
|
||||||
sprintf(pItem,"%s, ",pVar->Name);
|
sprintf(pItem,"%s, ",pVar->Name);
|
||||||
strcat(pInfo,pItem);
|
strcat(pInfo,pItem);
|
||||||
|
@ -23,7 +23,7 @@ th InterruptMode 0.000000
|
|||||||
th AccessCode 2.000000
|
th AccessCode 2.000000
|
||||||
#Crystallographic Settings
|
#Crystallographic Settings
|
||||||
hkl lambda 1.178100
|
hkl lambda 1.178100
|
||||||
hkl setub 0.217614 0.141834 -0.048542 0.151125 -0.057954 0.087584 0.070284 -0.314535 -0.038027
|
hkl setub -0.154751 -0.003824 -0.019538 0.049741 -0.005912 -0.061157 0.003550 -0.083854 0.005203
|
||||||
det1dist 300.
|
det1dist 300.
|
||||||
det1dist setAccess 1
|
det1dist setAccess 1
|
||||||
det1zeroy 128.
|
det1zeroy 128.
|
||||||
@ -60,8 +60,8 @@ ch InterruptMode 0.000000
|
|||||||
ch AccessCode 2.000000
|
ch AccessCode 2.000000
|
||||||
# Motor ph
|
# Motor ph
|
||||||
ph SoftZero 0.000000
|
ph SoftZero 0.000000
|
||||||
ph SoftLowerLim 0.000000
|
ph SoftLowerLim -200.000000
|
||||||
ph SoftUpperLim 360.000000
|
ph SoftUpperLim 100.000000
|
||||||
ph Fixed -1.000000
|
ph Fixed -1.000000
|
||||||
ph sign 1.000000
|
ph sign 1.000000
|
||||||
ph InterruptMode 0.000000
|
ph InterruptMode 0.000000
|
||||||
@ -84,8 +84,8 @@ muca InterruptMode 0.000000
|
|||||||
muca AccessCode 2.000000
|
muca AccessCode 2.000000
|
||||||
# Motor phi
|
# Motor phi
|
||||||
phi SoftZero 0.000000
|
phi SoftZero 0.000000
|
||||||
phi SoftLowerLim 0.000000
|
phi SoftLowerLim -200.000000
|
||||||
phi SoftUpperLim 360.000000
|
phi SoftUpperLim 100.000000
|
||||||
phi Fixed -1.000000
|
phi Fixed -1.000000
|
||||||
phi sign 1.000000
|
phi sign 1.000000
|
||||||
phi InterruptMode 0.000000
|
phi InterruptMode 0.000000
|
||||||
@ -117,7 +117,7 @@ twotheta AccessCode 2.000000
|
|||||||
lastscancommand sscan ch 180 190 10 2
|
lastscancommand sscan ch 180 190 10 2
|
||||||
lastscancommand setAccess 2
|
lastscancommand setAccess 2
|
||||||
banana CountMode timer
|
banana CountMode timer
|
||||||
banana preset 2.000000
|
banana preset 180.000000
|
||||||
sample_mur 0.000000
|
sample_mur 0.000000
|
||||||
sample_mur setAccess 2
|
sample_mur setAccess 2
|
||||||
email Uwe.Nurps@nurps.nurpstown.de
|
email Uwe.Nurps@nurps.nurpstown.de
|
||||||
@ -243,6 +243,38 @@ d1r Fixed -1.000000
|
|||||||
d1r sign 1.000000
|
d1r sign 1.000000
|
||||||
d1r InterruptMode 0.000000
|
d1r InterruptMode 0.000000
|
||||||
d1r AccessCode 2.000000
|
d1r AccessCode 2.000000
|
||||||
|
# Motor monochi
|
||||||
|
monochi SoftZero 0.000000
|
||||||
|
monochi SoftLowerLim -30.000000
|
||||||
|
monochi SoftUpperLim 30.000000
|
||||||
|
monochi Fixed -1.000000
|
||||||
|
monochi sign 1.000000
|
||||||
|
monochi InterruptMode 0.000000
|
||||||
|
monochi AccessCode 2.000000
|
||||||
|
# Motor monophi
|
||||||
|
monophi SoftZero 0.000000
|
||||||
|
monophi SoftLowerLim -30.000000
|
||||||
|
monophi SoftUpperLim 30.000000
|
||||||
|
monophi Fixed -1.000000
|
||||||
|
monophi sign 1.000000
|
||||||
|
monophi InterruptMode 0.000000
|
||||||
|
monophi AccessCode 2.000000
|
||||||
|
# Motor monoy
|
||||||
|
monoy SoftZero 0.000000
|
||||||
|
monoy SoftLowerLim -30.000000
|
||||||
|
monoy SoftUpperLim 30.000000
|
||||||
|
monoy Fixed -1.000000
|
||||||
|
monoy sign 1.000000
|
||||||
|
monoy InterruptMode 0.000000
|
||||||
|
monoy AccessCode 2.000000
|
||||||
|
# Motor monox
|
||||||
|
monox SoftZero 0.000000
|
||||||
|
monox SoftLowerLim -30.000000
|
||||||
|
monox SoftUpperLim 30.000000
|
||||||
|
monox Fixed -1.000000
|
||||||
|
monox sign 1.000000
|
||||||
|
monox InterruptMode 0.000000
|
||||||
|
monox AccessCode 2.000000
|
||||||
# Motor tasse
|
# Motor tasse
|
||||||
tasse SoftZero 10.000000
|
tasse SoftZero 10.000000
|
||||||
tasse SoftLowerLim -140.000000
|
tasse SoftLowerLim -140.000000
|
||||||
@ -365,9 +397,9 @@ a1 InterruptMode 0.000000
|
|||||||
a1 AccessCode 2.000000
|
a1 AccessCode 2.000000
|
||||||
user Joseph Stalin
|
user Joseph Stalin
|
||||||
user setAccess 2
|
user setAccess 2
|
||||||
sample Wuergehals = doof, bloed und dumm
|
sample EB:12mm
|
||||||
sample setAccess 2
|
sample setAccess 2
|
||||||
title Nasse Fische in Dosen
|
title Nasse Fische in Dosen
|
||||||
title setAccess 2
|
title setAccess 2
|
||||||
starttime 2000-03-31 11:40:31
|
starttime 2000-04-14 14:34:41
|
||||||
starttime setAccess 2
|
starttime setAccess 2
|
||||||
|
@ -11,6 +11,7 @@ proc SplitReply { text } {
|
|||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
proc count { {mode NULL } { preset NULL } } {
|
proc count { {mode NULL } { preset NULL } } {
|
||||||
starttime [sicstime]
|
starttime [sicstime]
|
||||||
|
catch {temperature log clear} msg
|
||||||
#----- deal with mode
|
#----- deal with mode
|
||||||
set mode2 [string toupper $mode]
|
set mode2 [string toupper $mode]
|
||||||
set mode3 [string trim $mode2]
|
set mode3 [string trim $mode2]
|
||||||
@ -37,7 +38,7 @@ proc count { {mode NULL } { preset NULL } } {
|
|||||||
banana count
|
banana count
|
||||||
set ret [catch {Success} msg]
|
set ret [catch {Success} msg]
|
||||||
#------- StoreData
|
#------- StoreData
|
||||||
# StoreData
|
StoreData
|
||||||
if { $ret != 0 } {
|
if { $ret != 0 } {
|
||||||
error [format "Counting ended with error"]
|
error [format "Counting ended with error"]
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,8 @@ OBJ= tecs_cli.o coc_client.o coc_util.o err_handling.o \
|
|||||||
|
|
||||||
#------------ for DigitalUnix (add -DFORTIFY to CFLAGS for fortified version)
|
#------------ for DigitalUnix (add -DFORTIFY to CFLAGS for fortified version)
|
||||||
CC=cc
|
CC=cc
|
||||||
|
|
||||||
|
#CFLAGS= -std1 -g -c -warnprotos -I../ -I. -I../hardsup -DFORTIFY
|
||||||
CFLAGS= -std1 -g -warnprotos -I../ -I. -I../hardsup
|
CFLAGS= -std1 -g -warnprotos -I../ -I. -I../hardsup
|
||||||
|
|
||||||
.f.o:
|
.f.o:
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
|
#include <fortify.h>
|
||||||
|
|
||||||
/* ErrHDL Error handling utilities
|
/* ErrHDL Error handling utilities
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
11
test.tcl
11
test.tcl
@ -30,11 +30,13 @@ ServerOption ReadUserPasswdTimeout 7000
|
|||||||
ServerOption LogFileDir $shome/log
|
ServerOption LogFileDir $shome/log
|
||||||
#LogFileDir is the directory where the command log is going
|
#LogFileDir is the directory where the command log is going
|
||||||
|
|
||||||
|
#ServerOption logstartfile $shome/sics/start.tcl
|
||||||
|
|
||||||
ServerOption LogFileBaseName $shome/sics/tmp/server
|
ServerOption LogFileBaseName $shome/sics/tmp/server
|
||||||
# the path and base name of the internal server logfile to which all
|
# the path and base name of the internal server logfile to which all
|
||||||
# activity will be logged.
|
# activity will be logged.
|
||||||
|
|
||||||
ServerOption TecsStartCmd "tecs/TecsServer -h lnsp21:4000/7"
|
ServerOption TecsStartCmd "tecs/TecsServer -h lnsp26:4000/0"
|
||||||
# -h host:port/channel is for serial server
|
# -h host:port/channel is for serial server
|
||||||
ServerOption TecsBinDir tecs/bin/
|
ServerOption TecsBinDir tecs/bin/
|
||||||
ServerOption TecsLogDir /data/koenneck/tmp/
|
ServerOption TecsLogDir /data/koenneck/tmp/
|
||||||
@ -121,6 +123,10 @@ Motor SGL SIM -20. 20. .1 3. # sample lower goniometer
|
|||||||
Motor SGU SIM -20. 20. .1 3. # sample upper goniometer
|
Motor SGU SIM -20. 20. .1 3. # sample upper goniometer
|
||||||
Motor SDM SIM -5 50. .1 3. # weird Motor
|
Motor SDM SIM -5 50. .1 3. # weird Motor
|
||||||
SicsAlias A4 Tasse
|
SicsAlias A4 Tasse
|
||||||
|
SicsAlias A5 MonoX
|
||||||
|
SicsAlias A5 MonoY
|
||||||
|
SicsAlias A5 MonoPhi
|
||||||
|
SicsAlias A5 MonoChi
|
||||||
|
|
||||||
Motor D1R SIM -20. 20. .1 3. # Diaphragm 1 right
|
Motor D1R SIM -20. 20. .1 3. # Diaphragm 1 right
|
||||||
Motor D1L SIM -20. 20. .1 3. # Diaphragm 1 left
|
Motor D1L SIM -20. 20. .1 3. # Diaphragm 1 left
|
||||||
@ -266,6 +272,9 @@ VarMake det1zeroy Text Mugger
|
|||||||
det1zeroy 128.
|
det1zeroy 128.
|
||||||
VarMake det1dist Text Mugger
|
VarMake det1dist Text Mugger
|
||||||
det1dist 300.
|
det1dist 300.
|
||||||
|
VarMake detstepwidth Float Mugger
|
||||||
|
detstepwidth 0.1
|
||||||
|
detstepwidth lock
|
||||||
|
|
||||||
MakeHKL twotheta omega chi phi chi
|
MakeHKL twotheta omega chi phi chi
|
||||||
HKL lambda 0.70379
|
HKL lambda 0.70379
|
||||||
|
290
varlog.c
290
varlog.c
@ -6,6 +6,12 @@
|
|||||||
|
|
||||||
Mark Koennecke, September 1997
|
Mark Koennecke, September 1997
|
||||||
|
|
||||||
|
Substantially revised to calculate running measn and standard deviations
|
||||||
|
instead of storing data ain a list. The module now supports running
|
||||||
|
averages and logging to file.
|
||||||
|
|
||||||
|
Mark Koennecke, April 2000
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Labor fuer Neutronenstreuung
|
Labor fuer Neutronenstreuung
|
||||||
@ -48,15 +54,14 @@
|
|||||||
#include "varlog.h"
|
#include "varlog.h"
|
||||||
#include "commandlog.h"
|
#include "commandlog.h"
|
||||||
|
|
||||||
/* maximum number of log entries, limit memory usage */
|
|
||||||
#define MAXLOG 2000
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
typedef struct __VarLog
|
typedef struct __VarLog
|
||||||
{
|
{
|
||||||
int iList;
|
|
||||||
time_t tFrequency;
|
time_t tFrequency;
|
||||||
time_t tNext;
|
time_t tNext;
|
||||||
int iCount;
|
int iCount;
|
||||||
|
double dSum;
|
||||||
|
double dDeviation;
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
}VarLog;
|
}VarLog;
|
||||||
|
|
||||||
@ -79,19 +84,12 @@
|
|||||||
pNew->tFrequency = 300; /* 5 minutes */
|
pNew->tFrequency = 300; /* 5 minutes */
|
||||||
pNew->tNext = 0;
|
pNew->tNext = 0;
|
||||||
pNew->iCount = 0;
|
pNew->iCount = 0;
|
||||||
|
pNew->dSum = 0.;
|
||||||
|
pNew->dDeviation = 0.;
|
||||||
pNew->fd = NULL;
|
pNew->fd = NULL;
|
||||||
|
|
||||||
i = LLDcreate(sizeof(LogItem));
|
*self = pNew;
|
||||||
if(i < 0)
|
return 1;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pNew->iList = i;
|
|
||||||
*self = pNew;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
int VarlogDelete(pVarLog self)
|
int VarlogDelete(pVarLog self)
|
||||||
@ -100,7 +98,6 @@
|
|||||||
{
|
{
|
||||||
fclose(self->fd);
|
fclose(self->fd);
|
||||||
}
|
}
|
||||||
LLDdelete(self->iList);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
@ -108,18 +105,10 @@
|
|||||||
{
|
{
|
||||||
int iRet, iList;
|
int iRet, iList;
|
||||||
|
|
||||||
iList = self->iList;
|
|
||||||
assert(iList >= 0);
|
|
||||||
|
|
||||||
iRet = LLDnodePtr2First(iList);
|
|
||||||
while(iRet != 0)
|
|
||||||
{
|
|
||||||
LLDnodeDelete(iList);
|
|
||||||
iRet = LLDnodePtr2Prev(iList);
|
|
||||||
iRet = LLDnodePtr2Next(iList);
|
|
||||||
}
|
|
||||||
self->tNext = 0;
|
|
||||||
self->iCount = 0;
|
self->iCount = 0;
|
||||||
|
self->dSum = 0.;
|
||||||
|
self->dDeviation = 0.;
|
||||||
|
self->tNext = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
@ -139,6 +128,7 @@
|
|||||||
time_t tCurrent;
|
time_t tCurrent;
|
||||||
int iFile = 0;
|
int iFile = 0;
|
||||||
char pBuffer[80];
|
char pBuffer[80];
|
||||||
|
double dMean, dTmp;
|
||||||
|
|
||||||
assert(self);
|
assert(self);
|
||||||
|
|
||||||
@ -147,61 +137,38 @@
|
|||||||
/* check if we are logging to file */
|
/* check if we are logging to file */
|
||||||
if(self->fd != NULL)
|
if(self->fd != NULL)
|
||||||
{
|
{
|
||||||
iFile = 1;
|
iFile = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* limit size of log */
|
|
||||||
if(self->iCount > MAXLOG)
|
|
||||||
{
|
|
||||||
|
|
||||||
VarlogClear(self);
|
|
||||||
WriteToCommandLog("SYS>","WARNING: variable log cleared in order to prevent memory overflow");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* log always if tFrequncy is 0 */
|
/* update the running mean */
|
||||||
if(self->tFrequency == 0)
|
self->dSum += fVal;
|
||||||
{
|
self->iCount++;
|
||||||
sItem.tTime = tCurrent;
|
dMean = self->dSum/self->iCount;
|
||||||
sItem.fVal = fVal;
|
dTmp = fVal - dMean;
|
||||||
LLDnodeAppendFrom(self->iList, &sItem);
|
self->dDeviation += dTmp*dTmp;
|
||||||
self->iCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* if not initialised, do it */
|
/* if not initialised, do it */
|
||||||
if(self->tNext < 1)
|
if(self->tNext < 1)
|
||||||
{
|
{
|
||||||
sItem.tTime = tCurrent;
|
|
||||||
sItem.fVal = fVal;
|
|
||||||
if(iFile)
|
if(iFile)
|
||||||
{
|
{
|
||||||
VLFormatTime(tCurrent,pBuffer,79);
|
VLFormatTime(tCurrent,pBuffer,79);
|
||||||
fprintf(self->fd," %s %f \n", pBuffer,fVal);
|
fprintf(self->fd," %s %f \n", pBuffer,fVal);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
LLDnodeAppendFrom(self->iList, &sItem);
|
|
||||||
self->iCount++;
|
|
||||||
}
|
|
||||||
self->tNext = tCurrent + self->tFrequency;
|
self->tNext = tCurrent + self->tFrequency;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if, log time passed, do it */
|
/* if, log time passed, write to file */
|
||||||
if(tCurrent > self->tNext)
|
if(tCurrent > self->tNext)
|
||||||
{
|
{
|
||||||
sItem.tTime = tCurrent;
|
|
||||||
sItem.fVal = fVal;
|
|
||||||
if(iFile)
|
if(iFile)
|
||||||
{
|
{
|
||||||
VLFormatTime(tCurrent,pBuffer,79);
|
VLFormatTime(tCurrent,pBuffer,79);
|
||||||
fprintf(self->fd," %s %f \n", pBuffer,fVal);
|
fprintf(self->fd," %s %f \n", pBuffer,fVal);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
LLDnodeAppendFrom(self->iList, &sItem);
|
|
||||||
self->iCount++;
|
|
||||||
}
|
|
||||||
self->tNext = tCurrent + self->tFrequency;
|
self->tNext = tCurrent + self->tFrequency;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -210,115 +177,31 @@
|
|||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
int VarlogLength(pVarLog self, int *iLength)
|
int VarlogLength(pVarLog self, int *iLength)
|
||||||
{
|
{
|
||||||
int iLang, iRet, iList;
|
*iLength = self->iCount;
|
||||||
|
|
||||||
iList = self->iList;
|
|
||||||
assert(iList >= 0);
|
|
||||||
|
|
||||||
iLang = 0;
|
|
||||||
iRet = LLDnodePtr2First(iList);
|
|
||||||
while(iRet != 0)
|
|
||||||
{
|
|
||||||
iLang++;
|
|
||||||
iRet = LLDnodePtr2Next(iList);
|
|
||||||
}
|
|
||||||
*iLength = iLang;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
int VarlogGetTime(pVarLog self, time_t *tTime)
|
|
||||||
{
|
|
||||||
int iRet, i, iList;
|
|
||||||
LogItem sItem;
|
|
||||||
|
|
||||||
iList = self->iList;
|
|
||||||
assert(iList >= 0);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
iRet = LLDnodePtr2First(iList);
|
|
||||||
while(iRet != 0)
|
|
||||||
{
|
|
||||||
LLDnodeDataTo(iList,&sItem);
|
|
||||||
tTime[i] = sItem.tTime;
|
|
||||||
i++;
|
|
||||||
iRet = LLDnodePtr2Next(iList);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
int VarlogGetVal(pVarLog self, float *fValue)
|
|
||||||
{
|
|
||||||
int iRet, i, iList;
|
|
||||||
LogItem sItem;
|
|
||||||
|
|
||||||
iList = self->iList;
|
|
||||||
assert(iList >= 0);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
iRet = LLDnodePtr2First(iList);
|
|
||||||
while(iRet != 0)
|
|
||||||
{
|
|
||||||
LLDnodeDataTo(iList,&sItem);
|
|
||||||
fValue[i] = sItem.fVal;
|
|
||||||
i++;
|
|
||||||
iRet = LLDnodePtr2Next(iList);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
int VarlogGetMean(pVarLog self, float *fMean, float *fStdDev)
|
int VarlogGetMean(pVarLog self, float *fMean, float *fStdDev)
|
||||||
{
|
{
|
||||||
int i, iLength = 0, iList;
|
double dMean, dStdDev;
|
||||||
float fM, fStd, fSum,fD, *fVal = NULL;
|
|
||||||
|
|
||||||
iList = self->iList;
|
if(self->iCount > 0)
|
||||||
assert(iList >= 0);
|
|
||||||
|
|
||||||
VarlogLength(self,&iLength);
|
|
||||||
if(iLength < 1) /* nothing to do */
|
|
||||||
{
|
{
|
||||||
*fMean = 0.;
|
dMean = self->dSum/(double)self->iCount;
|
||||||
*fStdDev = 0.;
|
dStdDev = sqrt(self->dDeviation/(double)self->iCount);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
/* get some memory for values */
|
|
||||||
fVal = (float *)malloc(iLength*sizeof(float));
|
|
||||||
if(!fVal)
|
|
||||||
{
|
{
|
||||||
*fMean = 0.;
|
dMean = .0;
|
||||||
*fStdDev = 0.;
|
dStdDev = .0;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
*fMean = (float)dMean;
|
||||||
/* get values */
|
*fStdDev = (float)dStdDev;
|
||||||
VarlogGetVal(self, fVal);
|
|
||||||
|
|
||||||
/* calculate mean first */
|
|
||||||
fSum = 0.;
|
|
||||||
for(i = 0; i < iLength; i++)
|
|
||||||
{
|
|
||||||
fSum += fVal[i];
|
|
||||||
}
|
|
||||||
fM = fSum/(float)iLength;
|
|
||||||
|
|
||||||
/* do standard deviation */
|
|
||||||
fSum = 0.;
|
|
||||||
for(i = 0; i < iLength; i++)
|
|
||||||
{
|
|
||||||
fD = fM - fVal[i];
|
|
||||||
fSum += fD*fD;
|
|
||||||
}
|
|
||||||
fStd = sqrt(fSum/(float)iLength);
|
|
||||||
|
|
||||||
*fMean = fM;
|
|
||||||
*fStdDev = fStd;
|
|
||||||
free(fVal);
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
int VarlogWrapper(pVarLog self, int *iSwitch, SConnection *pCon,
|
int VarlogWrapper(pVarLog self, SConnection *pCon,
|
||||||
char *subcommand, char *sub2, char *pVarName)
|
char *subcommand, char *sub2, char *pVarName)
|
||||||
{
|
{
|
||||||
float fMean, fStdDev, *fData = NULL;
|
float fMean, fStdDev, *fData = NULL;
|
||||||
@ -329,22 +212,9 @@
|
|||||||
long lNew;
|
long lNew;
|
||||||
|
|
||||||
|
|
||||||
iList = self->iList;
|
|
||||||
strtolower(subcommand);
|
strtolower(subcommand);
|
||||||
/*------------ on */
|
|
||||||
if(strcmp(subcommand,"on") == 0)
|
|
||||||
{
|
|
||||||
*iSwitch = 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/*----------- off */
|
|
||||||
else if(strcmp(subcommand,"off") == 0)
|
|
||||||
{
|
|
||||||
*iSwitch = 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/*--------- file */
|
/*--------- file */
|
||||||
else if(strcmp(subcommand,"file") == 0)
|
if(strcmp(subcommand,"file") == 0)
|
||||||
{
|
{
|
||||||
if(self->fd != NULL)
|
if(self->fd != NULL)
|
||||||
{
|
{
|
||||||
@ -363,10 +233,19 @@
|
|||||||
{
|
{
|
||||||
self->tFrequency = 300;
|
self->tFrequency = 300;
|
||||||
}
|
}
|
||||||
*iSwitch = 1;
|
|
||||||
SCSendOK(pCon);
|
SCSendOK(pCon);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/*----- flush */
|
||||||
|
else if(strcmp(subcommand,"flush") == 0)
|
||||||
|
{
|
||||||
|
if(self->fd != NULL)
|
||||||
|
{
|
||||||
|
fflush(self->fd);
|
||||||
|
}
|
||||||
|
SCSendOK(pCon);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
/*----- close */
|
/*----- close */
|
||||||
else if(strcmp(subcommand,"close") == 0)
|
else if(strcmp(subcommand,"close") == 0)
|
||||||
{
|
{
|
||||||
@ -375,82 +254,20 @@
|
|||||||
fclose(self->fd);
|
fclose(self->fd);
|
||||||
self->fd = NULL;
|
self->fd = NULL;
|
||||||
}
|
}
|
||||||
*iSwitch = 0;
|
|
||||||
SCSendOK(pCon);
|
SCSendOK(pCon);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* ------------ gettime */
|
/*----- status */
|
||||||
else if(strcmp(subcommand,"gettime") == 0)
|
else if(strcmp(subcommand,"status") == 0)
|
||||||
{
|
{
|
||||||
iRet = VarlogLength(self, &iLength);
|
if(self->fd != NULL)
|
||||||
if(!iRet)
|
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: Invalid logging list",eError);
|
SCWrite(pCon,"Logging to file on",eValue);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
pTArray = (time_t *)malloc(iLength * sizeof(time_t));
|
else
|
||||||
if(!pTArray)
|
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: out of memory in varlog",eError);
|
SCWrite(pCon,"No Logging to file",eValue);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
VarlogGetTime(self,pTArray);
|
|
||||||
/* format into a string */
|
|
||||||
pData = (char *)malloc((iLength*35+100)*sizeof(char));
|
|
||||||
if(!pData)
|
|
||||||
{
|
|
||||||
SCWrite(pCon,"ERROR: out of memory in varlog",eError);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
memset(pData,0,(iLength*35+100)*sizeof(char));
|
|
||||||
sprintf(pData,"%s.TimeStaamps = {",pVarName);
|
|
||||||
for(i = 0; i < iLength; i++)
|
|
||||||
{
|
|
||||||
strcat(pData,",");
|
|
||||||
VLFormatTime(pTArray[i],pBueffel,80);
|
|
||||||
strcat(pData,pBueffel);
|
|
||||||
}
|
|
||||||
strcat(pData,"}");
|
|
||||||
SCWrite(pCon,pData,eValue);
|
|
||||||
free(pTArray);
|
|
||||||
free(pData);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/*------------ getval */
|
|
||||||
else if(strcmp(subcommand,"getval") == 0)
|
|
||||||
{
|
|
||||||
iRet = VarlogLength(self, &iLength);
|
|
||||||
if(!iRet)
|
|
||||||
{
|
|
||||||
SCWrite(pCon,"ERROR: Invalid logging list",eError);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
fData = (float *)malloc(iLength * sizeof(float));
|
|
||||||
if(!fData)
|
|
||||||
{
|
|
||||||
SCWrite(pCon,"ERROR: out of memory in varlog",eError);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
memset(fData,0,iLength *sizeof(float));
|
|
||||||
VarlogGetVal(self,fData);
|
|
||||||
/* format a reply */
|
|
||||||
pData = (char *)malloc((iLength*11+50)*sizeof(char));
|
|
||||||
if(!pData)
|
|
||||||
{
|
|
||||||
SCWrite(pCon,"ERROR: out of memory in varlog",eError);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
memset(pData,0,(iLength*11+50)*sizeof(char));
|
|
||||||
sprintf(pData,"%s.Values = {",pVarName);
|
|
||||||
for(i = 0; i < iLength; i++)
|
|
||||||
{
|
|
||||||
strcat(pData,",");
|
|
||||||
sprintf(pBueffel,"%8.2f",fData[i]);
|
|
||||||
strcat(pData,pBueffel);
|
|
||||||
}
|
|
||||||
SCWrite(pCon,pData,eValue);
|
|
||||||
free(fData);
|
|
||||||
free(pData);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*--------- getmean */
|
/*--------- getmean */
|
||||||
@ -470,7 +287,6 @@
|
|||||||
/*------------ clear */
|
/*------------ clear */
|
||||||
else if(strcmp(subcommand,"clear") == 0)
|
else if(strcmp(subcommand,"clear") == 0)
|
||||||
{
|
{
|
||||||
*iSwitch = 0;
|
|
||||||
return VarlogClear(self);
|
return VarlogClear(self);
|
||||||
}
|
}
|
||||||
/*------------- frequency */
|
/*------------- frequency */
|
||||||
|
4
varlog.h
4
varlog.h
@ -23,11 +23,9 @@
|
|||||||
int VarlogAdd(pVarLog self, float fVal);
|
int VarlogAdd(pVarLog self, float fVal);
|
||||||
/*------------------------------ data recovery -------------------------*/
|
/*------------------------------ data recovery -------------------------*/
|
||||||
int VarlogLength(pVarLog self, int *iLength);
|
int VarlogLength(pVarLog self, int *iLength);
|
||||||
int VarlogGetTime(pVarLog self, time_t *tTime);
|
|
||||||
int VarlogGetVal(pVarLog self, float *fValues);
|
|
||||||
int VarlogGetMean(pVarLog self, float *fMean, float *fStdDev);
|
int VarlogGetMean(pVarLog self, float *fMean, float *fStdDev);
|
||||||
/*------------------------------ interpreter ---------------------------*/
|
/*------------------------------ interpreter ---------------------------*/
|
||||||
int VarlogWrapper(pVarLog self, int *iSwitch, SConnection *pCon,
|
int VarlogWrapper(pVarLog self, SConnection *pCon,
|
||||||
char *subcommand, char *sub2,char *pVarName);
|
char *subcommand, char *sub2,char *pVarName);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user