运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

news2024/9/25 3:28:08

本文主要介绍正运动技术EtherCAT控制器在VS平台采用C++语言实现的各种PSO功能。正运动提供多种PSO模式供用户搭配不同的场景使用。

本节主要讲解采用TABLE寄存器存储的数据表触发比较,更多周期比较模式、二维三维比较模式参见下一节说明。

一、硬件介绍

ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。

在这里插入图片描述

ZMC408CE支持8轴运动控制,最多可扩展至32轴,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随等功能。

ZMC408CE支持8轴运动控制,可采用脉冲轴(带编码器反馈)或EtherCAT总线轴,通用IO包含24个输入口和16个输出口,部分IO为高速IO,EtherCAT最快100us的刷新周期。

ZMC408CE支持8个通道的硬件比较输出、硬件定时器、运动中精准输出,还支持8通道PWM输出,对应的输出口为OUT0-7,支持8个通道同时触发硬件比较输出,用于多通道的视觉飞拍场合等。

ZMC408CE支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。
在这里插入图片描述

ZMC408CE内置高精度PSO位置同步输出功能,在加工圆角与曲线时即使进行有减速调整,在高速加工的场合中也能控制激光输出的等间距输出。

二、PSO技术介绍

PSO(position synchronized output)即位置同步输出,本质是通过采集实时的编码器反馈位置(无编码器可使用输出的脉冲位置)与比较模式设定的位置进行比较,控制OP高速同步输出信号,PSO示意图如下。
在这里插入图片描述

PSO一般与激光器(或点胶喷射阀等设备)同步输出信号进行相位同步,在运动轨迹的所有阶段以恒定的空间(或恒定时间)间隔触发输出开关,包括加速、减速和匀速段,从而实现脉冲能量均匀地作用在被加工物体上。

PSO功能的特点是能高速且稳定的输出信号,因为输出精度足够高,所以能够在整个运动轨迹中以固定的距离触发输出信号而不用考虑总体速度,即在直线部分以很快的速度运动,而在圆角部分减速的同时也能保证输出间距恒定。

通常圆角加工部分在整个加工过程中占有比较小的部分,这样在保证加工效果的同时,就可以最大限度地提高产能。

在这里插入图片描述

正运动的PSO功能调用ZAux_Direct_HwPswitch2函数接口实现,该函数采用硬件实现IO的高速比较输出,响应速度达到微秒级别,故名硬件比较输出。

三、MFC项目的开发

(一)新建MFC项目并添加函数库

注:本例程在VS2010编译环境下,基于.NET Framework 4.0框架创建的MFC窗体应用程序。

1.工具栏菜单“文件”→“新建”→“项目”,启动创建项目向导。

在这里插入图片描述

2.选择开发语言为“Visual C++”和.NET Framework 4以及MFC应用程序,填写好程序名以及选择好程序存放路径,点击确定。
在这里插入图片描述

3.点击下一步。
在这里插入图片描述

4.选择类型为“基于对话框”,点击下一步或者完成即可。
在这里插入图片描述

(二)找到厂家提供的C++函数库文件

1.进入厂商提供的光盘资料,找到“8.PC函数”文件夹,并点击进入,找到C++函数库,路径如下(64位库为例)。
在这里插入图片描述

2.选择“函数库2.1”文件夹。
在这里插入图片描述

3.选择“Windows平台”文件夹。
在这里插入图片描述

4.根据需要选择对应的函数库,这里选择“64位库”。
在这里插入图片描述

5.解压C++压缩包,里面有C++对应的函数库。
在这里插入图片描述

6.函数库具体路径如下。
在这里插入图片描述

7.将厂商提供的C++库文件以及相关文件复制到新建的项目中。
在这里插入图片描述

(三)在项目中添加静态库和相关头文件

静态库:zauxdll.lib, zmotion.lib

相关头文件:zauxdll2.h, zmotion.h

