ナビゲーションをスキップする
All Places > All Things PI - Ask, Discuss, Connect > Japan PI Square > ブログ > 2017 > October
2017

PI OPC DA InterfaceでHA構成を組んだ場合、Device Status = 70のログが出力され、頻繁にFail Overが発生する場合があります。

本来であればOPCサーバーとPI OPC DA Interface間で問題点を抽出すべきですが、なかなか原因が究明できない事もあります。

その場合の対応策を記述します。

 

対応可能バージョン

PI OPC DA Interface 2.6.15.3 以降

Read-Only、Read-Write共に対応可能

 

対応策

Device Status = 70の詳細確認

発生しているインスタンスに対してHealth Tagを追加します。

追加するHealth Tagは「Device Status」です。

Device Statusを収集するとDevice Status 70の詳細な内容を取得する事ができます。

 

それぞれの現象の詳細は以下の通りです。

https://livelibrary.osisoft.com/LiveLibrary/web/pub.xql?c=t&action=home&pub=int-opc-v6&lang=en#addHistory=true&filename=GUID-BED9E4B9-09AD-42F3-AEA1-AFED10855F3A.xml&docid=GUID-7460893F-398B-4FEA-898A-400CF49E93C2&inner_id=&tid=&query=&scope=&resource=&toc=false&eventType=lcContent.loadDocGUID-7460893F-398B-4FEA-898A-400CF49E93C2

 

 

/ISDSパラメータ

OPC DA Interfaceの起動パラメータに/ISDSパラメータを追加します。

Device Status = 70の原因についてFail Over条件から除外します。

パラメータの詳細は以下をご確認ください。

https://livelibrary.osisoft.com/LiveLibrary/web/pub.xql?c=t&action=home&pub=int-opc-v6&lang=en#addHistory=true&filename=GUID-27CBB4CD-0031-4D77-885B-AC325E33C924.xml&docid=GUID-16E29D13-D619-4CA8-B499-F2F80C3CD3FE&inner_id=&tid=&query=&scope=&resource=&toc=false&eventType=lcContent.loadDocGUID-16E29D13-D619-4CA8-B499-F2F80C3CD3FE

 

/ISDS = 127 を設定するとすべての原因を除外します。

Point TypeがDigitalのPI Pointに対してのデータ収集動作がUniIntのバージョンによって異なります。

ご注意ください。

 

UniInt 4.5 以前

収集文字列の右側の空白文字列を自動でTrimし、DigitalSetの文字列と比較して格納します。

 

サンプル

入力文字列:"Bad_____" → 収集文字列:"Bad"

(_でスペースを表現しています)

 

 

UniInt 4.6以降

収集文字列に対して自動ではTrimしません。

そのままの文字列で比較して格納します。

 

サンプル

入力文字列:"Bad_____" → 収集文字列:"Bad_____"

(_でスペースを表現しています)

 

UniInt 4.6以降で入力文字列をTrimする方法

ICUのUniInt画面で「Trim Digital State Names」チェックを付けてください。

左右の空白文字列をTrimします。

※説明文は左側だけTrimするように記述されていますが、左右Trimします。

https://techsupport.osisoft.com/Troubleshooting/Known-Issues/120958

 

 

コマンドラインパラメータは /DigStateTrimLeft です。

PI UFL InterfaceのDigCode関数はバージョンによって出力結果が異なります。

ご利用時にはPI UFL Interfaceのバージョンをご確認ください。

 

DigCode関数について

DigCode関数はパラメータに文字列を受け取り、その文字列に対応した SYSTEM DigitalSetの値を返します。

 

サンプル

' -246が返ります

Value_Number = DigCode("I/O Timeout")

 

 

バージョン間の違い

Ver 3.3.12.13まで

SYSTEM DigitalSet 0 ~ 3000:該当する数値が返ります。

SYSTEM DigitalSet 3001以降:-255 (Bad Input) が返ります。

 

Ver 3.3.21以降

SYSTEM DigitalSet 0 ~ 350:該当する数値が返ります。

