汇川中型PLC使用ST语言基础

中型PLC使用基础汇报:https://pan.baidu.com/s/1UmbaMECPd0oYZPm70rYKbg

初始化

// IO初始化
IO_point := ADR(START_IO);
// 当前指针类型每次复位8个位,复位START_IO开始的5*8个位
FOR i := 0 TO num_IO BY 1 DO
IO_point^ := 0;
IO_point := IO_point + 1;
END_FOR 

// 伺服参数初始化,根据伺服个数修改for循环次数
FOR i := 0 TO 1 BY 1 DO
单轴变量[i].gear_in := FALSE;
单轴变量[i].转矩运行 := FALSE;
单轴变量[i].速度运行 := FALSE;
单轴变量[i].绝对位移 := FALSE;
单轴变量[i].相对位移 := FALSE;
END_FOR 

// 确定伺服通讯连接正常
IF ETHERCAT.xConfigFinished AND ETHERCAT.xDistributedClockInSync THEN
  IF fangxian.wCommunicationState=100 THEN
  EtherCAT_State:=TRUE;
  ELSE 
  EtherCAT_State:=FALSE;
  END_IF
END_IF

自动模式

// 动作分步运行,完成动作后运行步骤 + 1
CASE 运行步骤 OF
0 : // 给定变量初始值、标志位复位
运行步骤 := 运行步骤 + 1;
1 : // 动作1

2 : // 动作2

3 : // 动作3

ELSE // 动作完成处理

END_CASE


伺服控制:

1、定义伺服名(Axis_Name)

// 使用时根据现场伺服完成下列伺服命名
TYPE Axis_Name :
(
虚主轴 := 0,
放线轴 := 1
);

END_TYPE

2、伺服控制参数-结构体(PointAxis)

// 单轴控制相关参数
TYPE PointAxis :
STRUCT
使能 : BOOL; // 基础参数
使能ok : BOOL;
暂停 : BOOL;
快速停机 : BOOL;
回原 : BOOL;
故障复位 : BOOL;
模式切换 : BOOL;

重启运行 : BOOL; // 遇到故障伺服重启
重启完成 : BOOL; // 运行中遇到故障可进行伺服重新初始化

转矩运行 : BOOL; // 转矩运行
转矩大小 : LREAL;

绝对位移 : BOOL; // 绝对运行
绝对位移方向 : MC_Direction;
绝对位置 : LREAL;

相对位移 : BOOL; // 相对运行
相对距离 : LREAL;

速度运行 : BOOL; // 速度控制
速度运行方向 : MC_Direction;
速度运行速度 : LREAL := 100;

加速度值 : LREAL := 100; // 运动参数
减速度值 : LREAL := 100;
加加速值 : LREAL := 10;
原点位置 : LREAL;

gear_in : BOOL; // 进入电子凸轮
gearNum : DINT; // 齿轮比分子
gearDeno : UINT; // 齿轮比分母
gearMaster : AXIS_REF_SM3; // 电子凸轮主轴

控制模式 : SMC_CONTROLLER_MODE;
Axis : POINTER TO AXIS_REF_ETC_DS402_CS;
Server: POINTER TO ETCSlave;
END_STRUCT

END_TYPE

3、定义伺服控制参数数组(Axis)

//{attribute 'qualified_only'}

VAR_GLOBAL
单轴变量 : ARRAY[0..1] OF PointAxis; // 0.。10中的10需要根据总的伺服数量设置,并将对应Axis_Name改变

END_VAR

4、伺服动作实现参数(MC_PointAxis)

    (1)变量定义:

    FUNCTION_BLOCK MC_PointAxis
    VAR_IN_OUT
            Point_Axis : PointAxis;
    END_VAR

    VAR
         power : MC_Power; // 使能
    halt : MC_Halt; // 暂停
    stop : MC_Stop; // 停机
    home : MC_Home; // 回零
    reset : MC_Reset; // 故障复位
    reinitDrive : SMC3_ReinitDrive; // 重启驱动
    setControllerMode : SMC_SetControllerMode; // 设置控制模式
    setTorque : SMC_SetTorque; // 转矩运行
    moveAbsolute : MC_MoveAbsolute; // 绝对位移
    moveRelative : MC_MoveRelative; // 相对位移
    moveVelocity : MC_MoveVelocity; // 速度运行
    
    gearIn : MC_GearIn; // 进入电子凸轮
    gearOut : MC_GearOut; // 退出电子凸轮
    
    camTableSelect : MC_CamTableSelect; // cam表设置
    camIn : MC_CamIn; // 进入cam表
    camOut : MC_CamOut; // 退出cam表
    

            // 后续修改
    去使能 : BOOL;

    END_VAR

