自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三)

news2024/11/15 21:24:16

PCIE1032H功能简介

XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。

XPCIE1032H集成了强大的运动控制功能,结合MotionRT7运动控制实时软核,解决了高速高精应用中,PC Windows开发的非实时痛点,指令交互速度比传统的PCI/PCIe快10倍。

在这里插入图片描述
XPCIE1032H支持PWM,PSO功能,板载16进16出通用IO口,其中输出口全部为高速输出口,可配置为4路PWM输出口或者16路高速PSO硬件比较输出口。输入口含有8路高速输入口,可配置为4路高速色标锁存或两路编码器输入。

XPCIE1032H搭配MotionRT7实时内核,使用本地LOCAL接口连接,通过高速的核内交互,可以做到更快速的指令交互,单条指令与多条指令一次性交互时间可以达到3-5us左右。

在这里插入图片描述
➜XPCIE1032H与MotionRT7实时内核的配合具有以下优势:
在这里插入图片描述

1.支持多种上位机语言开发,所有系列产品均可调用同一套API函数库;

2.借助核内交互,可以快速调用运动指令,响应时间快至微秒级,比传统PCI/PCIe快10倍;

3.解决传统PCI/PCIe运动控制卡在Windows环境下控制系统的非实时性问题;

4.支持一维/二维/三维PSO(高速硬件位置比较输出),适用于视觉飞拍、精密点胶和激光能量控制等应用;

5.提供高速输入接口,便于实现位置锁存;

6.支持EtherCAT总线和脉冲输出混合联动、混合插补。
在这里插入图片描述

➜使用XPCIE1032H和MotionRT7进行项目开发时,通常需要进行以下步骤:

1.安装驱动程序,识别XPCIE1032H;

2.打开并执行文件“MotionRT710.exe”,配置参数和运行运动控制实时内核;

3.使用ZDevelop软件连接到控制器,进行参数监控。连接时请使用PCI/LOCAL方式,并确保ZDevelop软件版本在3.10以上;

4.完成控制程序开发,通过LOCAL链接方式连接到运动控制卡,实现实时运动控制。

在这里插入图片描述
➜与传统PCI/PCIe卡和PLC的测试数据结果对比:
在这里插入图片描述
我们可以从测试对比结果看出,XPCIE1032H运动控制卡配合实时运动控制内核MotionRT7,在LOCAL链接(核内交互)的方式下,指令交互的效率是非常稳定,当测试数量从1w增加到10w时,单条指令交互时间与多条指令交互时间波动不大,非常适用于高速高精的应用。

一、C#语言进行运动控制项目开发

在这里插入图片描述

1.解压下载的安装包找到“ Zmcaux.cs ”,“ zauxdll.dll ”,“ zmotion.dll ”放入到项目文件中。

(1)“Zmcaux.cs”放在项目根目录文件中,与bin目录同级。

在这里插入图片描述

(2)“zauxdll.dll”,“zmotion.dll”放在bin → Debug。

在这里插入图片描述

2.用vs打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有,然后鼠标右键点击zmcaux.cs文件,点击包括在项目中。

在这里插入图片描述

3.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。

在这里插入图片描述

二、PC函数介绍

PC函数手册也在光盘资料里面,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册 V2.1.pdf”。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、C#进行自定义电子凸轮曲线的运动

自定义电子凸轮曲线的运动人机交互界面如下。
在这里插入图片描述

可根据需求,选择导入对应凸轮表数据或使用自定义数据。

1.在Form1的构造函数中调用接口ZAux_FastOpen(),使在系统初始化的时候自动链接控制器。

private void button1_Click(object sender, EventArgs e)
{
    zmcaux.ZAux_OpenEth(IP_List.Text, out g_handle);
    if (g_handle != (IntPtr)0)
    {
        timer1.Enabled = true;
        //设置链接状态按钮
        status.BackColor = System.Drawing.Color.Green;
        status.Text = "已链接";
    }
    else
    {
        MessageBox.Show("控制器链接失败,请检查MotionRT7是否开启!", "警告");
        //设置链接状态按钮
        status.BackColor = System.Drawing.Color.Red;
        status.Text = "已断开";
    }
}

2.通过定时器更新参数信息。

