最近开始搞FANUC CNC数据采集,从领导布置下来这个任务到完成大约花了1个月的时间,每天不是在找API的路上,就是在定位获取不到数据的路上。后来想想主要归纳下主要还是机床不太了解造成的。

1.上来遇到第一坑就是cnc_allclibhndl3句柄连接不上FANUC机床-,找了资料发现是除了fwlib32.dll以外缺少fwlibe1.dll。

2.接着遇到坑就是各种参数找不到:生产总量,加工计件,开机时间,运行时间,进给速度、设定进给速度、主轴倍率。后来发现这些参数不能直接通过具体api来找到,而是需要通过cnc_rdparam、cnc_rdmacro、pmc_rdpmcrng函数根据具体宏值、参数值、地址位来获取的。

例如:

生产总量:        cnc_rdparam(hFanuc, 6712, 0, sizeof(iodbpsd), &iodbpsd);

工件计数:        cnc_rdmacro(hFanuc, 0xf3d, 0x0a, &m_odbm);

设定工件计数:  cnc_rdparam(hFanuc, 6712, 0, sizeof(iodbpsd), &iodbpsd);

主轴倍率:         pmc_rdpmcrng(hFanuc, 0, 1, 30, 31, 8 + 1* 2, &pmcData);

指定主轴速度:  pmc_rdpmcrng(hFanuc, 1, 2, 22, 25, 8 + 1 * 4, &pmcData);

进给倍率:         pmc_rdpmcrng(hFanuc, 0, 1, 12, 13, 8 + 1 * 2, &pmcData);

指定进给速度:   pmc_rdpmcrng(hFanuc, 0, 1, 144 + (curIndex * 12), 145 + (curIndex * 12), 8 + 1 * 2, &pmcData);

循环时间:          cnc_rdparam(hFanuc, 6757, 0, sizeof(iodbpsd), &iodbpsd1);

开机总时间:       cnc_rdparam(hFanuc, 6750, 0, sizeof(iodbpsd), &iodbpsd);

运行总时间:   IODBPSD iodbpsd1, iodbpsd2;
        int32_t totalTime = 0;
        fanret = cnc_rdparam(hFanuc, 6751, 0, sizeof(iodbpsd), &iodbpsd1);
        if (EW_OK == fanret)
        {
            totalTime = iodbpsd1.u.ldata / 1000;//换算成秒
            fanret = cnc_rdparam(hFanuc, 6752, 0, sizeof(iodbpsd), &iodbpsd2);
            if (EW_OK == fanret)
            {
                totalTime += iodbpsd2.u.ldata * 60;//换算成秒
                
                pSet->totalMachiningTime = totalTime;
                _DEBUG("pSet->totalMachiningTime is %d s\n", pSet->totalMachiningTime);
            }
            else 
            {
                _ERROR("cnc_rdparam 6752 error %d\n", fanret);
            }            
        }

切削总时间:

fanret = cnc_rdparam(hFanuc, 6753, 0, sizeof(iodbpsd), &iodbpsd1);
        if (EW_OK == fanret)
        {
            totalTime = iodbpsd1.u.ldata / 1000;//换算成秒
            fanret = cnc_rdparam(hFanuc, 6754, 0, sizeof(iodbpsd), &iodbpsd2);
            if (EW_OK == fanret)
            {
                totalTime += iodbpsd2.u.ldata * 60;//换算成秒
                pSet->totalCuttingTime = totalTime;
                _DEBUG("pSet->totalCuttingTime is %d s\n", pSet->totalCuttingTime);
            }
            else 
            {
                _ERROR("cnc_rdparam 6754 error %d\n", fanret);
            }
        }

3.第三遇到坑就是刀具相关信息死活取不到,用别人的网关盒子去读也没有读取到,后来找盒子的相关技术人员也没有解决,后来在一篇文章中找到了可能是机床启动刀具寿命管理功能才能获取。需要通过fanuc的操作修改8132参数的TLF值为1就可以了。

4.第四坑就是设备状态-这个参数是cnc_statinfo函数获取各种状态:例如程序状态、报警状态、紧急停止状态等等,但又不能直接对应起来设备状态:需要根据各种状态来判断。最后我们决定用:

紧急停止》报警》程序运行》程序待机》待机这种优先级来判断设备状态

大致逻辑就是:

if(紧急停止状态不为空)

{

紧急停止

}

else if(报警状态》0)

{

报警状态

}

else if(自动模式&程序运行)

