苏州实操派科技有限公司官网-实操派教育科技,汇川技术PLC培训,实操派PLC培训,苏州PLC培训机构

用方法写得轴控

[复制链接]
11 215

附件下载,需登录可以查看贴内更多信息

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.png

bAuto:=(Mode=1);
bManual:=( Mode=3 OR Mode=4 OR Mode=5);
OperationAbs();
OperationHome();
OPerationJog();
OperationPower();
OperationRel();
OperationReset();
OperationSetPos();
OperationStop();
PostionSaveEroor();
ReadEtherCat();
ReadStatus();

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        绝对定位        ********************************************)
IF Operation.bAlarmReset OR  Reset THEN
        Status.SoftLimitError:=FALSE;
END_IF;

FOR k:=0 TO MAX_POS BY 1 DO
        
        //判断参数是否在范围;
        IF        Parameter.AxisAbsPos[k]        < Parameter.rSoftLimitMin  AND Status.bHomed
                THEN
                fbPop_Up.Clk                                := TRUE ;
                Status.SoftLimitError:=TRUE;
                Show.MesgBox:=WCONCAT(STR1:=AxisName, STR2:=&quot;轴Abs定位坐标设置超出软下限位报警&quot;);
        ELSIF
                Parameter.AxisAbsPos[k]        >  Parameter.rSoftLimitMax AND Status.bHomed
                THEN
                fbPop_Up.Clk                                := TRUE ;
                Status.SoftLimitError:=TRUE;
                Show.MesgBox:=WCONCAT(STR1:=AxisName, STR2:=&quot;轴Abs定位坐标设置超出软上限位报警&quot;);
        END_IF;        
        //自动定位触发:
        IF TRUE
                AND (bAuto OR Mode=2)
                AND NOT Status.bError                                                                        //报错汇总
                AND  NOT E_Stop                                                                           //急停
                AND Status.bPowerOn                                                             //轴使能OK
                AND Status.bHomed                          //回原完成   
                AND NOT Status.bAxisBusy                                               //轴忙
                AND NOT Status.SoftLimitError                       //软极限报错
                AND Operation.bABSMovcondition[K]                        //轴移动允许
                AND Operation.bABSAutoTrig[K]                                        //轴自动触发
                THEN
                MC_MoveAbsolute_Instance.Velocity                :=REAL_TO_LREAL( Parameter.AxisAbsVel[K]);          //写入定位的速度;
            MC_MoveAbsolute_Instance.Position                := REAL_TO_LREAL(Parameter.AxisAbsPos[k]);     //写入定位的坐标;
                bMoveAbs                         := TRUE;                         //触发功能块执行;
                bAbsCycle                         := TRUE;
        ELSIF
        //手动定位触发:        
            TRUE
                AND bManual
                AND NOT Status.bError                                                                        //报错汇总
                AND  NOT E_Stop                                                                           //急停
                AND Status.bPowerOn                                                             //轴使能OK
                AND Status.bHomed                                 //回原完成   
                AND NOT Status.bAxisBusy                                               //轴忙
                AND NOT Status.SoftLimitError                       //软极限报错
                AND Operation.bABSMovcondition[K]                        //轴移动允许
                AND Operation.bABSManualTrig[K]                                //轴手动触发
                THEN
            MC_MoveAbsolute_Instance.Velocity                := REAL_TO_LREAL(Parameter.rManualVel);          //写入定位的速度;
            MC_MoveAbsolute_Instance.Position                :=REAL_TO_LREAL( Parameter.AxisAbsPos[k]);     //写入定位的坐标;
                bMoveAbs                         := TRUE;                         //触发功能块执行;
                bAbsCycle                         := TRUE;
        ELSIF
        //手动定位触发:        
       TRUE
                AND  bManual
                AND NOT Status.bError                                                                        //报错汇总
                AND  NOT E_Stop                                                                           //急停
                AND Status.bPowerOn                                                             //轴使能OK
                AND Status.bHomed                          //回原完成   
                AND NOT Status.bAxisBusy                                               //轴忙
                AND NOT Status.SoftLimitError                       //软极限报错
                AND NOT Operation.bABSMovcondition[K]                        //轴移动允许
                AND Operation.bABSManualTrig[K]                                //轴手动触发
                THEN
                fbPop_Up.Clk                        := TRUE ;
        Show.MesgBox:=WCONCAT(STR1:=AxisName, STR2:=&quot;轴移动条件不满足&quot;);
        ELSE        
                        IF         bAbsCycle = FALSE THEN
                                bMoveAbs:= FALSE;        
                        END_IF;               
        END_IF;
        IF  Operation.bAlarmReset OR  Reset  THEN
                  Operation.bABSManualTrig[K]:=FALSE;
                          Operation.bABSAutoTrig[K]:=FALSE;
                          Operation.bHome_HMI:=FALSE;
                          Operation.bHome_INIT:=FALSE;
                          Operation.bRELManualTrig:=FALSE;
                          Operation.bRELAutoTrig:=FALSE;
                          Operation.bSetPosAutoTrig:=FALSE;
                          Operation.bSetPosManualTrig:=FALSE;
        END_IF;
