廣州數控廣數.net(C#)數據采集


廣州數控廣數機床數據采集總結

最近在工作當中,由於客戶的需求,需要進行采集廣數機床的數據,接到任務后,就開始了對廣數產品的研究。

以下為廣數型號以及支持的通信方式:

注:除了一些很老很老的設配,一般帶有通信網口的都支持。如果不支持tcp或者udp,那就需要進行串口編程。

廣數數據采集,官方提供了C++語言編寫的類庫gskrm.dll,這個類庫當中,幾乎包含了對所有采集項,如設配型號,運行模式,刀補,報警等等信息。

但是請各位注意,這個類庫只能在Windows系統上使用。

如果想跨平台,比如你想部署你的采集程序到Linux上,那就需要你按照廣數的通信協議,挨個對方法進行封裝了,我這些天就是干了這些事情。

第一步:找文檔

不管干什么事情,在做之前肯定要做好准備工作,不然會南轅北轍,適得其反。

找文檔這個過程,我幾乎花了整整一個上午,想在網上找到很難,最后實在找不到,只能救助工作群和之前同事了。

還好,我最終找到了。

 

 

第二步:開始按照文檔進行封裝

讀了廣數的協議之后(如果你沒有文檔,可以直接忽略第一步,你也可以進行抓包,但這種方式很讓人抓狂),我開始進行sdk的封裝。

封裝后的部分代碼:

        /// <summary>
        /// 獲取CNC型號
        /// </summary>
        public const byte CNC_TYPE = 0x0B;

        /// <summary>
        /// 獲取CNC當前工作方式
        /// </summary>
        public const byte CNC_WORKMODE = 0x10;

 

 1         /// <summary>
 2         /// 讀取設備型號
 3         /// </summary>
 4         /// <returns></returns>
 5         public string ReadCncType()
 6         {
 7             var data = new byte[] { Command.CNC_TYPE };
 8             var buffer = BuildRead(data, 3, 1);
 9             var len = (int)buffer.Item1[0];
10             var result = buffer.Item2.Skip(_skip + 4).Take(len).ToArray();
11             return BitConverter.ToString(result, 1);
12         }
13 
14         /// <summary>
15         /// 工作方式
16         /// </summary>
17         /// <param name="data"></param>
18         /// <param name="skip"></param>
19         /// <param name="take"></param>
20         /// <returns></returns>
21         public uint ReadWorkType()
22         {
23             var data = new byte[] { Command.CNC_WORKMODE, 0x00 };
24             var buffer = BuildRead(data, 3, 4);
25             return BitConverter.ToUInt32(buffer.Item1, 0);
26         }
27 
28         /// <summary>
29         /// 運行狀態
30         /// </summary>
31         /// <param name="data"></param>
32         /// <param name="skip"></param>
33         /// <param name="take"></param>
34         /// <returns></returns>
35         public uint ReadStatus()
36         {
37             var data = new byte[] { Command.CNC_STATUS, 0x00 };
38             var buffer = BuildRead(data, 3, 4);
39             return BitConverter.ToUInt32(buffer.Item1, 0);
40         }

自定義枚舉:

 1    public enum WrokMode
 2     {
 3         [Description("編輯方式")]
 4         EDIT = 0,
 5 
 6         [Description("自動方式")]
 7         MEM,
 8 
 9         [Description("MDI方式")]
10         MDI,
11 
12         [Description("DNC方式")]
13         DNC,
14 
15         [Description("手動方式")]
16         JOG,
17 
18         [Description("手輪方式")]
19         HANDLE,
20 
21         [Description("回參考點方式")]
22         REF
23     }
    public enum ScramStatus
    {
        [Description("正常")]
        Normal = 0,

        [Description("急停")]
        Stop = 1
    }

第三步 使用sdk到項目

到了這一步,基本繁瑣,封裝的任務已經完成,結合公司項目框架,只需要使用sdk就行。

到此廣數的數據采集就大功告成了。

以上就是沒有利用官方提供的gskrm.dll類庫,自己手動封裝了一套。本文主要向大家介紹廣數采集的的解決思路,如果你有更好的建議歡迎評論。

加qq 歡迎來撩,共同討論數據采集,一起成長!!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM