MX-Fはこの設定によって、SDOで取得しようとします。FATEK SC3 Series SingleはSiUnitPosとSiUnitVelに対応しませんので、2つの設定を定数にする必要があります。
SiUnitPos:ドライブユニットのSI単位での位置を取得します。
SiUnitVel :ドライブユニットの SI 単位での速度を取得します。
三菱マニュアルの定義は以下で、定数を設定することができます。
三菱マニュアルの定義は以下で、定数を設定することができます。
OKで設定を保存することができます。
EncoderStatus1/HomeAbsCounter/HomeCycleCounter/InitAbsCounter/InitialCycleCounter/InitialPos/MaxAbsCounterがFATEK SC3 Series Single対応しませんので、空欄にしてください。
SupportControlDi/SupportControlDoがFATEK SC3 Series Single対応しませんので、空欄にしてください。
EncoderStatus2/ScaleCycleCounter/ScaleAbsCounterなどがFATEK SC3 Series Single対応しませんので、空欄にしてください。
こちらは設定のまとめになります。
SiUnitPos [CONST]0xFA010000
SiUnitVel [CONST]0x00000300
ControlDi1~7 空欄
StatusDo1~7 空欄
SupportedControlDi1~7 空欄
SupportedStatusDo1~7 空欄
EncoderStatus1 / 2 空欄
VelLimitValue 空欄
ScaleCycleCounter 空欄
ScaleAbsCounter 空欄
ScaleMeasurementEncoderResolution 空欄
ScaleMeasurementEncoderReceptionStatus 空欄
PositiveTorqueLimitValue 0x60E0 非対応なら空欄
NegativeTorqueLimitValue 0x60E1 非対応なら空欄
Absolute Position Control Setting
次はBasic Parameter→Absolute Position Control Settingを開きます。
Position Controlを1にします。
Position command unit
Position Command Unitをmmに設定します。
Drive unit Conversion Numerator
131072 Pulseを設定します。
Drive unit Conversion Denominator
Drive unit Conversion Denominatorを6mmに設定します。
Homing
Homing Required を0に設定します。
Start Permission at Homing Uncompleted
Start Permission at Homing Uncompleted設定を1にします。
Save保存
最後はApplyボタンで設定を保存します。
プログラム
次はプログラムを作成します。
dutServoCmd
fbAxisBasic FBにコマンドを発行するための構造体です。
dutServoMon
fbAxisBasic FBから情報を取得するための構造体です。
dutServo
こちらはdutServoCmdとdutServoMonをまとめた構造体です。
fc_Scale
スケーリングの関数を作成します。
ラベル
プログラム
fc_Scale:=((rRawInput-rRawMin)/rRawMax-rRawMin)*(rEngMax-rEngMin)+rEngMin;
IF fc_Scale <0.0 THEN
fc_Scale:=0.0;
END_IF;
;
fbAxisBasic
軸を制御するFBを作成します。
ラベル
こちらはfbAxisBasic FBで定義したラベルになります。
プログラム
こちらはfbAxisBasicのプログラムです。
xEnable:=ixEnable ;
xJogFWEnable:=xEnable
// AND NOT fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT iodutServo.Command.xServoJogBW
AND NOT fbMC_SetPosition.Busy
;
xJogBWEnable:=xEnable
//AND NOT fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT iodutServo.Command.xServoJogFW
AND NOT fbMC_SetPosition.Busy
;
xHomEnable:=xEnable
AND NOT fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT fbMC_SetPosition.Busy
;
xSetPosEnable:=xEnable
AND NOT fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT fbMC_Home.Busy
;
xMoveAbsEnable:=xEnable
AND NOT fbMC_Jog.Busy
// AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT fbMC_SetPosition.Busy
;
xMoveRelEnable:=xEnable
AND NOT fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy
// AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT fbMC_SetPosition.Busy
;
xMoveVelEnable:=xEnable
AND NOT fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy
// AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy AND iodutServo.Monitor.xReadyStatus
AND NOT iodutAxis_REF.Md.Error
AND NOT fbMC_SetPosition.Busy
;
oxAbsDone:=iodutServo.Monitor.xMoveAbsDone;
oxError:=iodutServo.Monitor.xError;
oxWarning:=iodutServo.Monitor.xWarning;
oxMotionBusy:= fbMC_Jog.Busy AND NOT fbMC_MoveAbsolute.Busy AND NOT fbMC_MoveRelative.Busy AND NOT fbMC_MoveVelocity.Busy AND NOT fbMC_Home.Busy
;
oxServoisReady:=iodutServo.Monitor.xPowerStatus;
orCurrentPosition:=iodutServo.Monitor.rActualPos;
owErrorID:=iodutServo.Monitor.wErrorID;
owWarningID:=iodutServo.Monitor.wWarningID;