EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024  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  <20182019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: asynPortDriver createParam complains duplicated parameter name
From: Mark Rivers <[email protected]>
To: Ralph Lange <[email protected]>, EPICS Tech Talk <[email protected]>
Cc: "Kurty, Thomas Charles" <[email protected]>, "Weaver, Matt" <[email protected]>
Date: Tue, 27 Mar 2018 10:55:53 +0000
> 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  <20182019  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  <20182019  2020  2021  2022  2023  2024 
ANJ, 27 Mar 2018 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·