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

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

3天内不再提示

C#上位机与运动控制卡网络通讯的周期上报

正运动技术 来源:正运动技术 作者:正运动技术 2025-06-26 13:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

ECI2A18B运动控制卡介绍

ECI2A18B是一款10轴脉冲型、模块化的网络型运动控制卡,采用优化的网络通讯协议可以实现实时的运动控制,同时支持多种通信协议,方便与其他工业控制设备连接和集成。安装配置相对便捷,适合于模块化和灵活性要求较高的控制系统

wKgZPGhc4bWAXcztAAMe-EfFN_4856.png

ECI2A18B运动控制卡最大可扩展至12脉冲轴,支持8路高速输入和12路高速输出,集成丰富的运动控制功能,包含多轴点位运动、电子凸轮,直线插补,圆弧插补,连续插补运动等,满足多样化的工业应用需求。

wKgZPGhc4baAJnfQAAO2fxArcdI927.png

正运动提供自主自研IDE-RTSys开发编程软件,ECI2A18B控制卡支持多种上位机语言开发,均可调用同一套API函数库,易与现有的工业控制系统集成,极大地提高了工程师进行二次开发的效率,加速设备的部署和应用。

wKgZO2hc4baAAu2kAADhCCNy61A192.png

更多关于ECI2618B的详情介绍,点击“【加量不加价】正运动网络型运动控制卡ECI2618B/ECI2A18B”查看。

ECI2A18B产品介绍视频可点击→“【加量不加价】高性价比十轴脉冲运动控制卡ECI2A18B 让您的设备在自动化行业内卷中脱颖而出!”查看。

01周期上报

1.首先了解当PC主动轮询的次数过多时,可能会导致的问题:

(1)增加系统开销:轮询需要消耗系统资源,无论是任务轮询还是定时器轮询都需要相应的系统资源。这可能会导致系统性能下降,尤其是在多用户或资源受限的环境中。

(2)浪费CPU资源:无论设备是否发生状态改变,轮询总在进行。在实际情况中,大多数设备的状态改变通常不会那么频繁,轮询空转将白白浪费CPU时间片。

(3)影响电源管理:向PC报告外围设备的次数越多,消耗的功率就越高,这可能会缩短电池寿命或增加能源消耗。

(4)降低响应速度:如果轮询频率过高,可能会导致系统响应其他任务的速度变慢,因为CPU需要频繁地检查设备状态,而不是处理其他计算或用户交互任务。

(5)网络负载增加:如果轮询涉及到网络通信,过多的轮询请求可能会增加网络负载,导致网络拥堵或延迟增加。

(6)服务器压力增大:在客户端-服务器架构中,频繁的轮询请求可能会对服务器造成压力,尤其是在服务器资源有限的情况下,可能会导致服务质量下降或请求超时。

2.了解PC主动轮询次数过多,我们再来了解一下多种获取方式对于程序运行占比的区别:

在讨论单条获取、多条获取和周期性获取对程序运行的影响时,我们需要考虑这些操作的特点及其对程序整体性能的潜在影响。

(1)单条获取 单条获取通常指的是程序中每次只处理一个单独的数据项。这种方式简单直接,但在处理大量数据时可能效率低下,因为每次操作都涉及到上下文切换和资源管理的开销。在这种情况下,程序运行时间主要集中在处理数据本身,而非额外的控制逻辑。

(2)多条获取 多条获取涉及同时处理多个数据项。在现代计算机系统中,这通常通过多线程或并发技术实现,可以显著提高数据处理的吞吐量。然而,多线程带来的好处可能会被锁争、内存竞争和上下文切换等问题抵消。因此,多条获取可能会减少单个数据项处理的相对运行时间,但总体运行时间的减少取决于多线程优化的效果。

(3)周期性获取 周期性获取是指按照一定的时间间隔重复执行数据获取操作。这种方式常见于需要定期更新数据状态的应用场景,如实时监控系统或定时任务。周期性获取的运行时间占比取决于任务的周期性以及在每个周期内实际执行的工作量。如果周期性任务的负载较轻,那么它们可能不会显著影响程序的整体运行时间。

