CODESYSで、仮想のサーボを使ったCNCを作っています。
仮想サーボで遊べるコード(プロジェクト)は公開予定です。
CODESYSの学習が(かなり)出来ると思います。必要な方いたらお知らせください。
EtherCATのサーボをつないで動かせたらな、と思っていますが、サーボモータや機械がないので、実用になるのかわっぱり分かりません。
CODESYSのアラームとLATCH変数
CODESYSのアラームで、CNC関連の全アラームメッセージを登録するのは面倒なので、必要に応じてLATCH変数にエラーメッセージを入れて処理をするようにしました。
LATCH変数を使うとおかしな異常が時々発生
ところが、時々、アラームメッセージが1文字しか表示されなかったりします。
そのエラーメッセージの変数をVISUで表示させると、ちゃんと表示されます。
調査 -- 原因は SMC_ErrorString
どういうケースでおかしくなるか、調べてみました。
・アラームのCLASSかな? CLASSは関係なかった。
・アラームの文字に変な文字がはいっていた? 問題なかった。
トレースしてみたら、SMC_ErrorStringで取ってきて表示させている箇所が問題ありそうでした。
エラーコードだけにしてみたら問題ありません。
しかし、エラー表示には、SMC_ErrorString使いたくなるのが、義理人情ってものではないでしょうか!
対応方法
とりあえず、文字列ではなく、エラーコードだけを表示するようにしたら、うまくいきました。
CNC関連のアラームは、EtherCATのリアルタイムタスク内で発生処理(フラグやメッセージのセット)をしているからかもしれません。SMC_ErrorStringは別のタスクで処理されるのかもしれません。(時間がかかるためか?)
異常発生のメカニズムはちょっとよくわからないので、他の方法もあるかな、とは思いますが、アラームとLATCH変数の挙動で悩んでいる方の参考になりましたら幸いです。
追記
EtherCATのリアルタイムスレッド以外でも、SMC_ErrorStringをLATCH変数で使ったらおかしくなりました。LATCH変数で使うとおかしくなるので、原因の文字列を含むものをALARM HISTORYで、という考えは上手くいかないようです。