CODESYS学习笔记

news/2024/2/28 17:31:46

文章目录

  • 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如何实现插补并连续执行?
  • 6.Jerk的意思
  • 7.关于SMC_GroupJog2中的ABC_as_ACS参数的意义

记录一下学习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。这个功能块看起来是起到动态控制位置的,也就是说它一直都在动态地检测传递过来的位置信息,一旦与当前的位置不符,就执行移动。这样,哪怕不断地传递新的点位过来,也可以保证运动是连续的。
在这里插入图片描述
而且从其使能参数bEnable来看,它是在true之后,一直在执行,相当于一个状态。

但是对于轴组,假如我调用MC_MoveLinearAbsolute 来执行,那肯定不可以吧。因为这个功能块在走到了目标位置就会停下来。关于这点,可以从它的执行(是能)参数Execute的介绍可以看到,它是在此参数的上升沿才执行一次的。难道需要到一个点位后,再继续传输下一个点位,然后在同一个扫描(执行)周期内把Execute参数先设置为false然后再设置为true?
在这里插入图片描述假如调用了MC_MoveLinearAbsolute,应该就不用插补器了。因为这个功能块应该内部已经插补了。

大概研究了一下SMC_GroupUpdateContinueData 这个功能块,它可能是和其他功能块配合实现运动时暂停然后再继续原来的路径的。不是用来执行包含了若干个点的路径的。
在这里插入图片描述所以,只能先把需要经过的路径点保存起来,然后用MC_MoveLinearAbsolute逐一把各个点位走完?

6.Jerk的意思

在使用运动控制功能块时,经常可以看到Jerk参数:
在这里插入图片描述
之前还以为是什么急停参数。后来看了资料才知道,是加加速度的意思。【运动控制中的Jerk】

7.关于SMC_GroupJog2中的ABC_as_ACS参数的意义

在轴组点动控制功能块SMC_GroupJog2中,有一个有点奇怪的函数ABC_as_ACS
在这里插入图片描述我们结合例程(C:\Program Files (x86)\CODESYS 3.5.19.40\CODESYS\CODESYS SoftMotion\Examples\Tutorial\Robotics_Jogging.project)来理解一下。
将其设置成false的时候,一切都很好理解。选择好对应的坐标系(ACS、MCS、WCS、TCS)后,点击并按住上方六个参数(X、Y、Z、A、B、C)的12个按钮中的任意一个,便可以对机械臂进行点动操作。在不选择ACS作为操作坐标系时,其中XYZ参数为空间坐标,ABC为对应的绕XYZ轴旋转的角度。
在这里插入图片描述但是一旦勾选了ABC_as_ACS,有时就变得诡异了。
首先,不诡异的是ABC的jog,方向是与选择了ACS控制时一样,也就是ABC这三个是直接控制了最后三个轴的转动角度,这时候ABC_as_ACS(ABC的意义与选择ACS运动时一样)是字面意思、名副其实的。
在这里插入图片描述但是,试图进行XYZ的运动时,选择不同的坐标系会有不同的效果。当选择MCS、WCS时,移动XYZ都正常,都是沿着对应的XYZ轴进行移动。但是选择了TCS时,就不行了,XYZ移动的时候看不出是什么规律。
结论:排除选择了TCS的情况下,一旦勾选了ABC_as_ACS,那么XYZ移动时是在笛卡尔空间中对末端进行点动,而ABC则直接控制了最后三个轴的转动,同时其他轴会进行相应的补偿,从而使末端的位置不发生改变(即仅改变末端的姿态)。


http://www.ppmy.cn/news/1263295.html

相关文章

msvcp100.dll丢失的常见原因/msvcp100.dll丢失的解决方法分享

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时,给使用者带来了很大的困扰。那么,究竟是什么原因导致了msvcp100.dll文件的丢失呢?本…

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip: 192.168.31.10 2. 电脑burp上面打开设置,proxy,增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项,选择手动,192.168.31.10:8080 …

Servlet should have a mapping

第一种可能&#xff1a; 你就是没写Servlet <servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置springMVC需要加载的配置文件--><init-par…

【每日一题】下一个更大的数值平衡数

Tag 【模拟】【取模运算】 题目来源 2048. 下一个更大的数值平衡数 解题思路 方法一&#xff1a;模拟 思路 观察到数据量 0 < n < 1 0 6 0< n <10^6 0<n<106&#xff0c;我们可能返回的数值平衡数最大是 1224444&#xff0c;这个范围可以在时间要求内…

机器连接和工业边缘计算

软件应用和IT创新是制造业投资的主要驱动力。解决方案架构应围绕特定标准进行整合&#xff0c;并采用架构蓝图和最佳实践来满足最终用户的需求。此外&#xff0c;边缘计算&#xff08;Edge Computing&#xff09;也将在制造业中加速部署。 边缘计算是制造业的下一个变革驱动力。…

chmod 在Linux原生应用开发过程中的简单应用

