CODESYS学习笔记

记录一下学习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】
【精密机械设计-S型速度曲线与Jerk(S-curve and Jerk)】
在这里插入图片描述

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

在轴组点动控制功能块SMC_GroupJog2中,有一个有点奇怪的函数ABC_as_ACS
在这里插入图片描述

  • Mixed jogging. The position is jogged in cartesian space, the orientation axes are jogged in axis space. If the input CoordSystem equals ACS, then this input is ignored. Otherwise, if the input CoordSystem is a cartesian coordinate system, the orientation is jogged in ACS, while the position is jogged in the cartesian coordinate system.
    Forward/Backward[3…5] control the axis positions of the orientation axes. Forward/Backward[0…2] control the (X,Y,Z) position of the TCP. When jogging the orientation axes, the robot will perform a compensating movement so that the TCP remains stationary.
    If TRUE, the axis group抯 kinematic transformation must be a so called coupled kinematics, composed of a positioning and an orientation kinematics. It must support SMC_ORIENTATION_MODE.Axis. If not, the error SMC_CP_AXIS_ORIENTATION_IPO_OFFSET2_NOT_IMPLEMENTED or SMC_CP_KIN_DOES_NOT_SUPPORT_AXIS_ORIENTATION_IPO is returned. The FB does not have to be restarted to clear this error, instead the input ABC_as_ACS can be set to FALSE.
    If FALSE, then, depending on the input CoordSystem, either all axes are jogged in axis coordinates (ACS) or the position and orientation are jogged in cartesian space. In this case, Forward/Backward[3…5] rotate the TCP around the X-/Y-/Z-Axis of the cartesian coordinate system.

这个功能,它只是在点动控制(也就是功能块SMC_GroupJog2)中被使用,其实不用太过于纠结,它的作用很简单,在点动控制(Jogging)时,

  • 假如为False,那么在对工具中心点TCP进行位置(XYZ)点动时,会保持TCP当前的姿态(即RX、RY、RZ)不变;
  • 假如为True,就会保持最后三个轴(J4、J5、J6)的角度不变(注意:是轴的角度,也就是电机不转动),这时候,也就相当于这个六轴机械手变三轴机械手了,只用三轴来求解空间位置(XYZ)这三个自由度估计也是够的。
    更直观的理解是:在末端平面水平时,放一瓶水到上面。假如勾选ABC_as_ACS,在机械臂进行XYZ点动时,水会掉(保证了位置的准确,但不求解姿态);假如不勾选,水不会掉(既保证了位置准确,又保证了姿态准确)。
    在这里插入图片描述

