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

上位机与PLC基于Modbus交互,参考的文章:modbus协议讲解,上位机与PLC交互_花开莫与流年错_的博客-CSDN博客

中型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
    // 0.。10中的10需要根据总的伺服数量设置,并将对应Axis_Name改变
    单轴变量 : ARRAY[0..1] OF PointAxis; 
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 := 单轴变量[放线轴]);

  • 29
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
汇川H5U是一种常见的PLC控制器,其编程语言ST(结构化文本)语言。这里是汇川H5U ST语言编程手册的简要概述: ST语言,也称为结构化文本语言,是一种高级编程语言,用于编写汇川H5U PLC控制器的程序。它以结构化和模块化的方式组织代码,使程序易于理解和维护。 在ST语言编程手册中,你将找到以下内容: 1. 语法规则:手册详细介绍了ST语言的语法规则,包括标识符命名规则、数据类型、变量声明等。这些规则帮助程序员编写符合规范的代码。 2. 数据类型和变量:手册列出了在ST语言中可用的不同数据类型和变量类型,如布尔型、整数、浮点数、数组等。它们的定义和用法也得到了解释。 3. 运算符和表达式:手册讲解了ST语言中的各种运算符和表达式,如算术运算、逻辑运算、比较运算等。它们可以用于编写复杂的条件判断和计算。 4. 语句和循环:手册详细介绍了在ST语言中可用的语句类型,如赋值语句、条件语句、循环语句等。这些语句能够控制程序的流程和执行。 5. 函数和方法:手册解释了如何定义和使用函数和方法,它们可以以模块化的方式组织代码,提高代码的可读性和重用性。 6. 编程示例:手册提供了一些编程示例,帮助程序员理解ST语言的应用场景和编写实际的控制程序。 通过阅读和理解汇川H5U ST语言编程手册,程序员可以掌握ST语言的基本原理和技巧。这将有助于他们编写可靠和有效的PLC控制程序,并实现各种自动化控制任务。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值