問題タブ [codesys]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
plc - すべての計算の後にアキュムレータ拡張の警告が表示されるのはなぜですか?
コンクリートを混合するために必要な材料の温度をチェックするプログラムを書いています。次に、目的のコンクリート温度に到達するために必要な水温を決定する式を実行します。数式に関するすべての正しい情報があるので、それは問題ではありませんが、プログラムをコンパイルすると、数学ステートメントの後に複数のアキュムレータ拡張に関する警告が表示されます。実行中の数が大きくなりすぎていると考えて数学を分割しようとしましたが、まだこの警告があるため、そうではありません。プログラムを実行すると、80 度の範囲で何かが得られると期待すると、非常に大きな正または負の結果が得られる可能性があります。最初の式は寒い天候用で、2 番目の式は暑い条件用です。ホット方程式を追加する前は、コールド方程式は正常に機能していました。
私の質問は次のとおりです。アキュムレータ拡張とは何ですか?また、計算後に警告が表示されるのはなぜですか?
これが私のコードです:
plc - わずか 49 日後に Codesys SYS_TIME オーバーフローを処理するにはどうすればよいですか?
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 がゼロにリセットされると仮定すると、プログラマーは、最後の既知のイベント時間を記録するために使用している変数をリセットするなどして、これに対処できます。
別のアプローチを提供する、見逃したものがあることを願っています。
しかし、これは、これを考えもしなかった PLC プログラマーをつまずかせる可能性のある落とし穴であり、フィールドで 49 日間使用した後に広範囲にテストされた、明らかに完全に機能する PLC プログラムが失敗する可能性があります。
LWORD を返す SYS_TIME の代替があれば、非常に役に立ちます。これは、50 億年間中断されないサービスに適しています :-)
注意 - この機能は、標準の Codesys 機能ではなく、ABB AC500 シリーズの PLC に固有のものである可能性があるため、この質問は主に ABB および ABB PLC プログラマーを対象としています。
initialization - FB_init メソッドを明示的に定義した __NEW を使用してファンクション ブロックを初期化する
たとえば、FB_init メソッドを定義した関数ブロック (A) があるとします。
そして、この (A) FB を動的に初期化したい別の関数ブロック (B) があります。
A 機能ブロックのインスタンスを動的に作成できません。これは可能ですか、それとも何か間違っていますか?
PS。Schneider SoMachine V4.3 を使用しています
exception - CODESYS で例外をスローする
標準のシステム例外をスローするにはどうすればよいですか (可能であれば、カスタム例外を作成してスローします)。
頭に浮かぶ最も簡単なことは、変数をゼロで除算することですが、それはせいぜい単なるハックです。
ライブラリで関数の言及を見つけAppGenerateException
ましたCmpApp
が、それに関するドキュメントも例も見つかりません。誰かがこれに関するドキュメントを教えてもらえますか?