- Fixed sicsprompt bug. Sicsprompt caused a core dump
- Removed generation of incommenurate reflections for 0,0,0 in fourmess.c - Implemented a Poch command for heartbeats - Fixed 64 bit dimension issues in nxdict - Fixed different calling conventions for NXReportError deep stack in nxdict - Stopped ei motor driving when not necessary - Added yet another monitor for POLDI - Added a protocoll driver for the JVL motor RS-485 binary protocoll - Fixed some reporting issues SKIPPED: psi/jvlprot.c psi/make_gen psi/polterwrite.c psi/psi.c psi/spss7.c
This commit is contained in:
@ -323,10 +323,12 @@ static int ScriptCallback(int iEvent, void *pEventData, void *pUserData)
|
||||
return 0;
|
||||
}
|
||||
if (pUserData == NULL) {
|
||||
SCDeleteConnection(pCon);
|
||||
fprintf(stdout, "ERROR: ScriptCallback: no script to execute\n");
|
||||
return 0;
|
||||
}
|
||||
SCSetRights(pCon, usInternal);
|
||||
SCSetWriteFunc(pCon,SCNotWrite);
|
||||
status = InterpExecute(pServ->pSics, pCon, (char *) pUserData);
|
||||
|
||||
SCDeleteConnection(pCon);
|
||||
|
11
commandlog.c
11
commandlog.c
@ -26,6 +26,7 @@
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <tcl.h>
|
||||
#include "splitter.h"
|
||||
#include "sics.h"
|
||||
#include "ifile.h"
|
||||
#include "sicsvar.h"
|
||||
@ -423,6 +424,16 @@ int CommandLog(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
PrintTail(iVal, pCon);
|
||||
return 1;
|
||||
}
|
||||
/**
|
||||
* handle write
|
||||
*/
|
||||
|
||||
if (strcmp(argv[1], "write") == 0) {
|
||||
Arg2Text(argc-2, &argv[2],pBueffel,sizeof(pBueffel));
|
||||
WriteToCommandLogId(NULL, pCon->sockHandle,pBueffel);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* check rights */
|
||||
if (!SCMatchRights(pCon, usMugger)) {
|
||||
|
71
conman.c
71
conman.c
@ -248,6 +248,9 @@ SConnection *SCCreateDummyConnection(SicsInterp * pSics)
|
||||
SConnection *pRes = NULL;
|
||||
|
||||
pRes = CreateConnection(pSics);
|
||||
if(pRes == NULL){
|
||||
return pServ->dummyCon;
|
||||
}
|
||||
|
||||
pRes->sockHandle = -1;
|
||||
pRes->iUserRights = usInternal;
|
||||
@ -958,12 +961,61 @@ int SCOnlySockWrite(SConnection * self, char *buffer, int iOut)
|
||||
/*--------------------------------------------------------------------------*/
|
||||
int SCPureSockWrite(SConnection * self, char *buffer, int iOut)
|
||||
{
|
||||
char pBueffel[1024];
|
||||
char *pPtr;
|
||||
|
||||
/* for commandlog tail */
|
||||
if (!VerifyConnection(self)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(self->iProtocolID == 5) {
|
||||
if (strlen(buffer) + 30 > 1024) {
|
||||
pPtr = (char *) malloc((strlen(buffer) + 30) * sizeof(char));
|
||||
memset(pPtr, 0, strlen(buffer) + 20);
|
||||
} else {
|
||||
pPtr = pBueffel;
|
||||
}
|
||||
sprintf(pPtr, "%d::>%s<::", self->transID, buffer);
|
||||
testAndWriteSocket(self, pPtr, iOut);
|
||||
if(pPtr != pBueffel){
|
||||
free(pPtr);
|
||||
}
|
||||
} else {
|
||||
testAndWriteSocket(self, buffer, iOut);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
special for ClientLog. Do not use elsewhere without check
|
||||
----------------------------------------------------------------------------*/
|
||||
int SCLogWrite(SConnection * self, char *buffer, int iOut)
|
||||
{
|
||||
char pBueffel[1024];
|
||||
char *pPtr;
|
||||
|
||||
if (!VerifyConnection(self)) {
|
||||
return 0;
|
||||
}
|
||||
WriteToCommandLogId(NULL, self->sockHandle, buffer);
|
||||
|
||||
if(self->iProtocolID == 5) {
|
||||
if (strlen(buffer) + 30 > 1024) {
|
||||
pPtr = (char *) malloc((strlen(buffer) + 30) * sizeof(char));
|
||||
memset(pPtr, 0, strlen(buffer) + 20);
|
||||
} else {
|
||||
pPtr = pBueffel;
|
||||
}
|
||||
sprintf(pPtr, "%d::>%s<::", self->transID, buffer);
|
||||
testAndWriteSocket(self, pPtr, iOut);
|
||||
if(pPtr != pBueffel){
|
||||
free(pPtr);
|
||||
}
|
||||
} else {
|
||||
testAndWriteSocket(self, buffer, iOut);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -978,10 +1030,11 @@ int SCNotWrite(SConnection * self, char *buffer, int iOut)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* log it for any case */
|
||||
/* log it for any case
|
||||
sprintf(pBueffel, "Next line intended for socket: %d", self->sockHandle);
|
||||
SICSLogWrite(pBueffel, eInternal);
|
||||
SICSLogWrite(buffer, iOut);
|
||||
*/
|
||||
|
||||
testAndStoreInTcl(self, buffer, iOut);
|
||||
return 1;
|
||||
@ -1130,7 +1183,7 @@ int SCWriteZipped(SConnection * self, char *pName, void *pData,
|
||||
sprintf(outBuf, "SICSBIN ZIP %s %d %d\r\n", pName,
|
||||
compressedLength, cc.transID);
|
||||
} else {
|
||||
sprintf(outBuf, "SICSBIN ZIP %s %d \r\n", pName, compressedLength);
|
||||
sprintf(outBuf, "SICSBIN ZIP %s %d\r\n", pName, compressedLength);
|
||||
}
|
||||
pHeader = strdup(outBuf);
|
||||
if (pHeader == NULL) {
|
||||
@ -1195,7 +1248,7 @@ int SCWriteBinary(SConnection * self, char *pName, void *pData,
|
||||
sprintf(outBuf, "SICSBIN BIN %s %d %d\r\n", pName,
|
||||
iDataLen, cc.transID);
|
||||
} else {
|
||||
sprintf(outBuf, "SICSBIN BIN %s %d \r\n", pName, iDataLen);
|
||||
sprintf(outBuf, "SICSBIN BIN %s %d\r\n", pName, iDataLen);
|
||||
}
|
||||
pHeader = strdup(outBuf);
|
||||
if (pHeader == NULL) {
|
||||
@ -1429,15 +1482,17 @@ int SCPrompt(SConnection * pCon, char *pPrompt, char *pResult, int iLen)
|
||||
char pFrom[50];
|
||||
Status eOld;
|
||||
int oldMode;
|
||||
SConnection *master = NULL;
|
||||
|
||||
if (!VerifyConnection(pCon)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
SCWrite(pCon, pPrompt, eWarning);
|
||||
master = SCfindMaster(pCon);
|
||||
eOld = GetStatus();
|
||||
SetStatus(eInput);
|
||||
CostaUnlock(pCon->pStack);
|
||||
CostaUnlock(master->pStack);
|
||||
while (1) {
|
||||
/*
|
||||
wait a second. We want to wait even in a simulation, otherwise
|
||||
@ -1454,17 +1509,17 @@ int SCPrompt(SConnection * pCon, char *pPrompt, char *pResult, int iLen)
|
||||
break;
|
||||
}
|
||||
/* do we have data ? */
|
||||
iRet = CostaPop(pCon->pStack, &pPtr);
|
||||
iRet = CostaPop(master->pStack, &pPtr);
|
||||
if (iRet == 1) {
|
||||
SetStatus(eOld);
|
||||
CostaLock(pCon->pStack);
|
||||
CostaLock(master->pStack);
|
||||
strlcpy(pResult, pPtr, iLen);
|
||||
WriteToCommandLogId(" prompted>", pCon->sockHandle, pPtr);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
SetStatus(eOld);
|
||||
CostaLock(pCon->pStack);
|
||||
CostaLock(master->pStack);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1560,7 +1615,9 @@ int SCInvoke(SConnection * self, SicsInterp * pInter, char *pCommand)
|
||||
if (SCGetWriteFunc(self) != SCNotWrite) {
|
||||
sendingConnection = self->sockHandle;
|
||||
if (self->sockHandle >= 0) {
|
||||
if(strstr(pCommand,"Poch") == NULL){
|
||||
WriteToCommandLogCmd(self->sockHandle, pCommand);
|
||||
}
|
||||
} else {
|
||||
WriteToCommandLog("CRON>>", pCommand);
|
||||
}
|
||||
|
1
conman.h
1
conman.h
@ -106,6 +106,7 @@ writeFunc SCGetWriteFunc(SConnection * pCon);
|
||||
void SCSetWriteFunc(SConnection * pCon, writeFunc x);
|
||||
int SCOnlySockWrite(SConnection * self, char *buffer, int iOut);
|
||||
int SCPureSockWrite(SConnection * self, char *buffer, int iOut);
|
||||
int SCLogWrite(SConnection * self, char *buffer, int iOut);
|
||||
int SCFileWrite(SConnection * self, char *buffer, int iOut);
|
||||
int SCNotWrite(SConnection * self, char *buffer, int iOut);
|
||||
int SCNormalWrite(SConnection * self, char *buffer, int iOut);
|
||||
|
@ -241,7 +241,7 @@ static int CheckCountStatus(void *pData, SConnection * pCon)
|
||||
|
||||
if(self->pDriv->fTime > .0){
|
||||
rate = (float)(self->pDriv->lCounts[1])/self->pDriv->fTime;
|
||||
if(rate > 5000){
|
||||
if(rate > 10000){
|
||||
SCWrite(pCon,"WARNING: Your control monitor is running into dead time",
|
||||
eWarning);
|
||||
}
|
||||
|
2
drive.c
2
drive.c
@ -103,7 +103,7 @@ int Drive(SConnection * pCon, SicsInterp * pInter, char *name, float fNew)
|
||||
if (pInt) {
|
||||
iRet = pInt->CheckLimits(pDum, fNew, pBueffel, 511);
|
||||
if (!iRet) {
|
||||
SCWrite(pCon, pBueffel, eError);
|
||||
SCWrite(pCon, pBueffel, eLogError);
|
||||
SCSetInterrupt(pCon, eAbortOperation);
|
||||
return 0;
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ extern char *trim(char *);
|
||||
|
||||
extern void SNXFormatTime(char *pBueffel, int iLen);
|
||||
|
||||
#define ABS(x) (x < 0 ? -(x) : (x))
|
||||
/*---------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
FILE *profFile; /* file with reflection profiles, ccl */
|
||||
@ -766,6 +767,12 @@ static int GenInconsumerate(pSICSOBJ self, SConnection * pCon,
|
||||
|
||||
for (i = 0; i < priv->masterCount; i++) {
|
||||
GetRefIndex(priv->messList, i, hkl);
|
||||
if(ABS(hkl[0])+ABS(hkl[1])+ABS(hkl[2]) < .3){
|
||||
/*
|
||||
* Stop generation for 0,0,0,
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
for (j = 0; j < 3; j++) {
|
||||
hkl[j] += qvec[j];
|
||||
}
|
||||
|
45
macro.c
45
macro.c
@ -728,7 +728,52 @@ int ClientPut(SConnection * pCon, SicsInterp * pInter, void *pData,
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
/*-----------------------------------------------------------------
|
||||
ClientLog writes to the socket and the command log only
|
||||
-------------------------------------------------------------------*/
|
||||
int ClientLog(SConnection * pCon, SicsInterp * pInter, void *pData,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
OutCode eOut = eLog;
|
||||
int i = 0, iLen;
|
||||
char *pMessage = NULL;
|
||||
|
||||
assert(pCon);
|
||||
assert(pInter);
|
||||
|
||||
if (argc < 2) {
|
||||
SCWrite(pCon, "Insufficient arguments to ClientLog", eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* recombine the message */
|
||||
/* find length */
|
||||
iLen = 0;
|
||||
for (i = 1; i < argc; i++) {
|
||||
iLen += strlen(argv[i]);
|
||||
}
|
||||
pMessage = (char *) malloc((iLen + 100) * sizeof(char));
|
||||
if (!pMessage) {
|
||||
SCWrite(pCon, "ERROR: out of memory in clientlo", eLogError);
|
||||
return 0;
|
||||
}
|
||||
memset(pMessage, 0, (iLen + 100) * sizeof(char));
|
||||
Arg2Text(argc - 1, &argv[1], pMessage, (iLen + 100) * sizeof(char));
|
||||
|
||||
SCLogWrite(pCon,pMessage, eError);
|
||||
free(pMessage);
|
||||
return 1;
|
||||
}
|
||||
/*-----------------------------------------------------------------------
|
||||
A heartbeat command .............
|
||||
------------------------------------------------------------------------*/
|
||||
int Poch(SConnection * pCon, SicsInterp * pInter, void *pData,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
SCPureSockWrite(pCon,"Poch", eLog);
|
||||
return 1;
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
int GumPut(SConnection * pCon, SicsInterp * pInter, void *pData,
|
||||
int argc, char *argv[])
|
||||
|
1
motor.h
1
motor.h
@ -37,6 +37,7 @@ typedef struct __Motor {
|
||||
int retryCount; /* for retries in status */
|
||||
int posFaultCount;
|
||||
int stopped;
|
||||
int stopReported;
|
||||
int errorCount;
|
||||
int running;
|
||||
ObPar *ParArray;
|
||||
|
@ -105,6 +105,7 @@ static long SecMotorRun(void *sulf, SConnection * pCon, float fNew)
|
||||
return 0;
|
||||
}
|
||||
self->stopped = 0;
|
||||
self->stopReported = 0;
|
||||
|
||||
v = MakeHdbFloat(fNew);
|
||||
status = SetHipadabaPar(self->pDescriptor->parNode, v, pCon);
|
||||
@ -211,7 +212,10 @@ static int checkPosition(pMotor self, SConnection * pCon)
|
||||
pHdb node = NULL;
|
||||
|
||||
if (self->stopped) {
|
||||
SCPrintf(pCon, eWarning, "WARNING: %s stopped", self->name);
|
||||
if(self->stopReported == 0){
|
||||
SCPrintf(pCon, eLog, "WARNING: %s stopped", self->name);
|
||||
self->stopReported = 1;
|
||||
}
|
||||
return HWFault;
|
||||
}
|
||||
if (SCGetInterrupt(pCon) != eContinue) {
|
||||
|
28
nxdict.c
28
nxdict.c
@ -553,7 +553,7 @@ typedef struct {
|
||||
int iTerminal;
|
||||
} ParDat;
|
||||
|
||||
static void DummyError(void *pData, char *pError)
|
||||
static void DummyError(void *p, char *pError)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -720,9 +720,9 @@ static void NXDIAttValue(ParDat * sStat)
|
||||
int NXDIParsePath(NXhandle hfil, ParDat * pParse)
|
||||
{
|
||||
int iRet, iToken;
|
||||
void (*ErrFunc) (void *pData, char *pErr);
|
||||
char pName[132], pClass[132];
|
||||
char pError[256];
|
||||
void *pData = NULL;
|
||||
|
||||
/* get the name */
|
||||
NXDIDefToken(pParse); /* next token */
|
||||
@ -760,12 +760,11 @@ int NXDIParsePath(NXhandle hfil, ParDat * pParse)
|
||||
strcpy(pClass, pParse->pToken);
|
||||
|
||||
/* done reading, ACTION, first install dummy error handler */
|
||||
ErrFunc = NXIReportError;
|
||||
NXMSetError(NXpData,DummyError);
|
||||
NXMDisableErrorReporting();
|
||||
|
||||
/* try opening vGroup */
|
||||
iRet = NXopengroup(hfil, pName, pClass);
|
||||
NXMSetError(NXpData,ErrFunc);
|
||||
NXMEnableErrorReporting();
|
||||
if (iRet == NX_OK) {
|
||||
pParse->iDepth++;
|
||||
return NX_OK;
|
||||
@ -960,7 +959,6 @@ static int NXDIParseSDS(NXhandle hfil, ParDat * pParse)
|
||||
int iRet, iStat, i;
|
||||
char pError[256];
|
||||
char pName[NX_MAXNAMELEN];
|
||||
void (*ErrFunc) (void *pData, char *pErr);
|
||||
AttItem sAtt;
|
||||
|
||||
|
||||
@ -1061,12 +1059,11 @@ static int NXDIParseSDS(NXhandle hfil, ParDat * pParse)
|
||||
/* first install dummy error handler, try open it, then
|
||||
deinstall again and create if allowed
|
||||
*/
|
||||
ErrFunc = NXIReportError;
|
||||
NXMSetError(NXpData, DummyError);
|
||||
NXMDisableErrorReporting();
|
||||
|
||||
/* try opening SDS */
|
||||
iRet = NXopendata(hfil, pName);
|
||||
NXMSetError(NXpData, ErrFunc);
|
||||
NXMEnableErrorReporting();
|
||||
if (iRet == NX_OK) {
|
||||
LLDdelete(iList);
|
||||
return NX_OK;
|
||||
@ -1687,16 +1684,15 @@ NXstatus NXUwriteglobals(NXhandle pFile,
|
||||
/*-----------------------------------------------------------------------*/
|
||||
NXstatus NXUentergroup(NXhandle hFil, char *name, char *class)
|
||||
{
|
||||
void (*ErrFunc) (void *pData, char *pErr);
|
||||
int iRet;
|
||||
|
||||
/* ACTION, first install dummy error handler */
|
||||
ErrFunc = NXIReportError;
|
||||
NXMSetError(NXpData, DummyError);
|
||||
NXMDisableErrorReporting();
|
||||
|
||||
|
||||
/* try opening vGroup */
|
||||
iRet = NXopengroup(hFil, name, class);
|
||||
NXMSetError(NXpData, ErrFunc);
|
||||
NXMEnableErrorReporting();
|
||||
if (iRet == NX_OK) {
|
||||
return NX_OK;
|
||||
} else {
|
||||
@ -1719,16 +1715,14 @@ NXstatus NXUentergroup(NXhandle hFil, char *name, char *class)
|
||||
NXstatus NXUenterdata(NXhandle hFil, char *label, int datatype,
|
||||
int rank, int dim[], char *pUnits)
|
||||
{
|
||||
void (*ErrFunc) (void *pData, char *pErr);
|
||||
int iRet;
|
||||
|
||||
/* ACTION, first install dummy error handler */
|
||||
ErrFunc = NXIReportError;
|
||||
NXMSetError(NXpData, DummyError);
|
||||
NXMDisableErrorReporting();
|
||||
|
||||
/* try opening SDS */
|
||||
iRet = NXopendata(hFil, label);
|
||||
NXMSetError(NXpData, ErrFunc);
|
||||
NXMEnableErrorReporting();
|
||||
if (iRet == NX_OK) {
|
||||
return NX_OK;
|
||||
} else {
|
||||
|
2
ofac.c
2
ofac.c
@ -68,6 +68,8 @@ static void InitIniCommands(SicsInterp * pInter)
|
||||
PCMD("broadcast", Broadcast);
|
||||
PCMD("Capture", CaptureAction);
|
||||
PCMD("ClientPut", ClientPut);
|
||||
PCMD("ClientLog", ClientLog);
|
||||
PCMD("Poch", Poch);
|
||||
PCMD("config", ConfigCon);
|
||||
PCMD("db", SICSDebug);
|
||||
PCMD("Dir", ListObjects);
|
||||
|
@ -210,7 +210,7 @@ int SctCommand(SConnection * con, SicsInterp * sics, void *object,
|
||||
SCsetMacro(con, queueData->inMacro); /* take macro flag stored at set callback */
|
||||
}
|
||||
Arg2Text(argc - 2, argv + 2, value, sizeof value);
|
||||
SCWrite(con, value, eWarning);
|
||||
SCWrite(con, value, eLog);
|
||||
SCsetMacro(con, 1); /* we are always in Macro */
|
||||
return 1;
|
||||
}
|
||||
@ -469,7 +469,7 @@ static char *SctActionHandler(void *actionData, char *lastReply,
|
||||
emsg = GetHdbProp(node, eprop);
|
||||
if (emsg == NULL || con != controller->conn) {
|
||||
GetHdbPath(node, path, sizeof path);
|
||||
SCPrintf(con, eError,
|
||||
SCPrintf(con, eLogError,
|
||||
"ERROR: action {%s} in {%s} node %s:\nERROR: %s",
|
||||
data->name, origScript, path, result);
|
||||
if(data != NULL && data->controller != NULL){
|
||||
|
@ -818,7 +818,7 @@ static int copyNode(pSICSData self, int argc, char *argv[],
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(argc < 2){
|
||||
if(argc > 2){
|
||||
status = Tcl_GetInt(InterpGetTcl(pSics), argv[2], &length);
|
||||
if (status != TCL_OK) {
|
||||
SCWrite(pCon,
|
||||
@ -827,6 +827,8 @@ static int copyNode(pSICSData self, int argc, char *argv[],
|
||||
} else {
|
||||
length = node->value.arrayLength;
|
||||
}
|
||||
} else {
|
||||
length = node->value.arrayLength;
|
||||
}
|
||||
if(length < 1) {
|
||||
length = 1;
|
||||
|
@ -3094,10 +3094,12 @@ static hdbCallbackReturn ChainCallback(pHdb node, void *userData,
|
||||
}
|
||||
|
||||
if (slave != NULL) {
|
||||
/*
|
||||
memset(&vv, 0, sizeof(hdbValue));
|
||||
GetHipadabaPar(slave, &vv, mm->callData);
|
||||
UpdateHipadabaPar(slave, vv, mm->callData);
|
||||
ReleaseHdbValue(&vv);
|
||||
*/
|
||||
UpdateHipadabaPar(slave, *(mm->v), mm->callData);
|
||||
/* ReleaseHdbValue(&vv); */
|
||||
}
|
||||
return hdbContinue;
|
||||
}
|
||||
|
@ -563,12 +563,9 @@ int prepareDataFile(pScanData self)
|
||||
|
||||
pTcl = InterpGetTcl(pServ->pSics);
|
||||
val = Tcl_GetVar(pTcl,"simMode",TCL_GLOBAL_ONLY);
|
||||
if(val != NULL){
|
||||
if(strstr(val,"2") != NULL){
|
||||
if(val != NULL && strstr(val,"2") != NULL){
|
||||
pPtr = strdup("sicssim.scn");
|
||||
}
|
||||
} else {
|
||||
|
||||
/* allocate a new data file */
|
||||
pPtr = ScanMakeFileName(pServ->pSics, self->pCon);
|
||||
if (!pPtr) {
|
||||
|
18
tasdrive.c
18
tasdrive.c
@ -40,6 +40,8 @@ static long TASSetValue(void *pData, SConnection * pCon, float value)
|
||||
{
|
||||
ptasMot self = (ptasMot) pData;
|
||||
assert(self);
|
||||
int qcodes[] = {3,4,5,8}; /* qh,qk,ql, en */
|
||||
int i;
|
||||
|
||||
if (self->code > 5 && self->math->tasMode == ELASTIC) {
|
||||
SCWrite(pCon, "ERROR: cannot drive this motor in elastic mode",
|
||||
@ -48,6 +50,11 @@ static long TASSetValue(void *pData, SConnection * pCon, float value)
|
||||
}
|
||||
setTasPar(&self->math->target, self->math->tasMode, self->code, value);
|
||||
self->math->mustDrive = 1;
|
||||
for(i = 0; i < 4; i++){
|
||||
if(self->code == qcodes[i]) {
|
||||
self->math->mustDriveQ = 1;
|
||||
}
|
||||
}
|
||||
return OKOK;
|
||||
}
|
||||
|
||||
@ -525,16 +532,25 @@ static int calculateAndDrive(ptasMot self, SConnection * pCon)
|
||||
driveTilt = 0;
|
||||
}
|
||||
|
||||
if(self->math->mustDriveQ == 0){
|
||||
driveQ = 0;
|
||||
}
|
||||
|
||||
|
||||
if (driveQ != 0) {
|
||||
if (!checkQMotorLimits(self, pCon, angles, driveTilt)) {
|
||||
driveQ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (driveQ == 0) {
|
||||
if (driveQ == 0 && self->math->mustDriveQ == 1) {
|
||||
SCWrite(pCon, "WARNING: NOT driving Q-vector because of errors",
|
||||
eError);
|
||||
}
|
||||
/*
|
||||
* reset the Q flag
|
||||
*/
|
||||
self->math->mustDriveQ = 0;
|
||||
return startMotors(self, angles, pCon, driveQ, driveTilt);
|
||||
}
|
||||
|
||||
|
@ -656,6 +656,7 @@ static int TASUBScanDrive(pScanData self, int iPoint)
|
||||
int i, status, iPtr;
|
||||
int iTAS = 0;
|
||||
pMotor pMot;
|
||||
pDynString err;
|
||||
|
||||
pTAS->ub->silent = 1;
|
||||
/*
|
||||
@ -665,7 +666,7 @@ static int TASUBScanDrive(pScanData self, int iPoint)
|
||||
DynarGet(self->pScanVar, i, &pPtr);
|
||||
pVar = (pVarEntry) pPtr;
|
||||
if (pVar) {
|
||||
StartMotor(pServ->pExecutor, self->pSics, self->pCon, pVar->Name,
|
||||
status = StartMotor(pServ->pExecutor, self->pSics, self->pCon, pVar->Name,
|
||||
RUNDRIVE, pVar->fStart + iPoint * pVar->fStep);
|
||||
/*
|
||||
Ignore errors. TAS scans continues when a motor runs into
|
||||
|
1
tasub.h
1
tasub.h
@ -27,6 +27,7 @@
|
||||
double targetEn, actualEn;
|
||||
int mustRecalculate;
|
||||
int mustDrive;
|
||||
int mustDriveQ;
|
||||
pMotor motors[12];
|
||||
tasReflection r1, r2;
|
||||
int ubValid;
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
exe batchpath ./
|
||||
exe syspath ./
|
||||
|
||||
@ -218,15 +219,20 @@ tasub r2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
tasub update
|
||||
#----- MultiMotor sa
|
||||
sa recovernampos noeff a3 24 a4 48
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ref anglesheader stt,om,chi,phi
|
||||
ref clear
|
||||
singlex cell 0 0 0 0 0 0
|
||||
singlex oldub 0 0 0 0 0 0 0 0 0
|
||||
singlex ub 0 0 0 0 0 0 0 0 0
|
||||
singlex planenormal 0 0 0
|
||||
singlex cell { 0 0 0 0 0 0}
|
||||
singlex oldub { 0 0 0 0 0 0 0 0 0}
|
||||
singlex ub { 0 0 0 0 0 0 0 0 0}
|
||||
singlex planenormal { 0 0 0}
|
||||
singlex mode bi
|
||||
singlex spacegroup P
|
||||
singlex peaksearch
|
||||
singlex peaksearch {}
|
||||
singlex peaksearch/min2t 5
|
||||
singlex peaksearch/step2t 1
|
||||
singlex peaksearch/max2t 15
|
||||
@ -238,6 +244,7 @@ singlex peaksearch/phimin 0
|
||||
singlex peaksearch/phimax 180
|
||||
singlex peaksearch/chimin 90
|
||||
singlex peaksearch/chimax 180
|
||||
|
||||
#HKL Settings
|
||||
hkl scantolerance 2.500000
|
||||
ubcalcint difftheta 0.300000
|
||||
@ -249,13 +256,32 @@ messref clear
|
||||
fmess weak 0
|
||||
fmess weakthreshold 20
|
||||
fmess fast 0
|
||||
fmess hkllim -10 -10 10 10 10 10
|
||||
fmess sttlim 5 180
|
||||
fmess hkllim { -10 -10 10 10 10 10}
|
||||
fmess sttlim { 5 180}
|
||||
|
||||
fmess table clear
|
||||
cone target 0 0 0
|
||||
cone target { 0 0 0}
|
||||
cone qscale 1
|
||||
cone center unknown
|
||||
|
||||
simidx sttlim 0.2
|
||||
simidx anglim 0.5
|
||||
|
||||
simi preset 0
|
||||
simi mode monitor
|
||||
|
||||
|
||||
nano targetposition -50
|
||||
nano sign 1
|
||||
nano softzero 0
|
||||
nano softlowerlim -10000
|
||||
nano softupperlim 10000
|
||||
nano fixed -1
|
||||
nano interruptmode 0
|
||||
nano precision 0.01
|
||||
nano accesscode 2
|
||||
nano failafter 3
|
||||
nano maxretry 3
|
||||
nano ignorefault 0
|
||||
nano movecount 10
|
||||
|
||||
|
@ -797,3 +797,21 @@ source ../sim/poldi_sics/zug.tcl
|
||||
|
||||
#MakeSPSS7 s7 203 251 129.129.195.55:2005
|
||||
#MakeSPSS7 s7 203 251 localhost:8090
|
||||
|
||||
set jvl 0
|
||||
|
||||
if {$jvl == 1} {
|
||||
source ../sim/boa_sics/jvl.tcl
|
||||
makesctcontroller jvlsct jvl localhost:8080
|
||||
jvlsct debug -1
|
||||
jvl::make ja 2 jvlsct -10000 10000 120
|
||||
}
|
||||
|
||||
set nanotec 1
|
||||
|
||||
if {$nanotec == 1} {
|
||||
source ../sim/boa_sics/nanotec.tcl
|
||||
makesctcontroller nanosct std localhost:8080 \r 1 \r
|
||||
nanosct debug -1
|
||||
nanotec::make nano 1 nanosct -100000 100000 120
|
||||
}
|
||||
|
Reference in New Issue
Block a user