Cleaned up ANSTO code to merge with sinqdev.sics

This is our new RELEASE-4_0 branch which was taken from ansto/93d9a7c
Conflicts:
	.gitignore
	SICSmain.c
	asynnet.c
	confvirtualmot.c
	counter.c
	devexec.c
	drive.c
	event.h
	exebuf.c
	exeman.c
	histmem.c
	interface.h
	motor.c
	motorlist.c
	motorsec.c
	multicounter.c
	napi.c
	napi.h
	napi4.c
	network.c
	nwatch.c
	nxscript.c
	nxxml.c
	nxxml.h
	ofac.c
	reflist.c
	scan.c
	sicshipadaba.c
	sicsobj.c
	site_ansto/docs/Copyright.txt
	site_ansto/instrument/lyrebird/config/tasmad/sicscommon/nxsupport.tcl
	site_ansto/instrument/lyrebird/config/tasmad/taspub_sics/tasscript.tcl
	statusfile.c
	tasdrive.c
	tasub.c
	tasub.h
	tasublib.c
	tasublib.h
This commit is contained in:
Ferdi Franceschini
2015-04-23 20:49:26 +10:00
parent c650788a2c
commit 10d29d597c
1336 changed files with 9430 additions and 226646 deletions

View File

@ -4,6 +4,10 @@
copyright: see file COPYRIGHT
Mark Koennecke, November 2004
Fixed to work with second generation motors too
Mark Koennecke, September 2013
------------------------------------------------------------------------*/
#include <stdio.h>
#include <assert.h>
@ -13,25 +17,19 @@
#include "task.h"
#include "commandlog.h"
#include "oscillate.h"
#include "status.h"
#define ABS(x) (x < 0 ? -(x) : (x))
/*================== real work =========================================*/
static void StopOscillation(pOscillator self)
{
int savedStatus;
assert(self != NULL);
if (self->taskID > 0) {
self->pMot->pDriver->Halt(self->pMot->pDriver);
self->pMot->pDrivInt->Halt(self->pMot);
self->stopFlag = 1;
self->taskID = -1;
}
savedStatus = GetStatus(); /* fool status check in ObParSet (avoid "Cannot change parameter while running" message */
SetStatus(eEager);
MotorSetPar(self->pMot, self->pCon, "accesscode", usUser);
SetStatus(savedStatus);
if (self->debug > 0) {
WriteToCommandLog("oscillator>> ", "Stopping");
}
@ -74,31 +72,23 @@ static int OscillationTask(void *data)
assert(self);
if (self->stopFlag == 1) {
finishDriving(self->pMot, self->pCon);
return 0;
}
status = self->pMot->pDriver->GetStatus(self->pMot->pDriver);
status = self->pMot->pDrivInt->CheckStatus(self->pMot,pServ->dummyCon);
switch (status) {
case HWFault:
case HWPosFault:
self->pMot->pDriver->GetError(self->pMot->pDriver, &code, error, 255);
WriteToCommandLog("oscillator>> ", error);
pos = getCurrentTarget(self);
errStatus =
self->pMot->pDriver->TryAndFixIt(self->pMot->pDriver, code, pos);
self->errorCount++;
if (errStatus == MOTFAIL) {
/*
try driving the other way on a serious error
*/
pos = getNextPos(self);
status = MotorRun(self->pMot, self->pCon, pos);
if (self->debug > 0) {
snprintf(message, 131, "Started oscillation to %f, ret code = %d",
pos, status);
WriteToCommandLog("oscillator>>", message);
}
WriteToCommandLog("oscillator>> ",
"ERROR occurred in oscillation, try running motor manually to find out more");
WriteToCommandLog("oscillator>> ",
"Trying to run other direction");
pos = getNextPos(self);
status = MotorRun(self->pMot, self->pCon, pos);
if (self->debug > 0) {
snprintf(message, 131, "Started oscillation to %f, ret code = %d",
pos, status);
WriteToCommandLog("oscillator>>", message);
}
break;
case HWWarn:
@ -111,16 +101,10 @@ static int OscillationTask(void *data)
case HWBusy:
break;
case HWIdle:
if (self->cycles > 0 && self->currcycle == self->cycles) {
StopOscillation(self);
return 1;
}
pos = getNextPos(self);
status = MotorRun(self->pMot, self->pCon, pos);
if (status == OKOK) {
self->pMot->pDrivInt->iErrorCount = 0;
if (self->cycles > 0)
(self->currcycle)++;
}
if (self->debug > 0) {
snprintf(message, 131, "Started oscillation to %f, ret code = %d",
@ -135,7 +119,7 @@ static int OscillationTask(void *data)
static int StartOscillation(pOscillator self, SConnection * pCon)
{
float fval;
int status, savedStatus;
int status;
char error[80], pBueffel[255];
assert(self);
@ -151,10 +135,7 @@ static int StartOscillation(pOscillator self, SConnection * pCon)
self->lowerLimit += .5;
MotorGetPar(self->pMot, "softupperlim", &self->upperLimit);
self->upperLimit -= .5;
savedStatus = GetStatus(); /* fool status check in ObParSet (avoid "Cannot change parameter while running" message */
SetStatus(eEager);
MotorSetPar(self->pMot, self->pCon, "accesscode", (float) usInternal);
SetStatus(savedStatus);
self->nextTargetFlag = 0;
self->errorCount = 0;
self->stopFlag = 0;
@ -182,7 +163,8 @@ static int StartOscillation(pOscillator self, SConnection * pCon)
/*
start task
*/
self->taskID = TaskRegister(pServ->pTasker,
snprintf(pBueffel,sizeof(pBueffel),"Oscillate-%s", self->pMot->name);
self->taskID = TaskRegisterN(pServ->pTasker,pBueffel,
OscillationTask, NULL, NULL, self, 10);
if (self->taskID < 0) {
SCWrite(pCon, "ERROR: failed to start oscillation task", eError);
@ -237,8 +219,6 @@ int MakeOscillator(SConnection * pCon, SicsInterp * pSics, void *pData,
memset(pNew, 0, sizeof(Oscillator));
pNew->pDes = CreateDescriptor("Oscillator");
pNew->pMot = pMot;
pNew->cycles = 0;
pNew->currcycle = 0;
pNew->pCon = SCCreateDummyConnection(pSics);
if (!pNew->pDes || !pNew->pCon) {
SCWrite(pCon, "ERROR: out of memory creating oscillator", eError);
@ -277,12 +257,6 @@ int OscillatorWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
}
strtolower(argv[1]);
if (argc == 3) {
self->cycles = 2 * atoi(argv[2]);
} else {
self->cycles = 0;
}
self->currcycle = 0;
if (strcmp(argv[1], "start") == 0) {
return StartOscillation(self, pCon);
} else if (strcmp(argv[1], "stop") == 0) {