CodeSys学习笔记

news2024/12/23 22:12:48

文章目录

  • 1.运动控制的两种方式
    • 1.1.SM3_CNC
    • 1.2.SM3_Robotics
  • 2.两种运动控制方式的速度、加速度等参数的控制
    • 2.1.SM3_CNC
    • 2.2.SM3_Robotics
  • 3.CNC的M指令的使用(实现)逻辑。
  • 4.SM3_Robotics中的坐标系
  • 5.SM3_Robotics如何实现插补并连续执行?

记录一下学习CodeSys遇到的一些知识点

1.运动控制的两种方式

在codesys中,与运动控制有关的,主要有两个库:SM3_CNC、SM3_Robotics
在这里插入图片描述

假设我们对轴已经配置(组态)完毕,那么SM3_CNC、SM3_Robotics对轴的操作逻辑上会有所不同。
简单来说,SM3_CNC是逐个轴控制、SM3_Robotics是整个轴组一起控制。

1.1.SM3_CNC

SM3_CNC需要单独对每一个轴进行Power、move等操作。同时,还需要引入一个运动学模型,比如:SMC_TRAFO_Gantry2。
运动学模型分为前向动力学模型、方向动力学模型。其中前向动力学是指输入各个电机的当前位置然后输出末端位姿的数学模型。反之,反向动力学是指输入末端的位姿,求解各个电机的位置的数学模型。
在这里插入图片描述

在codesys中,正向动力学模型一般命名为:SMC_TRAFOF_XXX,而反向动力学一般命名为:SMC_TRAFO_XXX。正向动力学求解肯定有且仅有唯一解;但是反向动力学求解,大多数情况下都存在多组解。

1.2.SM3_Robotics

对于SM3_Robotics则一般需要把各个轴绑定成一个轴组(AxisGroup),然后调用函数对轴组进行统一操作,比如:SMC_GroupPower、MC_GroupEnable等等。
SM3_Robotics在进行运动控制时,也是需要进行反向动力学(可能也需要正向动力学)的配置,并且也是使用前面提到的SMC_TRAFOF_XXX,但是这个配置不用我们再单独使用SMC_TRAFOF/SMC_TRAFO之类的功能块,而是在轴组的配置界面中配置即可。也就是,当我们设置好轴组后,轴组已经把自己封装、抽象成了一个运动控制对象,后续我们需要操作就直接对这个对象进行操作即可,而不用单独对其每一条轴进行操作。
在这里插入图片描述

从他们的函数使用关系来看,SM3_Robotics可能是在SM3_CNC的基础上拓展而来?

2.两种运动控制方式的速度、加速度等参数的控制

2.1.SM3_CNC

在CNC中,通过解析G代码,取得各个插值点以及其具体的速度、加速度等值,存放在一个SMC_OUTQUEUE中。解析得到的代码可以这样查看到:在你的CNC对象上右键、选择CNC信息。
在这里插入图片描述
然后在弹出的窗口中点击【显示生成的代码】。从下面可以看到,的确是实例化了一个SMC_OUTQUEUE类型的变量。
在这里插入图片描述
通过把这个queue传递给插补器,让插补器根据queue里面的离散点位进行更多点位的插补。通过查看SMC_OUTQUEUE的元素类型,可以知道其包含了速度、位置等信息。
在这里插入图片描述

插补器功能块(SMC_Interpolator)通过插补后,输出的piSetPosition包含当前需要执行的位置的相关参数。
在这里插入图片描述

2.2.SM3_Robotics

在SM3_Robotics中,基本是手动设置目标位置的参数。但是不同的移动函数关于速度、加速度的使用是不同的。
在这里插入图片描述

假如使用的是MC_MoveCircular、MC_MoveLinear、SMC_GroupJog2,那么是可以设置速度、加速度等参数的。
但是假如使用的是MC_MoveDirectAbsolute,是无法直接设置具体数值,只能设置比例系数xxxFactor。
具体情况请参考帮助手册。
在这里插入图片描述

3.CNC的M指令的使用(实现)逻辑。

参考:【CODESYS运动控制之如何使用M功能.docx】
在这里插入图片描述

办法是监听SMC_Interpolator的wM输出(可能还需要配合iStatus),在检测到wM输出有效值时,利用wM值进行相应的操作,操作完后设置一下bAcknM,告知SMC_Interpolator,让其继续执行后面的代码。
也就是说,此时SMC_Interpolator只是当了个传话筒的作用,具体的功能还是得自己根据SMC_Interpolator给过来的wM值来实现具体的功能。
在这里插入图片描述