chmod命令实质上是用来修改文件或目录的访问权限的命令。它通过修改文件或目录的访问控制列表&#xff08;Access Control List&#xff0c;ACL&#xff09;来实现权限的更改。 在Linux系统中&#xff0c;每个文件或目录都有一个表示其权限的数字值&#xff0c;即用三个八进制…

多核处理器的体系结构特点(啥是同构、异构?常见的多核有哪些?)

多核处理器的概念 多核处理器是一种集成了多个独立处理核心的中央处理器&#xff08;CPU&#xff09;。每个处理核心都是一个独立的、完整的处理器&#xff0c;可以执行指令、管理数据和执行计算任务。多核处理器的设计旨在提高处理器的整体性能&#xff0c;通过并行执行多个任…

微信小程序 - PC端选择ZIP文件

微信小程序 - PC端选择文件 分享代码片段场景分析解决思路附魔脚本chooseMediaZip 选择附魔后的ZIP文件相关方法测试方法 参考资料 分享代码片段 不想听废话的&#xff0c;直接看代码。 https://developers.weixin.qq.com/s/UL9aojmn7iNU 场景分析 如果你的微信小程序需要选…

JS加密/解密之HOOK实战2

上一篇文章介绍了HOOK常规的应用场景&#xff0c;这篇我们讲一下HOOK其他原生函数。又是一个新的其他思路 很多时候&#xff0c;当我们想要某些网站的请求参数的时候&#xff0c;因为某些加密导致了获取起来很复杂。 这时候hook就十分方便了 源代码 var _JSON_Parse JSON.…

Qt + MySQL(简单的增删改查)

Qt编译MySql插件教程 帮助&#xff1a; SQL Programming QSqlDatabase 静态函数 1.drivers()&#xff0c;得到可以使用的数据库驱动名字的集合 [static] QStringList QSqlDatabase::drivers();2.addDatabase()&#xff0c;添加一个数据库实例 [static] QSqlDatabase QSql…

在jupyter notebook中修改其他文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Android之Binder原理剖析

一&#xff1a;Binder的全面介绍 binder的出现 George Hoffman当时任Be公司的工程师&#xff0c;他启动了一个名为OpenBinder 的项目&#xff0c;在Be公司被ParmSource公司收购后&#xff0c; OpenBinder 由Dinnie Hackborn继续开发&#xff0c;后来成为管理ParmOS6 Cobalt O…

微软发布Orca2,“调教式”教会小规模大语言模型如何推理!

我们都知道在大多数情况下&#xff0c;语言模型的体量和其推理能力之间存在着正相关的关系&#xff1a;模型越大&#xff0c;其处理复杂任务的能力往往越强。 然而&#xff0c;这并不意味着小型模型就永远无法展现出色的推理性能。最近&#xff0c;奶茶发现了微软的Orca2公开了…

企业快递账单管理教程

快递账单管理怎么做&#xff0c;才能更高效&#xff1f;想要回答这个问题&#xff0c;首先我们要了解现如今企业快递账单管理的大致有哪些方式&#xff1a; 1、纸质化管理 纸质化管理现在虽然少见&#xff0c;但是我们应该挺熟悉。在电子面单面试之前&#xff0c;企业快递账单…

Python中的lambda匿名函数详解以及三种经典使用场景

lambda匿名函数 匿名函数&#xff0c;顾名思义就是不需要具体定义函数名的函数。我们首先抛开复杂的定义&#xff0c;看两个具体例子。 先看一个无参数函数的例子。假设我们需要一个return 1的函数&#xff0c;如果使用普通的函数定义方式&#xff0c;其代码为&#xff1a; …

使用LangSmith来快速学习LangChain

好风凭借力&#xff0c;送我上青云&#xff01; 什么是LangSmith LangSmith is a platform for building production-grade LLM applications. It lets you debug, test, evaluate, and monitor chains and intelligent agents built on any LLM framework and seamlessly int…

UI自动化测试框架:PO 模式+数据驱动

1、PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

NTP反射放大攻击

文章目录 什么是NTPNTP反射放大攻击解决方案搭建NTP服务器部署服务器端windows NTP命令行本机测试 部署客户端ntpdatechrony 实验Python利用脚本 什么是NTP 基于UDP协议的NTP&#xff08;网络时间协议&#xff09;&#xff1a;使网络中各个计算机时间同步的一种协议 用途&…

总结:服务器批量处理http请求的大致流程

总结&#xff1a;服务器批量处理http请求的大致流程 一客户端发起请求&#xff1a;可以多个请求同时发送二Web服务器解析请求&#xff08;如&#xff1a;Nginx&#xff09;&#xff1a;可以多个请求同时解析三Servlet容器接收请求&#xff08;如&#xff1a;tomcat&#xff09;…

使用Pytorch实现Grad-CAM并绘制热力图

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 看一下这个main cnn.py的文件 那这里我为了方便 就直接从官方的torch vision这个库当中导入一些我们常用的model 比如说我这里的例子是采用的mobile net v3 large这个模型 然后这里我将pretrain设…
最新文章