Changeset 11953


Ignore:
Timestamp:
09/02/11 13:54:41 (13 years ago)
Author:
tbretz
Message:
Added commands to set all 416 channels at once (for the feedback) and unified them with the existing set/add commands.
File:
1 edited

Legend:

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

    r11950 r11953  
    764764        return ChannelSetDac(ch, volt*4096/90.);
    765765    }
    766 
     766/*
    767767    bool GlobalSetDac(uint16_t dac)
    768768    {
     
    789789        return GlobalSetDac(volt*4096/90);
    790790    }
    791 
    792     bool GlobalAddDac(int16_t dac)
    793     {
     791*/
     792    bool AddDac(const vector<int16_t> &dac)
     793    {
     794        if (dac.size()!=kNumChannels)
     795        {
     796            Error("AddDac - Wrong size of array.");
     797            return false;
     798        }
     799
    794800        for (size_t ch=0; ch<kNumChannels; ch++)
    795801        {
    796             if (fVoltRef[ch]+dac>kMaxDac)
     802            if (fVoltRef[ch]+dac[ch]>kMaxDac)
    797803            {
    798                 Error("GlobalAddDac - New voltage reference out of range.");
     804                Error("AddDac - New voltage reference out of range.");
    799805                return false;
    800806            }
    801807
    802             if (fVoltRef[ch]+dac<0)
     808            if (fVoltRef[ch]+dac[ch]<0)
    803809                fVoltRef[ch] = 0;
    804810            else
    805                 fVoltRef[ch]+= dac;
     811                fVoltRef[ch] += dac[ch];
    806812        }
    807813
     
    812818    }
    813819
     820    bool AddVolt(const vector<float> &offset)
     821    {
     822        vector<int16_t> dac(offset.size());
     823
     824        for (size_t ch=0; ch<offset.size(); ch++)
     825        {
     826            if (offset[ch]<-90 || offset[ch]>90)
     827            {
     828                Error("AddVolt - Offset out of range [-90V,90V].");
     829                return false;
     830            }
     831            dac[ch] = offset[ch]*4096/90;
     832        }
     833
     834        return AddDac(dac);
     835    }
     836
     837    bool GlobalAddDac(int16_t offset)
     838    {
     839        return AddDac(vector<int16_t>(kNumChannels, offset));
     840    }
     841
    814842    bool GlobalAddVolt(float offset)
    815843    {
    816         if (offset<-90 || offset>90)
    817         {
    818             Error("GlobalAddVolt - Offset out of range [-90V,90V].");
    819             return false;
    820         }
    821 
    822         return GlobalAddDac(offset*4096/90);
    823     }
     844        return AddVolt(vector<float>(kNumChannels, offset));
     845    }
     846
     847    bool SetDac(const vector<int16_t> &dac)
     848    {
     849        if (dac.size()!=kNumChannels)
     850        {
     851            Error("SetDac - Wrong size of array.");
     852            return false;
     853        }
     854
     855        for (size_t ch=0; ch<kNumChannels; ch++)
     856        {
     857            if (!CheckChDac("SetDac", dac[ch]))
     858                return false;
     859
     860            fVoltRef[ch] = dac[ch];
     861        }
     862
     863        if (!fIsRamping)
     864            fIsRamping = RampOneStep();
     865
     866        return true;
     867    }
     868
     869    bool SetVolt(const vector<float> &volt)
     870    {
     871        vector<int16_t> dac(volt.size());
     872
     873        for (size_t ch=0; ch<volt.size(); ch++)
     874        {
     875            if (volt[ch]<0 || volt[ch]>90)
     876            {
     877                Error("SetVolt - Voltage out of range [0V,90V].");
     878                return false;
     879            }
     880            dac[ch] = volt[ch]*4096/90;
     881        }
     882
     883        return SetDac(dac);
     884    }
     885
     886    bool GlobalSetDac(int16_t dac)
     887    {
     888        return SetDac(vector<int16_t>(kNumChannels, dac));
     889    }
     890
     891    bool GlobalSetVolt(float volt)
     892    {
     893        return SetVolt(vector<float>(kNumChannels, volt));
     894    }
     895
    824896
    825897    // --------------------------------------------------------------------
     
    13371409    // --------------------------------------------------------------------
    13381410
     1411    int AddReferenceDac(const EventImp &evt)
     1412    {
     1413        if (!CheckEventSize(evt.GetSize(), "AddReferenceDac", 2*kNumChannels))
     1414            return false;
     1415
     1416        const int16_t *ptr = evt.Ptr<int16_t>();
     1417        fBias.AddDac(vector<int16_t>(ptr, ptr+416));
     1418
     1419        return T::GetCurrentState();
     1420    }
     1421
     1422    int AddReferenceVolt(const EventImp &evt)
     1423    {
     1424        if (!CheckEventSize(evt.GetSize(), "AddReferenceVolt", 4*kNumChannels))
     1425            return false;
     1426
     1427        const float_t *ptr = evt.Ptr<float>();
     1428        fBias.AddVolt(vector<float>(ptr, ptr+416));
     1429
     1430        return T::GetCurrentState();
     1431    }
     1432
     1433    int SetReferenceDac(const EventImp &evt)
     1434    {
     1435        if (!CheckEventSize(evt.GetSize(), "SetReferenceDac", 2*kNumChannels))
     1436            return false;
     1437
     1438        const int16_t *ptr = evt.Ptr<int16_t>();
     1439        fBias.SetDac(vector<int16_t>(ptr, ptr+416));
     1440
     1441        return T::GetCurrentState();
     1442    }
     1443
     1444    int SetReferenceVolt(const EventImp &evt)
     1445    {
     1446        if (!CheckEventSize(evt.GetSize(), "SetReferenceVolt", 4*kNumChannels))
     1447            return false;
     1448
     1449        const float_t *ptr = evt.Ptr<float>();
     1450        fBias.SetVolt(vector<float>(ptr, ptr+416));
     1451
     1452        return T::GetCurrentState();
     1453    }
     1454
     1455    // --------------------------------------------------------------------
     1456
    13391457    int ExpertSetGlobalVolt(const EventImp &evt)
    13401458    {
     
    15551673            (Wrapper(bind(&ConnectionBias::SetZero, &fBias)))
    15561674            ("Set all channels to a zero reference voltage. Starts ramping if necessary.");
     1675
     1676        T::AddEvent("SET_REFERENCE_VOLTAGES", "F:416", kConnected, kAtReference, kOverCurrent)
     1677            (bind(&StateMachineBias::SetReferenceVolt, this, placeholders::_1))
     1678            ("");
     1679
     1680        T::AddEvent("SET_REFERENCE_DACS", "S:416", kConnected, kAtReference, kOverCurrent)
     1681            (bind(&StateMachineBias::SetReferenceDac, this, placeholders::_1))
     1682            ("");
     1683
     1684        T::AddEvent("ADD_REFERENCE_VOLTAGES", "F:416", kConnected, kAtReference, kOverCurrent)
     1685            (bind(&StateMachineBias::AddReferenceVolt, this, placeholders::_1))
     1686            ("");
     1687
     1688        T::AddEvent("ADD_REFERENCE_DACS", "S:416", kConnected, kAtReference, kOverCurrent)
     1689            (bind(&StateMachineBias::AddReferenceDac, this, placeholders::_1))
     1690            ("");
     1691
    15571692
    15581693
Note: See TracChangeset for help on using the changeset viewer.