Hi Mark,
I am using asyn R4-31 for LCLS1 mission readiness LLRF project.
During creating parameters for asyn Port driver, I got error messages as the followings:
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC5 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC6T4 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC6 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC7T4 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC7 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC8T4 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC8 to list 0, parameter already
exists.
2018/03/26 21:48:32.076 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC9T4 to list 0, parameter already
exists.
It complains about duplicated parameter names but, I do not have any duplicated name.
I am using the following code to create the parameters.
#define rawWaveformString "raw_wfC%dT%d"
#define iWaveformString "i_wfC%dT%d"
#define qWaveformString "q_wfC%dT%d"
#define phaseWaveformString "p_wfC%dT%d"
#define amplitudeWaveformString "a_wfC%dT%d"
#define avgPhasePerChnString "avg_phaseC%dT%d"
#define avgAmplitudePerChnString "avg_amplitudeC%dT%d"
#define avgPowerPerChnString "avg_powerC%dT%d"
#define refSubPhasePerChnString "refsub_phaseC%dT%d"
#define tsUnaware_avgPhasePerChnString "avg_phaseC%d"
#define tsUnaware_avgAmplitudePerChnString "avg_amplitudeC%d"
#define tsUnaware_avgPowerPerChnString "avg_powerC%d"
#define tsUnaware_refSubPhasePerChnString "refsub_phaseC%d"
--------------------
for(int i=0; i < MAX_CHANNEL_NUMBER; i++) {
for(int j =0; ts[j] > 0; j++) {
if( i < MAX_RAW_CHANNEL_NUMBER ) sprintf(param_name, rawWaveformString, i, ts[j]); createParam(param_name, asynParamInt16Array,
&p_signalWaveform[i][j].raw);
sprintf(param_name, iWaveformString, i, ts[j]); createParam(param_name, asynParamFloat64Array, &p_signalWaveform[i][j].i);
sprintf(param_name, qWaveformString, i, ts[j]); createParam(param_name, asynParamFloat64Array, &p_signalWaveform[i][j].q);
sprintf(param_name, phaseWaveformString, i, ts[j]); createParam(param_name, asynParamFloat64Array, &p_signalWaveform[i][j].phase);
sprintf(param_name, amplitudeWaveformString, i, ts[j]); createParam(param_name, asynParamFloat64Array, &p_signalWaveform[i][j].amplitude);
sprintf(param_name, avgPhasePerChnString, i, ts[j]); createParam(param_name, asynParamFloat64, &p_signalWaveform[i][j].avg_phase);
sprintf(param_name, avgAmplitudePerChnString, i, ts[j]); createParam(param_name, asynParamFloat64, &p_signalWaveform[i][j].avg_amplitude);
sprintf(param_name, avgPowerPerChnString, i, ts[j]); createParam(param_name, asynParamFloat64, &p_signalWaveform[i][j].avg_power);
sprintf(param_name, refSubPhasePerChnString, i, ts[j]); createParam(param_name, asynParamFloat64, &p_signalWaveform[i][j].refsub_phase);
}
sprintf(param_name, tsUnaware_avgPhasePerChnString, i); createParam(param_name, asynParamFloat64, &p_signalWaveform_tsUnaware[i].avg_phase);
sprintf(param_name, tsUnaware_avgAmplitudePerChnString, i); createParam(param_name, asynParamFloat64, &p_signalWaveform_tsUnaware[i].avg_amplitude);
sprintf(param_name, tsUnaware_avgPowerPerChnString, i); createParam(param_name, asynParamFloat64, &p_signalWaveform_tsUnaware[i].avg_power);
sprintf(param_name, tsUnaware_refSubPhasePerChnString, i); createParam(param_name, asynParamFloat64, &p_signalWaveform_tsUnaware[i].refsub_phase);
}
----------------
If I commented out one of line in the code, the error messages point out other parameters.
For example, if I commented out the following line.
// sprintf(param_name, tsUnaware_refSubPhasePerChnString, i); createParam(param_name, asynParamFloat64, &p_signalWaveform_tsUnaware[i].refsub_phase);
The error message changed as the followings:
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter avg_powerC5 to list 0, parameter already exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC6T4 to list 0, parameter already
exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter avg_powerC6 to list 0, parameter already exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC7T4 to list 0, parameter already
exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter avg_powerC7 to list 0, parameter already exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC8T4 to list 0, parameter already
exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter avg_powerC8 to list 0, parameter already exists.
2018/03/26 22:02:59.907 asynPortDriver:createParam: port=KlystronPort error adding parameter refsub_phaseC9T4 to list 0, parameter already
exists.
The parameter avg_powerC5, C6, C7, and C8 were not in the previous error messages.
Would you give me your advice for this issue?
Thank you.
Best regards,
Kukhee
--------------------------------------------
Kukhee Kim
SLAC National Accelerator Laboratory
2575 Sand Hill Rd, MS 64
Menlo Park, CA 94025
Email: [email protected]
Phone: (650)926-4912
Fax: (650)926-3800