🌡️

数字の型を利用してエラーを表現する

2022/04/13に公開約1,200字

温度センサーの値を使い分ける

据え置きエンジン機器や自動車など移動するエンジンなどに使われる
冷却水の温度を測るための温度センサーがありますが、エラーが発生することもあります。

据え置きエンジン

これはビルの屋上や人通りの少ない裏道などに設置して
室内の設備と連携する機器によくあるのですが、温度センサーが使われます。
冷却用なので沸騰させると水がポンプの圧力で回らなくなるので、その範囲で動作させます。
冬場も考慮すると5度~80度くらいが温度の想定範囲になるでしょう。

しかし、小数で管理すると何かと不便なことが多いので10倍の値で表現して
表示画面で1/10表示することもあります。

  • 内部値 236 (int) 、表示値 23.6 (float)

この場合、内部値が温度の10倍の50~800が通常の範囲なので
それ以外の範囲は使わないことになります。

ここで、使わない範囲を逆にエラーコードに利用する考えがあります。
たとえば 3000と3010を使って

  • 内部値 3000 (int)、表示値 300.0 (float)
  • 内部値 3010 (int)、表示値 301.0 (float)

という冷却水としてあり得ない水温の温度表現をエラーとその原因にして
最初から仕様にすれば例外処理を使わずに済みます。
据え置き機器から遠隔センターに発報する時下記のように決めておき

  • 水温 300度は、センサー故障:断線
  • 水温 301度は、センサー故障:ショート

据え置き機器は事故が発生しないように、機能制限の縮退運転、
その間にサービスメンテを向かわせるようにしたりできるのです。

据え置き機器は一定の熱があるのでネズミなどの小動物が入ることも想定して
プログラミングできるようになると実務経験積めた気がします。

運転する機器

自動車など運転する温度のセンサーは据え置き型の対策とは異なります。

  • 高速走行時
  • 林道山間部の悪路
  • 寒冷地

以上を走行時に止まれない状況で断線することを想定する必要があります。

ECUで温度センサーが断線しても、その走行に障害を発生させないために
平均的な温度15~20度あたりを維持して、最悪排気ガス性能が適合値に満たなくても
安全を確保する必要があるからです。

こんな時、例の300度、301度になろうもんなら想定外の動作に陥るでしょう。
そこで、小数を使ってECUからSRAMやEEPROMに退避させておけば、故障時の記録になります。

具体的には15.011や18.022とか、小数下何桁に2の逆数(0.5、0.25,0.125)では表現できない値を、特別なことが起きた記録としてエラーコード(温度仕様としては影響ない箇所をコード)
にしておけば、エンジンを動作させる温度としては問題ないからです。

Discussion

ログインするとコメントできます