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

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();(*=============&#

相关文章:

  • # 把 ISO 写入 U 盘(相关了解)
  • 《深度学习:基础与概念》第一章 学习笔记与思考
  • VBA使用字典统计
  • 键盘按键枚举 Key 说明文档
  • [创业之路-418]:经济学 - 凯恩斯主义的需求管理与西方供应侧理论、供需关系理论详解以及对创者者的启示
  • 【leetcode】78. 子集
  • 湖北理元理律师事务所债务规划方法论:法律框架下的可持续还款体系
  • 义乌购商品详情接口开发指南
  • 详解Java的启动参数-Dfile.encoding、System.getProperty(“file.encoding“)、该参数影响哪些行为
  • Atcoder Beginner Contest 410 题解报告
  • 生产者消费者消息流转和基本实操
  • Golang 在 Linux 平台上的并发控制
  • Vue3 + TypeScript + Element Plus 表格实例null检查方法
  • 18.vue.js的scoped样式隔离?原理和使用?(1)
  • c++总结-05-模板与泛型编程
  • 大IPD之——学习华为市场洞察,为战略找到方向(四)
  • 层压板选择、信号完整性和其他权衡
  • 日常开发工作流程梳理
  • 16 celery集成其他工具
  • 【论文解读】AgentThink:让VLM在自动驾驶中学会思考与使用工具
  • 国外做多媒体展览的网站/推广普通话内容100字
  • 条件查询 php网站源码/杨谦教授编的营销课程
  • 建设银行网站上不去了/seo基础入门免费教程
  • 网站做程序员/域名注册哪个网站好
  • 商务网站建设目的/免费的十大免费货源网站
  • 金乡网站建设哪家便宜/山东疫情最新情况