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 2025 | 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 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: SEQ with dynamic assignment of PV in array variable |
From: | Emmanuel Mayssat <[email protected]> |
To: | Mark Rivers <[email protected]>, Al Honey <[email protected]>, "[email protected]" <[email protected]> |
Date: | Mon, 3 Jun 2013 15:36:33 -0700 |
I upgraded to the latest version of seq (2-1-12) from (2-0-12) thinking that the version I use could be out of date
Turns out, seqLog is not part of the libseq.so library anymore.... is seqLog obsolete? Mark, interesting example... I was also investigating the state waitConnected ;-) > From: [email protected] > To: [email protected]; [email protected]; [email protected] > Subject: RE: SEQ with dynamic assignment of PV in array variable > Date: Mon, 3 Jun 2013 21:33:35 +0000 > > Hi Emmanuel, > > I am doing basically what you are doing in my SNL programs, and it is working fine. Here is an example with some unrelated lines removed. > > *************************************************************************** > /* Maximum number of detectors supported */ > #define MAX_SIGNALS 32 > > int i; > int n; > int numSignals; > char temp[100]; > > char *prefix; > char *record; > char *field; > > int ReadArray[MAX_SIGNALS]; > assign ReadArray to > {"","","","","","","","","","","","","","","","", > "","","","","","","","","","","","","","","",""}; > int ReadArrays; assign ReadArrays to "{P}DoReadAll"; > monitor ReadArrays; evflag ReadArraysMon; sync ReadArrays ReadArraysMon; > > int SNL_Connected; assign SNL_Connected to "{P}SNL_Connected"; > > int Acquiring; assign Acquiring to "{P}Acquiring"; > > ss mca_control { > state init { > when() { > prefix = macValueGet("P"); > record = macValueGet("R"); > field = macValueGet("FIELD"); > numSignals = atoi(macValueGet("NUM_SIGNALS")); > if ((numSignals <= 0) || (numSignals > MAX_SIGNALS)) { > printf ("NUM_SIGNALS is illegal.\n"); > numSignals = 0; > } > for (i=0; i<numSignals; i++) { > n = i+1; > sprintf(temp, "%s%s%d.%s", prefix, record, n, field); > pvAssign(ReadArray[i], temp); > } > } state waitConnected > } > > state waitConnected { > when (pvAssignCount () == pvConnectCount ()) { > printf ("SIS: All channels connected.\n"); > SNL_Connected = 1; > pvPut(SNL_Connected); > } state monitor_changes > } > *************************************************************************** > > Cheers, > Mark > > ________________________________ > From: [email protected] [[email protected]] on behalf of Emmanuel Mayssat [[email protected]] > Sent: Monday, June 03, 2013 2:38 PM > To: Al Honey; [email protected] > Subject: RE: SEQ with dynamic assignment of PV in array variable > > My solution compiled, didn't segment fault, but also does not work !!! > > Thank you Al for your suggestion. > I assume you are passing tel, sys, and d0/1/2/3 as parameters to your seq program. > In my case, I would like to use a static array (~parameters are hard-coded in program) > as I have 'too' many of them (~ 50 parameters) > > Now I expect around 20 arrays, each with 50 assign statements > That's why I am looking at a for loop with pvAssign > So far pvAssign doesn't work on my side.. > > Anyone else? > > ________________________________ > From: [email protected] > To: [email protected] > Subject: RE: SEQ with dynamic assignment of PV in array variable > Date: Mon, 3 Jun 2013 18:30:03 +0000 > > > Hi Emmanuel > > > > We do the following at Keck: > > > > float openLoop[4]; > > assign openLoop[0] to "{tel}{sys}{d0}openLoop"; > > assign openLoop[1] to "{tel}{sys}{d1}openLoop"; > > assign openLoop[2] to "{tel}{sys}{d2}openLoop"; > > assign openLoop[3] to "{tel}{sys}{d3}openLoop"; > > monitor openLoop; > > > > Al > > > > > > From: [email protected] [mailto:[email protected]] On Behalf Of Emmanuel Mayssat > Sent: Monday, June 03, 2013 7:29 AM > To: [email protected] > Subject: SEQ with dynamic assignment of PV in array variable > > > > Hello, > > > > I am working on a seq program. > > For that program, I am interacting with magnet power supplies. > > The interfaces to the power supplies are all the same (about 10 PV each). > > > > For each interface PV, I would like do to something like this... > > > > #define NB_OF_SUPPLIES 50 > > short enable[NB_OF_SUPPLIES]; > > assign enable[0] to "I:S001:PS:EnableBO"; > > assign enable[1] to "I:SO10:PS:EnableBO"; > > ... > > monitor enable; > > > > but programmatically. > > > > I looked at the docs and they are somewhat confusing. > > > > Q: Is there a place to put the pvAssign statement? > > Q: Should the array's cell be initialized/assigned to "" during declaration? > > Q: Can I monitor a not-yet configured PV array? > > Q: How can I find out about the connection to each of the PVs? > > etc. > > > > If anyone has an example of using pvAssign on array variables (i.e. enable), I would appreciate it. > > > > Regards, > > -- > > Emmanuel > > > > > > > |