diff --git a/MakeAutoSave.RHEL7 b/MakeAutoSave.RHEL7 new file mode 100644 index 0000000..a7a3d7f --- /dev/null +++ b/MakeAutoSave.RHEL7 @@ -0,0 +1,22 @@ +# This Makefile has to be executed in the synApps-xxx/support/autosave-xxx directory. +# It creates a autosave module to load into iocsh +include /ioc/tools/driver.makefile + +MODULE=autosave + +BUILDCLASSES=Linux + +USR_DEPENDENCIES= + +SOURCES += asApp/src/dbrestore.c +SOURCES += asApp/src/save_restore.c +SOURCES += asApp/src/initHooks.c +SOURCES += asApp/src/fGetDateStr.c +SOURCES += asApp/src/configMenuSub.c +SOURCES += asApp/src/verify.c +SOURCES += asApp/src/asVerify.c +SOURCES += asApp/src/os/Linux/osdNfs.c + +HEADERS += asApp/src/os/Linux/osdNfs.h + +DBDS += asApp/src/asSupport.dbd diff --git a/MakeScaler.RHEL7 b/MakeScaler.RHEL7 new file mode 100644 index 0000000..ddf3684 --- /dev/null +++ b/MakeScaler.RHEL7 @@ -0,0 +1,17 @@ +include /ioc/tools/driver.makefile + +MODULE=scaler + +BUILDCLASSES=Linux + +USR_DEPENDENCIES = asyn,427.0.1 + +SOURCES += stdApp/src/scalerRecord.c +SOURCES += stdApp/src/devScalerAsyn.c +SOURCES += stdApp/src/drvScalerSoft.c + +HEADERS += devScaler.h + + +DBDS += stdApp/src/scalerRecord.dbd +DBDS += stdApp/src/scalerSupport.dbd diff --git a/iocBoot/iocsinqEPICS/slsvme.db b/iocBoot/iocsinqEPICS/slsvme.db new file mode 100644 index 0000000..d6f079b --- /dev/null +++ b/iocBoot/iocsinqEPICS/slsvme.db @@ -0,0 +1,94 @@ +# Database definition for the SLS VME magnets as installed at AMOR + +## +## Read the High Limit +## +record(ai, "$(PREFIX)HighLim") { + field(DTYP, "stream") + field(DESC, "High Current Limit") + field(INP, "@slsvme.proto read($(NO),hl) slsvme 0") + field(SCAN, "1 second") + field(PREC, "3") + field(EGU, "A") +} + +## +## Read the High Limit +## +record(ai, "$(PREFIX)LowLim") { + field(DTYP, "stream") + field(DESC, "Low Current Limit") + field(INP, "@slsvme.proto read($(NO),ll) slsvme 0") + field(SCAN, "1 second") + field(PREC, "3") + field(EGU, "A") +} + +## +## Read the Error code +## +record(ai, "$(PREFIX)ErrCode") { + field(DTYP, "stream") + field(DESC, "Error Code") + field(INP, "@slsvme.proto read($(NO),err) slsvme 0") + field(SCAN, "1 second") + field(PREC, "3") + field(EGU, "A") +} + +## +## Read the textual representation of the error. +## +record(stringin, "$(PREFIX)ErrText") { + field(DTYP, "stream") + field(INP, "@slsvme.proto readErrTxt($(NO)) slsvme 0") + field(SCAN, "1 second") + field(PINI, "YES") +} + + +## +## Read the Current +## +record(ai, "$(PREFIX)CurRBV") { + field(DTYP, "stream") + field(DESC, "Low Current Limit") + field(INP, "@slsvme.proto read($(NO),cur) slsvme 0") + field(SCAN, "1 second") + field(PREC, "3") + field(EGU, "A") +} + +## +## Set the current +## +record(ao, "$(PREFIX)CurSet") { + field(DTYP, "stream") + field(DESC, "Setpoint current") + field(OUT, "@slsvme.proto write($(NO),cur) slsvme 0") + field(PREC, "3") + field(EGU, "A") +} + +## +## Read power status of the magnet +## +record(bi, "$(PREFIX)PowerStatusRBV") { + field(DESC, "Readback of the power status") + field(DTYP, "stream") + field(INP, "@slsvme.proto readonoff($(NO)) slsvme 0") + field(SCAN, "1 second") + field(ZNAM, "off") + field(ONAM, "on") +} + +## +## Set the power status +## +record(bo, "$(PREFIX)PowerStatus") { + field(DESC, "Set the power status") + field(DTYP, "stream") + field(OUT, "@slsvme.proto setpower($(NO)) slsvme 0") + field(ZNAM, "on") + field(ONAM, "off") +} diff --git a/makesinqtar b/makesinqtar index a7c4faa..037303a 100755 --- a/makesinqtar +++ b/makesinqtar @@ -4,4 +4,4 @@ set dir [pwd] cd /usr/local/ioc -exec /usr/bin/tar czvf $dir/sinqepics.tgz modules/scaler modules/sinq modules/anc350 +exec /usr/bin/tar czvf $dir/sinqepics.tgz modules/scaler modules/sinq modules/anc350 modules/autosave diff --git a/sinqEPICSApp/src/EL734Driver.cpp b/sinqEPICSApp/src/EL734Driver.cpp index 890e1c3..78274a9 100644 --- a/sinqEPICSApp/src/EL734Driver.cpp +++ b/sinqEPICSApp/src/EL734Driver.cpp @@ -218,6 +218,27 @@ asynStatus EL734Controller::transactController(int axisNo,char command[COMLEN], EL734Axis::EL734Axis(EL734Controller *pC, int axisNo) : SINQAxis(pC, axisNo), pC_(pC) { + char command[COMLEN], reply[COMLEN]; + asynStatus status; + int count = 0; + float low, high; + + /* + get the hardware limits from the controller + */ + sprintf(command,"H %d",axisNo_); + status = pC_->transactController(axisNo_,command,reply); + if(status == asynSuccess){ + count = sscanf(reply,"%f %f",&low, &high); + if(count >= 2){ + pC_->setDoubleParam(axisNo_,pC_->motorLowLimit_,low); + pC_->setDoubleParam(axisNo_,pC_->motorHighLimit_,high); + } else { + errlogPrintf("Bad response - %s - requesting limits at axis %d", reply, axisNo_); + } + } else { + errlogPrintf("Failed to read limits at axis %d", axisNo_); + } } @@ -255,6 +276,8 @@ asynStatus EL734Axis::move(double position, int relative, double minVelocity, do homing = 0; sprintf(command, "p %d %.3f", axisNo_, position/1000.); status = pC_->transactController(axisNo_,command,reply); + setIntegerParam(pC_->motorStatusProblem_, false); + updateMsgTxtFromDriver(""); next_poll = -1; return status; } @@ -267,6 +290,9 @@ asynStatus EL734Axis::home(double minVelocity, double maxVelocity, double accele // status = sendAccelAndVelocity(acceleration, maxVelocity); + setIntegerParam(pC_->motorStatusProblem_, false); + updateMsgTxtFromDriver(""); + sprintf(command, "R %d", axisNo_); homing = 1; next_poll= -1; @@ -293,6 +319,8 @@ asynStatus EL734Axis::moveVelocity(double minVelocity, double maxVelocity, doubl sprintf(command, "FB %d", axisNo_); } status = pC_->transactController(axisNo_,command,reply); + setIntegerParam(pC_->motorStatusProblem_, false); + updateMsgTxtFromDriver(""); next_poll = -1; return status; } @@ -433,8 +461,7 @@ asynStatus EL734Axis::poll(bool *moving) } *moving = false; setIntegerParam(pC_->motorStatusDone_, true); - //updateMsgTxtFromDriver("Believed to be on position"); - } else { + } else { *moving = true; next_poll = -1; setIntegerParam(pC_->motorStatusDone_, false); @@ -443,7 +470,7 @@ asynStatus EL734Axis::poll(bool *moving) skip: if(driverError == 0){ - updateMsgTxtFromDriver(NULL); + updateMsgTxtFromDriver(""); } setIntegerParam(pC_->motorStatusProblem_, comStatus ? 1:0); callParamCallbacks();