Twincat 编程模式
状态机
模式
| UNDEFINED | (未定义) |
| AUTOMATIC | (自动模式) |
| MAINTENANCE | (维修模式) |
| MANUAL | (手动模式) |
| SEMIAUTOMATIC | (半自动模式) |
| DRYRUN | (空运行) |
| USERMODE1 | (用户模式1) |
| USERMODE2 | (用户模式2) |
| IDLE | (空闲模式) |
| ESTOP | (急停模式) |
状态
| UNDEFINED | (未定义) |
| CLEARING | (清理中) |
| STOPPED | (已经停止) |
| STARTING | (启动中)) |
| IDLE | (空闲) |
| SUSPENDED | (已经暂停) |
| EXECUTE | (执行) |
| STOPPING | (正在停止)) |
| ABORTING | (中断中) |
| ABORTED | (已经中断) |
| HOLDING | (保持中) |
| HELD | (已经保持) |
| UNHOLDING | (释放保持) |
| SUSPENDING | (暂停中) |
| UNSUSPENDING | (释放暂停) |
| RESETTING | (复位中) |
| COMPLETING | (正在完成) |
| COMPLETE | (已经完成) |
功能块

断言语句
条件满足则进一步判断直到需要执行的动作
否则提前返回
conditionERR[1]:=FALSE;
conditionERR[2]:=FALSE;
conditionERR[3]:=FALSE;
bingo:=FALSE;
IF NOT condition[1] THEN
conditionERR[1]:=TRUE;
RETURN;
END_IF
IF NOT condition[2] THEN
conditionERR[2]:=TRUE;
RETURN;
END_IF
IF NOT condition[3] THEN
conditionERR[3]:=TRUE;
RETURN;
end_if
bingo:=TRUE;
跳步控制
申明变量
VAR
Step:UINT;
NextStep:UINT;
ton:ARRAY[0..4]OF ton;
event:ARRAY[0..4]OF BOOL;
mode:emode;
btnNextStep: BOOL;
trbtnNextStep:input;
END_VAR
程序
CASE Step OF
0:
event[0]:=TRUE;
IF ton[0].Q THEN
NextStep:=20;
event[0]:=FALSE;
END_IF
20:
event[1]:=TRUE;
IF ton[1].Q THEN
NextStep:=30;
event[1]:=FALSE;
END_IF
30:
event[2]:=TRUE;
IF ton[2].Q THEN
NextStep:=40;
event[2]:=FALSE;
END_IF
40:
event[3]:=TRUE;
IF ton[3].Q THEN
NextStep:=0;
event[3]:=FALSE;
END_IF
END_CASE
(*自动下自动跳转下一步/单步加单步按钮跳转下一步*)
IF mode=Emode.auto OR (mode=Emode.sigle AND trbtnNextStep.Q_RT)THEN
step:=NextStep;
END_IF
trbtnNextStep(
INPUT:=btnNextStep ,
Q_DIRECT=> );
ton[0](IN:=event[0] , PT:=T#1S , Q=> , ET=> );
ton[1](IN:=event[1] , PT:=T#1S , Q=> , ET=> );
ton[2](IN:=event[2] , PT:=T#1S , Q=> , ET=> );
ton[3](IN:=event[3] , PT:=T#1S , Q=> , ET=> );
PID使用
申明变量
fbCTRL_PID : ARRAY[0..2]OF FB_CTRL_PID;
tPID_PARAMS : ARRAY[0..2]OF ST_CTRL_PID_PARAMS;
实例化
fbCTRL_PID[0](
fSetpointValue:=0 ,
fActualValue:=Axis[DP_4_FangJuanZL].NcToPlc.ActPos ,
fManSyncValue:= ,
bSync:= ,
eMode:= ,
bHold:= ,
stParams:=stPID_PARAMS[0],
fOut=> ,
bARWactive=> ,
eState=> ,
eErrorId=> ,
bError=> );
stPID_PARAMS[0].fOutMaxLimit:=100;
stPID_PARAMS[0].fOutMinLimit:=-100;
stPID_PARAMS[0].fKp:=rKp;
stPID_PARAMS[0].tTn:=REAL_TO_TIME(rTn*1000);
stPID_PARAMS[0].tTaskCycleTime:=t#2ms;
stPID_PARAMS[0].tCtrlCycleTime:=t#4ms;
使用
fbMC_GearInMultiMaster.GearRatio2:=-fbCTRL_PID[0].fOut/100;
fbMC_GearInMultiMaster(
Enable:= ,
GearRatio1:=,
GearRatio2:= ,
GearRatio3:=0.0 ,
GearRatio4:=0.0 ,
Acceleration:= ,
Deceleration:= ,
Jerk:= ,
BufferMode:= ,
Options:= ,
Master1:=Axis[DP_3_XZFangJuan],
Master2:=Axis[DP_3_FangJuanPID],
Master3:=Axis[DP_3_XZFangJuan] ,
Master4:=Axis[DP_3_XZFangJuan] ,
Slave:=Axis[HMI_CanShu.DP_iDanQianLiaoJuan[3]] ,
InGear=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
凸轮使用
申明变量
~~~
fbCamV2 : ARRAY[1..11]OF MC_CamIn_V2;
fbCamOut : ARRAY[1..11]OF MC_CamOut;
fbCamTableSelect : ARRAY[1..11]OF MC_CamTableSelect;
LabelCamTable : ARRAY[1..11]OF MC_CAM_REF;
fbMC_WriteMotionFunction : ARRAY[1..11]OF MC_WriteMotionFunction;
fbSetCamOnlineChangeMode : ARRAY[1..11]OF MC_SetCamOnlineChangeMode;
LabelMF1 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF2 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF3 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF4 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF5 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF6 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF7 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF8 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF9 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF10 : ARRAY[1..10]OF MC_MotionFunctionPoint;
LabelMF11 : ARRAY[1..10]OF MC_MotionFunctionPoint;
~~~
生成凸轮曲线
(*第一条送料器曲线*)
LabelCamTable[1].TableType:=MC_TABLETYPE_MOTIONFUNCTION;
LabelCamTable[1].ArraySize:=SIZEOF(LabelMF1);
LabelCamTable[1].pArray:=ADR(LabelMF1);
LabelCamTable[1].NoOfRows:=3;
LabelCamTable[1].NoOfColumns:=1;
(*凸轮点1的位置*)
LabelMF1[1].PointIndex:=1;
LabelMF1[1].FunctionType:=iMode;
LabelMF1[1].PointType:=8;
LabelMF1[1].RelIndexNextPoint:=1;
LabelMF1[1].MasterPos:=0;
LabelMF1[1].SlavePos:=0;
LabelMF1[1].SlaveVelo:=0;
LabelMF1[1].SlaveAcc:=0;
LabelMF1[1].SlaveJerk:=0;
(*凸轮点2的位置*)
LabelMF1[2].PointIndex:=2;
LabelMF1[2].FunctionType:=iMode;
LabelMF1[2].PointType:=8;
LabelMF1[2].RelIndexNextPoint:=1;
IF NOT HMI_Fun.CP_B_bMoJuBianS THEN
LabelMF1[2].MasterPos:=240;
ELSE
LabelMF1[2].MasterPos:=220;
END_IF
IF(HMI_Ctrl.bCP_B_JieShuZhong AND HMI_Fun.CP_B_bLianJiYunXing)OR
(NOT HMI_Fun.CP_B_bLianJiYunXing AND bCP_B_JinZhiQiePian)OR
((CP_B_FenPian1ShangCJiYi.1OR
(CP_B_FenPian1ShangCJiYi.0 AND NOT CP_B_FenPianShouJiYi.7 AND NOT HMI_Fun.FP_B_bXiangJiJianCe)
OR bFP_B_JinZhiSFengPian OR
(HMI_Fun.DP_1_bLianJiYunXing AND HMI_Fun.DP_3_bLianJiYunXing))AND
Axis[CP_B_FenLiao1ShangSS].NcToPlc.ModuloSetPos>90 AND
Axis[CP_B_FenLiao1ShangSS].NcToPlc.ModuloSetPos<270AND
NOT HMI_Fun.CP_B_bLianJiYunXing)
OR
(((CP_B_FenPian2MoDuanJiYi.1 AND CP_B_FenPianHouJiYi.15) OR
(CP_B_FenPian2MoDuanJiYi.0 AND NOT CP_B_FenPianShouJiYi.8 AND NOT HMI_Fun.FP_B_bXiangJiJianCe AND CP_B_FenPianHouJiYi.15)
OR CP_B_FenPianHouJiYi.0 OR bFP_B_JinZhiXFengPian OR
(HMI_Fun.DP_2_bLianJiYunXing AND HMI_Fun.DP_4_bLianJiYunXing))AND
(Axis[CP_B_FenLiao1ShangSS].NcToPlc.ModuloSetPos<90 OR
Axis[CP_B_FenLiao1ShangSS].NcToPlc.ModuloSetPos>270)AND
NOT HMI_Fun.CP_B_bLianJiYunXing)OR
(NOT CP_B_bJiErPaiZhaoXH.0 AND
NOT HMI_Fun.CP_B_XJbJierDingWei AND HMI_Fun.CP_B_bJiGuangMoShi)
OR CP_B_ZhunBeiStpe>=110 THEN
LabelMF1[2].SlavePos:=0;
ELSE
LabelMF1[2].SlavePos:=HMI_CanShu.rAxisSlavePos2[CP_B_SongLiaoQi1];
END_IF
LabelMF1[2].SlaveVelo:=0;
LabelMF1[2].SlaveAcc:=0;
LabelMF1[2].SlaveJerk:=0;
(*凸轮点3的位置*)
LabelMF1[3].PointIndex:=3;
LabelMF1[3].FunctionType:=iMode;
LabelMF1[3].PointType:=8;
LabelMF1[3].RelIndexNextPoint:=0;
LabelMF1[3].MasterPos:=360;
LabelMF1[3].SlavePos:=LabelMF1[2].SlavePos;
LabelMF1[3].SlaveVelo:=0;
LabelMF1[3].SlaveAcc:=0;
LabelMF1[3].SlaveJerk:=0;
IF HMI_Fun.CP_B_XJbJierDingWei OR NOT HMI_Fun.CP_B_bJiGuangMoShi THEN
HMI_CanShu.rAxisSlavePos2[CP_B_SongLiaoQi1]:=HMI_CanShu.CP_B_rSongLiaoCD;
ELSE
HMI_CanShu.rAxisSlavePos2[CP_B_SongLiaoQi1]:=CP_B_rJiPianPaiZhaoBC;
END_IF
实例化 加载曲线&凸轮耦合
fbCamTableSelect[1](
Execute:= ,
Periodic:=TRUE ,
MasterAbsolute:=TRUE ,
SlaveAbsolute:=FALSE ,
CamTableID:=4 ,
Master:=Axis[CP_B_XZChongQie] ,
Slave:=Axis[CP_B_SongLiaoQi2],
CamTable:=LabelCamTable[1] ,
Done=> ,
Busy=> ,
Error=> ,
ErrorID=> );
fbCamV2[1].Scaling.MasterRelative:=TRUE;
fbCamV2[1].Scaling.SlaveRelative:=TRUE;
fbCamV2[1](
Execute:= ,
ActivationMode:= ,
ActivationPosition:= ,
CamTableID:=fbCamTableSelect[1].CamTableID ,
Scaling:= ,
Options:= ,
Master:=Axis[CP_B_XZChongQie] ,
Slave:=Axis[CP_B_SongLiaoQi2] ,
InSync=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
(*CamV2解除*)
fbCamOut[2](
Slave:=Axis[CP_B_ChongMo]);
使用
解除耦合
(*同步解除*)
fbTon[105].IN:=TRUE;
FOR t:=3 TO 17 DO
IF t<>5 AND t<>6 AND t<>7 AND t<>10 AND t<>11 AND t<>16 THEN
AxisCtrl[t].bHalt:=TRUE;
END_IF
END_FOR
AxisCtrl[CP_B_XZShiFang].bHalt:=TRUE;
IF fbAxisMotionCtrl[3].fbMC_Halt.Done AND
fbAxisMotionCtrl[4].fbMC_Halt.Done AND
(*fbAxisMotionCtrl[7].fbMC_Halt.Done AND*)
fbAxisMotionCtrl[8].fbMC_Halt.Done AND
fbAxisMotionCtrl[9].fbMC_Halt.Done AND
fbAxisMotionCtrl[12].fbMC_Halt.Done AND
fbAxisMotionCtrl[13].fbMC_Halt.Done AND
fbAxisMotionCtrl[14].fbMC_Halt.Done AND
fbAxisMotionCtrl[15].fbMC_Halt.Done AND
fbAxisMotionCtrl[17].fbMC_Halt.Done AND
fbAxisMotionCtrl[CP_B_XZShiFang].fbMC_Halt.Done AND
CP_B_FanJuanStpe<=100 THEN
FOR t:=3 TO 17 DO
IF i<>7 THEN
AxisCtrl[t].bHalt:=FALSE;
END_IF
END_FOR
fbTon[105].IN:=FALSE;
bYiChangJiShu[1]:=0;
AxisCtrl[CP_B_XZShiFang].bHalt:=FALSE;
CP_B_ZhunBeiStpe:=20;
END_IF
IF fbAxisMotionCtrl[3].fbMC_Halt.Error OR
fbAxisMotionCtrl[4].fbMC_Halt.Error OR
(*fbAxisMotionCtrl[7].fbMC_Halt.Error OR*)
fbAxisMotionCtrl[8].fbMC_Halt.Error OR
fbAxisMotionCtrl[9].fbMC_Halt.Error OR
fbAxisMotionCtrl[12].fbMC_Halt.Error OR
fbAxisMotionCtrl[13].fbMC_Halt.Error OR
fbAxisMotionCtrl[14].fbMC_Halt.Error OR
fbAxisMotionCtrl[15].fbMC_Halt.Error OR
fbAxisMotionCtrl[17].fbMC_Halt.Error OR
fbAxisMotionCtrl[CP_B_XZShiFang].fbMC_Halt.Error THEN
CP_B_ZhunBeiStpe:=999;
END_IF
IF fbTon[105].Q THEN(*解耦超时处理*)
IF bYiChangJiShu[1]<3 THEN
bYiChangJiShu[1]:=bYiChangJiShu[1]+1;
CP_B_ZhunBeiStpe:=0;
ELSE
bYiChangJiShu[1]:=0;
CP_B_ZhunBeiStpe:=999;
END_IF
END_IF
生成凸轮表
(*生成凸轮表*)
FOR i:=1 TO 10 DO
fbCamTableSelect[i].Execute:=TRUE;
IF NOT HMI_Fun.CP_B_bLianJiYunXing THEN
FPBfbCamTableSelect[i].Execute:=TRUE;
END_IF
END_FOR
IF fbCamTableSelect[1].Done AND fbCamTableSelect[2].Done AND
fbCamTableSelect[3].Done AND fbCamTableSelect[4].Done AND
fbCamTableSelect[5].Done AND fbCamTableSelect[6].Done AND
fbCamTableSelect[7].Done AND fbCamTableSelect[8].Done AND
fbCamTableSelect[9].Done AND fbCamTableSelect[10].Done AND
((FPBfbCamTableSelect[3].Done AND
FPBfbCamTableSelect[4].Done AND
FPBfbCamTableSelect[5].Done AND
FPBfbCamTableSelect[6].Done AND
FPBfbCamTableSelect[7].Done)OR HMI_Fun.CP_B_bLianJiYunXing) THEN
FOR i:=1 TO 10 DO
fbCamTableSelect[i].Execute:=FALSE;
IF NOT HMI_Fun.CP_B_bLianJiYunXing THEN
FPBfbCamTableSelect[i].Execute:=FALSE;
END_IF
END_FOR
CP_B_ZhunBeiStpe:=70;
END_IF
IF fbCamTableSelect[1].Error OR fbCamTableSelect[2].Error OR
fbCamTableSelect[3].Error OR fbCamTableSelect[4].Error OR
fbCamTableSelect[5].Error OR fbCamTableSelect[6].Error OR
fbCamTableSelect[7].Error OR fbCamTableSelect[8].Error OR
fbCamTableSelect[9].Error OR fbCamTableSelect[10].Error OR
((FPBfbCamTableSelect[1].Error OR
FPBfbCamTableSelect[2].Error OR
FPBfbCamTableSelect[3].Error OR
FPBfbCamTableSelect[4].Error OR
FPBfbCamTableSelect[5].Error OR
FPBfbCamTableSelect[6].Error OR
FPBfbCamTableSelect[7].Error)AND HMI_Fun.CP_B_bLianJiYunXing ) THEN
CP_B_ZhunBeiStpe:=999;
END_IF
耦合凸轮
(*电机耦合*)
FOR i:=1 TO 10 DO
(*fbGearInDy[1].Enable:=TRUE;*)
IF NOT HMI_Fun.CP_B_bJiGuangMoShi THEN
fbCamV2[i].Execute:=TRUE;
ELSE
IF i<>2 THEN
fbCamV2[i].Execute:=TRUE;
END_IF
END_IF
IF NOT HMI_Fun.CP_B_bLianJiYunXing THEN
IF i=1OR (i=2 AND NOT HMI_Fun.CP_B_bDangJiaShangLiao)THEN
FPBfbGearInDy[i].Enable:=TRUE;
END_IF
IF i<>1AND i<>2 THEN
FPBfbCamV2[i].Execute:=TRUE;
END_IF
END_IF
END_FOR
IF fbCamV2[1].InSync AND(fbCamV2[2].InSync OR
HMI_Fun.CP_B_bJiGuangMoShi)AND
fbCamV2[3].InSync AND fbCamV2[4].InSync AND
fbCamV2[5].InSync AND fbCamV2[6].InSync AND
fbCamV2[7].InSync AND fbCamV2[8].InSync AND
fbCamV2[9].InSync AND fbCamV2[10].InSync (*AND
fbGearInDy[1].InGear *)AND
((FPBfbCamV2[3].InSync AND FPBfbCamV2[4].InSync AND
FPBfbCamV2[5].InSync AND FPBfbCamV2[6].InSync AND
FPBfbCamV2[7].InSync AND FPBfbGearInDy[1].InGear AND
(FPBfbGearInDy[2].InGear OR HMI_Fun.CP_B_bDangJiaShangLiao))OR HMI_Fun.CP_B_bLianJiYunXing)THEN
FOR i:=1 TO 10 DO
fbCamV2[i].Execute:=FALSE;
IF i<>1 THEN
fbGearInDy[i].Enable:=FALSE;
END_IF
IF NOT HMI_Fun.CP_B_bLianJiYunXing THEN
FPBfbCamV2[i].Execute:=FALSE;
FPBfbGearInDy[i].Enable:=FALSE;
END_IF
END_FOR
CP_B_ZhunBeiStpe:=80;
END_IF
IF fbCamV2[1].Error OR fbCamV2[2].Error OR
fbCamV2[3].Error OR fbCamV2[4].Error OR
fbCamV2[5].Error OR fbCamV2[6].Error OR
fbCamV2[7].Error OR fbCamV2[8].Error OR
fbCamV2[9].Error OR fbCamV2[10].Error OR
(*fbGearInDy[1].Error OR*) fbGearInDy[2].Error OR
fbGearInDy[3].Error OR fbGearInDy[4].Error OR
((FPBfbCamV2[1].Error OR FPBfbCamV2[2].Error OR FPBfbCamV2[3].Error OR
FPBfbCamV2[4].Error OR FPBfbCamV2[5].Error OR FPBfbCamV2[6].Error OR
FPBfbCamV2[7].Error OR FPBfbGearInDy[1].Error OR FPBfbGearInDy[2].Error OR
FPBfbGearInDy[3].Error)AND NOT HMI_Fun.CP_B_bLianJiYunXing) THEN
CP_B_ZhunBeiStpe:=999;
END_IF
启动主轴
(*冲片B运行启动*)
AxisCtrl[CP_B_XZChongQie].rVelo:=360*HMI_CanShu.CP_B_rSongLiaoPPM/60;
AxisCtrl[CP_B_XZChongQie].bMoveVelo:=TRUE;
IF Axis[CP_B_XZChongQie].Status.Moving THEN
CP_B_ZhunBeiStpe:=100;
END_IF
IF fbAxisMotionCtrl[CP_B_XZChongQie].fbMC_MoveVelocity.Error OR CP_X1100Err[2] OR
fbAxisMotionCtrl[CP_B_XZChongQie].fbMC_MoveVelocity.CommandAborted THEN
CP_B_ZhunBeiStpe:=999;
END_IF
扭矩控制
FB功能块
FB变量
FUNCTION_BLOCK Fb_Torque
VAR_INPUT
bStart:BOOL;(* 走扭矩触发 *)
bStop:BOOL;(* 停轴信号 *)
TargetTorueSet:INT;(* 目标扭矩 *)
iModeCnst :SINT;(* 选择走扭矩模式 =9 =10 *)
iCurTorque:INT;(*当前反馈扭矩 *)
iCurMode:SINT;(* 当前反馈轴模式=8 正常 =9 or10 走扭矩 *)
iKeepTime:DWORD;(* 扭矩保持时间 *)
iTimeOut_ms:DWORD;(* 走扭矩超时时间 *)
END_VAR
VAR_IN_OUT
Axis : AXIS_REF;
iModeChange:SINT;(* 切换扭矩模式 *)
END_VAR
VAR_OUTPUT
done:BOOL;(*完成*)
error:BOOL;(* 报警 *)
eRRorId:WORD;(* 1轴错误 2走扭矩超时 3 : 轴停止 *)
busy:BOOL;
END_VAR
VAR
fbMC_Reset: MC_Reset;
iStep:INT ;
tTimeOut:TON;
tKeep:TON;
rtStart:R_TRIG;
bStopFlag: BOOL;
END_VAR
FB程序
fbMC_Reset(
Execute:= ,
Axis:=Axis ,
Done=> ,
Busy=> ,
Error=> ,
ErrorID=> );
rtStart(CLK:= bStart, Q=> );
tTimeOut(IN:= , PT:=DWORD_TO_TIME(iTimeOut_ms) , Q=> , ET=> );
tKeep(IN:= , PT:=DWORD_TO_TIME(iKeepTime) , Q=> , ET=> );
IF iStep=10 AND NOT bStop THEN
iModeChange := iModeCnst;
ELSE
iModeChange := 8;
END_IF
IF bStop THEN
fbMC_Reset.Execute := FALSE;
tTimeOut.IN := FALSE;
tKeep.IN := FALSE;
busy := FALSE ;
bStopFlag:= FALSE ;
done := FALSE;
error := TRUE;
iStep:=0;
END_IF
CASE iStep OF
0:(* 上升沿 触发 *)
fbMC_Reset.Execute := FALSE;
tTimeOut.IN := FALSE;
tKeep.IN := FALSE;
busy := FALSE ;
bStopFlag:= FALSE ;
error := FALSE;
done := FALSE;
IF rtStart.Q THEN
iStep:=10;
busy := TRUE ;
error := FALSE;
done := FALSE;
eRRorId := 0;
END_IF
10:(* 走扭矩 *)
tTimeOut.IN := TRUE ;
IF iCurMode =iModeCnst
(* AND AXIS.Status.NotMoving *)
AND iCurTorque
>=TargetTorueSet THEN
tKeep.IN :=TRUE;
IF tKeep.Q THEN
fbMC_Reset.Execute := TRUE;
END_IF
END_IF
IF fbMC_Reset.Done THEN
fbMC_Reset.Execute := FALSE;
iStep:=20;
END_IF
IF bStop THEN
bStopFlag:= TRUE;
eRRorId := 3 ;
END_IF
IF bStopFlag
OR tTimeOut.Q THEN
IF tTimeOut.Q THEN
eRRorId := 2 ;
END_IF
fbMC_Reset.Execute := TRUE;
IF fbMC_Reset.Done THEN
fbMC_Reset.Execute := FALSE;
iStep:=999;
END_IF
END_IF
20:
IF iCurMode=8 THEN
iStep:=30;
END_IF
30:
done := TRUE;
busy := FALSE ;
error := FALSE;
iStep:=0;
999:
fbMC_Reset.Execute := FALSE ;
error := TRUE;
iStep:=0;
END_CASE
申明变量
fbZpTorque:Fb_Torque;
实例化
fbZpTorque(
bStart:= ,(* 走扭矩开始 *)
bStop:= MovStop OR di_Emergy , (* 异常停扭矩停马达 *)
TargetTorueSet:=Hmi_TorqueSet[M20HanHou_CeShi1] ,(* 当前扭矩设定 *)
iModeCnst:=10 ,(* 扭矩模式值 OMRON 9 埃斯顿10 *)
iCurTorque:=Hmi_CurTorque[M20HanHou_CeShi1] ,(* 反馈回当前扭矩 *)
iCurMode:=Hmi_ModeDisplay[M20HanHou_CeShi1] ,(* 反馈当前操作模式 *)
iKeepTime:=200 ,(* 保压时间 *)
iTimeOut_ms:=5000 ,(* 走扭矩超时时间 *)
Axis:=Axis[M20HanHou_CeShi1] ,(* 轴名称 *)
iModeChange:=Hmi_TorqueModeSet[M20HanHou_CeShi1] ,(* 设定扭矩模式 *)
done=> ,(* 扭矩完成 *)
error=> ,(* 扭矩报错 *)
eRRorId=> ,(* 扭矩报错代码 *)
busy=> );(* 功能块运行中 *)
(*测试程序 *)
fbZpTorque.eRRorId;
使用
fbZpTorque.bStart := TRUE ;
IF fbZpTorque.done
OR fbZpTorque.error OR
di_Emergy OR
MovStop THEN
iTest := 0;
fbZpTorque.bStart := FALSE ;
Res(bTst);
END_IF


浙公网安备 33010602011771号