广州数控广数.net(C#)数据采集 - mrchicharito

时间:2024-02-17 20:20:20

广州数控广数.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 欢迎来撩,共同讨论数据采集,一起成长!!