LoginSignup
0
0

CODESYS アラームのLATCH変数

Last updated at Posted at 2024-04-28

CODESYSで、仮想のサーボを使ったCNCを作っています。

仮想サーボで遊べるコード(プロジェクト)は公開予定です。
CODESYSの学習が(かなり)出来ると思います。必要な方いたらお知らせください。

image.png

image.png

EtherCATのサーボをつないで動かせたらな、と思っていますが、サーボモータや機械がないので、実用になるのかわっぱり分かりません。

CODESYSのアラームとLATCH変数

CODESYSのアラームで、CNC関連の全アラームメッセージを登録するのは面倒なので、必要に応じてLATCH変数にエラーメッセージを入れて処理をするようにしました。

image.png

LATCH変数を使うとおかしな異常が時々発生

ところが、時々、アラームメッセージが1文字しか表示されなかったりします。
そのエラーメッセージの変数をVISUで表示させると、ちゃんと表示されます。

調査 -- 原因は SMC_ErrorString

どういうケースでおかしくなるか、調べてみました。
・アラームのCLASSかな? CLASSは関係なかった。
・アラームの文字に変な文字がはいっていた? 問題なかった。

トレースしてみたら、SMC_ErrorStringで取ってきて表示させている箇所が問題ありそうでした。
エラーコードだけにしてみたら問題ありません。

しかし、エラー表示には、SMC_ErrorString使いたくなるのが、義理人情ってものではないでしょうか!

対応方法

とりあえず、文字列ではなく、エラーコードだけを表示するようにしたら、うまくいきました。

CNC関連のアラームは、EtherCATのリアルタイムタスク内で発生処理(フラグやメッセージのセット)をしているからかもしれません。SMC_ErrorStringは別のタスクで処理されるのかもしれません。(時間がかかるためか?)

異常発生のメカニズムはちょっとよくわからないので、他の方法もあるかな、とは思いますが、アラームとLATCH変数の挙動で悩んでいる方の参考になりましたら幸いです。

追記

EtherCATのリアルタイムスレッド以外でも、SMC_ErrorStringをLATCH変数で使ったらおかしくなりました。LATCH変数で使うとおかしくなるので、原因の文字列を含むものをALARM HISTORYで、という考えは上手くいかないようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0