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: "Kim, Kukhee" <[email protected]>
To: Mark Rivers <[email protected]>, Ralph Lange <[email protected]>, EPICS Tech Talk <[email protected]>
Cc: "Kurty, Thomas Charles" <[email protected]>, "Weaver, Matt" <[email protected]>
Date: Wed, 28 Mar 2018 21:50:47 +0000
Hi Mark,

It was caused by a bug in my driver.
I appreciate your help for debugging my code. I am glad, we can fix it quickly.

We can close this issue on tech-talk.

Thank you again for your help.

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


-----Original Message-----
From: Mark Rivers [mailto:[email protected]] 
Sent: Tuesday, March 27, 2018 2:05 PM
To: Kim, Kukhee; Ralph Lange; EPICS Tech Talk
Cc: Kurty, Thomas Charles; Weaver, Matt
Subject: RE: asynPortDriver createParam complains duplicated parameter name

Hi Kukhee, 

Something is not right.  Can you send your driver and I'll see if I can spot the problem.

Mark


> -----Original Message-----
> From: Kim, Kukhee <[email protected]>
> Sent: Tuesday, March 27, 2018 3:44 PM
> To: Mark Rivers <[email protected]>; Ralph Lange 
> <[email protected]>; EPICS Tech Talk <[email protected]>
> Cc: Kurty, Thomas Charles <[email protected]>; Weaver, Matt 
> <[email protected]>
> Subject: RE: asynPortDriver createParam complains duplicated parameter 
> name
> 
> Hi Mark,
> 
> Thank you for your response.
> There is a strange symptom as I mentioned in the first email in this thread.
> 
> Asyn reported duplicated parameter about  "refsub_phaseC5".
> So, I removed a code line which related with above parameter.
> Then, Asyn reported error message about " avg_powerC5" which was not 
> appeared previous error messages.
> If I removed the code line related with "avg_powerC5", Asyn reported 
> error message for another parameter which was not appeared in prior error message.
> 
> So, it is moving. That's why I asked your advice.
> 
> 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
> 
> 
> -----Original Message-----
> From: Mark Rivers [mailto:[email protected]]
> Sent: Tuesday, March 27, 2018 12:58 PM
> To: Kim, Kukhee; Ralph Lange; EPICS Tech Talk
> Cc: Kurty, Thomas Charles; Weaver, Matt
> Subject: Re: asynPortDriver createParam complains duplicated parameter 
> name
> 
> Hi Kukhee,
> 
> 
> > Thus, the error messages were false alarm.
> 
> 
> I don't believe the error messages are false alarms.  This is 
> asynPortDriver::createParam, which prints the error message:
> 
> 
> asynStatus asynPortDriver::createParam(int list, const char *name, 
> asynParamType type, int
> *index) {
>     asynStatus status;
>     static const char *functionName = "createParam";
> 
>     status = this->params[list]->createParam(name, type, index);
>     if (status == asynParamAlreadyExists) {
>         asynPrint(this->pasynUserSelf, ASYN_TRACE_ERROR,
>             "%s:%s: port=%s error adding parameter %s to list %d, parameter already exists.\n",
>             driverName, functionName, portName, name, list);
>         return(asynError);
>     }
> 
> 
> 
> This is paramList::createParam, which is what is called from 
> asynPortDriver::createParam above.  Note that it is returning 
> asynParamAlreadyExists, which means it did not create the parameter on that call.
> 
> 
> asynStatus paramList::createParam(const char *name, asynParamType type, int *index) {
>     //static const char *functionName = "createParam";
> 
>     if (this->findParam(name, index) == asynSuccess) return 
> asynParamAlreadyExists;
> 
>     std::auto_ptr<paramVal> param(new paramVal(name, type));
> 
>     vals.push_back(param.get());
>     flags.reserve(vals.size());
>     param.release();
>     *index = vals.size()-1;
>     return asynSuccess;
> }
> 
> 
> Thus if you see that error message then I am quite sure there is an 
> error in your driver and you have attempted to create the same parameter more than once.
> 
> Mark
> 
> 
> ________________________________
> From: Kim, Kukhee <[email protected]>
> Sent: Tuesday, March 27, 2018 1:08 PM
> To: Mark Rivers; Ralph Lange; EPICS Tech Talk
> Cc: Kurty, Thomas Charles; Weaver, Matt
> Subject: RE: asynPortDriver createParam complains duplicated parameter 
> name
> 
> Hi Mark and Ralph,
> 
> Thank you for your discussion and advice for the issue.
> 
> Mark, you are right. Even there are error messages for duplications of 
> parameter name, all of the parameters are created successfully.
> 
> // ------ Error Message ------//
> KlystronConfigure("KlystronPort")
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC5 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC6T4 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC6 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC7T4 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC7 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC8T4 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC8 to list 0, parameter already exists.
> 2018/03/27 10:56:49.469 asynPortDriver:createParam: port=KlystronPort 
> error adding parameter refsub_phaseC9T4 to list 0, parameter already exists.
> 
> // ----- Search in the parameter list ----- //
> 
> Parameter 131 type=asynFloat64, name=refsub_phaseC5, 
> value=-113.081536, status=0 Parameter 139 type=asynFloat64, 
> name=refsub_phaseC6T4, value=-123.403931, status=0 Parameter 151 
> type=asynFloat64, name=refsub_phaseC6, value=-123.403931, status=0 
> Parameter 159 type=asynFloat64, name=refsub_phaseC7T4, 
> value=-72.263947, status=0 Parameter 171 type=asynFloat64, 
> name=refsub_phaseC7, value=-72.263947, status=0 Parameter 179 
> type=asynFloat64, name=refsub_phaseC8T4, value=160.250702, status=0 
> Parameter 191 type=asynFloat64, name=refsub_phaseC8, value=160.250702, 
> status=0 Parameter 199 type=asynFloat64, name=refsub_phaseC9T4, 
> value=-47.933350, status=0
> 
> Thus, the error messages were false alarm.
> Thank you for your help.
> 
> 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
> 
> 
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Mark Rivers
> Sent: Tuesday, March 27, 2018 3:56 AM
> To: Ralph Lange; EPICS Tech Talk
> Cc: Kurty, Thomas Charles; Weaver, Matt
> Subject: Re: asynPortDriver createParam complains duplicated parameter 
> name
> 
> 
> > 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#a20e248e20dcecf64350ad34
> dda0482b
> e> for more details.) As you are definitely not using constant 
> e> 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>
> 


References:
asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
Re: asynPortDriver createParam complains duplicated parameter name Ralph Lange
Re: asynPortDriver createParam complains duplicated parameter name Mark Rivers
RE: asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
Re: asynPortDriver createParam complains duplicated parameter name Mark Rivers
RE: asynPortDriver createParam complains duplicated parameter name Kim, Kukhee
RE: asynPortDriver createParam complains duplicated parameter name Mark Rivers

Navigate by Date:
Prev: RE: camonitor not updating when PV changed Sobhani, Bayan
Next: Re: asynMotor: NewFocus 874x Picomotor Controller Driver Angelic Ebbers
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 Mark Rivers
Next: asynMotor: NewFocus 874x Picomotor Controller Driver Angelic Ebbers
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, 28 Mar 2018 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·