广州数控广数.net(C#)数据采集
2021-01-10 16:03 mrchicharito 阅读(458) 评论(3) 编辑 收藏 举报广州数控广数机床数据采集总结
最近在工作当中,由于客户的需求,需要进行采集广数机床的数据,接到任务后,就开始了对广数产品的研究。
以下为广数型号以及支持的通信方式:
注:除了一些很老很老的设配,一般带有通信网口的都支持。如果不支持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 欢迎来撩,共同讨论数据采集,一起成长!!