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での日時情報
- OpenPLCでは、システムの現在時刻情報を、プログラムで利用できる特別なアドレス(%ML1024)に取り込んでくれます。
OpenPLCフォーラム:Support for RTC on Special Functions
- %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が使われていたのでそれに合わせます。
- 型変換
補足事項
- 上記のフォーラムの投稿内では、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.1675136599.txt.gz · 最終更新: by Staff_Ujiie