1.先右击头文件,接着依次选择:“添加”→“现有项”。
在这里插入图片描述

2.在弹出的窗口中依次添加静态库和相关头文件。
在这里插入图片描述

3.声明用到的头文件和定义控制器连接句柄。
在这里插入图片描述

在这里插入图片描述

至此,项目新建完成。

(四)查看PC函数手册

用户需要从PC函数手册中获取运动控制开发使用的函数接口,对照手册说明使用,PC函数手册在光盘资料查看,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册V2.1.pdf”。
在这里插入图片描述

(五)控制器网口连接函数接口

PC编程一般使用网口对控制器和工控机进行链接。ZAux_FastOpen();如果链接成功,该接口会返回一个链接句柄。通过操作这个链接句柄可以实现对控制器的控制。

ZAux_OpenEth()接口说明:
在这里插入图片描述

项目应用截图:
在这里插入图片描述

(六)硬件比较输出函数接口

使用对下位机寄存器操作的指令操作链接句柄“g_handle”,对控制器进行寄存器内容取值,实时控制下位机相关的指令如下。

实时全局变量指令:ZAux_Direct_HwPswitch2硬件比较输出指令到位置后硬件自动触发op输出信号。
在这里插入图片描述

(七)硬件定时器函数接口

ZAux_Direct_HwTimer硬件定时器硬件比较输出后一段时间还原电平。
在这里插入图片描述

四、MFC程序的运行和读写控制开发

(一)Demo交互界面

Demo主要分为三个部分:

1.链接控制器,支持网口连接和串口连接。

2.配置基本轴参数。

3.配置硬件比较输出,可选多种模式测试,部分模式需要先配置TABLE的比较点数据才能启动。
在这里插入图片描述

(二)常用模式例程功能与效果

1.单轴比较(模式1)
在这里插入图片描述

ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode, int Opnum,int Opstate,float ModePara1, float ModePara2,float ModePara3,float ModePara4).

(1)handle:控制器连接句柄;

(2)Axisnum:比较轴号;

(3)Mode:1-启动比较器;

(4)Opnum:对应的输出口;

(5)Opstate:第一个比较点的输出状态;

(6)ModePara1:第一个比较点绝对坐标所在TABLE寄存器编号;

(7)ModePara2:最后一个比较点绝对坐标所在TABLE寄存器编号;

(8)ModePara3:第一个点判断方向,0坐标负向,1坐标正向,-1不使用方向;

(9)ModePara4:模式1里面,该参数无意义,填0或其他任意值。

模式1主要功能为:在TABLE寄存器里面设置好比较点,碰到设置好的单轴比较点之后,输出口电平反转。

该模式使用时需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置table寄存器,点数量等),最后设置比较点的运动方向,启动比较。紧接着驱动轴运动即可。

如下图所示,设置高速比较输出口0,首个比较点的输出状态为1,设置比较轴为0。设置4个比较点,比较点坐标分别为:100,200,300,400。即当轴运动到100,200,300,400时,都会触发电平变化。
在这里插入图片描述

示波器波形如图所示:由图可得输出口OP(0)在100,200,300,400时会发生电平变化。
在这里插入图片描述

2.清除比较点(模式2)

ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode, int Opnum,int Opstate,float ModePara1, float ModePara2,float ModePara3,float ModePara4).

(1)handle:控制器连接句柄;

(2)Axisnum:比较轴号;

(3)Mode:2-清除比较缓冲区;

(4)Opnum:对应的输出口;

(5)Opstate:模式2里面,该参数无意义,填0;

(6)ModePara1:模式2里面,该参数无意义,填0;

(7)ModePara2:模式2里面,该参数无意义,填0;

(8)ModePara3:模式2里面,该参数无意义,填0;

(9)ModePara4:模式2里面,该参数无意义,填0。

使用前需要调用此模式,清除可能没有比较完成的数据。使用过程中也可以发送此命令,停止比较。

