当前位置: 首页 > web >正文

BeckHoff <---> Keyence (LJ-X8000) 2D相机 Profinet 通讯

                               

目录

                        ​编辑    

                        

一、 设备介绍

1、产品特点

2、控制器选择

3、应用领域

二、PLC通讯接口配置

1、PLC添加GSDML文件

2、定义输入3、变量实例化

3、定义输出变量实例化

三、设备通讯接口数据类型定义

1、定义全局结构体数据

2、定义 INput  Decode结构体数据

四、通讯功能块变量声明 

  

五、通讯功能块程序 

六、通讯功能块程序分析

6.1 代码功能分析

6.2整体架构解析

6.3 详细功能说明

初始化与全局变量

工作模式与命令请求处理

状态机主逻辑(CASE 结构)

错误处理与诊断

6.4 关键数据结构与接口

6.5 总结

七、通讯功能块功能描述及可能的改进空间

7.1 功能块描述

7.2 改进空间

八、附录

1、recive_data 子程序

2、send_data 子程序


                        

一、 设备介绍

以下是基恩士 LJ-X8000 系列中的 2D 产品介绍:

1、产品特点

  • 高精度测量:采用 3200points/profile 超高精度测量,能够极其精确地绘制目标物形状,实现精确的尺寸测量和外观检测,测量精度可达以往产品的 4 倍1。
  • 高速采样:2D 模式下,采样周期最高可达 1kHz(1ms),可快速获取测量数据,满足在线检测等高速测量需求3。
  • 易于设定:只需三步即可完成测量、检测所需的设定,操作轻松简单,兼顾了高精度和易操作性2。
  • 丰富的工具与功能:每个设定有 100 个工具,其中 20 个为错位修正用,可通过识别工件的错位及倾斜,并自动修正,实现不受定位影响的在线全检3。
  • 多种数据接口:具备 RS-232C、PLC 链接、USB、EtherNet/IP™、PROFINET、EtherCAT® 等丰富的接口,可方便地与其他设备进行连接和数据传输,实现系统集成和自动化控制3。
  • 稳定可靠:采用圆柱形透镜防止反射光散射,配备大孔径接收器透镜增加接收光强度,新开发的 CMOS 在不同反射率的目标上也能提供更好的成像能力,确保测量的稳定性和可靠性2。

2、控制器选择

  • LJ-X8000:适用于追求简单快速地实现在线检测场合,可连接最多 2 台感测头,支持 LJ-X8000 系列感测头、LJ-V7000 系列感测头。
  • LJ-X8000E:提供用户高自由度编程的环境以及自行开发的选择,是追求以专有程序实现难度高、应用复杂检测的理想选择。

3、应用领域

  • 电子制造:可对精密电子元件进行细微检测,如芯片封装、印刷电路板(PCB)的尺寸测量、焊点检测、元器件高度检测等,保证电子元件的质量和性能。
  • 汽车制造:用于汽车零部件的尺寸控制、形状检测、装配精度检测等,如汽车发动机缸体、缸盖、曲轴、轮毂等零部件的测量和检测,确保零部件的质量和装配精度。
  • 机械加工:用于机械加工零件的尺寸精度测量、形位公差检测、表面粗糙度测量等,帮助机械加工企业提高产品质量和加工精度。
  • 其他领域:还可应用于建筑材料的均匀性检查、电缆的凹凸检测、端子的间距和高度差检测等多个领域

二、PLC通讯接口配置

1、PLC添加GSDML文件

2、定义2D相机的全局变量

2、定义输入3、变量实例化

3、定义输出变量实例化

三、设备通讯接口数据类型定义

1、定义全局结构体数据

2、定义 INput  Decode结构体数据