//定时器
private void timer1_Tick(object sender, EventArgs e)
{
    if(g_handle != null)
    {
        float dpos = 0, speed = 0;
        zmcaux.ZAux_Direct_GetDpos(g_handle, Convert.ToInt32(textBox_axis.Text),ref dpos);
        label_dpos.Text = Convert.ToString(dpos);
        zmcaux.ZAux_Direct_GetSpeed(g_handle, Convert.ToInt32(textBox_axis.Text), ref speed);
        label_speed.Text = Convert.ToString(speed);
    }
    else
    {
        status.BackColor = System.Drawing.Color.Red;
        status.Text = "已断开";
    }
}

3.利用提前加载好的凸轮表数据,利用cam指令进行凸轮运动。

//凸轮表运动启动
private void button3_Click(object sender, EventArgs e)
{
    if (g_handle == null)
        return;
    zmcaux.ZAux_Direct_SetUnits(g_handle, Convert.ToInt32(textBox_axis.Text),Convert.ToSingle(textBox_unit.Text));
    zmcaux.ZAux_Direct_SetSpeed(g_handle, Convert.ToInt32(textBox_axis.Text), Convert.ToSingle(textBox_speed.Text));
    zmcaux.ZAux_Direct_SetAccel(g_handle, Convert.ToInt32(textBox_axis.Text), Convert.ToSingle(textBox_accel.Text));
    zmcaux.ZAux_Direct_SetDecel(g_handle, Convert.ToInt32(textBox_axis.Text), Convert.ToSingle(textBox_decel.Text));
    zmcaux.ZAux_Direct_SetAtype(g_handle, Convert.ToInt32(textBox_axis.Text), 1);
    //进行电子凸轮运动
    //设置运动总时间为5s
    zmcaux.ZAux_Direct_Cam(g_handle, Convert.ToInt32(textBox_axis.Text),0, CamNum, Convert.ToSingle(textBox_unit.Text), Convert.ToSingle(textBox_speed.Text)*5);
}

4.外部导入凸轮表数据加载。

private void button_data_Click(object sender, EventArgs e)
{
    dataGridView_data.Columns.Clear();
    DataGridViewTextBoxColumn ActPos = new DataGridViewTextBoxColumn();
    ActPos.Name = "ActPos";
    ActPos.DataPropertyName = "ActPos";
    ActPos.HeaderText = "位置";
    dataGridView_data.Columns.Add(ActPos);
    OpenFileDialog ZaoLangFile = new OpenFileDialog();
    ZaoLangFile.Filter = "文本文件(*.txt;)| *.txt;| 所有文件| *.*; ";
    ZaoLangFile.ValidateNames = true;
    ZaoLangFile.CheckPathExists = true;
    ZaoLangFile.CheckFileExists = true;
    if (ZaoLangFile.ShowDialog() == DialogResult.OK)
    {
        string strFileName = ZaoLangFile.FileName;
        //其他代码
        //FileStream FileRead = new FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.Read);
        string DataTest = File.ReadAllText(strFileName);
        string[] strArray = DataTest.Split(new string[] { "\r\n" }, StringSplitOptions.None);
        for (int i = 0; i < strArray.Length - 1; i++)
        {
            int index = dataGridView_data.Rows.Add();
            dataGridView_data.Rows[index].Cells[0].Value = strArray[i];
        }
        float[] Tablelist = new float[strArray.Length];
        for (int i = 0; i < strArray.Length - 1; i++)
        {
            Tablelist[i] = Convert.ToSingle(strArray[i]);
        }
        zmcaux.ZAux_Direct_SetTable(g_handle,0,strArray.Length,Tablelist);
        //记录当前写入凸轮表数据有多少
        CamNum = strArray.Length - 2;
    }
}

5.自定义凸轮表数据加载。

private void button6_Click(object sender, EventArgs e)
{
    dataGridView_data.Columns.Clear();
    DataGridViewTextBoxColumn ActPos = new DataGridViewTextBoxColumn();
    ActPos.Name = "ActPos";
    ActPos.DataPropertyName = "ActPos";
    ActPos.HeaderText = "位置";
    dataGridView_data.Columns.Add(ActPos);
    float[] CustomTable = new float[100];
    for (int i = 0; i < 100; i++)
    {
        CustomTable[i] = (float )((Math.Sin(Math.PI*2*i/100) / (Math.PI*2)) + i / 100) * 500;
        int index = dataGridView_data.Rows.Add();
        dataGridView_data.Rows[index].Cells[0].Value = CustomTable[i];
    }
    zmcaux.ZAux_Direct_SetTable(g_handle, 0, 100, CustomTable);
    CamNum = 100;
}

四、调试与监控

01 电子凸轮

1.组成部分