//(---------------------------------------------------------------------------------------------------------------------------------------------------------)               
(********************************************         Abs功能块用        ********************************************)
MC_MoveAbsolute_Instance(Axis:=Axis_REF^,
                                                Execute:=bMoveAbs,
                                                Acceleration:=REAL_TO_LREAL(Parameter.rAcceleration),
                                                Deceleration:=REAL_TO_LREAL(Parameter.rDeceleration)                                                                                 
                                                                                                   );

(********************************************         Abs定位完成                ********************************************)

IF TRUE THEN
        
        IF TRUE
                AND Status.bHomed  
                AND NOT Status.bAxisBusy                        
                AND ABS ( Status.rActPos - Parameter.AxisAbsPos[K]) <arameter.rInPositionRange                                                        //判断波动范围        
                THEN
                Status.PostionDone[K]                := TRUE ;
        ELSE
                Status.PostionDone[K]                        := FALSE ;
        END_IF;
        
END_IF;
(********************************************         Abs定位示教                ********************************************)
IF TRUE
                AND Status.bHomed  
                AND NOT Status.bAxisBusy
                AND NOT Status.SoftLimitError
                AND Operation.ABSTeach[K]
                THEN
                Parameter.AxisAbsPos[K]:=Status.rActPos ;
END_IF;        
END_FOR;

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        轴回原        ********************************************)
HomeExecute:=(Operation.bHome_HMI OR Operation.bHome_INIT) AND Operation.bHomeMovcondition AND NOT Status.bHoming AND NOT Status.bAxisBusy AND Status.bPowerOn;
//
MC_Home_Instance(Axis:= Axis_REF^     ,
                 Execute:=HomeExecute
                                                                      );
MC_Hom_P(CLK:=MC_Home_Instance.Done);
IF MC_Hom_P.Q  AND ( Axis_REF^.In.wStatusWord.15 OR  Simulate = 1)  THEN
        Status.bHomed:=TRUE;
END_IF;

IF  MC_Home_Instance.Error OR  MC_Home_Instance.CommandAborted OR  (NOT Axis_REF^.In.wStatusWord.15 AND Simulate = 0 )  THEN
        Status.bHomed:=FALSE;
END_IF;

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        轴点动        ********************************************)

IF bManual  THEN
        MC_MoveJog_Instance.Velocity:=REAL_TO_LREAL(Parameter.rManualVel);
END_IF;
IF bAuto THEN
        MC_MoveJog_Instance.Velocity:=REAL_TO_LREAL(Parameter.rManualVel*10.0);
END_IF;

MC_MoveJog_Instance(Axis:=Axis_REF^  ,
                        JogForward:=Operation.bJOGMovcondition[0] AND NOT Status.bAxisBusy AND Status.bPowerOn AND( ((Operation.bJOG_ManualTrig[0] AND NOT Operation.bJOG_ManualTrig[1] )AND bManual) OR
                                                                                                ((Operation.bJOG_AutoTrig[0] AND NOT Operation.bJOG_AutoTrig[1] )AND bAuto)),
                                    JogBackward:=Operation.bJOGMovcondition[1]AND NOT Status.bAxisBusy AND Status.bPowerOn AND( ((Operation.bJOG_ManualTrig[1] AND NOT Operation.bJOG_ManualTrig[0] )AND bManual) OR
                                                                                                ((Operation.bJOG_AutoTrig[1] AND NOT Operation.bJOG_AutoTrig[0] )AND bAuto)),
                                                                                  //Velocity:=,
                                        Acceleration:=REAL_TO_LREAL(Parameter.rAcceleration),
                                        Deceleration:=REAL_TO_LREAL(Parameter.rDeceleration)
                                                                                  );

