上位機開發——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.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協議來讀取運動控制卡的相關參數,這種情況主要用於第三方軟件需要運動控制系統的相關數據。同時,如果後續的運動控制項目,需要提供數據給其他軟件,可以將運動控制卡作爲一個現成免費的ModbusTCP服務器,不僅可以傳遞運動控制參數,其他參數都可以實現傳遞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章