3.应用场合: 在实际应用中,选择哪种数据获取策略取决于具体的应用场景、数据特性和性能要求。例如,如果程序需要快速响应单个事件,单条获取可能更为合适。如果目标是最大化数据处理速度,多条获取可能更有益。而对于需要定期维护数据新鲜度的应用,周期性获取是必要的。

02 C#语言进行周期上报

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

wKgZPGhc4baAAznUAABijARkStc999.png

2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows窗体应用程序。

wKgZO2hc4beAJmpTAAJWnIAlwls950.png

3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。1)进入厂商提供的光盘资料找到“04PC函数”文件夹,并点击进入。

wKgZPGhc4beAXkrHAAHp2VYiglA554.png

2)选择“01PC函数库V2.1”文件夹。

wKgZO2hc4beAAinGAAHVG--j7PY058.png

3)选择“Windows平台”文件夹。

wKgZPGhc4beAMUdRAAE4lCUl-eo525.png

4)选择“C#”文件夹。

wKgZO2hc4biALxkSAAGut2yY43I376.png

5)根据需要选择对应的函数库,这里选择32位库。

wKgZPGhc4biAb6OTAACo8t8ZoTs445.png

wKgZO2hc4bmANH91AADFSPBsInA303.png

4.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。1)将zmcaux.cs文件复制到新建的项目里面中。

wKgZPGhc4bmAQrhPAADy6rd9Srk379.png

2)将zauxdll.dll和zmotion.dll文件放入bindebug文件夹中。

wKgZO2hc4bmABWv3AABqWTaQuQI483.jpg

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

wKgZPGhc4bmABMkMAAKkND_TbTE906.png

6.至此,项目新建完成,可进行C#项目开发。

03 PC函数介绍

PC函数手册可在光盘资料获取,具体路径如下:“00光盘资料3编程手册3ZMotion PC函数库编程手册”。

wKgZO2hc4bqAZpDEAADs07tPbkQ616.png

1.链接控制器,获取链接句柄。

wKgZPGhc4bqAF38oAAARRqAHPn4423.png

2.控制器自动上报相关指令。

wKgZO2hc4bqAMq1FAAFaZX3NUVY599.png

3.注意周期上报指令使用事项。

wKgZPGhc4buASTX2AAAcHX69vn8671.png


04 C#之网络通讯的周期上报

1.上位机软件界面如下,首先连接控制器,设置周期上报参数和需要上报的参数,最后勾选启动强制上报即可。

wKgZO2hc4buANmHDAAAiKGHtZ5Q124.png

2.例程讲解。 (1)连接控制器获取句柄,上位机操作通过获取到的句柄来操作控制器。

//连接控制器,控制器默认IP是192.168.0.11
ZauxErr = zmcaux.ZAux_OpenEth("192.168.0.11",outg_Handle);
if(0!= ZauxErr)
{
  AlmInifFile.Write(DateTime.Now.ToString("F"),"ZAux_OpenEth执行错误,错误码:"+ ZauxErr.ToString(),"错误码信息");
}
wKgZPGhc4buAY9OZAAAjLT1Hffs182.png

(2)启动上报。当启动周期上报checkbox状态发生变化的时候通知CheckChange函数,首先判断是取消勾选还是勾选。如果是勾选则ZAux_CycleUpEnable使能周期上报并开始定时器进行周期上报数据包进行读取和刷新。