4.SM3_Robotics中的坐标系

在机械手控制中,有若干个坐标系类型:
在这里插入图片描述
在这里插入图片描述

ACS: axis coordinate system
轴坐标系,当使用此坐标系时,每个参数都表示对应的轴的当前角度/位置

MCS:The machine coordinate system (MCS) is defined by the applied kinematics which determine its position and orientation.
机器坐标系。参数一般是:x, y, z, pitch, roll, yaw。机器坐标一般是以机械臂的底座为原点。

WCS: world coordinate system
世界坐标系。一般来说,机器坐标系和机器坐标系是平移关系。
引入世界坐标系的目的,可能是为了多个机器/机械手/传感器等设备的配合。

TCS:tool coordinate system
工具坐标系,也就是机械臂末端的坐标系。在进行一些特殊移动时,比较方便。

5.SM3_Robotics如何实现插补并连续执行?

不知道在机械手控制中能否使用插补?假如可以的话,那我就可以把ROS规划的路径trajectory发送给PLC执行了。
从理论上应该是可以的,但是有个问题。插补器插补出来的数据,虽然比原来的更加稠密,但本质上还是位置点,CNC那边是怎么解决点与点之间的连接、过渡的?总不能走一个点停一下,然后再走另外一个点吧?
从例程看,CNC使用的是SMC_ControlAxisByPos。这个功能块看起来是起到动态控制位置的,也就是说它一直都在动态地检测传递过来的位置信息,一旦与当前的位置不符,就执行移动。这样,哪怕不断地传递新的点位过来,也可以保证运动是连续的。
在这里插入图片描述

但是对于轴组,假如我调用MC_MoveLinearAbsolute 来执行,那肯定不可以吧。因为这个函数走到了目标位置就会停下来。
难道是使用SMC_GroupUpdateContinueData 这个功能块?研究一下先。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1293072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】diff命令使用

diff命令 是一个用于比较两个文件或目录之间差异的命令。它可以显示两个文件之间的行级别差异,并以易于阅读的格式输出结果。 著者 由保罗艾格特、迈克海特尔、大卫海耶斯、理查德史泰尔曼和Len Tower撰写。 diff命令 -Linux手册页 语法 diff [选项] [文件1]…

设备间的指令通信

指令通信的概念 要进行设备和设备之间的交流就需要通过串口发送数据进行交流 而串口发送简单的数据只需要传输介质 但是要发送复杂的数据就需要介质和传输的规则了 三种应用场景 比如在上位机和mcu之间 通过上位机管理控制器 从而控制电池 单片机和单片机之间 用户输入数据到…

MySQl int(1)、int(20) 的区别到底在哪里

MySQl int(1)、int(20) 的区别到底在哪里 常思一二,便得自然… int(1)数据类型介绍 在MySQL中,INT(1) 是一种定义整数类型的数据字段,其中的数字表示显示宽度而不是存储范围。具体说,INT(1) 中的数字 1 表示显示宽度&#xff0…

VividTalk创新AI语音匹配图片技术:照片+语音=逼真说话视频!

VividTalk是一个由南京大学、阿里巴巴、字节跳动和南开大学共同开发的项目工具。它通过先进的音频到3D网格映射技术和网格到视频的转换技术,实现了高质量、逼真的音频驱动的说话头像视频生成。这一创新技术使得只需提供一张人物的静态照片和一段语音录音&#xff0c…

KeePass开源密码管理器

KeePass开源密码管理器 KeePass 是一款免费的开源密码管理器,KeePass 将密码存储为一个数据库,而这个数据库由一个主密码或密码文件锁住,也就是说我们只需要记住一个主密码,或使用一个密码文件,就可以解开这个数据库&a…

JavaSE基础50题:8. 获取一个数二进制序列中所有的偶数和奇数位,分别输出二进制序列。

