예제 #1
0
unsigned long GetToggleStatus(int channel, char* param)
{
  init_caen();
  int slot = 0;
  const unsigned short Chlist[1] = {channel};
  unsigned long *answer = malloc(sizeof(unsigned long));

  CAENHVRESULT ret = CAENHV_GetChParam(handle, slot, param, 
                                       1, Chlist, answer);
  return answer[0];
}
예제 #2
0
float GetFloatParameter(int channel, char* param)
{
  init_caen();
  int slot = 0;
  const unsigned short Chlist[1] = {channel};
  float *answer = (float*)malloc(sizeof(float));

  CAENHVRESULT ret = CAENHV_GetChParam(handle, slot, param, 
                                       1, Chlist, answer);
  return answer[0];
}
예제 #3
0
void PRadHVChannel::ReadVoltage()
{
    locker.lock();
    int err;
    CAENHVData hvData;
    for(size_t i = 0; i < crateList.size(); ++i)
    {
        hvData.config.crate = crateList[i].id;
        for(size_t j = 0; j < crateList[i].boardList.size(); ++j)
        {
            int size = crateList[i].boardList[j].nChan;
            float monVals[size], setVals[size];
            unsigned int pwON[size];
            char nameList[size][MAX_CH_NAME];
            unsigned short list[size];

            for(int k = 0; k < size; ++k)
                list[k] = k;

            err = CAENHV_GetChName(crateList[i].handle,
                                   crateList[i].boardList[j].slot,
                                   size,
                                   list,
                                   nameList);
            showError("HV Read Voltage", err);

            err = CAENHV_GetChParam(crateList[i].handle,
                                    crateList[i].boardList[j].slot,
                                    "Pw",
                                    size,
                                    list,
                                    pwON);
            showError("HV Read Voltage", err);

            err = CAENHV_GetChParam(crateList[i].handle,
                                    crateList[i].boardList[j].slot,
                                    "VMon",
                                    size,
                                    list,
                                    monVals);
            showError("HV Read Voltage", err);

            err = CAENHV_GetChParam(crateList[i].handle,
                                    crateList[i].boardList[j].slot,
                                    "V0Set",
                                    size,
                                    list,
                                    setVals);
            showError("HV Read Voltage", err);

            hvData.config.slot = (unsigned char)crateList[i].boardList[j].slot;
            for(int k = 0; k < size; ++k)
            {
                    hvData.config.channel = (unsigned char)k;
                    hvData.name = nameList[k];
                    hvData.ON = (bool)pwON[k];
                    hvData.Vmon = monVals[k];
                    hvData.Vset = setVals[k];

                    float diff = (hvData.ON)?(hvData.Vmon - hvData.Vset):0;
                    if(diff > 10 || diff < -10) {
                        cerr << "WARNING: voltage deviates from set value!" << endl
                             << hvData << endl;
                    }

                    float limit = (nameList[k][0] == 'G')?1900:1300;
                    if(hvData.Vmon > limit) {
                        cerr << "WARNING: voltage exceeds safe limit!" << endl
                             << hvData << endl;
                    }

                    myHandler->FeedData(hvData);
            }

        }
    }
    locker.unlock();
}