ふたつぼし inside

制作・活動内容、機材の使い方、作り方などなど

ユーザ用ツール

サイト用ツール


サイドバー

**ふたつぼしHomeに戻る**
**ふたつぼしストアを覗く**

コンテンツマップ



a crow's nest

最近更新されたページ

howto:open_plc:sys_time

システムの日時情報を利用する

日付や時刻に合わせて何かをさせたいということは自動運転ならよくあることですので、日時情報の取り扱い方法は大事です。

概要

ランタイムが動いているOSの時刻情報をOpenPLCに取り込んで、使い方に合わせてデータ形式を変換して、プログラムのロジックに組み込んでゆくという流れです。

時刻情報の予備知識

  • RaspberryPi OSが属するLinuxが使っている時間情報は、UNIX時間というものになります。
    過去のある時点(The Epoch(1970年1月1日00:00:00(UTC) )からの経過秒数を、符号込みの32bitで表した数値でコンピュータが使用する時間にしています。

    参考:現在時のUNIX時間は? また、この32bitで表すことのできる最大値が+2147483647で、2038年にそこに到達してしまうために、そのとき時間がリセットされて問題が起きるコンピュータが出てくるかもしれません。2038年問題と言われています。
  • この元となるUNIX時間データは1664150405.200.のような数値で、これだけではいつなのかよくわかりませんので、そこから通常よく使われる年/月/日などで表示された時刻に変換して利用します。


OpenPLCでの日時情報

  • %ML1024で提供されるデータは、そのままでは上記のUNIX時間の一種(地方標準時相当)の数値なので、使う側が必要なデータ形式に変換して、変換後のデータをプログラム内で利用します。


利用する時間形式への変換

利用したい時間の単位に合わせて、データを変換する機能ブロックがあります。

  • 時間の各種データ形式:日時については専用のデータ型がいくつか用意されています。
    • TOD (TIME_OF_DAY):1日のうちの時刻。例:TOD#07:15:00.00
    • DT (DAY_AND_TIME):日付と時刻。例:DT#2022-10-17-07:15:00.00
    • D (DATE):日付。例:D#2022-10-17
  • %ML1024に取り込まれる数値のデータ型は何が適切なのかよくわからなかったのですが、フォーラム内のOpenPLC作者の投稿内の説明ULINTが使われていたのでそれに合わせます。
  • 型変換
    • 時間データの変換には、データ型変換の機能ブロックを使います。上記の各データに変換したいときは、ULINT_TO_TODULINT_TO_DTULINT_TO_DATEの型変換です。

      ULINT_TO_TOD ULINT_TO_DT ULINT_TO_DATE
  • プログラム上の記載は以下のようになります。変数と機能ブロックをつないだだけですが、変数 “SYSTIME”(%ML1024に割当て)と変数 “currentTOD”(他の部分で使用する現在時刻)を用意して、間に型変換をかませています。左側の数値が変換されて右側に時刻データとして入ります。それ以降は“currentTOD”に対して条件設定等を行います。この部分ではラダープログラムの左右の電源線は出てきません。



補足事項

  • 上記のフォーラムの投稿内では、OpenPLCを最新のコードにアップデートするよう注意書きがありますが、これは2018年の投稿ですので、現在提供されているファイルをインストールする上では問題ありません。
  • 上記投稿内に“The OSCAT Basic library for Codesys”というのが出てきますが、OSCAT(Open Source Community for Automation Technology)という団体が作っている、オープンソースPLCライブラリの一部です。PLCソフト「Codesys」用のバージョンです。
    ここには利用シーンに応じたすぐ使えそうな便利な機能ブロックが豊富に(何百も)用意されています。
    OpenPLCについては、OpenPLC用にコンバートしたOSCAT Basic libraryをフォーラム内で投稿してくれている人がいます。この辺まだきちんと試していないのでなんとも言えませんが、利用すれば相当便利に使えるようになると思います。


howto/open_plc/sys_time.txt · 最終更新: 2023/03/31 10:31 by Staff_Ujiie