3.矢量比较方式(模式3)
在这里插入图片描述

ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode, int Opnum,int Opstate,float ModePara1, float ModePara2,float ModePara3,float ModePara4).

(1)handle:控制器连接句柄;

(2)Axisnum:比较轴号;

(3)Mode:3-启动比较器;

(4)Opnum:对应的输出口;

(5)Opstate:第一个比较点的输出状态;

(6)ModePara1:第一个矢量距离比较点绝对坐标所在TABLE寄存器编号;

(7)ModePara2:最后一个矢量距离比较点绝对坐标所在TABLE寄存器编号;

(8)ModePara3:模式3里面,该参数无意义,填0或其他任意值;

(9)ModePara4:模式3里面,该参数无意义,填0或其他任意值。

模式3主要功能为:在TABLE寄存器里面设置好比较点,碰到设置单轴矢量距离比较点之后,输出口电平反转。

该模式使用时需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置TABLE寄存器,点数量等),启动比较。紧接着驱动轴运动即可。

如下图所示,设置高速比较输出口0,首个比较点的输出状态为1,设置比较轴为0。设置4个比较点,比较点坐标分别为:100,200,300,400。即当轴矢量距离运动到100,200,300,400时,都会触发电平变化。
在这里插入图片描述

示波器波形如图所示:由图可得输出口OP(0)在100,200,300,400时会发生电平变化。
在这里插入图片描述
本次,正运动技术运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO,就分享到这里。更多精彩内容请关注“正运动小助手”公众号。

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

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

相关文章

STM32 CubeMX按键点灯

本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解:1. GPIO的输入HAL库函数:2. 消抖:3. 详细代码四,实验现象:总结前言 我们继续讲解 stm32 f103,这篇文章将详细 为大家讲…

MATLAB | 如何用MATLAB绘制花里胡哨的山脊图

本期推送教大家如何绘制各种样式的山脊图,这里做了一个工具函数用来实现好看的山脊图的绘制,编写不易请多多点赞,大体绘制效果如下: 依旧工具函数放在文末。 教程部分 0 数据准备 数据为多个一维向量放在元胞数组中,…

oracle数据库常用操作

1.连接登录切换用户su - oracle以管理员模式登录到sqlplus:sqlplus / as sysdba oracle登录身份有三种:1.1Normal 普通身份;1.2.sysdba 系统管理员身份;若以 ‘sysdba’ 方式认证,登录用户为 ‘SYS’,为 Or…

spring事务管理器原理?mybatis如何集成spring事务管理器?

目录 1. spring事务管理器开启事务做了些什么事情: 1.1 创建mysql数据库连接: 1.2 开启mysql事务 1.3 将当前事务所使用的连接绑定到ThreadLocal中,供后续执行sql命令使用。 2. mybatis如何集成spring事务管理器? 3. mysql相关命令 4. …

Java常用框架(三)

三、SpringBoot 1.Spring及其优缺点? 1.1 概念 重量级企业开发框架EJB的替代品,通过依赖注入、面向切面编程,使用简单Java对象POJO为企业Java开发提供了相对简单的方法。 1.2 优缺点 1.2.1 优点 组件代码轻量级 1.2.1 缺点 配置重量级…

Spring Batch 高级篇-多线程步骤

目录 引言 概念 案例 转视频版 引言 接着上篇:Spring Batch ItemWriter组件,了解Spring Batch ItemWriter处理组件后,接下来一起学习一下Spring Batch 高级功能-多线程步骤 概念 默认的情况下,步骤基本上在单线程中执行&…

springBoot使用ShardingJDBC实现分表

ShardingSphere的介绍 ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞 生,最初就叫ShardingJDBC。2016年的时候,由其中一个主要的开发人员张亮, 带入到京东数科,组件团队继续开发。在国内历经了当当网、…

链动2+1系统|购买三单就能迅速回本,链动2+1模式到底有多暴利?