SYSTEM DigitalSet 351以降:-255 (Bad Input) が返ります。

 

 

文字列比較の特性

DigCode関数のパラメータの文字列はSYSTEM DigitalSetの文字列と完全に一致する必要があります。

大文字・小文字の違いも判断されるので気を付けてください。

また、必要に応じてTRIM関数を使用し、文字列の前後の空白文字列を削除してください。

Infomation

PI UFL Interfaceでデータ格納処理を作成するにあたり、文字列を判断する機能が新規に追加されました。

本機能はPI UFL Interface 3.5 以降で使用できます。

 

IsNumber 関数

IsNumber( "String" )

パラメータは文字列で受け取ります。

パラメータ文字列が数値と認識された場合は 1、そうでない場合は 0を返します。

 

使用例

データが数値だった場合はそのまま格納、文字列だった場合はDigitalSet SYSTEMで格納するサンプルを

以下に記述します。

 

IF (IsNumber(Value_String) == 1) THEN StoreInPI(Tag, ,Timestamp,Value_String, , ) ELSE StoreInPI(Tag, ,Timestamp, 0, DigCode(Value_String), , ) ENDIF

テクストファイルの内容を取得し、PIに書き込むためのPI Connector for UFLがあります。

それぞれのデータファイルの種類を処理するためにINIファイルの作成が必要です。

このINIファイルにタグ名の取得の仕方などが含まれています。

 

INIファイルの作成をより簡単に作成するために、PI Connector for UFL v1.2に新しい関数が提供されています。

PI Connector for UFL v1.2は現在ベータとして提供されています。

ベータのバージョンを試したいパートナー様がいましたら、下記の開発のリードのChris Coenのメーセージを読んでください。(英語となります)

Beta program now open for PI Connector for UFL version 1.2

 

この新しい関数はCSV型とJSON型があるファイルを簡単に処理するための関数です。

 

例えば、CSVのファイルのにデータの行は「タイムスタンプ、値、値、値、値、...」のフォーマットであれば

データを取得するINIファイルの章は下記のように作成できます。

 

下記に事例では、利用する新しい機能はForeachの制御構造、CsvGetItemの関数、値の列と複数値を同時に送るためのStoreEventsの関数です。

 

Counter = 0
' 各項目をループします。
' __MESSAGEは現在処理する行という変数です。
FOREACH (CsvGetItem(__MESSAGE, ",")) DO
  ' 初の項目は値ではなく、タイムスタンプで、
  ' TimeStampの変数に保存します
  IF(Counter == 0) THEN
    TimeStamp = __ITEM
  ' 他の項目は値なので、値の列に追加する
  ELSE
    Values = Add(__ITEM)
  ENDIF
 Counter = Counter + 1
ENDFOR
' PI Serverに送ります。
StoreEvents(TagNames, ,Timestamp, Values)


 

この新しい関数を利用すると、CSVファイルの処理するために60行ぐらいのINIファイルでできます。

バージョン1.2以前では項目が多いCSVファイルの場合は500以上の行のINIファイルの作成が必要だったので、大部楽になりました。

PI AFでエレメント構造を作成するにあたり、「参照」という機能があります。

参照を作成するにあたってかならず設定が必要なのが「参照型」です。

概念がわかりにくく、弊社でのパブリックトレーニングやカスタマサポートへのお問い合わせが

多く発生しておりますので、ブログ記事で開設させていただきます。

 

■ コピー と 参照の違い

エレメントのコピーはPSEGUI上で行う場合、Ctrlキーを押しながら、コピー元のエレメントを

選択し、コピー先のエレメント以下にドラッグします。

コピーとの名前の通り、実体の複製が作成されます。

 

参照の作成はPSEGUI上で行う場合は、特にキー操作せずに、

参照元のエレメントを選択し、参照を作成するエレメント以下にドラッグします。

参照は実体は一つのままです。

一つの実体を複数のエレメントの子エレメントとして使用する場合に使用できます。

 

参照が便利な場面は複数の組織で同一の設備を扱う場合です。

 

 

■ 参照型について

