在SPEL+中存取屬性及結果:VGet、VSet

VGet和VSet指令可用於讀取及設定SPEL+程式中的序列和物件屬性。
VGet指令可用來讀取結果。例如,您可以變更搜尋視窗大小及位置、接受參數、攝影機增益,以及最大面積等。
幾乎所有可以從Vision Guide 8.0點擊介面存取的所有屬性及結果,也都可以從SPEL+程式存取。也有一些特殊屬性只能使用VSet或VGet存取(因為會設定或回傳多個結果)。(例如:SearchWin、RobotXYU和ModelWin…等等。)
VGet和VSet皆使用相同的語法。
每個指令都必須先參考一個序列的名稱。此外,必須在序列名稱後加上一個Vision物件的名稱,才可存取Vision物件的屬性及結果。
並使用一個句點來分隔序列、物件及屬性或結果名稱。若使用多個結果,可在Name結果之後以括號附加一個結果編號,以選擇特定的結果。

對於序列屬性及結果,請使用下列的語法:

VGet seqName.propName, var	‘put property value in variable  
VSet seqName.propName, value	‘set property to value  

對於物件屬性及結果,請使用下列的語法:

VGet seqName.objName.resultName, var  
VGet seqName.objName.propertyName, var  
VSet seqName.objName.propertyName, value  

對於物件的多個結果,請使用下列的語法:

VGet seqName.objName.resultName(resultnum), var  

序列和物件名稱也可以是字串變數。
若想了解詳情,請參考以下章節。
為序列及物件名稱使用變數

使用VGet

VGet可讀取一個屬性或結果,並寫入於一個SPEL+變數中。您必須在您的程式中提供一個具有適當資料類型的變數,以接收VGet的值。
以下是在SPEL+程式中使用VGet的範例。

Function Inspect  
  ' Run the vision sequence  
  VRun InspectPart  
  Integer i, numberFound  
  Real area  
  VGet inspPart.Part1.NumberFound, numberFound  
  For i = 1 to numberFound  
    ' Loop through each item that was found  
    ' Get the area of the blob result  
    VGet inspPart.Part1.Area(i), area  
    Print "Area of result ", i, " is ", area  
  Next i  
Fend  

使用VSet

VSet可在執行時間設定屬性值。讓開發人員可以此從SPEL+程式進行屬性設定值的動態調整。
在大部份的情況下,您可以從Vision Guide視窗設定屬性值,然後從SPEL+程式執行視覺序列,而不需要修改屬性。但對於需要動態調整的情況,即可使用VSet SPEL+指令。
以下是在SPEL+程式中使用VSet的範例。請注意,第一次呼叫VSet會設定一個序列屬性。第二次呼叫VSet會設定一個稱為SearchWin的物件屬性,可在執行序列之前,用來重新定義一個搜尋視窗的位置及大小。

Function findPart  
  
  ' Set camera gain for sequence "findPart"  
  VSet findPart.CameraContrast, 32  
	  
  ' Set search window for object "part"  
  VSet findPart.part.SearchWin, 100, 100, 50, 50  
  
  ' Run the sequenced  
  VRun findPart  
Fend