TYPE ST_Laser_Profiler_Input_Decode : //Result_Data_128Byte + 32 x 5 Byte = 288 Bytes
STRUCT
ErrorCode     :INT;  // Status INT12
Reserved14    :INT;  // Status INT14
Total_Count   :DINT; // Status DINT16
CommandResult :DINT; // Status DINT20
CommandData  :ARRAY [1..29] OF DINT; // Vision Check Command Datas DINT 20 - DINT136 (相机命令应答自己设置为 116 ) == Result_Data_128Byte
arrResult_Data :ARRAY [1..8] OF DINT; // Vision Check Result Datas  DINT 140 - DINT168  == Result_Data_32Byte1 END_STRUCT
END_TYPE
(*
DINT140 = Result Data1
......
......
......
......
DINT168 = Result Data8
*)

3、定义OUTPUT  Decode结构体数据

TYPE ST_Laser_Profiler_Output_Decode : //Parameter_128Byte
STRUCT
ExecCondNo          :DINT;  // Control DINT12
CommandNumber       :DINT;  // Control DINT16
CmdParameter        :ARRAY [1..30] OF DINT; // Control Parameter DINT20 - DINT 136
END_STRUCT
END_TYPE
(*
DINT20 = CmdParameter1
......
......
......
......
DINT136 = CmdParameter30*)

四、通讯功能块变量声明 

  

FUNCTION_BLOCK FB_TYP_162_Laser_Profiler_LJ_X_V1_0_1(*---------------------------------------------*)
(*IN variables*)
(*---------------------------------------------*)
VAR_INPUTiIn_idxElement				: INT;							(* !!!UNIQUE!!! Element identification*)ist_HWIn     				: ST_Laser_Profiler_Input;		    (* Profinet-interface: Inputs *)ibExt_CMD                   :BOOL;ibImage_StorageEnable       :BOOL;	// 照片存储使能	istPart_ID                  : STRING(30);                   (* Part Barcode *)  // Carmera Software Need Config Command Parmeters Length		
END_VAR(*---------------------------------------------*)
(*IN/OUT variables*)
(*---------------------------------------------*)
VAR_IN_OUTstINOUT_SYS_CELL					:ST_SYS_CELL;	
END_VAR(*---------------------------------------------*)
(*OUT variables*)
(*---------------------------------------------*)
VAR_OUTPUTost_HWOut 					: ST_Laser_Profiler_Output;		(* Profinet-interface: Outputs *)oCurrent_Prog_No            : INT;	oCurrent_Exe_No             : INT;	oCmd_Idle                   : BOOL;		
END_VAR(*---------------------------------------------*)
(*Local variables*)
(*---------------------------------------------*)
VARstLaser_Profiler_Data_Decode	    :ST_Laser_Profiler_Decode; 				(* Laser Profiler Interface Datas *)Dly_Ton			            : TON;Dly_Ton1			        : TON;	Dly_Ton2			        : TON;		Execution_Timeout           : TON;	Step                        :INT;Checked_Count               :DINT;	Start_Condition             :BOOL;Cmd_No                      :INT;	// 24 =Switch Program Numer,25=Read Prog No,41=Entry Execute No,42=Read Current Execute No,60=Entry String,61=Read String     Cmd_Type                    :BYTE;  // (*0= Switch Program Number,1=Switch Excution Condition Number,2=Trigger Check *) Count_No                    :INT;index                       :INT:=0;index1                      :INT:=0;strTemp                     :T_MAXSTRING;	Data_Barcode                :T_MAXSTRING;	arrData                     :ARRAY [0..255]OF BYTE;UnpackDWord                 :MEM.UnpackDWord;
END_VAR(*---------------------------------------------*)
(*Local temp variables*)
(*---------------------------------------------*)
VARstTemp_CELL					: ST_SYS_CELL;					(* Cell structure for element*)stTemp_ELEMENT				: ST_SYS_ELEMENTS;				(* Data structure of element *)tTemp_T_Ticker			    :TIME;(* actual CPU-Tick *)bVar_REQ_HP 				: BOOL;  // Execute FunctionbVar_REQ_WP_1				: BOOL;  // Load Job NumberbVar_REQ_WP					: BOOL;  // Cision Check StartwTemp_Diagnose				: WORD;(*Error MessagesBIT.0	Robot: Collective ErrorBIT.1	Robot: Task number invalidBIT.2	Robot: Missing release for task start BIT.3	Robot: Emergengy Stop from robot					BIT.4	Robot: Error - Bus StateBIT.5	Robot: Error - Program not startedBIT.6	Robot: Error - Stop by programBIT.7	Robot: Error - Stopped by userBIT.8	Robot: ReserveBIT.9	Robot: Teach Mode activeBIT.10	Robot: resBIT.11	Robot: resBIT.12	Robot: No Connection to Robot TCP_IP-ServerBIT.13	Robot: No answer from robot for Read errorBIT.14	Robot: User Error by RobotBIT.15	Robot: Reserve*)
END_VARVAR   idxRotaryCylinder			    :UINT := 0;					(* Element Connection to 'Cylinder V021 ' - set to "0" if not used *)idxLaser_Profiler			    :UINT := 0;					(* Element Connection to 'Camera 3D lJ-X8000 ' - set to "0" if not used *)idxVision_AxisX 			    :UINT := 0;					(* Element Connection to 'Axis X ' - set to "0" if not used *)idxVision_AxisY 			    :UINT := 0;					(* Element Connection to 'Axis Y ' - set to "0" if not used *)		 Step_Fun_Master                : UINT;	 MeasureDatas_3D 	           : ARRAY [1..9] OF ST_Laser_Profiler_Result;	bMeasterExecuteEnd             : BOOL;  // 执行完成bMeasureExecuteEnd             : BOOL;  // 执行完成	 CylPos_Define 	               : ARRAY [1..9] OF USINT;	Index_AxisPos 	               : USINT;	 MeasureNo  	               : USINT;	  // 测量次数	Step_Fun_Measure              : UINT;	  
END_VAR