链动21模式号称起步创业无泡沫,半个月就能盈利上百万,用户裂变速度更是让人瞠目结舌。那么,链动21模式到底有多暴利?其实链动21模式最关键的,是合理的利润分配和奖励机制,让消费者在购物的同时,…

【解决报错】‘jupyter‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

在当前路径下使用cmd打开后,输入jupyter notebook出现如下错误: 通常可能出现的问题有两种: (1)你本身就没安装jupyter,如果你配置了anaconda,就自带jupyter,直接跳到问题2。如果确…

Confluence主页面更新记录停留在去年,搜索也只能搜索去年之前的数据问题解决方案

问题描述 Confluence主页最近更新页面不更新了,停留在之前的时间段。其次搜索也只能搜索出来停留在这个时间段之前的数据。 核心原因 索引出现问题了,重建索引即可。 解决办法 直接重启Confluence。 重启Confluence的姿势 描述一下我解决思路&…

28-vuex

vuex 一、vuex 专门在vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。 使用场景&a…

Java 【数据结构OJ题十道】—— 二叉树篇1

文章目录一、 检查两棵二叉树是否相同二、 另一棵二叉树的子树三、 二叉树的构建及遍历四、序列化二叉树和反序列化二叉树(难)五、二叉树创建字符串六、 二叉树前序非递归遍历实现七、 二叉树中序非递归遍历实现八、 二叉树后序非递归遍历实现九、二叉搜索树中找到两个结点的最…

如何将电脑文件备份到百度网盘

如何将电脑文件备份到百度网盘?说到文件备份,很多小伙伴会将电脑文件备份到移动硬盘或者U盘里,移动硬盘和U盘是比较常见的存储介质,使用和携带起来也是非常方便,因此深受大家的喜欢。除此之外,大家可能还忽…

2023年,IT互联网还有发展前景吗?

不得不说,互联网在整个社会经济发展中扮演着不可或缺的角色;不仅自身的技术具有前沿性,也推动着其他行业进入数字化经济时代,让我们的工作生活变得更加便捷。 在“互联网”时代,每个服务行业都会利用大数据&#xff0…

将自带记事本替换为Notepad2【中文版,带替换文件】

Notepad2是我在寻找一个合适的代码浏览工具的时候发现的,当需要一个用来浏览代码的文本编辑器时候,需要体积小,速度快,语法高亮,解释度高,VsCode作为生产环境已经不适合作为浏览工具了。了解到Notepad2&…

《动手学习深度学习》笔记(二)线性神经网络

三、线性神经网络 3.1 线性回归 3.1.1 介绍 1. 回归是为一个或多个自变量与因变量之间的关系建模的一类方法。而线性回归基于几个简单的假设:① 自变量和因变量关系是线性的;② 允许包含噪声但是噪声遵循正态分布。   2. 训练数据集/训练集&#xff…

算法训练营 day53 动态规划 买卖股票的最佳时机系列2

算法训练营 day53 动态规划 买卖股票的最佳时机系列2 买卖股票的最佳时机III 123. 买卖股票的最佳时机 III - 力扣(LeetCode) 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。…

软件项目管理知识回顾---网络图

网络图 9.网络图 9.1简介 1.分类 AOA,双代号,ADMAON,PDM,单代号,前导图2.活动的逻辑管理 头到头/尾,尾到头/尾 依赖关系 3.工序 紧前紧后9.2绘制规则 1.两个节点只能一条线。不能是平行线。平行的话就不知道是哪个活动…

LeetCode-93. 复原 IP 地址

目录题目思路回溯法题目来源 93. 复原 IP 地址 题目思路 意识到这是切割问题,切割问题就可以使用回溯搜索法把所有可能性搜出来,和131.分割回文串就十分类似了。 回溯法 1.递归参数 startIndex一定是需要的,因为不能重复分割&#xff0c…

【GeoDjango框架解析】读取矢量数据写入postgis数据库

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 【GeoDjango框架解析】读取矢量数据写入postgis数据库 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列…