Welcome to Yutekke's PLC Forum
時間計算のシーケンス
時間の計算は、特に暦日が関係すると計算が複雑になります。ここでは、現在時刻を
読み込み、時間、分を入力して
現在時刻+入力時:分 = 年:月:日:時:分 を求める足し算と
現在時刻−入力時:分 = 年:月:日:時:分 を求める引き算の
シーケンスを示します。
なお足し算、引き算とも閏年の補正はしていません。
1. 現在時の取込み
ラダー図1のように、ステップ0〜109はシーケンサのカレンダデバイスから、
D0〜D5格納し、元のBCD値からバイナリ値へ変換しています。
元データは D9025: 年:月 各8ビット
D9026: 日:時 各8ビット
D9027: 分:秒 各8ビット
の形で格納されているため、8ビットずつ切り分けて取り出しています。
ここで
D0:秒 D1:分 D2:時 D3:日 D4:月 D5:年 の値を格納しています。
データの取込みは、分秒の値は内部の2秒クロックで取り込んでいますが、時間以上
のデータは1分クロックで取り込んでいます。
図1
2.時間の足し算
上記のD0〜D5の暦日データと
D16: 分 D17:時間 の値との和を求め、年月日時分の繰り上がり計算
を行いD11:分 D12:時 D13:日 D14:月 D15:年 を格納しています。
年月日の補正は、可成り複雑になり、ジャンプ命令を多用していますので、注意が
必要です。
図2
時間の繰り上がり処理は、年の単位まで行っていますので、千、万の時間でも計算
出来ます。
3.時間の引き算
上記のD0〜D5の暦日データより
D16: 分 D17:時間 の値を差し引き、年月日時分の整合性をとりその
結果を D11:分 D12:時 D13:日 D14:月 D15:年 を格納しています。
年月日の補正は、足し算よりさらに複雑になり、ジャンプ命令を多用しています。
図3
分の単位で、引き算で負の値になる場合には、現在時を1時間補正し、時間の単位で
負となる場合には、現在日を補正してゆきます。同様に日、月、年の単位を補正して
行きますので、時間の単位は万の位でも問題ありません。