我们结合例程(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、ACS的情况下,一旦勾选了ABC_as_ACS,那么XYZ点动时,是在笛卡尔空间中对末端进行移动;而ABC点动则是直接控制了最后三个轴的转动,同时其他轴会进行相应的补偿,从而使末端的位置不发生改变(即仅改变末端的姿态,而末端的位置保持不变)。

8.热复位与冷复位

这两个操作都能够使PLC进行复位,使程序重新执行。主要区别是针对变量的复位。
【XS 系列可编程控制器用户手册【软件篇】(Codesys)】
在这里插入图片描述

9.opcUA的使用

在将本机作为PLC时(可能使用别的电脑作为PLC时也一样,具体问题具体分析),假如要使用opcUA,那么要先设置一下PLC的opcUA server的证书。

9.0.将PLC程序中的变量映射到opcua

在Application树节点上右击,添加对象–》符号配置
在这里插入图片描述

在这里插入图片描述

9.1.PLC的opcUA server的证书创建

注意,在进行以下操作前,需要先连接设备。
点击codesys的编程软件的右下角的金色盾牌按钮
在这里插入图片描述
然后参考这个博客,进行证书的设置。
【NodeJS与CODESYS进行OPCUA通信】

不嫌麻烦的话,把他空的全搞上。
在这里插入图片描述设置好证书后,最好重启一下设备(先stop PLC,再start PLC)。
在这里插入图片描述

因为opcUA服务是在设备(PLC)启动后就开启的。
在这里插入图片描述

9.2.使用UAexpert测试opcUA的通讯

设置好证书并重启后,便可以按照下面这个博客所指导的,用UAexpert来连接opcUA server:
【Codesys与UAexpert软件进行OPC UA通讯设置】
连接时,可以选择匿名连接或者账号密码的方式连接。

9.2.1.匿名连接准备

假如想要匿名连接,要先在codesys中开启设置,允许匿名登录。
在这里插入图片描述然后安全设置按照下面的参数设置,设置完要重启PLC:
在这里插入图片描述

9.2.2.用户名+密码登录准备

用户名、密码的登录,需要有用户存在,不过一般在第一次登录时已经创建了。这个问题不大。
在这里插入图片描述

9.2.3.连接

在连接时,有个安全设置,可选加密选项。加密或者非加密(Security Settings)要根据具体情况设置,可以在设备-》安全设定中查看/设置加密配置,主要是CommunicationPolicy、CommunicationMode这两个的设置, 设置完后要重启PLC才会生效。
在这里插入图片描述
不知道为啥出现两个None - None(uatcp-uasc-uabinary),但是两个都是可以使用的
在这里插入图片描述
这里可选匿名登录或者用户登录
在这里插入图片描述点击连接图标,在弹出的窗口输入密码,点击ok。
在这里插入图片描述
第一次连接有证书的PLC时,会提示使用PLC的证书,点击 trust…就ok。
在这里插入图片描述

然后就可以顺利连接上了。

在这里插入图片描述

10.CodeSys中调用C语言写的动态库

内容比较多,单独写了一个文章【CodeSys中调用C语言写的动态库】

### 回答1: CODESYS是一种广泛使用的工业自动化开发软件,为了学习和使用这个软件,我们可以通过多种渠道获取相关资料。 首先,CODESYS官网是CODESYS学习资料的主要来源。在该网站上,我们可以找到大量的教学文档、用户手册、应用案例等各种资源。在CODESYS官网上还有视频教程和网上培训课程,有很多有经验的开发者可以通过这些途径分享他们的知识和经验。 其次,CODESYS社区是另一个很好的资源。在CODESYS社区中,我们可以与其他开发者交流,讨论代码问题,获取建议和更新。CODESYS社区是一个非常活跃的社区,对于初学者或有经验的开发者来说都是非常有用的。 此外,在网上还有很多其他资源可以获取CODESYS学习资料。一些在线课程网站和视频分享平台都有相关的教学资源。在GitHub等代码分享网站上,也有很多有用的资源可以供学习和使用。 综上所述,学习CODESYS的最佳途径是结合上述渠道,通过官网、社区、在线课程和代码分享网站等资源进行学习。通过不断实践和探索,我们可以获得更多的经验和知识,并更好地使用这种工业自动化开发软件。 ### 回答2: CODESYS 是一个功能强大的工程开发工具,用于编程自动化控制系统。CODESYS 学习资料涉及广泛,可以包括对 CODESYS 功能、应用案例、编程语言等方面的学习CODESYS 学习资料包含以下方面: 1. 介绍 CODESYS 软件功能及应用场景,了解软件的特点、优势和适用范围。 2. 了解 CODESYS 编程语言,如结构化文本语言、图形化编程语言等,掌握编程规范和代码风格。 3. 学习 PLC 编程基础知识及实用技能,如 PLC 硬件、输入输出模块、数据存储等。 4. 了解软件工程开发方法,如软件需求分析、系统架构设计、需求管理、质量保证等,以帮助开发高质量项目。 5. 掌握 CODESYS 的应用开发技巧,如基本功能块的使用、程序逻辑设计、通讯协议的实现等。 6. 基于 CODESYS 开发实例的分析和探讨,如开发自动化生产线、机器人控制、智能家居等项目,以体验实际应用场景,同时提升开发能力。 总的来说,CODESYS 学习资料旨在通过深入浅出的方式,让人们掌握 CODESYS 工程开发工具,进而开发出有效的自动化控制程序。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值