发那科机床采集数据

        前面两篇重点介绍了理论,从这篇开始,我们开始进行实战。首先从发那科机床开始,为何第一个将发那科。因为发那科系统机床有三最。最广泛(中国保有量最多)、 最多资料(发那科系统的开发包历史悠久,资料也最好找,出现问题最好解决)、最简单(可能也正是因为资料多,所以学起来对简单)。

        后面的介绍我会分为两部分,一部分为官方SDK介绍,一部分为专有协议采集介绍。照理说直接介绍专有协议采集就行了,为啥要介绍官方SDK。因为官方SDK就是我们后续抓包的标本啊,我们后续需要采集什么样的数据,最保险的方式,就是通过官方SDK将这个数据采集出来,然后查看数据包格式进行解析。市面上有公司或者同行,上来不管SDK,直接用专有协议采集,这样只会本末倒置,出现问题自己也解决不了,想新增加采集数据也解决不了,只能干瞪眼。所以不论是学习还是做产品,要步步为营,先将官方SDK搞懂(当然后面也会出现没有官方SDK包的情况,到时候我再告诉大家具体怎么处理)。       

一、通过官方SDK采集数据

1、Focas 简介

        首先Focas是发那科机床联网SDK的名称。其中包含了:连接说明、使用说明、常见问题。从官方文档上看,1996年应该就有这个SDK了。这点还是比较佩服发那科系统的,在30年前就能有这个意识。

2、资料使用

        拿到资料后,有以下几个文件夹:

        第一个文件夹是库文件,为后面我们我们要讲库拷贝到我们的项目,项目运行必备。

        SpecE这个文件夹是官方的说明文档,后面我们要靠它来调试程序,英文。c++ 程序调试必备

        TSUB-E034_v1.0 FOCAS说明文档,这个文件夹可以当做c#的辅助参考,全中文汉字。c# 调试必备

        对于每个文件的详细介绍可以看这个文档Focas 2\08_A02B-0207-K737 v4.0_FOCAS1_2 Libraries\A02B-0207-K737 (F)\README.TXT,下面我挑重点的讲,如何进行项目调试。

a.调试c++ 项目

        因为c++的程序都是有官方的示例,所以先要搞懂官方的说明文档。Focas+2\Focas 2\SpecE\FWLIB32.HTM,用浏览器打开这个HTML(注意这里要用微软官方的IE浏览器,不能用谷歌或者火狐内核的浏览器)。

打开后选择机床对应的连接方式(连接方式选择网口接口)和型号(按照采集系统选择)。

点击功能参考

你可以发现很多功能,其中能进一步点击进去的,就代表该系统支持这个功能。

我们点击cnc_actf就可以看到具体的c++代码和说明,包含:声明、描述、返回值、适用于的操作模式,示例代码等等。这些都是对你调试采集至关重要的。

c++项目需要导入的库文件:

给大家个示例参考

官方的说明:

  * 64 bit version FOCAS2 library.

      < FWLIB64.DLL >
        This is a library of data exchange functions between CNC/PMC and HSSB
        and Ethernet system.
        This is a dynamic link library, which is required at run-time of HSSB
        and Ethernet system.

      < FWLIBE64.DLL >
        This is the DLL for TCP/IP, which is called by FWLIB64.DLL at run-time.

      < FWLIB30i64.DLL >
        This is the DLL for FS30i/31i/32i/35i and PMi-A, which is called by
        FWLIB64.DLL at run-time.

      < FWLIB0iD64.DLL >
        This is the DLL for FS0i-D, which is called by FWLIB64.DLL at run-time.

      < FWLIBNCG64.DLL >
        This is the DLL for FOCAS2/HSSB of FS31i-A/B NCGuidePro, which is
        called by FWLIB64.DLL at run-time.

      < FWLIB0DN64.DLL >
        This is the DLL for FOCAS2/HSSB of FS0i-D NCGuidePro, which is called
        by FWLIB64.DLL at run-time.

      < FWLIB64.LIB >
        The import library to link with CNC/PMC Data window library
        (FWLIB64.DLL) in C/C++ language.

      < FWLIB64.H >
        C/C++ header file for CNC/PMC Data window functions and structures.
        This file is divided for each CNC model.

