I've done something similar. There are a few small bugs with Kay's
example. In the hope of sparing the next person who finds this in the
tech-talk archive. A working example which populates two PVs from two
columns of a table.
> from org.csstudio.opibuilder.scriptUtil import PVUtil, ConsoleUtil
> from jarray import array
> Timestamp_SP = pvs
> EvtCode_SP = pvs
> T, E = , 
> for row in widget.getTable().getContent():
> Timestamp_SP.setValue(array(T, 'd'))
> EvtCode_SP.setValue(array(E, 'd'))
The final product is evg-seq.opi and the 4 associated python scripts:
With jython, 'array.array' and 'jarray.array' both have java arrays
underneath them, but the order of arguments of their constructors are
The elements if the 'pvs' array of a type 'IPV' which isn't included in
the cs-studio help system.
On 07/05/2017 05:44 PM, Kasemir, Kay wrote:
>> Michael Davidsaver <email@example.com>
>> Is this what you're looking for? To write eg. an array of double?
> Michael already linked to the basics of writing an array.
> The other missing piece might be constructing the plain array in the Jython code.
> In your example, you never fetched any column from the table, you just kept writing "i", the scalar loop index, to a PV.
> Plus PVUtil.writePV("$(PREFIX):ListVo...) would perform the potentially slow PV connection in the script, i.e. on the UI thread.
> Try this:
> # Have this script with two PVs attached to the table widget
> # pvs: Something like loc://do_write_the_column(0), triggering the script execution
> # pvs: That array PV to which you want to write the column, NOT triggering the script
> from org.csstudio.opibuilder.scriptUtil import PVUtil
> from array import array
> if PVUtil.getInt(pvs) > 0:
> # Get the table content
> table = widget.getTable()
> content = table.getContent()
> # Get table's column 2 (counting from 0) into col
> col = 
> for row in content:
> # Write that column as a double array to the array PV
> pvs.setValue(array(col), 'd')
> Now have your button write 1 to loc://do_write_the_column(0)
> Note that only the first PV must trigger the script execution, not the second one, because otherwise the script writing to the array PV would trigger the script which writes the array PV which triggers the script to write the array PV etc.
> On 07/05/2017 04:14 PM, Tomasz Brys wrote:
>> I need help.
>> I have an OPI BOY. I created a table Nx3, (Nrows, 3 columns), N can be from 1 to 200.
>> User can modify the table and when is ready press the button to write the whole column of the table to PV
>> The PV is type of aao , size 200. Of course, the table can have less than 200 elements.
>> What would be the easiest way to do this?
>> I tried something like that, create an Action Button and as an action I execute such a script:
>> from org.csstudio.opibuilder.scriptUtil import PVUtil
>> from array import array
>> tab = display.getWidget("Table")
>> row = tab.getTable().getRowCount()
>> for i in range(1, row):
>> PVUtil.writePV("$(PREFIX):ListVolt", i) # - this works but write always one element 
>> print i
>> My question:
>> How I can write one column of a table to PV which is type of aao?
>> Is it possible to write the whole column at once? Or I have to do it element by element?
>> Any help will be appreciated.
>> Tomasz Brys
>> Integrated Control System
>> European Spallation Source - ERIC
- help - writing a table column from OPI BOY to PV Tomasz Brys
- Re: help - writing a table column from OPI BOY to PV Michael Davidsaver
- Re: help - writing a table column from OPI BOY to PV Kasemir, Kay
- Navigate by Date:
Webopi issue with Text Update widget rule Petrella, Nicoletta
Re: XYgraph pv_name Kasemir, Kay
- Navigate by Thread:
Re: help - writing a table column from OPI BOY to PV Kasemir, Kay
New releases of many areaDetector modules Mark Rivers