privatevoidcheckBox1_CheckedChanged(objectsender, EventArgs e)
{
 //获取上报的参数
 StringBuilderpsetesname =GetCycleStr();
 //勾选启动上报
 if(!StartUp&& checkBox1.Checked==true) {
   try
    {
     //使能周期上报
      controlReturn = zmcaux.ZAux_CycleUpEnable(g_handle,Convert.ToUInt32(textBox1.Text),Convert.ToSingle(textBox2.Text), psetesname.ToString());
    }
   catch(FormatExceptionfe)
    {
      checkBox1.Checked=false;
     MessageBox.Show(string.Format("{0}: {1}", fe.GetType().Name, fe.Message));
     return;
    }
   if(controlReturn !=0)
    {
      checkBox1.Checked=false;
     return;
    }
    textBox9.Text="0";
   AppendTextOut(string.Format("周期上报开始 rn 命令:{0}rn", psetesname.ToString()));
    start =DateTime.Now;
   //
    timer1.Enabled=true;
   StartUp=true;
  }elseif(StartUp&& checkBox1.Checked==false){//取消勾选周期上报
    controlReturn = zmcaux.ZAux_CycleUpDisable(g_handle,Convert.ToUInt32(textBox1.Text));
   DateTimeend =DateTime.Now;
   if(controlReturn !=0) {
     AppendTextOut(string.Format("周期上报关闭失败 错误码:{0:D} rn",controlReturn));
     return;
    }
    timer1.Enabled=false;
   StartUp=false;
   TimeSpanabs = end - start;
   AppendTextOut(string.Format("{0:N3}ms, {2:N3} rn", abs.TotalMilliseconds,Convert.ToDouble(textBox9.Text), abs.TotalMilliseconds/Convert.ToDouble(textBox9.Text)));
  }
}
//读取上报参数
privatevoidtimer1_Tick(objectsender, EventArgs e){
  int received;
 try
  {
   //获取周期上报收到的数据包数量
    received = zmcaux.ZAux_CycleUpGetRecvTimes(g_handle,Convert.ToUInt32(textBox1.Text));
  }
 catch(FormatExceptionfe)
  {
    timer1.Enabled=false;
   MessageBox.Show(string.Format("{0}: {1}", fe.GetType().Name, fe.Message));
   return;
  }
 if(received !=Convert.ToUInt32(textBox9.Text))
  {
   //收到新的数据包则打印
    //打印函数
   GetCycleInfo();
    textBox9.Text=string.Format("{0:D}", received);
  }
}
wKgZO2hc4byALWtbAAAkhOWSpd8113.png

(3)打印数据。通过ZAux_CycleUpReadBuffInt读取周期上报数据解析后通过AppendTextOut显示。

//打印收到的数据包
privatevoidGetCycleInfo()
{
  StringBuilder showString =newStringBuilder();
 intival =0;
 for(intnum =0; num <  3; num++) {
        if (checkbox[num].Checked){
               showString.Append(combobox[num].SelectedItem.ToString());
               for (uint i = (uint)data[num].CycleParaStart; i < data[num].CycleParaNum; i++) {
                     //从周期上报里面读取内容
                     controlReturn = zmcaux.ZAux_CycleUpReadBuffInt(g_handle, Convert.ToUInt32(textBox1.Text), combobox[num].SelectedItem.ToString(),i, ref ival);
                     showString.AppendFormat(" {0:D}",ival);
                }
                showString.Append("n");
        }
    }
    AppendTextOut(showString.ToString());
}
wKgZPGhc4byAHcDdAAAkSgp44kw326.png

05 RTSys的使用

1.打开【RTSys】软件,点击【连接】输入控制器的IP(默认IP:192.168.0.11)。

wKgZO2hc4byAEHknAACyvCmIAwI329.png

wKgZPGhc4byAUC-NAAAhLMfD8LY928.png

2.使用正运动RTSys软件可以方便直观的观察周期上报参数数值。

wKgZO2hc4b2AbcdcAAGw-zvp4UA723.png

3.上位机读取周期上报的值并输出在文本框。

wKgZPGhc4b2AItz-AAArduiWrpw467.png

4.点击下拉框选择其他参数或更改起始地址及数量读取不同区域数据。

wKgZO2hc4b2AIpXZAAAqyTgYJGA121.png

教学视频可点击→“C#上位机与运动控制卡网络通讯的周期上报”。

完整代码获取地址

wKgZPGhc4b6AO6-ZAACa9tRZpw0627.png