b.调试c#项目

        如果你想用c#去调试你的采集,那么会简单的多,因为官方给我们做好了示例程序,并且说明都是汉语的。举个例子:

c#项目需要导入的库文件:

初学者不会引用以来的话,看下这篇文章:

https://www.cnblogs.com/snail1502/p/18068966

3、示例工程代码

c#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取库句柄 ( Ethernet ) 并进行连接
            ushort Flibhndl = 0;
            short ret = Focas1.cnc_allclibhndl3("10.178.67.13", 8193, 10, out Flibhndl);
            if (ret != Focas1.EW_OK)
            {
                Console.WriteLine("发生异常,请检查!");
                return;
            }

            #region cnc_machine

            Focas1.ODBAXIS odbaxis = new Focas1.ODBAXIS();            
            for (short i = 0; i < 3; i++)
            {
                ret = Focas1.cnc_machine(Flibhndl, (short)(i + 1), 8, odbaxis);
                Console.WriteLine(odbaxis.data[0]*Math.Pow(10,-4));
            }
            #endregion
            Console.Write("read values");
            Console.Read();
        }
    }

}

c++代码

#include "stdafx.h"
#include "Fwlib64.h"


unsigned short h;

int _tmain(int argc, _TCHAR* argv[])
{


	int status();
	int rddynamic();
	int rdopnlsgnl();
	int exeprgname2();
	int rdspmeter();
	int getdtailerr();
	//int rdmovrlap();
	int rdaxisdata();
	int rdloopgain();
	//int rdproginfo();
	int rdproctime();
	int modal();
	int rdopmsg();
	int rdpm_item();
	//int rdcommand();
	int rdprogdir4();
	int rdproginfo();
	int exeprgname2();
	int rdblkcount();
	int pmcrdpmcrng();//读PMC
	int cncsysinfo();//读系统信息
	int cncrdparainfo();
	int  cncrdparam();
	int  cncrdmain();
	status();
	rddynamic();
	rdopnlsgnl();
	//exeprgname2();
	rdspmeter();
	getdtailerr();
	//rdmovrlap();
	rdaxisdata();
	/*rdloopgain();*/
	//rdproginfo();
	rdproctime();
	modal();
	rdopmsg();
	//rdcommand();
	rdpm_item();
	rdprogdir4();
	rdproginfo();
	exeprgname2();
	rdblkcount();
	pmcrdpmcrng();
	cncsysinfo();
	cncrdparainfo();
	cncrdparam();
	cncrdmain(); //读cnc主程序名


	//ODBSPLOAD sp[4];   /* 4 = maximum spinlde number */
 //   short num = 4;
 //   short reta = cnc_rdspmeter(h, 0, &num, sp);

 //   if(!reta) {
 //       int i;
 //       for(i = 0 ; i < num ; i++) {
 //           printf("%c%c = %d\n", 
 //           sp[i].spload.name, sp[i].spload.suff1,
 //           sp[i].spload.data);
 //       }
 //   }
	

	//int MAX = 4;
	//struct odbdy2 buf2 ;
 //   unsigned int idx ;
 //   cnc_rddynamic2( h, -1, sizeof(buf2), &buf2 ) ;
 //   printf( "Current program = %d   Main program = %d\n",buf2.prgmnum, buf2.prgmnum ) ;
 //   printf( "Sequence number = %ld\n", buf2.seqnum ) ;
 //   printf( "actf = %ld   acts = %ld\n", buf2.actf, buf2.acts ) ;
 //   printf( "Alarm status = %ld\n", buf.alarm ) ;
 //   printf( "AXIS Absolute  Relative  Machine   Distance\n" ) ;
 //   printf( "----+---------+---------+---------+--------\n" ) ;
 //   for ( idx = 0 ; idx < MAX ; idx++ )
 //       printf( "  %u  %8ld  %8ld  %8ld  %8ld\n", idx,
 //          buf2.pos.faxis.absolute[idx],
 //           buf2.pos.faxis.relative[idx],
 //           buf2.pos.faxis.machine[idx],
 //           buf2.pos.faxis.distance[idx] ) ;
	return 0;
}

