ST基础学习

1321 字
7 分钟
ST基础学习

ST简单使用

程序功能分解

  1. 控制一个风扇的开关基于温度传感器的输入。
  2. 使用不同的模式来控制马达。
  3. 实现一个简单的计数器。
  4. 处理上升沿和下降沿触发事件。
  5. 实现一个基本的运动控制。
  6. 处理异常情况(如除0保护、数组越界等)。

实战程序

PROGRAM MainProgram
VAR
    temperature: REAL := 0.0; // 温度传感器输入
    fan: BOOL := FALSE; // 风扇状态
    mode: INT := 0; // 模式选择
    motor: BOOL := FALSE; // 马达状态
    i, j, k, m: INT := 0; // 计数器
    signal: BOOL := FALSE; // 输入信号
    rising_edge, falling_edge: BOOL := FALSE; // 上升沿和下降沿
    r_trig_ins: R_TRIG; // 上升沿触发实例
    f_trig_ins: F_TRIG; // 下降沿触发实例
    array: ARRAY[1..10] OF INT := [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; // 数组
    index: INT := 0; // 数组下标
    result: REAL; // 计算结果
END_VAR

// 控制风扇的开关 IF temperature > 100 THEN fan := TRUE; ELSIF temperature > 80 THEN fan := TRUE; alarm := TRUE; ELSE fan := FALSE; alarm := FALSE; END_IF;

// 根据模式控制马达 CASE mode OF 1: motor := TRUE; 2: motor := FALSE; 3, 4, 5: motor := TRUE; ELSE motor := FALSE; END_CASE;

// 简单计数器 WHILE i < 10 DO i := i + 1; END_WHILE;

REPEAT j := j + 1; UNTIL j >= 10 END_REPEAT;

// 使用EXIT指令 WHILE TRUE DO k := k + 1; IF k >= 5 THEN EXIT; END_IF; END_WHILE;

// FOR循环 FOR m := 1 TO 10 DO x := x + m; END_FOR;

// 上升沿和下降沿触发 r_trig_ins(CLK := signal, Q => rising_edge); f_trig_ins(CLK := signal, Q => falling_edge);

// 异常处理示例 // 除0保护 IF denominator = 0 THEN denominator := 1; END_IF; result := numerator / denominator;

// 数组越界处理 index := 11; // 故意设置一个越界的下标 IF index > 10 THEN index := 10; END_IF; value := array[index];

// 死循环检测 WHILE TRUE DO // 模拟死循环 EXIT; // 提前退出以避免实际死循环 END_WHILE;

END_PROGRAM

解释

  1. 风扇控制:根据温度传感器的输入来控制风扇的开关。如果温度超过100度,风扇开启;如果温度在80到100度之间,风扇和报警都开启;否则,风扇和报警都关闭。

  2. 马达控制:根据模式选择来控制马达的状态。如果模式为1或3、4、5,马达开启;否则,马达关闭。

  3. 计数器:使用WHILE和REPEAT循环来实现简单的计数器。

  4. EXIT指令:在一个无限循环中使用EXIT指令来提前退出。

  5. FOR循环:通过FOR循环来实现累加操作。

  6. 上升沿和下降沿触发:使用R_TRIG和F_TRIG功能块来检测信号的上升沿和下降沿。

  7. 异常处理:包括除0保护和数组越界处理。并且模拟了一个死循环的检测。

轴控等其他程序

实战程序

PROGRAM MainProgram
VAR
    // 基本轴控变量
    Axis: AXIS_REF; // 轴引用
    PowerStatus: BOOL;
    AxisError: BOOL;
    CurrentPosition: REAL;
    CurrentVelocity: REAL;
    CurrentTorque: REAL;
    MoveComplete: BOOL;
    ErrorID: INT;
// 编码器变量
EncoderStatus: BOOL;
EncoderPosition: REAL;
// 定时器变量
Timer: TONR;
TimerElapsed: BOOL;
// 中断变量
InterruptEnabled: BOOL;
// 字符串变量
SourceString: STRING[20] := &#039;Hello World&#039;;
TargetString: STRING[20];
// 其他变量
RealResult: REAL;
MemoryBlock: ARRAY[1..10] OF BYTE;

END_VAR

// 基本轴控指令 // 使能轴 MC_Power(Axis := Axis, Enable := TRUE, Status => PowerStatus, Error => AxisError, ErrorID => ErrorID);

// 读取轴状态 MC_ReadStatus(Axis := Axis, Status => PowerStatus, Error => AxisError, ErrorID => ErrorID);

// 读取轴故障 MC_ReadAxisError(Axis := Axis, Error => AxisError, ErrorID => ErrorID);

// 读取当前位置信息 MC_ReadActualPosition(Axis := Axis, Position => CurrentPosition);

// 读取当前速度信息 MC_ReadActualVelocity(Axis := Axis, Velocity => CurrentVelocity);

// 读取当前力矩信息 MC_ReadActualTorque(Axis := Axis, Torque => CurrentTorque);

// 设置当前位置 MC_SetPosition(Axis := Axis, Position := 0.0, Execute := TRUE, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 相对定位 MC_MoveRelative(Axis := Axis, Distance := 100.0, Velocity := 10.0, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 绝对定位 MC_MoveAbsolute(Axis := Axis, Position := 50.0, Velocity := 10.0, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 速度指令 MC_MoveVelocity(Axis := Axis, Velocity := 10.0, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 点动 MC_Jog(Axis := Axis, JogForward := TRUE, Velocity := 5.0, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 力矩控制指令 MC_TorqueControl(Axis := Axis, Torque := 5.0, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 原点回归指令 MC_Home(Axis := Axis, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 停止指令 MC_Stop(Axis := Axis, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 急停指令 MC_ImmediateStop(Axis := Axis, Done => MoveComplete, Error => AxisError, ErrorID => ErrorID);

// 编码器指令 // 使能编码器 ENC_Counter(Encoder := EncoderStatus, Enable := TRUE, Error => AxisError, ErrorID => ErrorID);

// 读取编码器状态 ENC_ReadStatus(Encoder := EncoderStatus, Status => EncoderStatus, Error => AxisError, ErrorID => ErrorID);

// 读取编码器位置 ENC_SetUnit(Encoder := EncoderStatus, Position := EncoderPosition, Error => AxisError, ErrorID => ErrorID);

// 通讯指令 // 读取从站参数 ETC_ReadParameter_CoE(Slave := 1, Index := 0x2000, SubIndex := 1, Data := CurrentPosition, Error => AxisError, ErrorID => ErrorID);

// 写入从站参数 ETC_WriteParameter_CoE(Slave := 1, Index := 0x2000, SubIndex := 1, Data := 100, Error => AxisError, ErrorID => ErrorID);

// 重启主站 ETC_RestartMaster(Master := 1, Error => AxisError, ErrorID => ErrorID);

// 定时器指令 // 接通延时定时器 TONR(IN := TRUE, PT := T#5S, Q => TimerElapsed, ET => Timer.ET);

// 中断指令 // 开启中断 EI();

// 关闭中断 DI();

// 字符串指令 // 移动字符串 STRMOV(Source := SourceString, Dest := TargetString);

// 其他指令 // 实数取余 RealResult := ModReal(10.5, 3.2);

// 内存设置 MSET(DstAddr := ADR(MemoryBlock), SrcAddr := ADR(SourceString), Size := SIZEOF(SourceString));

// 内存复位 MCPY(DstAddr := ADR(MemoryBlock), SrcAddr := ADR(SourceString), Size := SIZEOF(SourceString));

END_PROGRAM

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

ST基础学习
https://www.rwr.ink/index.php/2024/08/30/st基础类型/
作者
JMFANS
发布于
2024-08-30
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
Brooks MAGNATRAN® LEAP™ 编程手册
未分类Brooks MAGNATRAN® LEAP™ 编程手册 基于官方文档编写 《238485 Leap Manual REV G》— 硬件与用户手册(263页) 《278805 MAGNATRAN® LEAP™ Software Manual REV E》— 软件编程手册(278页) 文档版本 : 综合整理版 v1.0 | 适用固件 : V8.2.x 系列 |
2
Debian 13 新装
未分类Debian 13 (Trixie) 完整自动化配置文档 文档说明 本文档汇总了 Debian 13 系统的完整配置流程,包含系统更新、网络加速、安全防护、开发环境和 Shell 美化等所有功能。 执行顺序 : 从上到下依次执行各代码块 一、系统更新与基础优化 #!/bin/bash # Debian 13 系统全面更新与基础配置 # 1.1 更新软件源并升
3
模糊PID控制加热器系统仿真
未分类模糊PID控制加热器系统仿真 目录 模糊PID控制加热器系统仿真 目录 引言 系统概述 数学模型 隶属度函数 S形函数 Z形函数 三角形函数 模糊PID控制器 模糊化 规则库 解模糊 PID控制器 加热器系统动力学 Smith预估器 仿真流程 性能指标 用户界面 结论 附件 引言 本文提供了由自适应模糊PID控制器和Smith预估器控制的加热器系统仿真模型的
4
CE认证标准-电气部分
未分类EN 60204 标准概述 4 适用范围 EN 60204 的本部分适用于机械(包括协同工作的一组机械)的电气、电子和可编程电子设备及系统,不适用于手提工作式机械。 本标准适用于额定电压不超过交流1000V,直流1500V,电源频率不超过200Hz的电子设备、电气设备或工业机器系统。 本标准所论及的设备是从机械电气设备的电源引入处开始的。 本标准不包括用于危
5
电气常用元器件概述
未分类系统组件说明 1513-1 功能:CPU-单晶炉部分逻辑程序的设计,存储及控制。 主要参数:处理器速度、内存容量、I/O通道数量。 通讯接口:以太网、RS485、Profibus等。 分布式IO模块 功能:与1513-1通讯,为各数字量/模拟量的输入及输出提供接口,并实现信号采集和输出。 开关电源 功能:主要使用DC开关电源,即AC/DC电源。主要以DC24
随机文章随机推荐
Profile Image of the Author
JMFANS
电气工程师,记录技术、学习和生活。
公告
记录工程实践、学习笔记与长期积累。
分类
标签
站点统计
文章
14
分类
1
标签
5
总字数
105,433
运行时长
0 天
最后活动
0 天前

当前页面没有目录

文章目录

当前页面没有目录