= CSS 3.1.2 → CSS 3.2.xへのバージョンアップに伴う変更点 = CSS 3.1.2で作成したOPIをCSS 3.2.xで動かすための修正点と動作が変わった箇所を記述。 == loc://の初期値設定 == ~~一番大きな変更点として{{{loc://}}}がある。CSS 3.2.xからは{{{loc://}}}には初期値の設定が必須になっていて、これを設定していないと {{{disconnect}}}になる。~~[[br]] ~~修正方法は、{{{loc://xxxx}}}となっているところを、数値なら{{{loc://xxxx(0)}}}、文字列なら{{{loc://xxxx("")}}}のように修正する。~~[[br]] ~~一つ一つOPI Editorでやっていくのは面倒なので、OPIファイルを開くときにNavigatorのファイル上で右クリックし、サブメニューを表示して{{{Open with->Text Editor}}}を選択し、テキストエディターで{{{loc://xxxx}}}を検索して{{{loc://xxxx(0)}}}変換した後に、動作がおかしいところを直したほうが早い。~~ BOY Example の 3_6_ChoiceWidgets.opi をみると、各選択widget {{{loc://MyChoice}}}には初期値が設定されていないし、実際の動作も問題なさそう。[[br]] あまりに不評だったから、コンストラクタの多態性を設定することで逃げているのかも。 == createPV APIの変更 == 次に問題になるのが、PVUtilのcreatePV API。[[br]] 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を引き数に追加する必要があること。[[br]] widgetとは全く関係ないclassを作っても、引数にwidgetが必要になってくるので、既存のclassのコンストラクタ等を変更する必要が出てくる。[[br]] この例題では、値が変化したときに呼ばれるvalueChangedメソッドでwidgetのtextプロパティを変更しているが、何を変更するかはプログラムによって異なるので適当に変更する必要がある。[[br]] また、IPVListener class自体もCA monitorをする場合には必要だが、プログラム独自のタイミングでデータを取得する場合には必要ない。[[br]] その場合には以下のように書くことができる。 {{{ from org.csstudio.opibuilder.scriptUtil import PVUtil pv = PVUtil.createPV("sim://noise", widget) widget.setProprtyValue("text", PVUtil.getDouble(pv)) }}} == 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) }}} エラーになる。[[br]] {{{loc://xxxx}}}を取得する場合には {{{ wgt = display.getWidget(pvs[0].getName()) }}} とするといい。 == loc:// の表示がorg.csstudio.simplepv.utilitypv.UtilityPV@xxxxに == 以前はopiを実行中にShow PV Infoでloc://xxxxという表示がされていたが、CSS 3.2.xからはorg.csstudio.simplepv.utilitypv.UtilityPV@xxxxという表示に変わってしまい、関連付けがわかり辛くなってしまっている。 == Intensity Graph == Intensity Graphの{{{Graph Area Width}}}、{{{Graph Area Height}}}が{{{Width}}}、{{{Height}}}と同じ値に設定できなくなっている。(CSS 3.1.2ではできる)[[br]] 何故か、{{{Graph Area Width}}}は{{{Width - 12}}}、{{{Graph Area Height}}}は{{{Height - 9}}} になっているようだ。[[br]] == CSS 3.2.16で編集したOPIを CSS 3.1.2 で動かした場合 CSS 3.2.1の頃は、'''バージョンが違う'''という意味の警告ダイアログが表示されたが、CSS 3.2.16との間では何も表示されない。[[br]] ただ、CSS 3.1.2 には存在しないAPIやwidgetが使われていたりするとエラーが発生する。逆もまた然り。 == CSS 3.2.16でのpython script内に日本語 == 通常のpythonと同様に、encodingを設定する {{{ # -*- coding: utf-8 -*- }}} をファイルの先頭に記述しておけば、日本語でのコメントが記述できるようになった。 == ENUM 型の扱いが厳密になってる == CSS 3.1.2では、IOCのbiやmbbiにZRST,ONST等の設定がなくても処理してくれたが、CSS 3.2.16は {{{ Traceback (most recent call last): File "