= CSS 3.1.2 → CSS 3.2.xへのバージョンアップに伴う変更点 =
{{{
#!html
(((注意))) CSS 3.2.xを使用する際には、必ずユーザディレクトリのCSS-Workspacesと以前作成したOPIファイル等のバックアップを作成してから行ってください。
}}}
CSS 3.1.2で作成したOPIをCSS 3.2.xで動かすための修正点と動作が変わった箇所を記述。
== Mac OSX版が起動しない ==
CSSの元になっているEclipseとJavaのバージョンの不一致が原因。[[br]]
解決方法は、[wiki:css/build#macosx こちら]を参照。
== loc://の初期値設定 ==#init
~~一番大きな変更点として{{{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]]~~
~~あまりに不評だったから、コンストラクタの多態性を設定することで逃げているのかも。~~
preferences->CSS Applications->Display->BOY->OPI Runtimeの PV Connection Layerの設定を'''utility_pv'''に設定すると、{{{loc:xxx}}}に初期値を設定しなくてもエラーにならないが、'''pvmanager'''にすると、以下のようなエラーになる。
{{{
2015-01-xx xx:xx:xx ERROR: Error from pv connection layer:
java.lang.IllegalArgumentException: Syntax for local channel must be either name, name(Double) or name(String) (e.g "foo", "foo(2.0)" or "foo("bar")
}}}
コンストラクタで逃げているわけではなく、'''utility_pv'''と'''pvmanager'''のデフォルト動作が違うから、問題になったりならなかったりしていただけのようである。[[br]]
[wiki:css/opi_diff#disable IOCを再起動するとwidgetがDisable状態になる場合がある]のように、IOC再起動時にwidgetがグレーアウト(disable)する問題を解決できるので、新規に作成する場合にはなるべく'''pvmanager'''を使ったほうがいいと考えられる。[[br]]
'''utility_pv'''を使用する場合でも、初期値を設定しておくと後で移行しやすくなる。
== 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という表示に変わってしまい、関連付けがわかり辛くなってしまっている。~~[[br]]
script中での{{{loc://}}}の書き方が間違っていたので、このような表示なっていたようだ。 [[br]]
以前は{{{str(pv)}}}で{{{loc://xxx}}}が取得できていたが、{{{pv.getName()}}}に変更する必要がある。
== epics pv名の取り方 ==
CSS 3.1.2でstr(pv)すると、EPICS_V3_PV型の文字列として取得されてしまい、純粋なPV名ではないのでpv.getName()すると、epics://pvname となる。[[br]]
CSS 3.2.16では、pv.getName()で純粋なPV名がとれる。[[br]]
CSS 3.1.2で同様のことをする場合には、pv.getName().replace("epics://","")とする。
== 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でファイルを保存すればそれ以降は表示されない。[[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 "