我是靠谱客的博主 无情唇彩,最近开发中收集的这篇文章主要介绍matlab状态机_机器人外部轴控制及codesys状态机应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、应用场景介绍以及可能用到的工具

目前主要是机器人末端需要安装一个活动吸盘,可以根据需求,让这个吸盘左右移动,注意这个是双吸盘结构,电机需要带动一个吸盘,从而达到实时调整两个吸盘间距的目的。

  1. codesys软件:原有的控制基础都是在这上面做的
  2. 状态机:工业控制中都是通过这个去控制,也非常好用;
  3. matlab状态机:matlab里面的这个状态机工具非常好用,可以仿真复杂的状态之间的跳转,辅助开发复杂的工程逻辑,之前一直想用起来,这次会加上去,正好用这个实际的工程案例测试一下怎么用的问题,后续再遇到类似的场景就可以先仿真逻辑,不用边写边改。

二、状态机基础及单轴逻辑控制整理

(1)PLCopen关于轴状态的定义

e131e17edbf44e2d08fbf98ea14c6637.png

根据PLCopen对于轴状态的定义,总共包括以下几个状态:

 0:Power_off(Disabled):轴未上电使能,或未使能,需执行MC_Power 指令
1:Errorstop;——————- 先执行MC_Reset/MC_Power 指令
2:Stopping;——————– 等待停机操作完成
3:Standstill;——————- 轴已停止运行,脱离同步
4:Discrete_Motion;——— 轴处于离散运行状态
5:Continuous_Motion;—– 轴处于连续运行中
6:Synchronized_Motion;— 轴处于同步运行中
7:Homing;———————- 轴处于回零运行中,等待归零操作执行完成

其中,在任意时刻,轴只能处于一种状态下,而且轴的状态必须根据触发条件从当前状态跳转到指定状态,因此整个逻辑状态就是一个闭环结构。

1.在轴停止状态(Standstill,即 Axis.nAxisState=3)可以转移到各种运行状态;
2.可以由多种状态转移到停止状态(Standstill,即 Axis.nAxisState=3),,
3.若伺服轴出现告警(Errorstop,即 Axis.nAxisState=1),就必需先运行 MC_Reset 指令、MC_Power
指令使轴进入Standstill 状态,才能让轴再次运行;
4.若不按上述转移图方式使用 MC 指令命令轴运动,就不会使轴响应,反而得到 MC 功能块的错误告警信息;

以上主要是根据Joint.nAxisState枚举变量进行判断轴的状态。(这个知乎编辑器有点傻,老实ih'soalho重复u'fgnohc我的e'dow字i)

(2)轴运动控制模块

以上我们知道轴的几种状态,而现在我们需要的功能只是Discrete_Motion离散运行状态,其中包括以下几种:

7fb4c2713de9e2385fc34d00146ef3b1.png

简单介绍一种,其他几种以后有时间再加上:

Function Block:简写FB

1. MoveAbsolute
2. Move Relative
3. Home
4. Stop
5. Power
6. Reset

1. MoveAbsolute:绝对运动函数模块 

0c1115fddd79c2364b21d09f8ceec5df.png

bdd1ac512753064c9c9131bad7b13a7b.png

这个直接用就可以了,有些不用的变量可以不要,不过输入变量一定要有。

MC_MoveAbsolute(
Axis:= R_Joint1,
Execute:= bHome,
Position:= GVL_Force.lrHomePos,
Velocity:=
GVL_Force.lrHomeV* GVL_Force.DefaultPulse,
Acceleration:=
GVL_Force.lrHomeV*GVL_Force.DefaultPulse*5,
Deceleration:=
GVL_Force.lrHomeV*GVL_Force.DefaultPulse*5,
Jerk:= GVL_Force.lrHomeV* GVL_Force.DefaultPulse*10,
Direction:= MC_DIRECTION.fastest,
Done=> bHomeDone,
Busy=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

其中方向这个枚举变量我还是有点没弄清楚。真实的尺寸和电子脉冲之间的关系:

实际位置 =(反馈脉冲-原点脉冲)*丝杠螺距(周长)*减速比/单圈脉冲数

这个单圈脉冲 = 100000

三、外部轴控制逻辑分析与仿真

(1)Stateflow

Stateflow 产品信息​ww2.mathworks.cn
0f1a89b8f67b2e7305fc11b5635c1e03.png

Stateflow提供图形化语言,包括状态转换图状态转移图、流程图、状态转换表状态转移表和真值表。使用 Stateflow可以对组合和时序决策逻辑建模,将其作为 Simulink 模型内的一个模块进行仿真,或作为 MATLAB中的一个对象加以执行。利用图形动画,您可以在逻辑正在执行时对其进行分析和调试。编辑时和运行的时检查可确保在实现前的设计一致性和完整性。

输入动作:

873cf8373ab70588f037d7f2229cef66.png

entry 动作 - 以关键字 entry 或 en 开始一个新行,后跟冒号,再后面是用一行或多行表示的一个或多个动作语句。要在同一行上分隔多个动作,请使用逗号或分号。

您可以在状态名称所在的同一行上开始 entry 动作。在这种情况下,要以正斜杠 (/)(而不是 entry 关键字)开始 entry 动作。

exit 动作 - 以关键字 exit 或 ex 开始一个新行,后跟冒号,再后面是用一行或多行表示的一个或多个动作语句。要在同一行上分隔多个动作,请使用逗号或分号。

during 动作 - 以关键字 during 或 du 开始一个新行,后跟冒号,再后面是用一行或多行表示的一个或多个动作语句。要在同一行上分隔多个动作,请使用逗号或分号。

bind 动作 - 以关键字 bind 开始一个新行,后跟冒号,再后面是用一行或多行表示的一个或多个数据或事件。要在同一行上分隔多个动作,请使用逗号或分号。

on 动作 - 以关键字 on 开头,后跟空格和事件或消息的名称,后跟冒号,然后是用一行或多行表示的一个或多个动作语句,例如

on ev1: exit();

要在同一行上分隔多个动作,请使用逗号或分号。如果您需要用不同事件触发不同动作,请在状态标签中输入多个 on 代码块。一个代码块指定一个特定事件或消息的动作,例如:

on ev1: action1(); on ev2: action2();

您为状态输入的动作的执行仅取决于其动作类型,而不取决于您在标签中输入动作的顺序。如果没有为语句显式指定一种动作类型,则 Stateflow 图会将该语句视为一个 entry 动作。

最后

以上就是无情唇彩为你收集整理的matlab状态机_机器人外部轴控制及codesys状态机应用的全部内容,希望文章能够帮你解决matlab状态机_机器人外部轴控制及codesys状态机应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部