参照の種類には4種類あります。以下に参照の強度順に並べます。

1.      合成

2.      親子(プライマリ)

3.      親子(プライマリ以外)

4.      弱い参照

 

 

■ 合成について

合成はもっとも強力な関係性です。

合成関係は一つの親エレメントとしか結ぶ事ができません。

また、合成関係を持つと、他の親エレメントに親子(プライマリ)関係を結ぶ事はできません。

 

親エレメントとまったく同一の存在の表現方法です。

合成関係の親エレメントが削除された場合、自動で子エレメントも削除されます。

 

 

■ 親子について

親子関係(プライマリ)は一つの親エレメントとしか結ぶ事ができません。

また、親子関係(プライマリ)関係を持つと、他の親エレメントに合成関係を結ぶ事はできません。

親子(プライマリ以外)は複数の親エレメントと結ぶ事ができます。

 

標準的な関係を表現する方法です。

親子(プライマリ)関係の親エレメントが削除された場合、他の親子(プライマリ以外)関係の

親エレメントのうち一つが新たに親子(プライマリ)関係になります。

もし、一つも他の親子(プライマリ以外)関係が存在しない場合、自動で子エレメントも削除されます。

 

 

■ 弱い参照

複数の親エレメントと結ぶ事ができます。

 

親エレメント側で子エレメントの生存期間を管理しない場合に使用します。

子エレメントが削除された場合、自動で参照が削除されます。

 

 

■ 具体例について

以下に例を表現します。

 

RelationImage1.png

 

RelationImage2.png

燃料タンク1と燃料送液ポンプは 親子(プライマリ)関係です。

それとは別に参照で燃料タンク2と親子(プライマリ以外)関係を結んでいます。

 

もし、燃料タンク1が撤去されたとしても、燃料送液ポンプは

燃料タンク2につながっているため、自動で削除される事はありません。

 

燃料送液ポンプとモーターはお互いが密接な関係を持つので、

合成で関係を結びます。

燃料送液ポンプが削除されると、自動でモーターも削除されます。

 

また、設備管理部門がポンプやモーターを管理する場合には

弱い参照で関係を結びます。

この場合、設備として燃料送液ポンプやモーターが撤去された場合、

自動でポンプ管理やモーター管理から自動で削除される事となります。

PI上にアプリケーションを開発するお客様のためにAF SDKの入門資料を公開しました。

 

是非、ダウンロードしてAF SDKについて勉強してください!

https://techsupport.osisoft.com/Downloads/File/2c278307-bcfc-4f66-b0f4-2d9fc980e397

 

VLEも提供されております。

 

同トレーニングの利用するコードは下記に公開されています。

GitHub - osisoft/AF-SDK-Getting-Started-Guide: Lab Exercises for the PI AF SDK for Begginers

 

 

内容:

  • PI Data Archive や PI AF データベースに接続す る
  • アセットの検索
  • データの読み込みと書き込み
  • AF 階層の構築
  • AF イベントフレームを使用した作業

PI Visionで角度を表示するため、コンパスを表示したい場合があります。

たとえば風向きを表示したり、人、車、ものなどの現在の向きを表示したりする場合です。

 

Canvas Gaugeのライブラリを見つけたので、PI Visionで表示してみました。

GitHub - Mikhus/canvas-gauges: HTML5 Canvas Gauge (Camvas Gaugesのライブラリ)

PI Visionで表示するコンパスゲージのコードは以下にあります。

GitHub - kenji0711/CompassGaugeCustomSymbol: PI Vision 2017 custom symbol. It can show compass. the value should be from…

tagの値が0-360であればその数字をもとに角度が表示できます。

是非利用してみてコメントいただければ幸いです。

 

利用方法:

%PIHOME64%\PIVision\Scripts\app\editor\symbols\extに以下をコピーします。

sym-compassgauge.js

sym-compassgauge-config.html

sym-compassgauge-template.html

さらにext\librariesに以下をコピーします。

fonts.css

gauge.min.js

ext\Iconsに以下をコピーします。

compass.svg