{

运行状态

}

else if(程序运行以外)

{

待机状态

}

else

{

关机或断网状态

}

这些坑踩完了,基本的参数也都能采集到了。

接下来继续搞三菱和华中、西门子数据采集了。

c++ fanuc cnc数据采集踩过坑相关推荐

  1. php 发那科,FANUC发那科CNC数据采集教程连接CNC

    重要:本文最后更新于2019-07-16 08:26:19,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 发那科系统的cnc可以通过官方的支持库接口获取cnc数据,第一步就是要连接 ...

  2. 发那科 / 法兰克(Fanuc)CNC数据采集

    一,概述 前面介绍过,发那科CNC数据采集一般有两种方法: (1)通过FOCAS 1/2 开发包进行二次开发采集数据(仅适用于windows系统) (2)通过纯TCP协议方法.该方法不局限于CPU架构 ...

  3. CNC数据采集解决方案(2023杭州乐芯科技)

    杭州乐芯科技IOT数据采集平台产品是杭州乐芯科技有限公司为满足工业4.0大型集团工厂推出的新一代数据采集平台级产品,可满足单一平台(一个服务器)同时采集各类设备,同时兼容各种工业数据采集协议,单服务器 ...

  4. CNC数控机床数据采集,CNC数据采集

    一,数控机床数据采集方式分类 1,采用SDK开发包采集,比如三菱.发那科.海德汉.大卫.华中数控.凯恩帝.沙迪克.牧野电火花.台湾宝元.上海来钠克.精雕等等. 2,OPC UA/DA,比如西门子.力士 ...

  5. 2021年Java面试题目最新总结【90%面试会踩的坑】

    学会java技术之后大家面临的最多的问题就是面试这关,求职面试java岗位是否能够成功是直接影响我们的工作机会的,所以对于Java程序员面试你准备好了吗?今天小编汇总了一下关于Java程序员面试,90 ...

  6. 程序员,Mybatis 你踩过坑吗?

    大多数开发者应该都使用过Hibernate或者Mybatis的框架,或多或少都踩过一些坑! 如在MyBatis/Ibatis中#和$的区别,#方式能够很大程度防止sql注入,$方式无法防止Sql注入. ...

  7. map mybatis 的字段返回0_Mybatis 你踩过坑吗?

    (给ImportNew加星标,提高Java技能) 作者:似水的流年 yq.aliyun.com/roundtable/49835 大多数开发者应该都使用过Hibernate或者Mybatis的框架,或 ...

  8. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  9. mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗?

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...

最新文章

  1. 基于Yolo-V3对卫星图像进行储油罐容积占用率的研究
  2. Matlab图形绘制经典案例 (2)
  3. 样本量极少如何机器学习?最新Few-Shot Learning综述
  4. 模板方法(设计一个稳定的父类框架,框架中的有一些步骤是可变的,将可变的步骤子类中来实现)
  5. 格式化输出和printf命令
  6. 多线程put后可能导致get死循环
  7. 操作系统原理第一章:操作系统概述
  8. lua源代码分析02:内存管理
  9. C#中串口通信编程 收藏
  10. Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题
  11. 智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...
  12. 前端学习(1843):前端面试题之vue管理状态
  13. 利用JQuery插件CleverTabs实现多页签打开效果
  14. jqGrid表格展示简单实例
  15. 【多项式求逆】[BZOJ3456]城市规划
  16. 吴恩达机器学习作业Python实现(四):神经网络(反向传播)
  17. 1024程序员节日随笔
  18. 学Excel函数公式,怎能不会这个组合套路? 1
  19. 计算机所有计算都是在内存,计算机的所有计算都是在内存中进行的
  20. 预防死锁,检测死锁,避免死锁,解除死锁....

热门文章

  1. web之SQL注入篇BUU
  2. 任务管理器没有菜单栏?
  3. roop 一张图片就能生成换脸视频的开源项目
  4. 360wifi3暂时没有linux驱动
  5. ON/安森美NVHL040N65S3F车规级MOS,ASEMI代理
  6. mt4如何自动选择最快服务器,【快速查看mt4服务器ip地址----最简单的方法】
  7. 中颖BMS开发全套 锂电池管理保护板开发SH367309
  8. 儿童零食:小人物里面的大市场
  9. MARI使用四方连续贴图(无缝贴图,重复贴图)制作大面积重复纹理时,出现贴图拖入崩溃或贴图无法导入。
  10. SharePoint 2013 How to create a Power View Map