wiki:css/opi_diff

Version 6 (modified by michkawa, 10 years ago) (diff)

--

CSS 3.1.2 → CSS 3.2.xへのバージョンアップに伴う opi の修正点

CSS 3.1.2で作成したOPIをCSS 3.2.xで動かすための修正点。

loc://の初期値設定

一番大きな変更点としてloc://がある。CSS 3.2.xからはloc://には初期値の設定が必須になっていて、これを設定していないと disconnectになる。
修正方法は、loc://xxxxとなっているところを、数値ならloc://xxxx(0)、文字列ならloc://xxxx("")のように修正する。

一つ一つOPI Editorでやっていくのは面倒なので、OPIファイルを開くときにNavigatorのファイル上で右クリックし、サブメニューを表示してOpen with->Text Editorを選択し、テキストエディターでloc://xxxxを検索してloc://xxxx(0)変換した後に、動作がおかしいところを直したほうが早い。

BOY Example の 3_6_ChoiceWidgets.opi をみると、各選択widget loc://MyChoiceには初期値が設定されていないし、実際の動作も問題なさそう。
あまりに不評だったから、コンストラクタの多態性を設定することで逃げているのかも。

createPV APIの変更

次に問題になるのが、PVUtilのcreatePV API。
CSS 3.1.2ではunofficalながら

from org.csstudio.utility.pv import PVFactory

pv = PVFactory.createPV(pvName)
pv.start()

と記述することで使用可能だった。

3.2.xからは正式にcreatePVがサポートされたが、引数も使い方もまるっきり違うものになっている。

from org.csstudio.opibuilder.scriptUtil import PVUtil
from org.csstudio.simplepv import IPVListener

class MyPVListener(IPVListener):
    def valueChanged(self, pv):
        widget.setPropertyValue("text", PVUtil.getString(pv))

pv = PVUtil.createPV("sim://noise", widget)
pv.addListener(MyPVListener())  
  

いちいちclassを作らなくてはならないのがjava風だが、それよりも問題なのがwidgetを引き数に追加する必要があること。
widgetとは全く関係ないclassを作っても、引数にwidgetが必要になってくるので、既存のclassのコンストラクタ等を変更する必要が出てくる。

Name に loc://

CSS 3.1.2では、各widgetのName属性に loc://xxxx と設定し、スクリプトに渡す引数でloc://xxxxを設定すると

wgt = display.getWidget(str(pvs[0]))

でwidget objectが取得できたが、CSS 3.2.16では、loc://xxxxがスクリプトに渡される時点で展開されてしまうようで、こんな感じの

2014-09-26 13:49:37 ERROR: Error in ../scripts/setROIRangeLine.js on Polyline.
org.mozilla.javascript.WrappedException: Wrapped java.lang.Exception: Widget with name "org.csstudio.simplepv.utilitypv.UtilityPV@74a15bb9" does not exist! (script#21)

エラーになる。

Intensity Graph

Intensity GraphのGraph Area WidthGraph Area HeightWidthHeightと同じ値に設定できなくなっている。(CSS 3.1.2ではできる)
何故か、Graph Area WidthWidth - 12Graph Area HeightHeight - 9 になっているようだ。

CSS 3.2.16で編集したOPIを CSS 3.1.2 で動かした場合

CSS 3.2.1の頃は、バージョンが違うという意味の警告ダイアログが表示されたが、CSS 3.2.16との間では何も表示されない。
ただ、CSS 3.1.2 には存在しないAPIやwidgetが使われていたり、するとエラーが発生する。

CSS 3.2.16でのpython script内に日本語

通常のpythonと同様に、encodingを設定する

# -*- coding: utf-8 -*-

を記述しておけば、日本語でのコメントが記述できるようになった。