首页 接线图文章正文

通过Modbus协议,实现运动控制卡的数据通信

接线图 2023年10月06日 12:40 119 admin

前言

最近有运动控制的学员问到这样的问题,能不能通过Modbus协议,实现运动控制卡的数据读取。

经过测试,切实可行。这里采用的是正运动的ECI1408板卡,其他品牌板卡可能不支持,具体咨询供应商。

MOdbus协议

正运动控制器支持两个存储区,分别是0区和4区。

  • 0区从地址10000开始与输入 IN 口对应。
  • 0区从地址20000开始与输出 OUT 口对应。
  • 4区从地址10000开始对应轴 DPOS 区间。
  • 4区从地址11000开始对应轴 MPOS 区间。
  • 4区从地址12000开始对应轴 VP_SPEED 区间。
  • 4区从地址13000开始对应模拟量DA输出区间。
  • 4区从地址14000开始对应模拟量AD输入区间。
  • 对于其他参数,可以采用自定义存储区0-7999来使用。
  • 通过Modbus协议,实现运动控制卡的数据通信  第1张

     

     通过Modbus协议,实现运动控制卡的数据通信  第2张

     

     

通过Modbus协议,实现运动控制卡的数据通信  第3张通过Modbus协议,实现运动控制卡的数据通信  第3张

代码测试

通过Modbus协议,实现运动控制卡的数据通信  第5张

 

 

通过Modbus协议,实现运动控制卡的数据通信  第3张

这里以读取XYZ三轴的位置来进行测试。

  • 建立连接

        //Modbus通信对象         private ModbusTcp modbusTcp = new ModbusTcp();         //取消线程源         private CancellationTokenSource cts;         private void btn_Connect_Click(object sender, EventArgs e)         {             if (modbusTcp.Connect(this.txt_IPAddress.Text, Convert.ToInt32(this.txt_Port.Text)))             {                 //如果连接成功,开线程读取                 cts = new CancellationTokenSource();                 Task.Run(() =>                 {                     GetMotionData();                 }, cts.Token);             }             else             {                 MessageBox.Show("运动控制卡连接失败", "建立连接");             }         }

  • 断开连接

        private void btn_DisConn_Click(object sender, EventArgs e)         {             cts?.Cancel();             modbusTcp.DisConnect();         }

  • 多线程读取解析

        private void GetMotionData()         {             while (!cts.IsCancellationRequested)             {                 byte[] res = modbusTcp.ReadKeepReg(1, 10000, 6);                 this.Invoke(new Action(() =>                 {                     if (res != null && res.Length == 12)                     {                         float[] values = FloatLib.GetFloatArrayFromByteArray(res, DataFormat.CDAB);                         this.lbl_XAxis.Text = values[0].ToString();                         this.lbl_YAxis.Text = values[1].ToString();                         this.lbl_ZAxis.Text = values[2].ToString();                     }                 }));             }         }

  • 测试结果如下:

上位机软件实时数据显示

通过Modbus协议,实现运动控制卡的数据通信  第7张

 

 

测试软件结果显示:

通过Modbus协议,实现运动控制卡的数据通信  第8张

 

 

整体总结

本案例主要是测试了基于Modbus协议来读取运动控制卡的相关参数,这种情况主要用于第三方软件需要运动控制系统的相关数据。同时,如果后续的运动控制项目,需要提供数据给其他软件,可以将运动控制卡作为一个现成免费的ModbusTCP服务器,不仅可以传递运动控制参数,其他参数都可以实现传递。

原文:https://www.cnblogs.com/xiketang/p/16229638.html

版权与免责声明

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

标签: 控制 软件

发表评论

接线图网Copyright Your WebSite.Some Rights Reserved. 备案号:桂ICP备2022002688号-2 接线图网版权所有 联系作者QQ:360888349