如何基于TwinCAT3实现伺服电机控制(一)

article/2025/10/3 12:11:21

先说一下硬件,伺服电机采用定制的关节无框力矩电机,带力矩传感器,EtherCAT通讯,想用在康复机器人上做运动控制研究。

软件方面采用TwinCAT3,这个到倍福官网https://www.beckhoff.com.cn/zh-cn/上搜索下载即可,前置需要安装Visual Studio,我用的是2017版本,具体软件安装我就不具体讲了。

如果软件配置完毕,重启后右下角应该有一个绿色的齿轮图标,这个代表TwinCAT3已经启动了,而在配置模式下则会变为蓝色。

然后打开Visual Studio 2017(TwinCAT3没有单独的应用,是基于VS做的,可以理解为游戏的DLC),会发现新建项目下多了三个TwinCAT的项目,我们选择TwinCAT Projects→TwinCAT XAE Project新建即可,记得不能有中文。

至于TwinCAT3如何操作,我建议大家参考一下倍福官方提供的培训教材,操作有问题或者教材找不到可以联系我。

接下来基于我的课题,简单讲一下如何基于TwinCAT3实现伺服电机控制。

项目新建后会自动生成一堆子目录,其中常用的有MOTION、PLC、I/O这三个。

首先对MOTION右键添加新项,选择NC/PTP NCI Configuration后Ok。

然后对Axes右键添加新项,这个轴对应你要控制的电机轴,我这里只添加了一个,如果是多个电机,这里就应该添加多个。

假设我们已经完成后面PLC和I/O的配置,找到Axis 1下的Settings,首先要Link To I/O并Link To PLC,Axis Type也要根据实际情况修改,我用的是EtherCAT通讯,所以这里选的是CANopen DS402/Profile MDP 742,通讯有问题就可以去找DS402通讯协议手册。因为电机的原因我这里Unit是以°为单位,大家根据实际电机种类修改。

PLC目录下也先右键添加新项,然后就是在References下添加依赖库,在DUTs下创建功能块,在GVLs下定义全局变量,在POUs下编写MAIN主控程序,在VISUs下编写可视化人机交互界面,这些我就不具体说了,大家只要好好看倍福提供的教材一定都能学会。

I/O目录下对Devices右键添加新项,我是用的EtherCAT通讯,大家根据实际通讯协议添加。

然后对Device 1右键添加新项,Type也要根据实际情况选择,我默认选的EK1100这个。

除了上面这些,我还新建了YT NC Scope Project,该项目能对电机的多个运动参数进行实时监控,比如位置、速度、加速度。

PS:新手刚开始接触TwinCAT3难免会遇到下面两个问题

一个是运行时报错AdsWarning:4120

说明电脑VT-X配置不对,此时应找到Real-Time→Settings→Set on Target

把W/O设置为N:1,Set后电脑会重启

重新打开TwinCAT3,点击Read from Target,只勾选CPU Limit为100%的

然后把所有TASK都分配到该内核中,重新运行应该就不会报错了

一个是运行时报错AdsError:1823

说明网卡配置不对,此时应找到I/O→Device→Adapter→Compatible Devices

将实际用到的设备Install一下

再点击Search选择Install的设备即可,重新运行应该就不会报错了

这篇文章只是分享我的经验,不一定能解决所有人的问题,希望大家还是多看看倍福提供的教材,基本问题都能解决!


http://chatgpt.dhexx.cn/article/Ghw9qRAP.shtml

相关文章

TwinCAT3安装教程-EtherCAT学习

TwinCAT3安装教程-EtherCAT学习 情况简介 最近一些时间在研究TwinCAT,分别在笔记本和台式机上运行了TwinCAT3,在此将遇到的问题记录一下,希望能给大家一些帮助。 1、笔记本配置:windows 64位 Qualcomm Atheros AR8171/8175/PCI-E gIGABIT E…

TwinCAT 3 基础——编程基础

文章目录 1、注释2、数据类型3、基本数据类型变量声明方式4、数组5、实际输入输出变量6、常量7、结构体数据8、枚举变量9、条件选择10、循环语句 1、注释 注释是由 “(* ” 开始,由 “ *)”结束。可以放在行首,行尾,也…

TwinCAT3常见问题1

TwinCAT 3 为工程技术开辟了一条新的道路,并通过添加很多功能对实时内核进行扩展。工程环境完全集成在微软的Visual Studio框架中,除了系统配置、运动控制、I/O和IEC61131 PLC编程语言之外,还可以进行编程和调试。本文针对TwinCAT3VS2017使用…

