目錄
?編輯
一、 設備介紹
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();(*=============&#