(2)函数调用:

// 伺服基础指令

power(Axis := Point_Axis.Axis^,
Enable := TRUE,
bRegulatorOn := Point_Axis.使能 AND (NOT 去使能), 
bDriveStart := Point_Axis.使能,
Status      => Point_Axis.使能ok);  

// 暂停            
halt(Axis := Point_Axis.Axis^, 
Execute := Point_Axis.暂停, 
Deceleration := Point_Axis.减速度值);

// 重启伺服
reinitDrive(Axis := Point_Axis.Axis^,
bExecute := Point_Axis.重启运行,
bVirtual := FALSE, // 目前默认为实轴,不是虚轴
bDone => Point_Axis.重启完成);

// 停机            
stop(Axis := Point_Axis.Axis^, 
Execute := Point_Axis.快速停机, 
Deceleration := Point_Axis.减速度值, 
Jerk := Point_Axis.加加速值);

// 回零            
home(Axis := Point_Axis.Axis^,
Execute := Point_Axis.回原,
Position := Point_Axis.原点位置);

// 故障复位            
reset(Axis := Point_Axis.Axis^,
Execute := Point_Axis.故障复位);


// 设置控制模式
setControllerMode(Axis := Point_Axis.Axis^,
bExecute := Point_Axis.模式切换,
nControllerMode := Point_Axis.控制模式);

// 转矩运行
setTorque(Axis := Point_Axis.Axis^,
bEnable := Point_Axis.转矩运行,
fTorque := Point_Axis.转矩大小);

// 绝对位移
moveAbsolute(Axis := Point_Axis.Axis^,
Execute := Point_Axis.绝对位移,
Position := Point_axis.绝对位置,
Direction := Point_axis.绝对位移方向,
Acceleration := Point_Axis.加速度值,
Deceleration := Point_Axis.减速度值,
Jerk := Point_Axis.加加速值);


// 相对位移
moveRelative(Axis := Point_Axis.Axis^,
Execute := Point_Axis.相对位移,
Distance := Point_Axis.相对距离,
Acceleration := Point_Axis.加速度值,
Deceleration := Point_Axis.减速度值,
Jerk := Point_Axis.加加速值);

// 速度运行            
moveVelocity(Axis := Point_Axis.Axis^,
Execute := Point_axis.速度运行,
Velocity := Point_axis.速度运行速度,
Direction := Point_axis.速度运行方向,
Acceleration := Point_Axis.加速度值,
Deceleration := Point_Axis.减速度值,
Jerk := Point_Axis.加加速值);


// 加入电子凸轮运行,主轴为PointAxis中设置主轴。
// 使用需根据需要设置齿轮比,或PID实时调节齿轮比
gearIn(Execute := Point_Axis.gear_in,
Master := Point_Axis.gearMaster,
Slave := Point_Axis.Axis^,
RatioNumerator := Point_Axis.gearNum,
RatioDenominator := Point_Axis.gearDeno);


// 退出凸轮同步控制
gearOut(Execute := NOT Point_Axis.gear_in,
Slave := Point_Axis.Axis^);

// cam表之后根据实际使用再配置使用

5、参数更新(update)

// 伺服参数更新程序需要配置为优先级最高,且执行周期和同步周期成正比
// 将伺服与结构体变量参数映射使用,需要分为三个部分,根据后续需要添加轴
// 定时更新逻辑程序中的数据与伺服匹配动作

// 轴参数映射
// 单轴变量[虚主轴].Axis := (ADR(Axis_Virtual_Main));
单轴变量[放线轴].Axis := (ADR(fangxian));

// 伺服参数映射修改
单轴变量[放线轴].Server := (ADR(IS620N));

// 运动函数功能块调用更新

PointAxis_放线轴(Point_Axis := 单轴变量[放线轴]);




相关文章:

  • 2021-12-04
  • 2021-11-04
  • 2021-04-23
  • 2021-09-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-07
  • 2021-12-04
  • 2022-01-05
  • 2022-02-07
  • 2021-11-29
  • 2021-08-25
相关资源
相似解决方案