五、通讯功能块程序 

(* Initialisation of FB internal structures - for reducing length of expressions *)
acstartCopyData();(*=============&#
http://www.xdnf.cn/news/14321.html

相关文章:

  • IO之详解cin(c++IO关键理解)
  • 矩阵运算基础、矩阵求导
  • 《Apollo 配置中心在动态主题系统中的设计与扩展》
  • openeuler 系统—— 集成大模型分析日志中的错误信息生成故障原因报告
  • LeetCode - 34. 在排序数组中查找元素的第一个和最后一个位置
  • GTSAM中InitializePose3::initialize()使用详解
  • 数据目录:企业数据管理的核心引擎与最佳实践
  • 各种运算符的学习心得
  • 【JavaScript-Day 41】JS 事件大全:click, keydown, submit, load 等常见事件详解与实战
  • RK全志平台WiFiBT调试思路
  • 替换一个数字后的最大差值
  • 【配件出入库专用软件】佳易王配件进出库管理系统:轻量级仓储管理解决方案配件管理系统#进出库管理#仓储软件#库存统计#轻量级解决方案
  • 错题分析接口实现全流程
  • Vue3 + TypeScript 父组件点击按钮触发子组件事件方法
  • C#里与嵌入式系统W5500网络通讯(5)
  • 【python】bash: !‘: event not found
  • 【C语言】C语言发展历史、特点及其应用
  • DL00120-Lyapunov深度强化学习移动边缘计算网络在线计算卸载python
  • 互联网大厂Java求职面试:AI大模型应用实践中的架构挑战与实战
  • Android Activity全面解析:从创建到生命周期的完整指南
  • 深入解析 Java 集合框架:从底层原理到实战优化
  • Pytorch 卷积神经网络参数说明一
  • Python----OpenCV(图像的绘制——绘制直线,绘制矩形,绘制圆形,绘制多边形)
  • (javaSE)抽象类和接口:抽象类概念语法和特性, 抽象类的作用;接口的概念 接口特性 实现多个接口 接口间的继承 Object类
  • Qt--信号槽发送QVector
  • Relin梦中门——第二章——感官
  • jojojojojo
  • java 设计模式_行为型_15迭代器模式
  • nginx 配置返回 文件大小
  • Go语言底层(四): 深入浅出Go语言的ants协程池