値の変換経路
すべてのタグが共有する型の決まった変換、生の読み取りから工業値まで、無効な読み値の 2 つの方針、範囲外のときの動作、ブール値と文字列の変換、そして書き込みが段階をどう逆にたどるか。
すべてのタグは、生の読み取りを工業値に変える、型の決まった 1 つの変換経路を共有します。この経路はタグ自身の中にあります。タグのページの「値の変換」のカードと機器のグリッドは、どちらも同じ段階を見せ、Logic、ダッシュボード、記録、公開される OPC UA のノードに届く値は、最後の段階を出た値です。
まず生値
経路は、ドライバー自身の値そのものではなく、タグのデータ型に合わせた生値から始まります。Int32 のタグに 3.7 を渡すドライバーがあれば、カードの一番上には 4 が出て、以降のどの段階もその 4 から続きます。宣言した型がまったく保持できない読み取り(数値を宣言したところに文字が来た場合)は空の読み取りであり、代わりの 0 になることは決してありません。反対の端では、工業値がもう一度同じ型に合わせられるので、Float のタグは float が表せる値に丸められます。
段階
数値の型では、経路はそれぞれ自分のチェックボックスを持つ段階の連なりです。オフの段階は入力をそのまま通し、カードは各段階の終わりでその時点の値を見せるので、実時間の読み取りが計算をどう進むかを追えます。
| 段階 | 既定 | 何をするか |
|---|---|---|
| スケーリング | オン | scaled = raw × Angular + Linear。傾きの既定は 1、切片の既定は 0 です。傾きが 0 なら入力したその場で拒否されます(「スケーリングの傾きが 0 だと、どの読み取りも 0 になります。掛ける傾きを入力してください(1 なら値は変わりません)。」)。すべての読み取りを 0 にしてしまううえ、予告と保存される経路が食い違ってはならないからです。 |
| 校正 | オフ | スケーリング後の値に当てる 2 つ目の線形の組です:calibrated = scaled × Angular + Linear。基準器に対して測った値と直した値の差が範囲の計算を乱さないよう、スケーリングとは分けてあり、専用の権限で守られています。校正を参照してください。傾きが 0 なら同じように拒否されます。 |
| 無効な読み値 | 常に表示 | 使える数値を持たない読み取りに対する 2 つの方針です(下記)。チェックボックスではありません。その「オフ」もまた、答えのひとつだからです。 |
| 上下限 | オフ | 値を下限(既定は 0)と上限(既定は 100)と比べ、選んだ越限したときの動作を当てます(下記)。境界は整えられるので、下限が上限より大きくても失敗にはなりません。小さいほうが下限になります。 |
| 小数桁 | オン | 小数桁で指定した桁に丸めます。既定は 2 で、0 から 15 まで受け付けます。 |
線形の 2 つの段階には、どちらも 2 つの基準点から組を計算する 2 点調整の補助が付きます。手順は校正で 1 段階ずつ説明します。
機器は答えたが、数値ではなかった
熱電対の断線、センサーのないチャネル。読み取りは届き、設備は話しているのに、測定値が NaN である場合です。数値のタグだけの話で、どちらの方針でも品質は良いままです。
| 方針 | 効果 |
|---|---|
| そのまま通す(既定) | NaN はそのまま進み、上下限の段階を丸ごと飛ばします。その段階がどの動作を持っていても同じです。上下限は数値を判断するものであり、ここには数値がないからです。無限大は NaN ではないので、これまでどおり範囲で頭打ちになります。 |
| 値で置き換える | 宣言した数値がこの段階から先に立ち、ほかの読み取りと同じように上下限、小数桁、最後の型合わせに入ります。 |
機器が答えなかった
タイムアウト、切れたケーブル、電源の入っていない設備、ドライバーの例外。どの型でも起こりますが、日時、識別子、バイト列を読むタグには最初の 2 つの方針しか出ません。宣言する代替値は数値であり、その 3 つの型はどれも数値からは作れないからです。
| 方針 | 効果 |
|---|---|
| エラーを見せる(既定) | タグは空になり、品質が悪くなるので、失敗があらゆる場所に一度に現れます。 |
| 最後の正常値を保つ | 最後に届いた読み取りが、期限なしで、設備がふたたび答えるまで表示に残ります。時刻はその読み取りを指したままです。数値が測られたのはそのときだからです。最初の読み取りが届く前は何も保たれず、そのあいだタグは空です。 |
| 値で置き換える | 宣言した数値が、宣言したとおりに出ます。段階を通す読み取りがそもそもないので、スケーリングも校正も丸めもされず、タグの型に合わせられるだけです。型合わせが数値を運べるすべての型、つまり DateTime、Guid、ByteString 以外のすべてで出ます。 |
代替値が黙って立つことはありません。「現在の値」のカードが理由を書き(「機器が答えていないあいだ、最後の正常値を保っています。」)、実時間のドットは黄色になり、内蔵の OPC UA サーバーはその値を、単なる Good ではなく代替を表す状態とともに公開します。方針が求めるあいだ、それは公開され続けます。答えないままの機器が、外部のクライアントに代替値と読み取り失敗を交互に見せることはないので、そのクライアントが読むものはパネルが見せるものと同じです。機器が答えた瞬間、読み取り自身がその点を取り戻します。代替値をオフにしたときも同じです。代替値を選ぶことは可用性を選ぶことなので、警報も式も、その点に値があるものとして判断し続けます。その代償は隠されずに支払われます。診断ログは失敗した読み取りを記録し続け、機器の稼働状態はその機器をオフラインとして報告し続けるからです。代替値は「この点は何を見せるべきか」に答えるものであって、「設備はそこにいるか」には決して答えません。有効な上下限の外にある代替値は、入力したその場で警告されます:「上下限 [0, 100] の外です:読み取りに失敗したときに代わりに立つ値です。」
範囲外の値
下限と上限の外にある値に対する上下限の動作です。
| 動作 | 値はこうなる | 品質 |
|---|---|---|
| 値なし | 空欄(値なし)。 | 良い |
| 上下限で丸める(既定) | 近いほうの境界。 | 良い |
| エラーにして値なし | 空欄。 | 悪い(上下限の異常) |
| エラーにして丸める | 近いほうの境界。 | 悪い(上下限の異常) |
| NaN | NaN。 | 良い。NaN を表せる Float と Double のタグにだけ出ます。これにより Process のチャネルが無効な値を分類できます。エージェントの書き込みや復元したバックアップによって整数のタグに残った NaN の動作は、Null の空欄に落ちます。 |
上下限の異常はタグの実効的な品質に折り込まれるので、実時間のドット、プロパティの式、警報のすべてが、追加の配線なしにその越限した値を悪いものとして見ます。「値の変換」のカードには「値 130 は上下限 [0, 100] の外です。」と出ます。それでもこれは接続の問題ではなくプロセスの状態なので、機器の稼働状態がそのために機器をオフラインと数えることはありません。
ブール値、文字列、その他の型
数値でない型には、同じ「値の変換」のカードに自分の変換があります。
- ブール値:反転は、生値の論理的な否定を報告します。
- 文字列:部分文字列の開始(0 から数えます)と長さが、生の文字列から範囲を切り出します。長さが空なら末尾までで、範囲外の境界は失敗ではなく頭打ちになります。
- ほかのすべての型(DateTime、Guid、ByteString)はそのまま通り、「値の変換」のカードは出ません。
エラーを見せることと最後の正常値を保つことは、どの型にも当てはまります。値で置き換えることは、宣言した数値が読み取りになれるところで出るので、DateTime、Guid、ByteString のタグには並びません。NaN の方針は数値のタグだけのものです。
書き込みは経路を逆にたどる
「現在の値」のカードの書き込みの入力欄は工業値を取り、有効で逆にたどれる段階を順に戻します。上下限が有効なら下限と上限に丸め(動作が何であれ、書き込みは常に丸められ、捨てられることはありません)、校正を戻し((value − Linear) ÷ Angular)、同じようにスケーリングを戻し、最後にタグの型に合わせます。丸めは情報を失う操作なので、戻されません。ブール値の入力は反転をもう一度当てます。文字列の部分取り出しは表示だけのものなので、文字列の書き込みは値の全体をそのまま送ります。DateTime、Guid、ByteString はそのまま通ります。外部の OPC UA クライアントが公開ノードに書いた値はすでに生値なので、ここを一切通りません。