1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

日記;回すだけ ⑪ST言語でモータを回す記述<その3>

Last updated at Posted at 2021-08-18

 前回、Motionライブラリのファンクションブロックの中から、電源ON、絶対位置の設定、位置の読み取りの三つを、MAINエリアに記述しました。
 フィールドバスのEtherCATの規格上、数msに1回、MAINは実行されます。このシステムでは、2msの周期です。電源ONと位置の読み取りは、なにも問題は起こらないと思います。
 「絶対位置の設定」では、速度と加速度だけを実行するように記述をしているので、位置の指定であるPositionを別途指定します。その値は、Din0とDin1のスイッチの入力と、結果を示すDout0のLEDとともに指定します。

ディジタル入力部分のプログラム

 IF NOT Din0 THENを入れてリターンを押すと、自動宣言の画面が出ます。型はBOOL、初期値は負論理なので1を入れます。
t301.png
 つづけて

    Position_Move.Position := 2;
    Position_Move.Execute := TRUE;		
    Dout0 := 1;	

まで入力すると、Dout0の自動宣言が出ます。型はBOOL、初期値は0を入れます。
t302.png

ELSIF Din1 THEN

まで入力すると、Din1の自動宣言が出ます。型はBOOL、初期値は0を入れます。
t303.png

 残りを全部入れます。

    // Position_Move.Execute := FALSE;
    Position_Move.Position := -2;
    Position_Move.Execute := TRUE;		
    Dout0 := 1;
ELSE
    Dout0 := 0;
    Position_Move.Execute := FALSE;

 追加した部分です。
t304.png
 これらの追加によって、先頭部分の宣言のところに3行追加されています。
t305.png
 これを次のように、ハードとのリンクを張るために、修正します。

	Din1 AT %I*: BOOL := 1;
	Din0 AT %I*: BOOL := 0;
	Dout0 AT %Q*: BOOL := 0;

 すべて保存し、ビルドします。

リンクを張る

 ディジタル入力のChannel1を右クリックして、リンクの変更を選択します。
t306.png

 アタッチの画面が出るので、MAINの中のDin1変数を選択します。
t307.png

 ディジタル入力のChannel2を右クリックして、同様にDin0変数を選択します。
t308.png

  ディジタル出力のChannel1を右クリックして、同様にDout0変数を選択します。
 アタッチは、一度ビルドしておくと表示されます。
t309.png

 すべて保存します。
 メニューのビルドから、untiled1のクリーン、untiled1のリビルド、ソリューションのクリーン、ソリューションのリビルドを行います。構成の有効化をクリックし、AX1をダブルクリックします。
 中央にはMAINと TwinCAT3 ProjectXXのタブができます。MAINのタブの上で右クリックし、垂直タブグループの新規作成をクリックすると、MAINのソースとAX1の機能ページが出るので、オンラインをクリックします。
 中央にプログラムのソース、右側に、モータを動かす操作画面が同時に出ます。デバッグ時にとても便利な状態です。構成の有効化を押すと、操作画面が消えることがあるので、その場合は、同じ操作をして、画面を出しなおします。
t310.png

 この時点でエラーに4650が出ていることがあります。Drive hardware not ready to operate;は、

: ドライブがエラー状態 (ハードウェア エラー)

  • ドライブが起動フェーズ (たとえば、ハードウェア エラーが発生した軸リセット後)
  • ドライブがコントローライネーブル (ENABLE)
    を使用できません。

です。

電源が入っていないときのエラーは4466 Invalid IO data for more than n subsequent NC cycles (encoder)です。

 軸 (エンコーダ) が検出された以降のサイクル (タスク) 以上の無効なエンコーダー データ (例えば)。通常、EtherCAT メンバーに関しては、デバイスとコントローラ間のデータ転送が妨害される、動作カウンタ エラー(WcState)に関するものです。nNCNCSAFIOn=3IO
このエラーが連続的に長い期間設定されている場合、この状況は軸参照を失う可能性があります ("homed" フラグはリセットされ、エンコーダーは「参照されていない」状態になります)。
このエラーの原因として考えられる理由: EtherCAT スレーブが状態を離れたか、リアルタイムの使用が高すぎるか、リアルタイムジッターが高すぎる可能性があります。

最終プログラム

PROGRAM MAIN
VAR
	Power_On: MC_Power;
	AX1: AXIS_REF;
	Position_Move: MC_MoveAbsolute;
	Read_Position: MC_ReadActualPosition;
	Sposition: STRING;
	Din1 AT %I*: BOOL := 1; // jiki
	Din0 AT %I*: BOOL := 0; // hikari
	Dout0 AT %Q*: BOOL := 0; // LED
END_VAR

Power_On(
	Axis:= AX1, 
	Enable:= TRUE, 
	Enable_Positive:= TRUE, 
	Enable_Negative:= TRUE, 
	Override:= 99, 
	BufferMode:= , 
	Options:= , 
	Status=> , 
	Busy=> , 
	Active=> , 
	Error=> , 
	ErrorID=> );

Position_Move(
	Axis:= AX1, 
	Execute:= , 
	Position:= , 
	Velocity:= 25, 
	Acceleration:= 20, 
	Deceleration:= , 
	Jerk:= , 
	BufferMode:= , 
	Options:= , 
	Done=> , 
	Busy=> , 
	Active=> , 
	CommandAborted=> , 
	Error=> , 
	ErrorID=> );
	
Read_Position(
	Axis:= AX1, 
	Enable:= TRUE, 
	Valid=> , 
	Busy=> , 
	Error=> , 
	ErrorID=> , 
	Position=> );	
	
Sposition := LREAL_TO_STRING(Read_Position.Position);

// hikari
IF Din0 THEN
    Position_Move.Position := 2;
    Position_Move.Execute := TRUE;		
    Dout0 := 1;
// jiki	
ELSIF NOT Din1 THEN
    Position_Move.Position := -2;
    Position_Move.Execute := TRUE;		
    Dout0 := 1;
ELSE
    Dout0 := 0;
    Position_Move.Execute := FALSE;
END_IF

 構成の有効化をクリックしたら、エラー4650が出る場合があります。ビルドで、クリーン、リビルド、構成の有効化を実行したり、すべてを保存、終了、再度TwinCAT3の起動したりすると、エラーがなくなることもあります。このあたりは、他社のモータコントローラを使っていることも影響があるのかもしれません。

 うまく動作するときに設定内容です。オンライン画面で、位置(大きな文字で表示)が0付近から大きく外れていると、エラーになりやすいです。手で軸を回して0に近づけます。
 エンコーダのパラメータです。
スクリーンショット 2021-08-18 11.17.30.png

 AX1のパラメータです。
スクリーンショット 2021-08-18 11.20.56.png

 実行中の様子です。
スクリーンショット 2021-08-18 11.33.53.png

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?