0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个FOR循环完成多个伺服轴的实例化方法

工控论坛 来源:博途之友 2025-07-07 13:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:博途之友;作者:张浩杰

阶段“优秀工程师之路

编者说:一次博途之友的群交流时,我问大家:轴控应用库,大家用的多吗?工程师作者说:最近刚刚使用上,很方便。使用官方的库,二次封装成多重背景数据块,一个循环完成所有轴的实例化调用。

马上请他分享一下应用经验。

ea60a2a4-5684-11f0-9ca0-92fbcf53809c.png

在最近的项目中,我遇到了多轴协同控制的需求。由于现场工艺要求,单机设备可能需要根据实际情况动态增减轴数量。如果采用逐个调用独立指令的方式,不仅后期调试会变得异常繁琐,而且若不符合PLCopen规范,还容易导致轴控异常报警,故障排查将十分困难——这种方案显然不具备可行性。

虽然考虑过自行封装轴控功能块,但考虑到需要投入大量时间进行验证测试,短期内难以保证稳定性,这个想法只能暂时搁置。

经过一番调研,我欣喜地发现了官方提供的标准化轴控库解决方案。官方库文件几乎涵盖了轴控的所有常见应用场景,主要提供两种类型的控制库:LAxisCtrl_PosAxis和LAxisCtrl_DBAnyBased。通过查阅技术手册发现,这两种库在接口类型和资源占用方面存在明显差异,后者对系统资源的消耗更大。有了官方认证的标准化轴控库,不仅完全符合PLCopen规范,还免去了自行开发的诸多风险,这让我对轴控封装成标准化充满信心!

按照常规思路,本打算创建一个FB功能块,直接调用官方库中的"LAxisCtrl_PosAxis"模块。要么将其定义为数组类型,要么自定义包含轴控接口的数据结构再进行数组化(就像处理气缸实例化那样简单直接)。标准化和模块化是提升开发效率和维护便利性的关键。以气缸控制为例,引入"最大气缸数"这一全局常量,实现了气缸实例化的标准化管理。当设备配置变更需要调整气缸数量时,仅需修改该常量值即可自动适配所有相关控制逻辑,这种设计理念极大地简化了系统配置和维护工作。

所有气缸实例化

ea713db2-5684-11f0-9ca0-92fbcf53809c.png

主程序调用

ea88220c-5684-11f0-9ca0-92fbcf53809c.png

然而,实际情况比预期要复杂许多,经过多次试验验证,系统在输入接口管脚处存在以下关键限制:

1、不支持对TO_PositioningAxis类型的数组引用,仅允许单个TO_PositioningAxis数据类型;

2、静态参数引用功能缺失;

3、无法直接对官方提供的控制库进行数组化引用。

如果不能循环引用的话,达不到我的标准化需求,那么做这个块的意义就不大了。于是我又测试一个LAxisCtrl_DBAnyBased的库,结果还是一样不支持。但发现了一种新的数据类型DB_ANY,一查原来是万能的数据类型。那么能不能指向TO_PositioningAxis呢?答案是可以的,但是不能直接使用,需要转换一下。

ea90146c-5684-11f0-9ca0-92fbcf53809c.png

ea99d754-5684-11f0-9ca0-92fbcf53809c.png

经过测验发现"LAxisCtrl_PosAxis"库只能创建为静态参数,那么新思路:先封装一个单轴带参数引脚的FB块>>再创建一个FB轴实例块对其单轴FB块循环调用>>最后主程序调用FB轴实例块。

基础层:封装单轴控制FB块,集成所有运动控制、状态监控和参数配置功能

管理层:开发轴管理FB块,通过循环调用机制管理多个单轴实例,提供统一接口

应用层:主程序只需调用管理块,通过修改’gi_AxisMAXNo’常量即可调整轴数

一、基础层:单轴FB块的封装

eaa0fe58-5684-11f0-9ca0-92fbcf53809c.png

二、管理层:FB轴实例化

ead8266c-5684-11f0-9ca0-92fbcf53809c.png

三、应用层:

1、Main调用

eaeed9ca-5684-11f0-9ca0-92fbcf53809c.png

2、轴限位

值得注意的是,若是想开放软限位值,只能通过Axis DB块下PositionLimits_SW结构体实现。

eb0374f2-5684-11f0-9ca0-92fbcf53809c.png

eb12fef4-5684-11f0-9ca0-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2822

    浏览量

    52802
  • 运动控制
    +关注

    关注

    5

    文章

    793

    浏览量

    34265
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27114

