> The char * you supply is the same for all parameters, so if the port drive does not create a local copy, all names will always be the same.
asynPortDriver does make a local copy of the string you provide, so that should not be the problem.
Kukhee, after the port driver is created (with the errors you see) type:
asynReport 1, KlystronPort
That will show you all the parameters that we successfully created.
Mark
________________________________
From: [email protected] <[email protected]> on behalf of Ralph Lange <[email protected]>
Sent: Tuesday, March 27, 2018 3:52 AM
To: EPICS Tech Talk
Cc: Kurty, Thomas Charles; Weaver, Matt
Subject: Re: asynPortDriver createParam complains duplicated parameter name
Hi Kukhee,
The name argument to the createParam() method is defined as const char *. (See the documentation<https://epics.anl.gov/modules/soft/asyn/R4-31/asynDoxygenHTML/classasyn_port_driver.html#a20e248e20dcecf64350ad34dda0482be> for more details.)
As you are definitely not using constant strings, so you should have seen warnings at compile time.
The char * you supply is the same for all parameters, so if the port drive does not create a local copy, all names will always be the same.
Cheers,
~Ralph
On Tue, Mar 27, 2018 at 7:18 AM, Kim, Kukhee <[email protected]<mailto:[email protected]>> wrote:
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<https://maps.google.com/?q=2575+Sand+Hill+Rd&entry=gmail&source=g>, MS 64
Menlo Park, CA 94025
Email: [email protected]<mailto:[email protected]>
Phone: (650)926-4912<tel:(650)%20926-4912>
Fax: (650)926-3800<tel:(650)%20926-3800>
- Replies:
- RE: asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
- References:
- asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
- Re: asynPortDriver createParam complains duplicated parameter name Ralph Lange
- Navigate by Date:
- Prev:
Re: asynPortDriver createParam complains duplicated parameter name Ralph Lange
- Next:
RE: asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
<2018>
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: asynPortDriver createParam complains duplicated parameter name Ralph Lange
- Next:
RE: asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
<2018>
2019
2020
2021
2022
2023
2024
|