电子凸轮是利用构造的凸轮曲线来模拟机械凸轮,以达到机械凸轮系统相同的凸轮轴与主轴之间相对运动的软件系统,通过控制器控制伺服电机来模拟机械凸轮的功能,不需要另外安装机械结构,电子凸轮又称Electronic CAM。

2.工作原理

电子凸轮属于多轴同步运动,这种运动是基于主轴外加一个或多个从轴系统,是在机械凸轮的基础上发展而来,电子凸轮多用于周期性的曲线运动场合。

如下图,机械凸轮按照凸轮的轮廓可以得出一段转动角度与加工位置运动轨迹,此轨迹为弧线,将该段弧线分解成无数个直线轨迹,组合起来得到一串趋近于弧线运动轨迹,电子凸轮直接将此段轨迹运动参数装入运动指令,即可控制轴走出目标轨迹。
在这里插入图片描述

设置一段电子凸轮的运动程序装入控制器,通过编码器将位置信号反馈给控制器,控制器将接收到的位置信号进行处理后输出给伺服驱动器,伺服驱动器控制多个轴同步运动完成预设轨迹。

3.优点

(1)电子凸轮的使用使机器的控制精度提高,控制距离加远,故障率降低,可靠性提高;

(2)简化了机构,使机构更加灵活,使调试和维修变得简便。

(3)电子凸轮用软件来控制信号,改变程序的相关运动参数就能改变运动曲线,应用灵活性高,工作可靠,操作简单,不需要额外安装机械构件,因而不存在磨损的情况。

02 同步跟踪

同步追踪是一种常见的凸轮应用,其动作与“追剪”类似,都是要求从轴(伺服)的位置在工作时与主轴同步,差别是“追剪”主要用于连续料的定长切割,而“同步追踪”则用于随机料(也就是物品出现的时机不固定),因此启动信号是根据感测器,触发后只追踪一次,设定的距离到达便自动回到起始位置,等下次触发信号收到才会再次追踪,常应用于流水线,例如同步喷漆,瓶罐注料,物品夹取等应用。

03 自动凸轮

自动凸轮是凸轮运动的一种,主要针对两个轴之间的主从跟随运动,用户可以通过简单设置几个相关参数,便可以构建主轴与从轴之间的运动关系,位置关系不是存储于TABLE表中,靠指令参数设置每段跟随距离和变速过程,运动过程中从轴的速度自动计算以匹配主轴,常见运动过程有跟随加速、减速、同步。

自动凸轮指令有MOVELINK、MOVESLINK、FLEXLINK等,常见应用场合有追剪、飞剪、轮切。

本例程介绍为CAM凸轮表运动的使用。

ZAux_Direct_Cam(ZMC_HANDLE handle,int iaxis, int istartpoint, int iendpoint,float ftablemulti, float fDistance)

ZAux_Direct_Cam()指令根据存储在TABLE中的数据来决定轴的运动,这些Table数据值对应运动轨迹的位置,是相对于运动起始点的绝对位置。

注:两个或多个ZAux_Direct_Cam指令可以同时使用同一段TABLE数据区进行操作。

运动的总时间由设置速度和第四个参数决定,运动的实际速度根据TABLE轨迹与时间自动匹配。
TBALE数据需要手动设置,第一个数据为引导点,建议设为0。

TABLE数据*ftablemulti这个比例=发出的脉冲数。

请确保指令传递的距离参数*units是整数个脉冲,否则出现浮点数会导致运动有细微误差。

如下图,是运动为造浪设备运动的某段轨迹数据通过导入凸轮表数据加载到控制器的table凸轮表中,运动出来的实际轨迹,并在设置的指定时间内运动完成。

在这里插入图片描述
在这里插入图片描述

如下图,运行数据为内部自定义sin波形的运动数据,波形可以从图中看出,运动小线段数据指定时间内轨迹运行完成。

在这里插入图片描述
在这里插入图片描述

自定义电子凸轮曲线运动讲解视频。

自定义电子凸轮曲线的运动

在这里插入图片描述

本次,正运动技术自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三),就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

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

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

相关文章

week04day03(爬虫 beautifulsoup4、)

一. 使用bs4解析网页 下载bs4 - pip install beautifulsoup4 使用的时候 import bs4专门用于解析网页的第三方库 在使用bs4的时候往往会依赖另一个库lxml pip install lxml 网页代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><…

使用redisMQ-spring-boot-starter实现消息队列和延时队列

简介 redisMQ-spring-boot-starter是一个轻量级的、基于Redis实现的消息队列中间件&#xff0c;它有如下优点&#xff1a; 开箱即用&#xff0c;你几乎不用添加额外的配置支持消息队列、延时队列&#xff0c;并提供精细化配置参数提供消息确认机制支持虚拟空间&#xff0c;不…

