Hi John,
Thank you for the answer. I reviewed your code. I didn't see any problem. If you have tested that code and didn't find any problem, please submit your code to source forge.
Hi Juan,
In JavaScript, you cannot create Integer[], but you can create it in Python Script. Here is the python code that should work for you:
from org.csstudio.opibuilder.scriptUtil import PVUtil
from jarray import zeros
from java.lang import Integer
strArray = zeros(20,Integer);
for i in range(20):
strArray[i] = 0;
pv = widget.getPV();
strText = "this is a test";
for i in range(len(strText)):
strArray[i] = ord(strText[i]);
pv.setValue(strArray);
Thanks,
Xihui
> -----Original Message-----
> From: John Hammonds [mailto:[email protected]]
> Sent: Wednesday, November 23, 2011 12:08 PM
> To: [email protected]
> Subject: Re: Writing long strings PV in BOY
>
> Juan,
>
> The only widgets that deal directly with waveform of chars as a long
> string are the text entry/update. The reason that your code is not
> working is that setValue checks type and the type created by
> createIntArray (int[]) is not one of the recognized types. Integer []
> is supported so if you can create this ( I'm just not that fluent in
> Javascript ) then I think that you can do what you want.
>
> I have done a test edit of the code and have come up with the following
> patch that will allow passing int[] to the setValue so that your
> original script should work, although I had trouble since you created
> an
> array of 10 elements but had a longer string. This section of code is
> not mine so I am going to pass this off to others in the group to
> accept
> & commit. This will not fix your immediate issue but should make it
> possible to do this in the future.
>
> John Hammonds
>
> diff -r a6e2537a9c5c
> core/plugins/org.csstudio.utility.pv.epics/src/org/csstudio/utility/pv/
> epics/EPICS_V3_PV.java
> ---
> a/core/plugins/org.csstudio.utility.pv.epics/src/org/csstudio/utility/p
> v/epics/EPICS_V3_PV.java
> Thu Oct 27 13:54:01 2011 -0500
> +++
> b/core/plugins/org.csstudio.utility.pv.epics/src/org/csstudio/utility/p
> v/epics/EPICS_V3_PV.java
> Wed Nov 23 10:58:49 2011 -0600
> @@ -495,7 +495,7 @@
> final int val = ((Integer)new_value).intValue();
> channel_ref.getChannel().put(val);
> }
> - else if (new_value instanceof Integer [])
> + else if (new_value instanceof Integer [] )
> {
> final Integer ival[] = (Integer [])new_value;
> final int val[] = new int[ival.length];
> @@ -503,8 +503,12 @@
> val[i] = ival[i].intValue();
> }
> channel_ref.getChannel().put(val);
> + }
> + else if (new_value instanceof int[])
> + {
> + channel_ref.getChannel().put((int[])new_value);
> } else {
> - throw new Exception("Cannot handle type "
> + throw new Exception("Cannot handle data type "
> + new_value.getClass().getName());
> }
> }
>
>
> On 11/23/2011 7:27 AM, [email protected] wrote:
> > Hi,
> >
> > I have a waveform record setup as array of char (to support long
> string) and I'm trying to write a string to it via BOY Action button. I
> setup a "Write PV" action in the widget but the string does not get
> written, so perhaps long strings are not supported in BOY actions (it
> works for Text Inputs).
> >
> > I tried a Javascript code to convert the string to an array of char
> via the following code:
> >
> > importPackage(Packages.org.csstudio.opibuilder.scriptUtil);
> >
> > var strArray = DataUtil.createIntArray(10);
> >
> > var pv = widget.getPV();
> >
> > var strText = "this is a test";
> >
> > for(var i=0; i<strText.length; i++) {
> > strArray[i] = strText.charCodeAt(i);
> > }
> > pv.setValue(strArray);
> >
> > but the script throws an exception in BOY's console "Wrapped
> java.lang.Exception: Cannot handle type [I".
> >
> > Is there any way in BOY to write a string to a waveform record as an
> array of char (support long strings)? I'm using SNS CSS 3.0.2 (Basic)
> for MacOSX.
> >
> > Thanks in advance,
> > Juan.
> >
> > ----------
> > Juan Carlos Guzman
> > Software Engineer
> > Australia Telescope National Facility
> > CSIRO Astronomy and Space Science
> > P.O.Box 76, Epping NSW 1710, Australia
> > Phone: +61 2 9372 4457
> > Fax: +61 2 9372 4310
> > Email: [email protected]<mailto:[email protected]>
> >
> >
> >
> >
> >
> >
> >
>
> --
> John Hammonds
> Software Services Group
> APS Engineering Support Division
>
> Argonne National Laboratory
> [email protected]<mailto:[email protected]>
> (630)252-5317
>
>
>
- Replies:
- Re: Writing long strings PV in BOY John Hammonds
- References:
- Writing long strings PV in BOY Juan.Guzman
- Re: Writing long strings PV in BOY John Hammonds
- Navigate by Date:
- Prev:
Re: Gateway binary distribution available for RedHat 5.5 Martin Konrad
- Next:
Re: Writing long strings PV in BOY John Hammonds
- 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: Writing long strings PV in BOY John Hammonds
- Next:
Re: Writing long strings PV in BOY John Hammonds
- 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
|