运动控制卡周期上报实时数据IO状态之C++篇

本文导读

今天,正运动小助手为大家分享一下运动控制卡周期上报,通过提前设置经常读取的参数主动周期上报,可以减少PC主动轮询的时间。此次介绍将以ECI2A18B为例,主要讲解如何使用C++编程语言来进行周期上报函数的编写和功能的开发。

01 ECI2A18B控制卡硬件介绍

ECI2A18B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持10轴,用以实现直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等简单的轨迹控制需求;采用优化的网络通讯协议可以实现实时的运动控制。
在这里插入图片描述

ECI2A18B控制卡功能特点:

  1. 本身支持6差分脉冲轴+4单端脉冲轴运动控制,最多可扩展至12轴运动控制。
  2. 脉冲输出模式:脉冲/方向或双脉冲。
  3. AXIS接口支持编码器位置测量,可以配置为手轮输入模式。
  4. 专用的手轮输入接口。
  5. 每轴最大输出脉冲频率10MHz。
  6. 通过CAN总线,最多可扩展到256个隔离输入口和256个隔离输出口。
  7. 轴正负限位信号口/原点信号口可以随意配置到任何输入口。
  8. 通用数字输出口最大输出电流可达500mA,可直接驱动部分电磁阀。
  9. RS232接口、以太网接口、CAN接口。
  10. 支持最多达12轴直线插补、任意圆弧插补、螺旋插补。
  11. 支持点位运动、电子凸轮、直线插补、圆弧插补、连续插补运动、机械手指令。
  12. 支持Basic多文件多任务编程。
  13. 多种程序加密手段,保护客户的知识产权。

在这里插入图片描述

接口定义:
在这里插入图片描述

ECI2000系列经济型多轴运动控制卡可用于电子半导体设备(检测类设备、组装类设备、锁附类设备、焊锡机)、点胶设备和流水线等12轴以内脉冲应用场合。控制器支持windows、linux、Mac、Android、wince各种操作系统下的开发,提供vc、c#、vb.net、labview等各种环境的dll库,如下图。上位机软件编程参考《ZMotion PC函数库编程手册》。
在这里插入图片描述

02 为什么要进行周期上报,作用是什么?

1、当PC主动轮询的次数过多时,可能会导致以下问题:
(1)消耗系统资源
轮询会使系统资源消耗增加,无论是任务轮询或定时器轮询,都会消耗系统的部分资源。在多用户或者资源受限的环境里,这极有可能致使系统性能下滑。
(2)浪费CPU资源
只要是轮询都会造成CPU资源的浪费。这是因为轮询会会在系统内不间断的运行,不论当前设备的状态是否有改变。实际上,设备的诸多状态并不经常改变,轮询空转只会无端消耗CPU的时间。
(3)影响电源管理
向PC报告外围设备次数增多会使功耗提高,这可能缩短电池寿命或增加能源消耗,从而影响电源管理。
(4)降低响应速度
如果轮询频率过高,系统响应其他任务的速度或许会变慢。造成原因是由于CPU会不间断的轮询当前状态,从而响应处理其他计算或与用户交互任务会减慢。
(5)网络负载增加
若轮询涉及网络通信,轮询请求过多就可能加大网络负载,造成网络拥堵或者延迟加剧。
(6)服务器压力增大
在客户端服务器架构里,要是频繁进行轮询请求,就可能给服务器带来压力。主要集中在在服务器资源不足时,也许会使服务质量降低或者出现请求超时的情况。

