'!TITLE "Set And Check Area Sample."
'!Author   DENSO-WAVE Inc.

#include "sys_Global.h"


Sub Main
	' I variable Index
	DEFINT IDX_I_PRODUCTS_CNT_MAX                                                                                                                        ' Index No. for Max. No. of Job
	DEFINT IDX_I_POINTS_CNT_MAX                                                                                                                          ' Index No. for Max. No. of Inspection Points
	DEFINT IDX_I_ACTIVE_PRODUCT                                                                                                                          ' Index No. of Selected Job
	DEFINT IDX_I_PRODUCT_POINTS                                                                                                                          ' Index No. of Inspection Points
	
	' F variable Index
	DEFINT IDX_F_J7_AREA_POS                                                                                                                             ' Index No. of Extend Axiz(J7) Point
	DEFINT IDX_F_J8_AREA_POS                                                                                                                             ' Index No. of Extend Axiz(J8) Point
	
	' P variable Index
	DEFINT IDX_P_AREA_POS                                                                                                                                ' Index No. of Area Point
	DEFINT IDX_P_AREA_INFO                                                                                                                               ' Index No. of Area Information
	DEFINT IDX_P_MOVE_INFO                                                                                                                               ' Index No. of Motion Information
	
	DEFINT MaxProductCnt                                                                                                                                 ' Max. No. of Job
	DEFINT MaxPointCnt                                                                                                                                   ' Max. No. of Inspection Points
	DEFINT ProductNo                                                                                                                                     ' Selected Job
	DEFINT PosCnt                                                                                                                                        ' No. of Inspection Points
	DEFINT EnabledJ7, EnabledJ8, EnabledExJnt
	DEFINT Cnt
	
	DEFPOS lpPos
	DEFVEC lvVec, lvPose
	DEFINT liIO
	DEFSNG lfPosJ7, lfPosJ8
	DEFSNG lfErr, lfErrJ7, lfErrJ8
	
	IDX_I_PRODUCTS_CNT_MAX = IDX_I_START + I[IDX_I_USER_I] + 1
	IDX_I_POINTS_CNT_MAX = IDX_I_START + I[IDX_I_USER_I] + 2
	IDX_I_ACTIVE_PRODUCT = IDX_I_START + I[IDX_I_USER_I] + 4
	IDX_I_PRODUCT_POINTS = IDX_I_START + I[IDX_I_USER_I] + 5 + I[IDX_I_ACTIVE_PRODUCT] 
	
	MaxProductCnt = I[IDX_I_PRODUCTS_CNT_MAX]                                                                                                            ' Max. No. of Job
	MaxPointCnt = I[IDX_I_POINTS_CNT_MAX]                                                                                                                ' Max. No. of Inspection Points
	ProductNo = I[IDX_I_ACTIVE_PRODUCT]                                                                                                                  ' Get the Selected Job No.
	PosCnt = I[IDX_I_PRODUCT_POINTS]                                                                                                                     ' Get the No. of Inspection for Selected Job
	
	' Get Index No. of Area Position(J7)
	IDX_F_J7_AREA_POS = IDX_F_START + I[IDX_I_USER_F] + (MaxPointCnt * ID_F_J7_TEACH_POS) + (MaxPointCnt * ID_F_COUNT * ProductNo)
	' Get Index No. of Area Position(J8)
	IDX_F_J8_AREA_POS = IDX_F_START + I[IDX_I_USER_F] + (MaxPointCnt * ID_F_J8_TEACH_POS) + (MaxPointCnt * ID_F_COUNT * ProductNo)
	
	' Get Index No. of Area Point
	IDX_P_AREA_POS = IDX_P_START + I[IDX_I_USER_P] + (MaxPointCnt * ID_P_AREA_POS) + (MaxPointCnt * ID_P_COUNT * ProductNo)
	' Get Index No. of Area Information
	IDX_P_AREA_INFO = IDX_P_START + I[IDX_I_USER_P] + (MaxPointCnt * ID_P_AREA_INFO) + (MaxPointCnt * ID_P_COUNT * ProductNo)
	' Get Index No. of Motion Information
	IDX_P_MOVE_INFO = IDX_P_START + I[IDX_I_USER_P] + (MaxPointCnt * ID_P_MOVE_INFO_CORRECT) + (MaxPointCnt * ID_P_COUNT * ProductNo)
	
	
	EnabledExJnt = 1  'Set the system configuration                                                                                                                                '0:Without External Axis
	'1:With 7th External Axis
	'2:With 8th External Axis
	'3:With 7&8th External Axis
	
	SETAREA 0
	
	For Cnt = 0 To PosCnt - 1
		' Area data set at the area enable point
		if (PosRY(P[IDX_P_MOVE_INFO + Cnt] ) = - 1) then
			lpPos = P[IDX_P_AREA_POS + Cnt] 
			lvVec = PVec(P[IDX_P_AREA_INFO + Cnt] )
			liIO = PosRX(P[IDX_P_MOVE_INFO + Cnt] )
			lvPose = RVec(P[IDX_P_AREA_POS + cnt] )
			lfErr = PosRX(P[IDX_P_AREA_INFO + cnt] )
			lfPosJ7 = F[IDX_F_J7_AREA_POS + cnt] 
			lfErrJ7 = PosRY(P[IDX_P_AREA_INFO + cnt] )
			lfPosJ8 = F[IDX_F_J8_AREA_POS + cnt] 
			lfErrJ8 = PosRZ(P[IDX_P_AREA_INFO + cnt] )
			
			'//////////////// Area 0 is used /////////////////
			select case EnabledExJnt
				case 0                                                                                                                                   ' ExJ Disable
					AREA 0, lpPos, lvVec, liIO, - 1, 0, Tar_Time(2), Tar_Posture(lvPose, lfErr)
				case 1                                                                                                                                   ' J7 Enable
					AREA 0, lpPos, lvVec, liIO, - 1, 0, Tar_Time(2), Tar_Posture(lvPose, lfErr), Tar_Exjnt((7, lfPosJ7, lfErrJ7), (8, lfPosJ8, - 1))
				case 2                                                                                                                                   ' J8 Enable
					AREA 0, lpPos, lvVec, liIO, - 1, 0, Tar_Time(2), Tar_Posture(lvPose, lfErr), Tar_Exjnt((7, lfPosJ7, - 1), (8, lfPosJ8, lfErrJ8))
				case 3                                                                                                                                   ' J7, J8 Enable
					AREA 0, lpPos, lvVec, liIO, - 1, 0, Tar_Time(2), Tar_Posture(lvPose, lfErr), Tar_Exjnt((7, lfPosJ7, lfErrJ7), (8, lfPosJ8, lfErrJ8))
			end select
			
			Wait IO[liIO] 
			' Dealy 1
			Reset IO[liIO] 
		end if
	NEXT
	RESETAREA 0
End Sub
