廣州數控廣數機床數據采集總結
最近在工作當中,由於客戶的需求,需要進行采集廣數機床的數據,接到任務后,就開始了對廣數產品的研究。
以下為廣數型號以及支持的通信方式:
注:除了一些很老很老的設配,一般帶有通信網口的都支持。如果不支持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 歡迎來撩,共同討論數據采集,一起成長!!