(******************************************        轴使能        ********************************************)

IF         TRUE   AND  NOT Operation.bAxisEnableHMI                                                                                 
        AND NOT  Axis_REF^.In.wStatusWord.3         
        AND (
                        Axis_REF^.In.wStatusWord.4
                AND Axis_REF^.wCommunicationState=100
                AND EtherCATConnectOK
                OR  Simulate <> 0
                                )
        THEN
        bEnableTonReady        :=        TRUE ;
ELSE
        bEnableTonReady        :=        FALSE ;
END_IF;        
//延时使能;
EnableTon(In:=bEnableTonReady, PT:=TIME#100MS);        
//调用功能块
MC_Power_Instance(        Axis:=Axis_REF^,
                         Enable:= 1,
                         bRegulatorOn:=EnableTon.Q,                                         
                         bDriveStart:=         EnableTon.Q,                                       
                                         Status=>Status.bPowerOn
                                        );

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        相对定位        ********************************************)
IF TRUE
                AND bAuto
                AND NOT Status.bError                                                                        //报错汇总
                AND  NOT E_Stop                                                                           //急停
                AND Status.bPowerOn                                                             //轴使能OK
                AND Status.bHomed                          //回原完成   
                AND NOT Status.bAxisBusy                                               //轴忙
                AND Operation.bMovRelMovcondition                                                                        //轴移动允许
                AND Operation.bRELAutoTrig                                                                        //轴自动触发
                THEN
           MC_MoveRelative_Instance.Velocity:=REAL_TO_LREAL(Parameter.rMoveRelVelocity);         //写入定位的速度;
                MC_MoveRelative_Instance.Distance                :=REAL_TO_LREAL(Parameter.rMoveRelDistance);         //写入定位的坐标;
                bMoveRel                        := TRUE ;                         //触发功能块执行;
                bRelCycle                        := TRUE ;
        ELSIF
        //手动定位触发:        
                TRUE
                AND bManual
                AND NOT Status.bError                                                                        //报错汇总
                AND  NOT E_Stop                                                                           //急停
                AND Status.bPowerOn                                                             //轴使能OK
                AND Status.bHomed                          //回原完成   
                AND NOT Status.bAxisBusy                                               //轴忙
                AND Operation.bMovRelMovcondition                        //轴移动允许
                AND Operation.bRELManualTrig                                                //轴手动触发
                THEN
                 MC_MoveRelative_Instance.Velocity:=REAL_TO_LREAL(Parameter.rMoveRelVelocity);         //写入定位的速度;
                MC_MoveRelative_Instance.Distance                :=REAL_TO_LREAL(Parameter.rMoveRelDistance);         //写入定位的坐标;
                bMoveRel                        := TRUE ;                         //触发功能块执行;
                bRelCycle                        := TRUE ;
        ELSE
               
                        IF         bRelCycle = FALSE THEN
                                bMoveRel:= FALSE;        
                        END_IF;        
        END_IF;
//(---------------------------------------------------------------------------------------------------------------------------------------------------------)               
(********************************************         Rel功能块用        ********************************************)
MC_MoveRelative_Instance(Axis:=Axis_REF^,
                                                                           Execute:=bMoveRel,
                                                                                                   Acceleration:=REAL_TO_LREAL(Parameter.rAcceleration),
                                                                                          Deceleration:=REAL_TO_LREAL(Parameter.rDeceleration)        );

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        轴复位        ********************************************)
MC_Reset_Instance(Axis:=Axis_REF^,
                  Execute:=(Operation.bAlarmReset OR Reset) AND Axis_REF^.wCommunicationState=100 );
ReinitDrive(
                  Axis:= Axis_REF^,
                   bExecute:= (Operation.bAlarmReset OR Reset)  AND Axis_REF^.wCommunicationState<>100
                                                               );                                                                  
                                                                   //(---------------------------------------------------------------------------------------------------------------------------------------------------------)               
(********************************************         坐标设定模式        ********************************************)
MC_SetPosition_Instance(
                                                  Axis:=Axis_REF^,
                                                                                          Execute:=(Operation.bSetPosManualTrig OR Operation.bSetPosAutoTrig ) AND Status.bHomed AND NOT Status.bAxisBusy ,
                                                                                          Position:=REAL_TO_LREAL(Parameter.rSetPos),
                                                                                          Done=>Status.bSetPosDone
                                                                                          );

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        轴停止        ********************************************)
MC_Stop_Instance(        Axis:= Axis_REF^     ,
                                    Execute:=E_Stop,
                                                                        Deceleration:=REAL_TO_LREAL(Parameter.rDeceleration),
                                                                        //Jerk:=,
                                                                        Done=>Status.bStopDone);

//(---------------------------------------------------------------------------------------------------------------------------------------------------------)               
(********************************************         判断坐标位置        ********************************************)
        IF
                bConflictEnable   THEN
                // 手自动冲突状态记录
                fbR_TRIG2(CLK:= bAuto );
               
                IF fbR_TRIG2.Q THEN
                        bAxisStateMark        := TRUE ;
                END_IF;
               
                //记录延时复位;
                BusyTimeOut(IN:= bAxisStateMark AND Axis_REF^.nAxisState=Standstill  AND Status.bConflictErr = FALSE , PT:= T#100MS);
                //初始化完成;
                fbR_TRIG3(Clk:=InitDone        );
                //滤波时间;
                fbTon2(In:=Status.bAxisBusy = FALSE, PT:= T#200MS);
               
                //记录停下来的位置;
                IF BusyTimeOut.Q  OR  fbR_TRIG3.Q
                THEN
                        bAxisStateMark                        := FALSE ;
                        Status.rConflictStopPos        := Status.rActPos ;
                END_IF;
                //        手自动冲突报警
//                 IF  bManual AND InitDone THEN
//                         Status.bConflictErr       := ABS( Status.rActPos  -         Status.rConflictStopPos) > 1.0 AND fbTon2.Q;
//                 END_IF;
        //        手自动冲突报警
        FOR Index:=0 TO MAX_POS BY 1 DO
                IF  bMoveAbs AND  Operation.bABSAutoTrig[Index] THEN
                 PositionIndex:=Index;
                         EXIT;
                END_IF
        END_FOR
                Status.PosIndex:=PositionIndex;
                Status.bConflictErr:=StartSingel AND bAuto AND InitDone AND NOT Status.PostionDone[PositionIndex] AND  Axis_REF^.nAxisState=Standstill ;               
                //报警弹窗
                fbR_TRIG6(Clk:=Status.bConflictErr);
                IF fbR_TRIG6.Q THEN
                Show.MesgBox                                :=WCONCAT(STR1:=AxisName, STR2:=&quot;轴干涉提示&quot; );
                        fbPop_Up.Clk                                := TRUE ;
                END_IF;
               
                        //把当前位置传给手自动冲突位置
                IF
                        bClearConflict THEN
                        Status.rConflictStopPos        := Status.rActPos ;
                END_IF;
        
ELSE               
           bAxisStateMark                                           := FALSE ;
           Status.bConflictErr                          := FALSE ;
           Status.rConflictStopPos            := 0;
END_IF;
//弹窗处理
fbPop_Up();
                //触发弹窗;
                IF fbPop_Up.Q THEN
                        Show.MesgboxTrig                :=TRUE;
                END_IF;
               
                //消除提示窗信息
                IF Show.MesgboxTrig = FALSE THEN
                        fbPop_Up.CLK                                := FALSE ;
                        Clear(Show.MesgBox );
                END_IF;


// IF P_First_Run THEN
// Show.MesgboxTrig :=FALSE;        
// fbPop_Up.CLK                :=FALSE;
// END_IF;

//从EtherCAT 网络上拥有指定从站的CoE (*) 对象中读取值。
SdoObjIndex                :=        24639        ;//16#603F        Error Code
SdoObjSubindex        :=        0                ;//16#0000
EC_CoESDORead1(
        xExecute:=Axis_REF^.In.wStatusWord.3 ,
        //xAbort:= ,
        //usiCom:= ,
        uiDevice:=NodeAdr ,
        //usiChannel:= ,
        wIndex:=SdoObjIndex ,
        bySubindex:=SdoObjSubindex ,
        udiTimeOut:=500 ,
        //xDone=> ,
        //xBusy=> ,
        //xError=> ,
        //eError=> ,
        //udiSdoAbort=> ,
        dwData=>EC_CoESDORead_Data ,
        //usiDataLength=>
        );
        
IF  Axis_REF^.In.wStatusWord.3 THEN
Status.nErrorID:=DWORD_TO_UDINT( EC_CoESDORead_Data);
IF Simulate = 0  THEN
Status.bError:=TRUE;
END_IF;
ELSE
Status.nErrorID:=UDINT#0;
END_IF;
//获取轴错误编号
IF Axis_REF^.nAxisState=errorstop THEN
//Status.nNCErrID := DWORD_TO_UDINT(Axis_REF.MFaultLvl.Code);
IF Simulate = 0  THEN
Status.bError:=TRUE;
END_IF;
ELSE
Status.nNCErrID:=0;
END_IF;

//轴名称读取
Status.AxisName:=AxisName;

//轴状态Busy'
Status.bAxisBusy:= MC_Home_Instance.Busy  OR
                        MC_MoveAbsolute_Instance.Busy OR
                                                MC_MoveJog_Instance.Busy OR
                                                MC_MoveRelative_Instance.Busy ;
//轴状态功能块错误                                                               
Status.bFbError:=MC_Home_Instance.Error OR
                        MC_MoveAbsolute_Instance.Error OR
                       MC_MoveJog_Instance.Error OR
                                           MC_MoveRelative_Instance.Error OR
                                           MC_Stop_Instance.Error   OR
                                           MC_Reset_Instance.Error  OR
                                           MC_Power_Instance.Error;                                                               

IF  Status.bError AND Operation.bAlarmReset  THEN
Status.bError:=FALSE;
END_IF;
//定位边缘信号处理
bAbsCycle:= FALSE ;
bRelCycle:=FALSE;
//(---------------------------------------------------------------------------------------------------------------------------------------------------------)        
(******************************************        轴信号综合刷新        ********************************************)
//轴正限位
Status.bPotlimitSensor                                        := Axis_REF^.In.dwDigitalInputs.1;
//轴负限位
Status.bNotLimitSensor                                := Axis_REF^.In.dwDigitalInputs.0;
//轴原点
Status.bHomeSensor                                                        := Axis_REF^.In.dwDigitalInputs.2;
//轴回原中
Status.bHoming                         := Axis_REF^.nAxisState=homing ;
//轴当前坐标
Status.rActPos                                                                := LREAL_TO_REAL(Axis_REF^.fActPosition);
//轴当前转矩
Status.rActTorque                                                        := LREAL_TO_REAL(Axis_REF^.fActTorque);
//轴当前速度
Status.rActVelo                                                                := LREAL_TO_REAL(Axis_REF^.fActVelocity);
//轴正方向指令中
// X_TEMP:=         ;
Status.bDirPosi                                                                := NOT  Status.bDirNega;
//轴负方向指令中
Status.bDirNega                                                        := Axis_REF^.nDirection=negative;
//轴准备好
Status.bReady                                :=Axis_REF^.wCommunicationState=100;
//轴静止
Status.Standstill                               := Axis_REF^.nAxisState=Standstill;
//轴当前状态
Status.nAxisState:=INT_TO_UINT(Axis_REF^.nAxisState);
//(---------------------------------------------------------------------------------------------------------------------------------------------------------)


免责声明:内容为网友自行发布或者来自互联网资源或者参考文献,如果侵犯了您的权益,请联系站长 1304546267@qq.com,我们会及时删除侵权内容,感谢您的理解!
回复

使用道具 举报

沙漠之狐BXT 2022-6-8 16:22:05 | 显示全部楼层
这个看都不行吗,还有水滴
回复

使用道具 举报

123458513 2022-6-8 16:40:26 | 显示全部楼层
好,学习一下,不错
回复

使用道具 举报

就这一张图?差评了!
回复

使用道具 举报

123458331 2022-6-8 17:23:03 | 显示全部楼层
没有,上载不了,公司的电脑
回复

使用道具 举报

1.png 2.png 3.png
回复

使用道具 举报

西西里131 2022-6-8 22:17:19 | 显示全部楼层
能免费多好啊
回复

使用道具 举报

就一张图。。差评 1.gif
回复

使用道具 举报

冷暖自知530 2022-6-8 23:38:06 | 显示全部楼层
内容详细,感谢分享
回复

使用道具 举报

仇恨罪恶细 2022-6-9 07:39:31 | 显示全部楼层
垃圾,毛都没有,写的狗屁
回复

使用道具 举报

关键词总结:bAuto、bManual、OperationAbs、OperationHome、OPerationJog、OperationPower、OperationRel、OperationReset、OperationSetPos、OperationStop、PostionSaveEroor、ReadEtherCat、ReadStatus、绝对定位、软下限位报警、软上限位报警、自动触发、手动触发。

文章大纲:
1. 引言
    - 简介轴控系统和方法写得轴控的作用
2. 主体内容
    2.1 方法写得轴控关键代码解析
        - bAuto, bManual等变量的定义和作用
        - OperationAbs, OperationHome等函数的功能和使用场景
    2.2 绝对定位
        - 绝对定位在轴控中的重要性和作用
        - 判断参数范围和软限位报警
        - 自动触发和手动触发定位的条件和操作步骤
    2.3 其他功能点解析
        - PostionSaveEroor的作用和处理方法
        - ReadEtherCat和ReadStatus函数的功能和使用场景
3. 结论
    - 总结轴控方法的重要性和应用价值
    - 提出对轴控方法的改进和优化建议

正文:
1. 引言
轴控系统是一种用于控制运动轴的系统,通过使用方法写得轴控,可以实现对电机的精确控制。本文将围绕方法写得轴控的关键代码进行解析和讨论。

2. 主体内容
2.1 方法写得轴控关键代码解析
在给出的代码中,关键变量有bAuto、bManual等。bAuto表示是否为自动模式,bManual表示是否为手动模式。这两个变量的值会根据不同的情况进行判断和赋值,从而确定当前轴控的模式。

代码中还涉及到几个Operation开头的函数,如OperationAbs、OperationHome、OPerationJog等。这些函数分别对应着绝对定位、回原点、Jog运动等操作。通过调用这些函数,可以实现对电机的不同运动控制。

2.2 绝对定位
绝对定位是轴控中的一个重要功能,它可以实现对电机位置的精确控制。在代码中,绝对定位的操作分为自动触发和手动触发两种情况。

在自动触发定位中,需要满足一系列条件,如没有报错、非急停状态、轴使能正常、已回原完成、轴空闲、无软极限报错等。同时,需要设置定位的速度和坐标,并将bMoveAbs和bAbsCycle设置为TRUE,触发相应的功能块执行。

手动触发定位则更加灵活,只需要满足手动模式的条件,并设置相应的速度和坐标,即可实现对电机位置的定位控制。

2.3 其他功能点解析
除了绝对定位,代码中还包含了一些其他的功能点。

PostionSaveEroor函数的作用是保存位置错误信息。当轴发生位置错误时,可以通过调用这个函数将错误信息进行保存,方便后续错误处理和分析。

ReadEtherCat和ReadStatus函数的作用是读取以太网通信和状态信息。这些函数可以获取与轴控相关的信息,如通信状态、轴状态等,有助于监控和调试轴控系统。

3. 结论
本文围绕方法写得轴控的关键代码进行了解析和讨论。在轴控系统中,方法写得轴控是一种非常重要的控制方式,通过合理地利用这些关键代码,可以实现对电机位置的精确控制。

同时,本文还提出了对轴控方法的改进和优化建议。比如可以引入更多的条件判断和错误处理机制,提高系统的稳定性和容错性。此外,可以结合实际场景,对方法写得轴控进行更加细致的分析和优化,以满足不同的工程需求。

总之,方法写得轴控在现代工程中起着重要的作用,只有深入理解和灵活运用这些关键代码,才能实现高效、准确的电机控制。希望本文的讨论能够对读者在轴控领域的学习和实践有所帮助。
                                                                                                                                                                                                                                                 以上内容来自  AI机器人,如需继续对话,则在此回答下“点击回复” 或者 在提问时  “@机器人”!禁止 "黄赌毒及政治敏感",违者封号,严重者 提交 网警公安部门。本站不对内容真实性负责,AI机器人有时候会乱说一通……
回复

使用道具 举报

关键词总结:bAuto, bManual, OperationAbs, OperationHome, OperationJog, OperationPower, OperationRel, OperationReset, OperationSetPos, OperationStop, PositionSaveError, ReadEtherCat, ReadStatus, 绝对定位, 自动定位触发, 手动定位触发

文章大纲:
1. 简介(引入轴控的概念和应用)
2. 轴控方法介绍
  2.1 bAuto和bManual的作用和区别
  2.2 OperationAbs、OperationHome、OperationJog等功能块的使用
3. 绝对定位功能介绍
  3.1 判断参数范围和软限位报警提示
  3.2 自动定位触发条件
  3.3 手动定位触发条件
4. 其他相关功能介绍
  4.1 PositionSaveError功能
  4.2 ReadEtherCat和ReadStatus函数的作用
5. 总结

正文:

1. 简介
轴控是指对运动控制系统中的轴进行控制和调试的方法。它广泛应用于各种机械设备中,如数控机床、自动包装线等。轴控方法的好坏直接影响到设备的运行效果和稳定性。

2. 轴控方法介绍
轴控方法主要通过几个关键变量来实现,包括bAuto和bManual。bAuto表示自动模式,bManual表示手动模式。根据不同的模式,使用不同的功能块来控制轴的运动。

2.1 bAuto和bManual的作用和区别
bAuto变量用于判断是否处于自动模式下的轴控,而bManual则用于判断是否处于手动模式下的轴控。在自动模式下,轴的运动由程序自动控制;在手动模式下,轴的运动由操作员手动控制。

2.2 OperationAbs、OperationHome、OperationJog等功能块的使用
OperationAbs用于绝对定位,即将轴移动到指定的绝对位置。OperationHome用于回原,即将轴移动到原点位置。OperationJog用于手动点动,即通过按键控制轴的微小移动。除此之外,还有一些其他功能块,如OperationPower用于使能轴,OperationRel用于相对定位,OperationReset用于复位等。

3. 绝对定位功能介绍
绝对定位是轴控中常见的一种功能,它可以将轴移动到指定的绝对位置。在实际应用中,需要考虑一些限制条件,如参数范围和软限位报警。

3.1 判断参数范围和软限位报警提示
在进行绝对定位之前,需要判断参数是否在范围内。如果参数超出了设定的软限位范围,就会触发软限位报警,并弹出相应的提示框。这样可以防止轴越界运动,保护设备和操作人员的安全。

3.2 自动定位触发条件
自动定位是指在自动模式下根据一定条件触发轴的定位操作。触发条件包括:
- 轴没有报错汇总
- 没有急停
- 轴使能OK
- 轴已回原完成
- 轴没有忙
- 没有软限位报错
- 轴移动允许
- 轴自动触发

3.3 手动定位触发条件
手动定位是指在手动模式下通过按键来控制轴的移动。手动定位的触发条件相对简单,只需要处于手动模式并且没有发生错误即可。

4. 其他相关功能介绍
除了上述介绍的功能块外,还有一些其他的功能在轴控中也有重要作用。

4.1 PositionSaveError功能
PositionSaveError功能用于保存位置错误信息,在发生错误时提供相关的信息和处理方式。这样可以更加方便地进行故障诊断和排除。

4.2 ReadEtherCat和ReadStatus函数的作用
ReadEtherCat函数用于读取EtherCAT总线上的数据,这些数据可以用于判断设备的状态和运行情况。ReadStatus函数用于读取轴的状态,如是否报错、是否使能等。

5. 总结
轴控是机械设备中重要的控制方法,通过bAuto和bManual等关键变量以及各种功能块实现对轴的控制和调试。绝对定位是常见的功能之一,它可以将轴移动到指定的位置。除此之外,还有一些其他相关的功能在轴控中也起到重要的作用。掌握这些方法和功能可以提高工作效率和设备稳定性,从而更好地完成工作任务。
                                                                                                                                                                                                                                                 以上内容来自  AI机器人,如需继续对话,则在此回答下“点击回复” 或者 在提问时  “@机器人”!禁止 "黄赌毒及政治敏感",违者封号,严重者 提交 网警公安部门。本站不对内容真实性负责,AI机器人有时候会乱说一通……
回复

使用道具 举报

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共31章节628课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共30章节630课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共31章节628课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共30章节630课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00

到"π³ 实操派",学PLC就是快!汇川PLC及Codesys培训

项目实战 手把手教学 微信&电话 15850116008
超600节系统化课程,汇川优秀自动化讲师亲授!学一门Codesys,玩800家PLC仅剩少量名额
点击免费试听

到实操派,学PLC就是快!

扫码领取工控文库VIP

钻石VIP先到先得

服务电话 & 微信:9:00-22:00

15850116008

苏州实操派科技有限公司

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

Copyright © 苏州实操派科技有限公司 2022 到实操派,学PLC就是快!工业自动化业务培训适用人群:成人 ( 苏ICP备2022021576号-3 )

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

返回顶部