发那科的功能和参数非常多,前期千万别贪多求全。从自己业务需要的函数调起来,配合虚拟机系统或者真机进行调试。

二、通过专有协议采集需要注意的要点

1、采用TCP主从收发的模式。

2、有连接包,再未发送连接包前,发送其他值不会被接受。

3、不同系统,在不同参数上,发送的数据包略有不同。

4、处理报警时候,要注意字符集问题,注意返回长度问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/760622.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【效率提升】新一代效率工具平台utools

下载地址&#xff1a;utools uTools这款软件&#xff0c;是一款功能强大且高度可定制的效率神器&#xff0c;使用快捷键alt space(空格) 随时调用&#xff0c;支持调用系统应用、用户安装应用和市场插件等。 utools可以调用系统设置和内置应用&#xff0c;这样可以方便快捷的…

Python计算n的阶乘的多种方法

1 问题 在课上&#xff0c;我们学习了用递归函数去计算一个自然数n的阶乘。但计算一个自然数n的阶乘是否就这一种方法呢&#xff1f; 2 方法 关于计算一个自然数n的阶乘&#xff0c;通过搜索&#xff0c;我们寻找到了除运用递归函数外的其他三种方法&#xff1a; 方法一 通过导…

CSS-实例-div 水平居中 垂直靠上

1 需求 2 语法 3 示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格水平居中、垂直靠上示例…

解决Install/Remove of the Service Denied报错

1、问题概述&#xff1f; 在Windows系统中安装MySQL5.7.43的时候&#xff0c;运行mysqld install命令提示报错&#xff1a;Install/Remove of the Service Denied 意思是&#xff1a;安装/删除服务被拒绝 问题原因所在&#xff1a;就是你当前的权限不够&#xff0c;以管理员…

人工智能的目标分类

欢迎来到 Papicatch的博客 目录 &#x1f349;引言 &#x1f349;目标分类的概述 &#x1f348;背景 &#x1f348;分类的重要性 &#x1f34d;明确研究重点 &#x1f34d;促进应用推广 &#x1f34d;便于评估和比较 &#x1f348;分类的原则 &#x1f34d;基于应用领…

密钥库jks文件加载格式错误IOException:Invalid keystore format--已经解决

一、报错 java.lang.RuntimeException: java.io.IOException: Invalid keystore format Caused by: java.io.IOException: Invalid keystore format二、原因 原因&#xff1a;Java的密钥库jks文件放在/src/main/resources目录下,编译后jks文件被修改,导致keyStore.load读取…

支付宝支付之收款码支付

文章目录 收款码支付接入流程安全设计系统交互流程交易状态统一收单交易支付接口请求参数测试结果查询支付撤销支付退款支付退款结果退款说明 收款码支付 继&#xff1a;支付宝支付之入门支付 接入流程 安全设计 支付宝为了保证交易安全采取了一系列安全手段以保证交易安全。…

计网之IP

IP IP基本认识 不使用NAT时&#xff0c;源IP地址和目的IP地址不变&#xff0c;只要源MAC和目的MAC地址在变化 IP地址 D类是组播地址&#xff0c;E类是保留地址 无分类地址CIDR 解决直接分类的B类65536太多&#xff0c;C类256太少a.b.c.d/x的前x位属于网路号&#xff0c;剩…

kafka的工作原理与常见问题

定义 kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;message queue&#xff09;&#xff0c;主要应用于大数据的实时处理领域 消息队列工作原理 kafka的组成结构 kafka的基础架构主要有broker、生产者、消费者组构成&#xff0c;还包括zookeeper. 生产者负责发送…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 &#xff08;一&#xff09;解决策略一&#xff1a;多级缓存策略 客户端本地缓存 代理节点本地缓存 &#xff08;二&#xff09;解决策略二&#xff1a;多副本策略 &#xff08;三&#xff09;解决策略三&#xff1a;热点…