原文标题:一个FOR循环完成多个伺服轴的实例化方法

文章出处:【微信号:gkongbbs,微信公众号:工控论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【FPGA设计实例】用FPGA实现R/C伺服控制

    `本次FPGA设计实例,我们将讲解如何用FPGA实现R/C伺服控制R / C伺服(“远程控制伺服
    发表于 03-14 10:49

    通过拖曳的方法改变已经初始X位置的游标的位置

    现在手头上一个项目是通过算法定位波形图中游标的X位置,问题是算法可能不准,所以我打算在
    发表于 04-17 23:03

    伺服控制同步精密运动

    伺服控制同步精密运动 精密加工是多步骤过程,先是粗略切削,然后经过多道精细切削才能达到要求。多个电机驱动进给主轴和
    发表于 01-25 16:48

    LabVIEW程序中放置多个多个While循环,其中的循环执行缓慢

    我在VI里放置了7独立的while循环,有while中没有加延时,但是这个
    发表于 03-17 16:59

    如何使用动态事件停止多个while循环

    现在只用它来停止while循环,事件信息会被刷新么?为什么三循环接收到了,而循环没有接收到
    发表于 10-25 11:33

    使用ODDR转发多个时钟是否必须实例几个ODDR?

    问候,两与ODDR相关的问题:1)如果我想将由同一个BUFG驱动的同时钟转发到多个外部设备,我是否必须实例
    发表于 11-02 11:28

    请问如何在Vivado项目中实例hdl系统生成器输出的多个实例

    嗨,如何在Vivado项目中实例hdl系统生成器输出的多个实例?在vivado项目中很容易实例
    发表于 07-31 10:38

    FANUC伺服的屏蔽

    I 系列产品,携带多个放大器或多放大器时,有时为了调试方便和操作方便需要, 将伺服脱开或电机脱开,通过以下方法可以方便的实现。
    发表于 04-26 15:23 106次下载
    FANUC<b class='flag-5'>伺服</b><b class='flag-5'>轴</b>的屏蔽

    伺服的屏蔽方法

    机床在使用过程中,可能存在对机床使用影响不大的伺服发生故障报警或需要临时拆除的情况,此时通常可以采取些非常简便的方法将该伺服
    发表于 10-09 11:11 0次下载
    <b class='flag-5'>伺服</b><b class='flag-5'>轴</b>的屏蔽<b class='flag-5'>方法</b>

    种自动生成循环摘要的方法

    采用形式方法证明软件的正确性,是保障软件可靠性的有效方法.而对循环语句的分析与验证,是形式证明中的关键对
    发表于 12-29 11:12 0次下载

    如何使用PLC控制两多个伺服电机同步运行

    如何用PLC控制两多个伺服电机同步运行主电机速度改变时,其它伺服电机也跟着同步运行。用第
    发表于 07-18 08:00 21次下载
    如何使用<b class='flag-5'>一</b><b class='flag-5'>个</b>PLC控制两<b class='flag-5'>个</b>或<b class='flag-5'>多个</b><b class='flag-5'>伺服</b>电机同步运行

    西门子Profinet总线控制多伺服方法

    主机。 有两种方法: 1.工艺来控制伺服,最多带8伺服,属于集中控制的方法
    的头像 发表于 09-22 17:36 5.4w次阅读
    西门子Profinet总线控制多<b class='flag-5'>轴</b><b class='flag-5'>伺服</b>用<b class='flag-5'>方法</b>

    基于HPM6750的三伺服运动控制方案

    本方案中,X、Y、Z协同工作,在伺服控制中接入插补算法,完成世界地图绘制,如下视频为三
    的头像 发表于 11-24 14:22 2714次阅读

    LTspice:将多个模型实例组合成符号

    当您需要模型的多个实例时,复制和粘贴符号很容易,但有时您可以通过使用单个符号来定义同器件的多个实例来收紧原理图。例如,不要并行放置四
    的头像 发表于 01-08 09:28 2813次阅读
    LTspice:将<b class='flag-5'>多个</b>模型<b class='flag-5'>实例</b>组合成<b class='flag-5'>一</b><b class='flag-5'>个</b>符号

    伺服芯搞定

    伺服芯搞定
    的头像 发表于 10-19 17:54 1206次阅读
    多<b class='flag-5'>轴</b><b class='flag-5'>伺服</b>,<b class='flag-5'>一</b>芯搞定