2、多种获取方式对于程序运行占比的区别:
在探讨单条获取、多条获取以及周期性获取对程序运行产生的影响时,我们需要考量这些操作的特性以及它们对程序整体性能可能存在的潜在影响。
(1)单条获取
单条获取即程序每次仅处理一个单独的数据项。此方式简单直接,然而处理大量数据时效率不高,因为每次操作都会有上下文切换与资源管理方面的开销。此时,程序运行时间主要耗费在数据处理上。
(2)多条获取
多条获取意味着同时处理多个数据项。在现代计算机系统里,常借助多线程或者并发技术达成这一操作,这样做能大幅提升数据处理的吞吐量。不过,多线程虽有好处,却可能被锁争、内存竞争和上下文切换等问题所抵消。所以,多条获取也许会缩短单个数据项处理的相对运行时间,但总体运行时间能否减少取决于多线程优化的成效。
(3)周期性获取
周期获取即按照固定的时间间隔重复开展数据获取操作。在诸如实时监控系统、定时任务这类需要定期更新数据状态的应用场景中较为常见。其运行时间占比由任务的周期性和每个周期内实际工作量决定。若周期性任务负载较轻,则对程序整体运行时间影响不大。

应用场合:在实际应用里,具体的应用场景、数据特性以及性能要求决定了选择何种数据获取策略。比如,若程序要对单个事件快速响应,单条获取或许更合适;要是旨在使数据处理速度最大化,多条获取可能更有利;而对于那些需要定期保持数据新鲜度的应用而言,周期性获取则不可或缺。

03 新建MFC项目并添加函数库

1、首先打开Visual Studio 2022,点击创建新项目。
在这里插入图片描述

2、选择开发语言为“Visual C++”和程序类型“MFC应用程序”。
在这里插入图片描述
3、点击下一步即可。
在这里插入图片描述

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

5、前往正运动官网下载PC函数库,路径如下(本文采用64位函数库为例)。
(1)进入官网,选择支持与服务,打开下载中心选择库文件,就能找到所有的PC函数库。
在这里插入图片描述

(2)点击下载Windows C++(64位),可按需求另存为想要保存的路径下。
在这里插入图片描述

(3)函数库另存为具体路径如下。
在这里插入图片描述

6、将厂商提供的C++库文件和相关头文件复制到新建的项目里。
在这里插入图片描述

7、在项目中添加静态库和相关头文件。
(1)先右击项目文件,接着依次选择:“添加”→“现有项”。
在这里插入图片描述

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

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

至此项目新建完成,可进行MFC项目开发。

04 查看PC函数手册,熟悉相关函数接口

1、PC函数手册也可以在正运动官网“支持与服务”→“下载中心”→“编程手册”中找到。
在这里插入图片描述

2、链接控制器,获取链接句柄。
在这里插入图片描述

3、控制器自动上报相关指令。
在这里插入图片描述

4、读取数字输入输出相关指令。
在这里插入图片描述

5、读取Modbus寄存器相关指令。
在这里插入图片描述

05 MFC实现轴的周期上报

1、例程界面如下。
在这里插入图片描述

2、通过下拉控件选择连接控制器/控制卡连接方式。

BOOL CTest_CycleUpDlg::OnInitDialog()
{
   
    CDialogEx::OnInitDialog();
   // 将“关于...”菜单项添加到系统菜单中。
   // IDM_ABOUTBOX 必须在系统命令范围内。
   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
   ASSERT(IDM_ABOUTBOX < 0xF000);
   CMenu* pSysMenu = GetSystemMenu(FALSE);
   if(pSysMenu != NULL)
   {
   
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if(!strAboutMenu.IsEmpty())
        {
   
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,strAboutMenu);
        }
    }
    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    // 执行此操作
    SetIcon(m_hIcon, TRUE);      // 设置大图标
    SetIcon(m_hIcon, FALSE);    // 设置小图标
    // TODO: 在此添加额外的初始化代码
    GetDlgItem(IDC_COMBO2)->SetWindowTextA("网口\n");
    CComboBox   *connetList;
    connetList = (CComboBox *)GetDlgItem(IDC_COMBO2);
    connetList->AddString(_T("网口\n"));
    connetList->AddString(_T("LOCAL\n"));
    connetList->AddString(_T("PCI\n"));
    connetList->AddString(_T("串口\n"));
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

3、自动搜索IP。

void CTest_CycleUpDlg::OnCbnDropdownCombo1()
{
   
    char Buffer[256];
    CTest_CycleUpDlg* pDlg = (CT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正运动技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值