华为算法题 go语言或者ptython

1 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的景区垃圾识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文介绍了一个先进的基于深度学习的景区垃圾检测系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等前代算法进行了性能对比&#xff0c;通过对比实验证明了其在图像、视频、实时视频流和批量文件处理中对景区垃圾进行精…

【深度学习笔记】3_1 线性回归

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.1 线性回归 线性回归输出是一个连续值&#xff0c;因此适用于回归问题。回归问题在实际中很常见&#xff0c;如预测房屋价格、气温、销售额等连续值的问题。与回归问…

HTTP基本概念-HTTP 常见的状态码有哪些?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 常见的状态码有哪些? 1xx 类状态码属于提示信息&#xff0c;是协议处理中的一种中间状态&#xff0c;实际用到的比较少。 2xx 类状态码表示服务器成功处理了客户端的请求&#xff0c;也是我们最愿…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四&#xff0c;首先需要查询张三的账户余额&#xff0c;扣除1000&#xff0c;然后如果给李四加上1000的过程中出现异常会回滚事务&#xff0c;临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …

OpenAI Sora模型,官方技术文档翻译

技术报告地址&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 本技术报告的重点是&#xff08;1&#xff09;将所有类型的视觉数据转化为统一表示&#xff0c;从而能够大规模训练生成模型的方法&#xff1b;以及&#xff08;2&#xff0…

互联网广告投放与IP地理位置定位

随着互联网的发展和普及&#xff0c;互联网广告投放成为各行业推广营销的重要方式之一。而结合IP地理位置定位技术&#xff0c;可以实现精准定向&#xff0c;提高广告投放的效果和精准度。IP数据云将探讨互联网广告投放与IP地理位置定位的关系&#xff0c;分析其优势和应用场景…

基于springboot+vue的智能物流管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

设计模式-创建型模式-原型模式

原型模式&#xff08;Prototype Pattern&#xff09;&#xff1a;使用原型实例指定创建对象的种类&#xff0c;并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式其实就是从一个对象再创建另外一个可定制的对象&#xff0c;而且不需知道任何创建的细节…

Nginx知识笔记

一、前言 首先&#xff0c;我们来看一张关于正向代理和反向代理的图片 简单理解正向代理和反向代理的概念&#xff1a; 正向代理&#xff1a;在客户端配置代理服务器(和跳板机功能类似&#xff0c;比如公司很多机器需要通过跳板机才允许登录&#xff0c;正向代理的典型用途是…

npmjs官网(查询依赖包)

npmjs官网 可以方便的查看依赖包的安装、使用说明及相关注意事项等。 以wechat-http为例&#xff1a;

1.CSS单位总结

CSS 单位总结 经典真题 px 和 em 的区别 CSS 中的哪些单位 首先&#xff0c;在 CSS 中&#xff0c;单位分为两大类&#xff0c;绝对长度单位和相对长度单位。 绝对长度单位 我们先来说这个&#xff0c;绝对长度单位最好理解&#xff0c;和我们现实生活中是一样的。在我们…

rabbitmq知识梳理

一.WorkQueues模型 Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c…

男性美颜SDK解决方案,专属男性美化新体验

随着科技的发展&#xff0c;美颜技术已广泛应用于摄影、社交、直播等领域&#xff0c;满足了用户对美的追求。然而&#xff0c;传统的美颜算法往往更偏向于女性用户&#xff0c;忽视了男性用户对于自然、真实美的需求。美摄科技针对这一市场痛点&#xff0c;推出了专为男性设计…

APP的UI自动化demo(appium+java)

文章目录 appium连接手机java代码实现-第一版第二版-接入testng和隐式等待显示等待 appium连接手机 准备工作 1、查看连接手机模拟器是否连接成功&#xff0c;获取设备名称 执行命令&#xff1a;adb devices 2、查看android内核版本号—>paltformVersion 执行命令&#xf…

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

某胜物流软件三个接口sql注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

云呐矿井智能化运维工是什么?智能机器人运维岗位

煤矿智能运维是指利用先进的信息技术和自动控制&#xff0c;在煤矿生产过程中对煤矿设备进行监测、维护和管理。其职责和工作任务主要包括: 工作环境:  面对复杂的地质条件和极端的气候环境&#xff0c;煤矿智能运维工程师往往需要在地下煤矿、监测中心等环境中工作。因此&a…