TwinCAT3以太网TCP/IP自由协议通讯

目录 一、TwinCAT3以太网TCP/IP客户端创建 1、系统连接示意图 1、程序创建 (1)工程创建和授权添加 (2)库文件添加 (3)变量创建 (4)程序 2、测试 (1)网络调试助手创建服务端监听 (2&…

TwinCat3学习问题

1. 4115报错 运行①,重启电脑即可。 运行TwinCAT 3 出现 4132和4115 问题,如何解决? 2. TwinCat图标为棕色,切换到运行模式报错。 此电脑 - 右键【管理】 - 【服务和应用程序】 - 【服务】 - 启动【TC3 system service】 启动…

EtherCAT之TwinCAT3安装、使用

目录 一. 环境:Win10专业版(i7处理器,intel网卡)VS Community 2017TC3 二、开启虚拟化,关闭超频。 三、安装TC3.1 四、新建PLC项目 五、新建c项目 一. 环境:Win10专业版(i7处理器&#xff…

keil中获取系统时间

包含头文件:time.h 程序: 运行结果:

VB获取系统时间

所需函数: Now函数:返回系统当前日期和时间 Format函数:根据格式表达式格式化数据 要点: yyyy(year):代表年份 MM(month):代表月份 dd(day&…

UE4 获取系统时间方法

UMG界面搭建 由于虚幻到01分的时前面会把0省略掉所以这里做了个判断 效果展示

Android 获取系统时间

Android开发中经常需要我们获取系统时间,而获取系统时间大致可以用这两种方法解决 1)SimpleDateFormatDateSystem.currentTimeMillis() 其中currentTimeMillis是用来返回一个当前时间距离1970-01-01 00:00:00的毫秒数,之后用这个数值构造一…

calendar 获取系统时间

文章目录 1、简介2、文件结构3、功能代码4、log 打印 1、简介 使用calendar 来获取系统时间,或者设定的时区时间 2、文件结构 3、功能代码 package com.example.tssh.mytimetest;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; im…

微信小程序--获取系统时间

前言 在编写小程序代码的时候,很多时候,我们需要时间戳,也就是需要获取当前的系统时间。这里海轰总结了两种方法。 方法一 当只需要简单的获取年、月、日之类的时候,我们直接利用Date()函数就行 举例 var monthnew Date().get…

wincc获取系统时间

wincc获取系统时间 实现方式:注意事项: wincc获取系统时间有好多种方法,本文主要介绍的是通过 建立驱动程序System Info.chn,并 新建变量来获取系统时间 实现方式: 在变量管理中新建驱动程序。System Info.chn 在新…

codesys 获取系统时间

codesys 获取系统时间 添加获取时间库 添加库输入caa dtutil搜索库,选中双击添加 2.定义功能块,读取时间 PROGRAM PLC_PRG VAR//定义读取当前时间功能块ReadCurrentTime:dtu.GetDateAndTime;//系统当前时间,注意此时的时间为世界时间并非本…

C语言-获取系统时间

目录 1.静态打印系统时间 1.要了解的知识 1.1 time_t 类型 1.1.2struct tm 类型 1.1.3 time()函数 1.2显示系统时间函数 1.2.1 localtime()函数---显示当前时区的时间 1.2.2 ctime()函数---以特定方式显示当前时间信息 1.2.3 asctime()函数---将包含当前日期时间信息的tm*类型…

shell脚本函数返回数组

执行脚本(文件my.sh),输出结果

子函数返回数组(指针和结构体)

一般用void的话就是没有返回值和不需要返回值的了,如调用一个输出函数,这个函数就没必要返回了,事实上这个函数只管输出就好了,也没有什么值要返回的,另一种是用指针传址的时候,因为你传的是地址&#xff0…

c++函数返回数组类型

c函数返回数组类型 首先,C 不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 方法一:将返回值定义…

C++ 函数返回数组处理方法

最近在通过函数返回数组时踩到了一些坑,在此记录一下。 首先C函数的返回类型没有“数组”这一结构,因此一般情况下我们会采用指针去接受数组的首地址来进行返回。另外由于函数体内定义的变量均为局部变量,局部变量被存储在栈区会在函数调用完…

c++ 函数返回数组

以下转自:http://blog.csdn.net/lijiayu2015/article/details/52821562 C中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。 不能直接返回函数中定义的数组,会被释放掉 float* add(a[3],b[3]…