本次,正运动技术C#上位机与运动控制卡网络通讯的周期上报,就分享到这里。更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

审核编辑 黄宇

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

    关注

    27

    文章

    994

    浏览量

    56713
  • 运动控制卡
    +关注

    关注

    7

    文章

    126

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    6路高性能PCIe EtherCAT运动控制卡XPCIE6032H#运动控制卡# 正运动# 正运动控制卡

    运动控制
    正运动技术
    发布于 :2025年12月05日 13:53:57

    紧凑型网络运动控制卡ECI1808/ECI1A08

    紧凑型网络运动控制卡ECI1808/ECI1A08
    的头像 发表于 11-28 11:17 465次阅读
    紧凑型<b class='flag-5'>网络</b><b class='flag-5'>运动</b><b class='flag-5'>控制卡</b>ECI1808/ECI1A08

    高速高精运动控制!PCIe超实时2通道EtherCAT运动控制卡上市!

    PCle超实用2通道EtherCAT运动控制卡助您实现更极速精准的运动控制
    的头像 发表于 08-01 11:52 725次阅读
    高速高精<b class='flag-5'>运动</b><b class='flag-5'>控制</b>!PCIe超实时2通道EtherCAT<b class='flag-5'>运动</b><b class='flag-5'>控制卡</b>上市!

    全球首创!PCIe超实时6通道EtherCAT运动控制卡上市!

    PCle超实用6通道EtherCAT运动控制卡助您实现更极速精准的运动控制
    的头像 发表于 07-18 10:32 652次阅读
    全球首创!PCIe超实时6通道EtherCAT<b class='flag-5'>运动</b><b class='flag-5'>控制卡</b>上市!

    全球首创!PCIe 6路高性能EtherCAT运动控制卡XPCIE6032H #正运动技术 #运动控制卡

    运动控制
    正运动技术
    发布于 :2025年07月17日 10:01:51

    EtherCAT运动控制卡应用开发教程之Java

    运动控制卡的Java开发及DLL调用
    的头像 发表于 06-13 14:29 622次阅读
    EtherCAT<b class='flag-5'>运动</b><b class='flag-5'>控制卡</b>应用开发教程之Java

    控制系统调优必备知识:“运动控制卡 控制周期怎么算”你真的懂了吗?

    在工业自动化领域,运动控制卡控制周期这个参数常常被忽视,但它却是影响整个系统稳定性、精度甚至产能的关键因素。你是不是也遇到过这些问题:电机总是抖动?轨迹跟踪老是偏?想优化系统却无从下手
    的头像 发表于 05-27 10:59 1166次阅读
    <b class='flag-5'>控制</b>系统调优必备知识:“<b class='flag-5'>运动</b><b class='flag-5'>控制卡</b> <b class='flag-5'>控制</b><b class='flag-5'>周期</b>怎么算”你真的懂了吗?

    HTTP网络通讯过程

    的 OSI 模型。 OSI  是一种理论下的模型,而  TCP/IP  已被广泛使用,成为网络互联事实上的标准。 2. HTTP 网络通讯过程 示例:简单的网络拓扑模型 详解:当键入网址到网页显示的
    的头像 发表于 01-20 09:07 1057次阅读
    HTTP<b class='flag-5'>网络通讯</b>过程

    运动控制卡网络通讯的心跳检测之C#上位编程

    使用C#上位编程实现运动控制卡网络通讯的心跳检测功能
    的头像 发表于 12-24 10:54 1965次阅读
    <b class='flag-5'>运动</b><b class='flag-5'>控制卡</b><b class='flag-5'>网络通讯</b>的心跳检测之<b class='flag-5'>C#</b><b class='flag-5'>上位</b><b class='flag-5'>机</b>编程

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

    使用C++进行运动控制卡周期上报功能实现
    的头像 发表于 12-17 13:59 1528次阅读
    <b class='flag-5'>运动</b><b class='flag-5'>控制卡</b><b class='flag-5'>周期</b><b class='flag-5'>上报</b>实时数据IO状态之<b class='flag-5'>C</b>++篇