找回密码
 立即注册

QQ登录

只需一步,快速开始

工控课堂 首页 工控文库 上位机编程 查看内容

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

2022-6-3 12:29| 发布者: gkket| 查看: 1177| 评论: 0

摘要: 前言最近有运动控制的学员问到这样的问题,能不能通过Modbus协议,实现运动控制卡的数据读取。经过测试,切实可行。这里采用的是正运动的ECI1408板卡,其他品牌板卡可能不支持,具体咨询供应商。MOdbus协议正运动控 ...

前言

最近有运动控制的学员问到这样的问题,能不能通过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来使用。
  •  

     

     

     

图片图片

代码测试

 

 

图片

这里以读取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.TextConvert.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(1100006);
                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协议来读取运动控制卡的相关参数,这种情况主要用于第三方软件需要运动控制系统的相关数据。同时,如果后续的运动控制项目,需要提供数据给其他软件,可以将运动控制卡作为一个现成免费的ModbusTCP服务器,不仅可以传递运动控制参数,其他参数都可以实现传递。

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

关注公众号,加入500人微信群,下载100G免费资料!

最新评论

热门文章
关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 11:38 , Processed in 0.063518 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

返回顶部