目录
一、 设备介绍
以下是基恩士 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_INPUT
iIn_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_OUT
stINOUT_SYS_CELL :ST_SYS_CELL;
END_VAR
(*---------------------------------------------*)
(*OUT variables*)
(*---------------------------------------------*)
VAR_OUTPUT
ost_HWOut : ST_Laser_Profiler_Output; (* Profinet-interface: Outputs *)
oCurrent_Prog_No : INT;
oCurrent_Exe_No : INT;
oCmd_Idle : BOOL;
END_VAR
(*---------------------------------------------*)
(*Local variables*)
(*---------------------------------------------*)
VAR
stLaser_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*)
(*---------------------------------------------*)
VAR
stTemp_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 Function
bVar_REQ_WP_1 : BOOL; // Load Job Number
bVar_REQ_WP : BOOL; // Cision Check Start
wTemp_Diagnose : WORD;(*Error Messages
BIT.0 Robot: Collective Error
BIT.1 Robot: Task number invalid
BIT.2 Robot: Missing release for task start
BIT.3 Robot: Emergengy Stop from robot
BIT.4 Robot: Error - Bus State
BIT.5 Robot: Error - Program not started
BIT.6 Robot: Error - Stop by program
BIT.7 Robot: Error - Stopped by user
BIT.8 Robot: Reserve
BIT.9 Robot: Teach Mode active
BIT.10 Robot: res
BIT.11 Robot: res
BIT.12 Robot: No Connection to Robot TCP_IP-Server
BIT.13 Robot: No answer from robot for Read error
BIT.14 Robot: User Error by Robot
BIT.15 Robot: Reserve
*)
END_VAR
VAR
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();(*=============&#