Changeset 13116


Ignore:
Timestamp:
03/15/12 09:27:28 (13 years ago)
Author:
tbretz
Message:
Do only request the status if the voltage is on; get some dummy reports for the currents before starting to calibrate; do not allow negative feedback corrections
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/feedback.cc

    r13091 r13116  
    103103    vector<vector<float>> fData;
    104104
    105     uint64_t fCursorCur;
     105     int64_t fCursorCur;
    106106    uint64_t fCursorAmpl;
    107107
     
    172172            if (fCursorCur==0)
    173173            {
    174                 DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
     174                if (fStatusBias.second==BIAS::kVoltageOn)
     175                    DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
    175176                return;
    176177            }
     
    181182            {
    182183                // 3900 Ohm/n  +  1000 Ohm  +  1150 Ohm
    183                 const double R = fMap.hv(i).group()==0 ? 3125 : 2930;
    184                 const double I = double(fCurrentsAvg[i])/fCursorCur - fCalibration[i];
     184                const double R  = fMap.hv(i).group()==0 ? 3125 : 2930;
     185                const double Im = double(fCurrentsAvg[i])/fCursorCur;
     186                const double I  = Im>fCalibration[i] ? Im-fCalibration[i] : 0;
    185187                vec[i+416] += R * I*conv;
    186188                if (fCalibration[i]>0)
     
    215217            return -1;
    216218
    217         if (fStatusBias.second==BIAS::kRamping)
     219        if (fStatusBias.second!=BIAS::kVoltageOn)
    218220            return false;
     221
     222        if (fCursorCur++<0)
     223            return true;
    219224
    220225        const int16_t *ptr = static_cast<int16_t*>(fBiasA.getData());
     
    226231        }
    227232
    228         fCursorCur++;
    229 
    230233        return true;
    231234    }
     
    240243        if (fCursorCur<100)
    241244        {
    242             if (fStatusBias.second!=BIAS::kRamping)
     245            if (fStatusBias.second==BIAS::kVoltageOn)
    243246                DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
    244247            return;
     
    260263        fControlType = kIdle;
    261264
    262         DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
     265        if (fStatusBias.second==BIAS::kVoltageOn)
     266            DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
    263267    }
    264268
     
    805809        Message(out);
    806810
    807         DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
     811        if (fStatusBias.second==BIAS::kVoltageOn)
     812            DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
    808813
    809814        return GetCurrentState();
     
    817822        if (fCalibration.size()==0)
    818823        {
    819             ostringstream out;
    820             out << "Current control needs a bias crate calibration first... command ignored.";
    821             Error(out);
     824            Warn("Current control needs a bias crate calibration first... command ignored.");
    822825            return GetCurrentState();
    823826        }
     
    896899//            return kSM_FatalError;
    897900
     901        if (fStatusBias.second==BIAS::kRamping)
     902        {
     903            Warn("Calibration cannot be started when biasctrl is in state Ramping.");
     904            return GetCurrentState();
     905        }
     906
    898907        ostringstream out;
    899         out << "Starting temperature feedback with an offset of -2V";
     908        out << "Starting temperature feedback for calibration with an offset of -2V";
    900909        Message(out);
    901910
    902911        fBiasOffset = -2;
    903912        fControlType = kTemp;
    904         fCursorCur = 0;
     913        fCursorCur = -10;
    905914        fCurrentsAvg.assign(416, 0);
    906915        fCurrentsRms.assign(416, 0);
Note: See TracChangeset for help on using the changeset viewer.