0

ABB PLC / codesys プログラミングのSYS_TIME関数は、PLC がオンになってからのミリ秒数を示す DWORD を返します。(または、おそらくハードリセット/その他のイベント?これに関するドキュメントが見つかりません。)

Codesys の DWORD の最大サイズは 2 32 -1 = 4,294,967,295 です。

これは、わずか 49.7 日後に SYS_TIME がオーバーフローすることを意味します。

49.7 日が経過した後に SYS_TIME 関数が返す内容を正確に確認できる人はいますか? 整数がオーバーフローし、ゼロからカウントを再開しますか?

これは、何らかのイベントが発生してからの経過時間を警告するなどの機能に SYS_TIME を使用する場合に重要な影響を及ぼします。(例:modbus 経由のリモート デバイスの読み取り)。

これが単なる整数オーバーフローであり、SYS_TIME がゼロにリセットされると仮定すると、プログラマーは、最後の既知のイベント時間を記録するために使用している変数をリセットするなどして、これに対処できます。

(* Assuming now, last_event_time are suitably declared DWORDs *)
now := SYS_TIME(TRUE);
IF last_event_time > now THEN
    last_event_time := 0;
END_IF
(* continue, performing check of how long since last event occurred etc.... *)

別のアプローチを提供する、見逃したものがあることを願っています。

しかし、これは、これを考えもしなかった PLC プログラマーをつまずかせる可能性のある落とし穴であり、フィールドで 49 日間使用した後に広範囲にテストされた、明らかに完全に機能する PLC プログラムが失敗する可能性があります。

LWORD を返す SYS_TIME の代替があれば、非常に役に立ちます。これは、50 億年間中断されないサービスに適しています :-)

注意 - この機能は、標準の Codesys 機能ではなく、ABB AC500 シリーズの PLC に固有のものである可能性があるため、この質問は主に ABB および ABB PLC プログラマーを対象としています。

4

2 に答える 2