概述 获取一个数二进制序列中所有的偶数和奇数位,分别输出二进制序列。 如:从右往左数 0111(如图) 偶数位:01 奇数位:11 代码 public static void main(String[] args) {Scanner scanner new Scanner(Sys…

动态规划学习——最长回文子序列,让字符串变成回文串的最小插入次数

一,最长回文串 1.题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入&…

Dockerfile详解#如何编写自己的Dockerfile

文章目录 前言编写规则指令详解FROM:基础镜像LABEL:镜像描述信息MAINTAINER:添加作者信息COPY:从宿主机复制文件到镜像中ADD:从宿主机复制文件到镜像中WORKDIR:设置工作目录 前言 Dockerfile是编写docker镜…

#HarmonyOS:装饰器UI描述---@Link

装饰器 装饰器(Decorator)是一种语法结构,用来在定义时修改类(class)的行为。 在语法上,装饰器有如下几个特征。 第一个是字符(或者说前缀)是,后面是一个表达式后面的…

机器学习算法(7)-朴素贝叶斯算法和K最近邻算法

一、说明 在在这篇文章中,我将解释两种机器学习算法,称为贝叶斯定理和 K 最近邻算法。贝叶斯定理以 18 世纪英国数学家托马斯贝叶斯的名字命名,是确定条件概率的数学公式。k 最近邻算法,也称为 KNN 或 k-NN,是一种非参…

Python基础知识-变量、数据类型(整型、浮点型、字符类型、布尔类型)详解

1、基本的输出和计算表达式: prinit(12-3) printf(12*3) printf(12/3) prinit(12-3) printf(12*3) printf(12/3) 形如12-3称为表达式 这个表达式的运算结果称为 表达式的返回值 1 2 3 这样的数字,叫做 字面值常量 - * /称为 运算符或者操作符 在C和j…

k8s中的Pod网络;Service网络;网络插件Calico

Pod网络;Service网络;网络插件Calico Pod网络 在K8S集群里,多个节点上的Pod相互通信,要通过网络插件来完成,比如Calico网络插件。 使用kubeadm初始化K8S集群时,有指定一个参数–pod-network-cidr10.18.0…

再识二叉树

1. 二叉树的存储 二叉树的存储结构分为:顺序存储和类似于链表的链式存储。 其中二叉树的链式存储是通过一个一个的节点引用起来的,常见的表示方式有二叉和三叉表示方式(这里本主主要讲的是链式存储),具体代码如下&…

2个月拿下信息系统项目管理师攻略(攻略超级全)

信息系统项目管理师(高项)一次性过啦!结合这次备考经验,给大家总结一下复习方法。 先上图,开心一下! 一、我为什么选择了高项 为什么我会选信息系统项目管理师,也就是我们常说的高项。 原因1…

bpftrace原理与使用方法

Bpftrace 概念和原理bpftrace安装bpftrace 语法结构bpftrace 变量内置变量自定义变量Map变量 内置函数Bpftrace操作案例文件系统磁盘进程内存 bpftrace是一种基于eBPF(Extended Berkeley Packet Filter)的跟踪工具,用于在Linux系统中进行动态…

PostGIS学习教程十一:投影数据

PostGIS学习教程十一:投影数据 地球不是平的,也没有简单的方法把它放在一张平面纸地图上(或电脑屏幕上),所以人们想出了各种巧妙的解决方案(投影)。 每种投影方案都有优点和缺点,一…

有了安卓模拟器,就能在Windows 10或11上像使用安卓操作系统一样使用安卓

你可以使用Android模拟器在Windows 11或Windows 10中运行Android应用程序。如果你喜欢的应用程序只在手机上运行,但你想在电脑上使用,这些模拟器会很有用。 BlueStacks 与整个操作系统模拟器不同,BlueStacks只在Windows上模拟Android应用程序。它真的很容易使用,所以你不需…

鸿蒙OS应用开发的开发环境

鸿蒙OS应用开发的开发环境 鸿蒙系统发展越来越快,已经开始走进千家万户,从手机到电视机,再到汽车,以后各种手表、智能设备等等。这已经是一个广泛应用的操作系统,也是跟大家生活密切相关的操作系统。要想在这个平台上…

人脸识别安卓主板_MTK方案智能闸机门禁工业安卓主板定制开发

人脸识别主板广泛应用于各个领域,包括人脸支付系统、人脸识别监控系统、写字楼办公楼门禁闸机、校园、地铁、住宅门禁、考勤机、智能门锁、广告机、售卖机等。 主板基于联发科MTK方案,并由行业PCBA和MTK的核心板组成。根据产品需求,可以选择…

SpringBoot3.x代码生成器构建的三层架构主启动类报错

【场景复现】 jdk21环境变量springboot3.x、mybatisplus generator3.5.3构建工程启动: 【原因分析】 显示 factoryBeanObjectType 属性的值类型不正确,应该是一个实现了 FactoryBean 接口的类的全限定名。 注解注入每层对象,找不到Factory…