计算机组成原理——锁存器和触发器

文章目录 1. SR锁存器 1.1 电路结构 1.2 电路解析 2. 带en输入的SR锁存器 2.1 ​​​​​​​电路结构 2.2 工作原理 3. ​​​​​​​带En输入的D锁存器 3.1 电路结构 3.2 工作原理 4. ​​​​​​​边沿触发的D触发器 4.1 电路结构 4.2 工作原理 1. SR锁存器 …

Python | Leetcode Python题解之第207题课程表

题目&#xff1a; 题解&#xff1a; class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:edges collections.defaultdict(list)indeg [0] * numCoursesfor info in prerequisites:edges[info[1]].append(info[0])indeg[info[…

C语言 | Leetcode C语言题解之第207题课程表

题目&#xff1a; 题解&#xff1a; bool canFinish(int numCourses, int** prerequisites, int prerequisitesSize, int* prerequisitesColSize) {int** edges (int**)malloc(sizeof(int*) * numCourses);for (int i 0; i < numCourses; i) {edges[i] (int*)malloc(0);…

AD PCB板子裁剪与泪滴设置

在剪裁板子时。首先&#xff0c;选择选择板子的机械层&#xff0c;之后选择画线。在原来的板子上画上自己想要裁剪的图形。如下下图 之后&#xff0c;选择按照所画的线裁剪板子即可&#xff0c;如下 在焊接PCB时&#xff0c;为了防止多次焊接导至焊盘脱落可以加大焊点的接触面积…

leetcode-19-回溯-组合问题(剪枝、去重)

引自代码随想录 一、[77]组合 给定两个整数 n 和 k&#xff0c;返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4]] 1、大致逻辑 k为树的深度&#xff0c;到叶子节点的路径即为一个结果 开始索引保证不…

[C++][设计模式][备忘录模式]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受 1.动机 在软件构建过程中&#xff0c;某些对象的状态转换过程中&#xff0c;可能由于某中需要&#xff0c;要求程序能够回溯到对象之前处于某个点的状态。 如果使用一些公开接口来让其他对象得到对象的状态&#xff0c;便会暴露对象…

3D在线展览馆的独特魅力,技术如何重塑展览业的未来?

在数字化和虚拟现实技术迅猛发展的今天&#xff0c;3D在线展览馆已经成为一种颇具前景的创新形式。搭建3D在线展览馆不仅能够突破传统展览的时空限制&#xff0c;还能为参观者提供身临其境的体验&#xff0c;极大地提升展示效果和用户互动。 一、3D在线展览馆的意义 1、突破时空…

《Windows API每日一练》7.3 计时器时钟

知道如何使用Windows计时器之后&#xff0c;可以看看一些有用的计时器应用程序了。时钟是计时器最明显的应用&#xff0c;我们来看两个例子&#xff1a;一个是数字时钟&#xff0c;另一个是模拟时钟。 本节必须掌握的知识点&#xff1a; 第45练&#xff1a;7段数码管数字时钟 …

KV260视觉AI套件--PYNQ-DPU

目录 1. 简介 2. DPU 原理介绍 2.1 基本原理 2.2 增强型用法 3. DPU 开发流程 3.1 添加 DPU IP 3.2 在 BD 中调用 3.3 配置 DPU 参数 3.4 DPU 与 Zynq MPSoC互联 3.5 分配地址 3.6 生成 Bitstream 3.7 生成 BOOT.BIN 4. 总结 1. 简介 在《Vitis AI 环境搭建 &…

three.js - MeshPhongMaterial材质(实现玻璃水晶球效果)

1、概念 phong网格材质&#xff1a;Mesh - Phong - Material 一种用于具有镜面高光的光泽表面的材质。 它可以模拟&#xff0c;具有镜面高光的光泽表面&#xff0c;提供镜面反射效果。 MeshPhongMaterial&#xff1a; MeshPhongMaterial是一种基于Phong光照模型的材质&#…