Sherlock之Instructions指令介紹(Sherlock Version: 7.2.5.1 64-bit)
- 2019 年 10 月 3 日
- 筆記
指令集總覽
1、General
1)、Comment:: 注釋指令。
2)、Image Window: 創建新的圖像窗口。 True: 取像之後更新圖像窗口顯示;False: 有新圖像時不更新圖像窗口。取像成功返回true。
3)、Return: 流程指令”返回“。從子程序插入一個返回。
4)、Subrotine: 創建一個子程序。
5)、Test: 評估聲明。
2、Array: Boolean(布爾數組指令)
同 “Array: Number(整型數組指令)“
3、Array: Line(直線數組指令)
同 “Array: Number(整型數組指令)“
4、Array: Number(整型數組指令)
1)、AbsoluteValue: 求絕對值,array = |array|。
2)、Add / Subtract / Multiply: 兩個數組求和 / 差 / 積,array = array_1 (+/-/*) array_2。
3)、Append: 將指定的元素添加到數組的結尾。
4)、AppendRep: 將指定的元素在數組結尾添加n次。
5)、ClipHigh / ClipLow: 將數組中>= / <=threshold的值替換成above。
6)、Concatenate: 將兩個數組合併。
7)、ConstMulAdd: array = intput_array * mulConst + addConst。
8)、CopyArray: 將輸入數組的全部或部分元素複製到一個新的數組。
9)、Correlate: 關聯兩個數字數組並輸出生成的Pearson相關係數。 如果兩個數組的大小不同,則使用較小數組的大小。
Pearson相關係數 (Pearson Correlation Coefficient)是用來衡量兩個數據集合是否在一條線上面,它用來衡量定距變量間的線性關係。其範圍是-1~1,0表示無相關性或出錯。
Pearson相關係數使用公式如下:
其中,X是array_1的值,Y是array_2的值。帶上橫線的X和Y分別是數組的平均值。
10)、Create: 創建一個含有n個元素的新數組並初始化為0。
11)、CreateInf: 用傳入的值創建一個新數組。
12)、CreateRep: 創建一個含有n個元素的新數組並全部初始化為指定的值。
13)、Difference: 將array_1中含有但array_2中沒有的元素輸出到新的數組中。
14)、Erase: 刪除指定索引處的元素。
15)、EraseRange: 刪除指定索引範圍內的元素。
16)、Extrema: 返回輸入數組中的最大值和最小值以及對應的數組索引。
17)、GetAt / SetAt: 獲取 / 設定指定索引處元素的值。
18)、GetRange: 輸出是一個新的數組,它是輸入數組的子集,包含從索引開始的Count個元素。
包含索引處的元素。 如果請求的元素太多,則僅返回可用的數字,而不發出錯誤信號。 換句話說,如果第一個數組的大小小於(index + count),則生成的數組可能小於count,並且函數返回時沒有錯誤。
19)、SetRange: 將指定索引範圍內的元素設為常量。
wrap選項允許設置的值範圍離開數組的末尾並環繞到數組的開頭,就像數組是圓形而不是線性一樣。 例如,這有助於抑制找到的最大麴率(使用Array:Number:Maximum),以便在對象上找到其他最大值(角)。
19)、Insert: 在指定索引出插入新值,並將索引後邊的元素後移。
20)、InsertRep: 在指定索引處插入n個元素,並全部賦以特定的值。
21)、Maxinum / Mininum / MeanAndVariance: 返回數組中元素的最大值、最小值、均值、方差和標準差。
23)、Resize: 將數組長度調整為特定的長度,根據需要刪除或增加元素。
24)、Reverse: 將數組中的元素倒序輸出。
25)、Size: 返回數組的長度。
26)、Smooth: 平滑的輸入數組值,近似於高斯濾波器形狀。(啥意思??沒看懂)
27)、Sort: 將數組中的元素按升序(默認)或降序進行排序。
29)、Threshold: 將數組中>=threshold的值替換成above,其他的替換成below。
30)、ThresholdBand: 見數組中>=high threshold的值替換成above,<low threshold的值替換成below,其他的替換成between。
5、Array: Point(點數組指令)
1)、Remove Isolated Outliers: 刪除不屬於點之間最大距離度量集群的點。
此函數計算點數組中每個輸入點與其前後兩個近鄰點之間的最大距離。然後基於“容差”將距離值聚類成組。不在最大集群(組)中的輸入點將被刪除並放入輸出“bad points”數組中。 剩餘的點在“good points”輸出數組中返回。 這樣可以很好地去除輸入點數組中的少量的孤立“噪聲”點,但如果存在許多噪聲點則效果不佳,因為噪聲點可能形成最大的簇(組)。
其他同 “Array: Number(整型數組指令)“
6、Array: String(字符串數組指令)
同 “Array: Number(整型數組指令)“
7、Boolean指令集
1)、AND / OR / NOT: 與或非。
2)、SetBoolean: 將布爾值(輸出值)設定為指定的值。
3)、XOR: 異或,如果奇數個輸入為true,則為true。
8、Geometric指令集
1)、ADToLn: 根據一個弧度和一個距離(原點到直線的距離)來確定一條直線。
2)、AngleBisect: 計算在點point2處相交的兩條線之間的角平分線(從點point1到點point2的直線和從點point3到點point2的直線)。
3)、AngleNormalize: 將角度轉化成-π/2~π/2範圍內的角度。
4)、CircleBoundingBox: 求一個圓的外切正方形的四個角點(左上、左下、右上、右下)
5)、CircleInTriangle: 求三角形的內切圓。
6)、CircleLineIntersect: 求一條直線和一個圓的交點數量及角點坐標。
7)、Convex Hull: 返回一個點集合的凸殼。
8)、Curvature: 求一段曲線(點集合表示)的曲率。
9)、Curvature-Hole: 求一段閉合曲線的曲率,並將設定曲率內的曲線用點標示出來。
10)、LnNormalize: 使直線的斜率強制轉化為-1/2*Pi~+1/2*Pi之間,使之成為一條標準直線。
11)、LnParallel: 過一點求一條直線的平行線。
12)、LnPerpendicular: 過一點求一條直線的垂線。
13)、LnsBisect: 求兩條直線的角平分線。
14)、LnSet: 把一條直線指定給一個線類型變量。
15)、LnsIntersection: 求兩條直線的交點。
16)、LnToAD: 把一條直線的斜率和距離提取出來。
a表示直線的角度;d表示原點到直線的距離,直線在原點上方為負,下方為正,如右圖所示。
通過a和d表示直線的方程:y=tan(a)*x+d/cos(a)。
17)、LnToLnAngle: 兩條直線的夾角。
18)、LnToLnDist: 兩條直線與第三條直線的兩個交點之間的距離也就是P1和P2之間的距離。
19)、MakeAnchor: 求一個點(P1)在一個方向上,相同距離(dist)的兩個對稱點(P1’/P1’’)。
20)、PtAverage: 求點集合中所有點的中點。
21)、PtAverageInf: 求給定的一系列點的中點。
22)、PtMiddle: 求兩個點的中點。
23)、PtRotate: 一個點繞另一個點轉一個固定的角度,得到旋轉之後的點。
24)、PtSet: 把一個點指定給一個點類型變量。
25)、PtsToBestAngle: 過兩點的直線與圖像X軸的夾角。
26)、PtsToBestCircle: 通過一個點數組集合中的點擬合一個圓。
27)、PtsToBestCircleInf: 通過給定的一系列點擬合一個圓。
28)、PtsToBestLine: 通過一個點數組集合中的點擬合一條直線。返回擬合所使用點的個數和數組、丟棄點的數組以及擬合的直線。
“percent outliers” -> 作為異常值丟棄的點的百分比。
“proprecess” -> 如果為true,請使用Remove Isolated Outliers作為預處理。
“tolerance” -> 從理想點到最差可接受點的最大距離。必須大於零。
29)、PtsToBestLnInf: 通過給定的一系列點擬合一條直線。
30)、PtsToBestLnMaxOut: 通過一個點數組集合中的點擬合一條直線。允許丟棄指定百分比的異常值以改善直線擬合。返回擬合所使用點的個數、丟棄點的數組、直線的最近和最遠點以及擬合的直線。
31)、PtsToLnDist: 數組內的點到直線的距離。
32)、PtsToLnDistInf: 指定的一系列點到直線的距離。
33)、PtsToPtsDist: 一組點到另一組點的距離。
34)、PtToLnDist: 一個點到直線的距離。
”measurement point“ -> 垂足的坐標。
“measurement line” -> 垂線。
35)、PtToPtAngleDist: 求兩點之間的距離以及兩點擬合的直線與X軸的夾角。
36)、PtToPtDist: 一個點到另外一個點的距離、X的距離和Y的距離。
37)、PtToPtsDist: 一個點到一組點的距離、X的距離和Y的距離。
38)、PtToPtsDistMinMax: 一個點到一組點的距離以及最小最大距離。
39)、RakeLineFit: 通過Rake ROI中的點擬合一條直線。
”linear tolerance” -> 從理想點到最差可接受點的最大距離,即線性公差值。必須大於零。
“angular tolerance” -> 從理想點到最差可接受點的最大角度,即角度公差值。必須大於零。
此函數進行三次傳遞以細化異常值的刪除。
第一次檢查一個點與其前後兩個近鄰點之間的距離。如果距離大於線性公差值,則移除該點。這適用於孤立的“噪聲”點,但不適用於分組的異常點。
第二次檢查第一個點和陣列中每個連續點之間的角度。如果角度大於角度公差值,則移除該點。前兩點必須是位於線上的“好”的數據。如果組很小,並且大多數點位於期望的線上,則可以更好地刪除組合在一起的異常值。
第三次檢查最後一個點和每個連續的前一個點之間的角度,向後工作。如果角度大於角度公差值,則移除該點。最後兩點必須是位於線上的“好”的數據。與第二次一樣,如果組小,並且大多數點位於期望的線上,則可以更有效地去除組合在一起的異常值。
該公式適用於孤立的“噪聲”點,也適用於小組中的點,這些點形成少數採樣點。組越接近期望的線,角度公差越不可能將它們全部移除(角度變小)。應移除形成深、窄凹口或鑿孔的點。可能無法完全去除寬而淺的凹口。
40)、PtToXY: 求一個點的X/Y坐標。
41)、TwoPtsToLn: 用兩個點擬合一條直線。
42)、XYToPt: 用X/Y坐標擬合一個點。
9、IO: Annotations(圖像顯示指令集)
1)、Circle / Circles: 在圖像中畫一個圓 / 一系列等半徑的圓。
2)、Line / Line Segment: 在圖像中畫一條直線 / 線段。
3)、Pixels: 在圖像中把一些像素點標示出來。
4)、Point / Points: 在圖像中畫一個 / 組點。
5)、Polyline: 在圖像中畫一條多線段(折線)。
6)、Rectangle: 在圖像中畫一個矩形。
7)、Text: 在圖像中顯示一段文本。
10、IO: Calibration
1)、Calibrate Using a Grid: 使用網格重新校準。該指令允許從自定義前端程序執行目標或網格校準。以前只能從GUI界面獲得網格或目標校準。
從GUI界面設定如下:
在程序中執行網格校準:
2)、Calibrate Using Point Arrays: 使用一系列點校準。分配校準系統。選擇4個輸入點,並提供相應的世界坐標。您應該已經在圖像窗口中識別或創建了四個點。
3)、Calibrate Using Points: 使用輸入點進行校準。分配校準系統。選擇4個輸入點,並提供相應的世界坐標。您應該已經在圖像窗口中識別或創建了四個點。在程序窗口中,可以將點拖動到校準輸入上。
4)、Calibrate Using Transformation Values: 使用轉換值進行校準。分配校準系統,提供軸坐標原點和比例因子(乘數)。
5)、Load Calibration: 加載以前保存的校準數據文件。可以通過指令或從【圖像窗口選項(雙擊圖像窗口打開)】->【Calibration】導出(保存)校準數據。
註:此校準數據只在使用相同的相機、相同的鏡頭、相同的相機位置以及與目標物體相同的距離時有效。如果這些因素中任意一個發生變化,則校準數據無效。
6)、Pixels To World: 將點位置從像素坐標轉化為世界坐標(或校準坐標)。
7)、Save Calibration: 將校準數據保存到文件中。
8)、Set Identity Calibration: 設置1對1(標識)校準,此功能將測量值返回到像素值,”取消校準“校準系統。
9)、World To Pixels: 將點位置從世界坐標(校準坐標)轉換為像素坐標。
11、IO: Camera(相機參數設定指令集)
1)、Flush acquired images: 清除所有採集圖像的相機緩衝區。
2)、Get bool / number / string feature: 返回相機的布爾 / 數字 / 字符串特徵。返回[Boolean]類型的相機功能的當前值。可用功能及其值由相機製造商定義。(沒懂什麼意思,應該是相機本身的參數)
3)、Set bool / number / string feature: 設置相機的布爾 / 數字 / 字符串特徵。
4)、Get camera count: 檢測系統內連接相機的個數。
5)、Get missed frame count: 返回自當前採集開始以來丟失的幀數。
6)、Get number of acquired lines: 返回相機獲取的行數。此指令適用於線掃相機,用以返回在可變幀模式下獲取的行數。
7)、Halt camera ACQ: 停止相機的採集。
8)、Read register: 讀取相機寄存器。
9)、Send command: 往相機寫入一個命令字符串。
10)、Set Brightness: 設置白平衡。範圍通常是0-100,但實際值由相機製造商定義。
該指令適用於PIC-2592相機。 如果Sapera網絡驅動程序處於“使用Teledyne DALSA接口”模式,此指令適用於Genie系列相機,但不適用於Genie TS系列或其他相機。
11)、Set Lut: 設置相機查找表(Look-Up Table)。
12)、Set Shutter: 設置曝光時間。
13)、Set Trigger Delay: 設置抓取部件傳感器觸發和相機觸發信號發出之間的延時。
14)、Write register: 往相機寄存器裡邊寫值。
12、IO: ControlLogix
ControlLogix系統是基於機架的系統,可以提供對使用順序控制、過程控制、運動控制和驅動控制的控制系統進行組態的選項,還可提供通信I/O功能。
註:必須預先在【Options】->【IO】 – > 【Control Logix】中定義控制器和句柄變量。
1)、Read / Write: 從ControlLogix控制器讀取 / 寫入單個值。 不適用於字符串類型。 數字被解釋為位元組,字,雙字或實數值。
2)、Read Array / Write Array: 從控制器中讀取 / 寫入一組值。 不適用於長度前綴的字符串類型。 數字被解釋為位元組,字,雙字或實數值。
3)、Read Bool / Write Bool: 從控制器讀取 / 寫入一個布爾值。
4)、Read Bool Array / Write Bool Array: 從控制器讀取 / 寫入一組布爾值。
5)、Read String / Write String: 從控制器讀取 / 寫入單個字符串。
6)、Read String Array / write String Array: 從控制器讀取 / 寫入一個字符串數組。
13、IO: Digital Input(IO輸入信號指令集)
1)、Get input IO count: 獲取IO輸入口的數量。
2)、Read: 讀取一個IO輸入口的狀態。
3)、Read Array: 讀取一組IO輸入口的狀態。
4)、Read Decimal: 一次讀取所有IO輸入口的狀態。最大數字通道數為32。
5)、Wait For Pulse: 等待一個IO輸入口的脈衝信號。
6)、Wait For State: 等待一個IO輸入口的常態信號。
14、IO: Digital Output(IO輸出信號指令集)
1)、Advanced IO: Enqueue Decision: 排列高級I/O(AIO)決策。 必須存在並啟用高級I/O功能。 高級I/O是VA21,VA31,VA40,VA41和NetSight II-MCA的硬件功能。 不適用於其他硬件。
Parameters: “Decision” -> Pass(0),Fail(1),Recycle(2)。
如果可用,則使用IFC Camera Configurator配置高級I/O硬件和時序。 參數保存在Camera Configuration文件中。
2)、Advanced IO: Initialize Queue: 排列初始I/O決策。 必須存在並啟用高級I/O功能。 高級I/O是VA21,VA31,VA40,VA41和NetSight II-MCA的硬件功能。不適用於其他硬件。
如果存在,則使用IFC Camera Configurator配置高級I/O硬件和時序。 參數保存在Camera Configuration文件中。
3)、Async Pulse: 輸出異步脈衝。將輸出“channel”設置為和“state”相反。等待“time”時間(以ms為單位),然後將輸出“channel”設置為“state”。Sherlock執行Async Pulse之後的下一個指令,無需等待此指令完成或脈衝執行。
4)、Get output IO Count: 獲取IO輸出口的個數。
5)、Pulse: 將輸出“channel”設置為和“state”相反。等待“time”時間(以ms為單位),然後將輸出“channel”設置為“state”。Sherlock執行Pulse之後的下一個指令之前需等待脈衝指令完成。
6)、Read: 讀取IO輸出口的狀態。
7)、Read Array: 一次性讀取多個IO輸出口的狀態。
對於channels數組中索引N處設置為1(True)的任何元素,讀取相應的數字輸出通道N,並且將該通道的值寫入到索引N處的states數組中。
對於channels數組中設置為0(False)的元素,states數組中的相應位置會被設置為零(False)。 應忽略這些位置,因為它們不反映相應輸出通道的狀態。
8)、Read Decimal: 一次性讀取所有IO輸出口的狀態(最大為32通道)。
9)、Schedule Async Pulse: 安排一個異步脈衝輸出。
將channel設置為與state相反, 等待delay(單位ms)時長後將channel通道設置為state,再等待time(單位ms)時長後將channel設置為與state相反。Sherlock執行下一個語句時不用等待脈衝輸出發生。
10)、Write: 將state寫入到輸出channel中。
11)、Write Array: 一次性寫入多個IO輸出口的狀態。
對於在channels數組中索引N處設置為1(True)的任何元素,將數字輸出通道N寫入到索引N處的States數組中對應值的狀態。
例如:下列的數組將0寫入通道2,1寫入通道3,通道0和1未寫入值,因為’channels’值為0。
12)、Write Decimal: 一次性寫入所有數字輸出口(最大為32輸出通道)。
‘value’ -> 寫入到數字輸出口的10進制(或16進制)數。該值被重新解釋為一個二進制位模式,並寫入到數字輸出通道中。lsb(最低有效位)始終是輸出通道0。
15、EtherNet/IP
EtherNet/IP是由RockWell開發的工業以太網通訊協定,是通用工業協定(CIP)的一部分。IP是Industrial Protocol(工業協議)的簡稱,和網際協議沒關係。
註:在執行指令或運行一次(至少一次)之前,不會初始化EthernetIP通信。 如果指令尚未執行,PLC軟件將無法訪問運行Sherlock的系統。 或者,您可以在啟動Sherlock時自動啟動EthernetIP通信服務器。 在以下路徑進行設置:菜單欄【Options】->【Application】->【Advanved】->【EthernetIP: start EthernetIP server on Sherlock startup】。
1)、Read: 讀取一組數值。
2)、Write: 寫入一組數值。
16、IO:File(文檔指令集)
1)、Append: 向文檔內追加內容。下次寫入不會覆蓋掉之前的內容。
2)、Close: 關閉一個打開的文檔。
3)、Open: 打開一個文檔。
4)、Read: 讀取文檔中(已打開)的內容。
5)、Write: 往文檔中寫入內容。下次寫入會把之前的覆蓋掉。
17、GE Fanuc
GE(通用電氣公司,GeneralElectricCompany)和FANUC(日本發那科公司)合資企業,目前在中國主要銷售PLC(90-70 / 90-30)和軟件(Intellution,IFix/Fix)。
註:必須先在【Options】->【IO】 – > 【GE Fanuc】菜單中定義控制器。
1)、Read: 從控制器讀取單個數值。
2)、Read Bool: 從控制器讀取單個布爾值。
3)、Write: 往控制器寫入單個數值。
4)、Write Bool: 往控制器寫入單個布爾值。
18、IO:Image Window(圖像窗口指令集)
1)、Clear Image Log: 清除圖像日誌或序列。
2)、Copy to Cipboard: 複製圖像至剪切板。
“graphics” -> 0: 只複製圖像,不帶圖形和注釋;1: 複製帶有圖形和注釋的圖像。
3)、Enable image Logging: 啟用 / 禁用圖像日誌。
圖像參數在圖像窗口屬性里定義,通過該指令無法修改其它參數。
4)、Get FTP Image Logging Status: 獲取圖像窗口的FTP日誌記錄狀態。
此函數在調用時報告FTP子系統的狀態(因為FTP客戶端獨立於程序 [ivs] 執行器工作),但應足夠準確以捕獲最重要的問題。
“tfp log active” -> 如果此窗口啟用了FTP圖像日誌記錄,則為TRUE。
“error” -> 上一條FTP錯誤說明。
“failed upload” -> 上一個上傳操作失敗的文件(如果有)。
“queze size” -> 排隊等待上傳的圖像數量,如果沒有可用信息則為-1。
“last queued” -> File last queued。文件最後隊列。
“response” -> FTP服務器響應(如果可用)。
“last result” -> 成功返回TRUE,否則返回False。
5)、Get Image Attributes: 獲取圖像大小(像素)及每像素的位元組數。
6)、Get Image Source: 輸出描述所選圖像窗口的圖像源的字符串。
7)、Load Image: 加載一個圖像文件。
8)、Log Image: 記錄圖像,或者將圖像保存到圖像文件的“圖像日誌”序列。
註:推薦不要使用和操作系統相同的驅動器分區(通常是C:驅動器)來記錄圖像。Windows NTFS文件系統中的缺陷會導致在不斷將文件(如映像)寫入操作系統分區時導致引導扇區損壞。
9)、Refresh: 刷新圖像窗口。
10)、Reset Image Log: 複位圖像日誌的日誌索引,將四位數的日誌索引設置為零。(可選)可以刷新圖像隊列。
11)、Save Image: 保存圖像到指定文件。
12)、Save Image with Graphics: 將帶有圖形和注釋的圖像保存到文件中。
13)、Save Image with Graphics to Buffer: 將帶有覆蓋圖形的給定圖像窗口保存到“臨時”緩衝區。
14)、Set Camera: 為圖像窗口指定相機(如果採集硬件支持多個相機的話)。
15)、Set External Trigger: 設置相機為外部觸發模式。
16)、Set Palette: 設置單色圖像顯示的調色板方法。
選擇預定義的調色板或可選的自定義調色板。自定義調色板方法需要包含一個256個元素的輸入素組,否則會發生錯誤。該數組的大小應精確為256個元素,但如果更大,則忽略255之後的索引並生成警告。較小的數組會產生錯誤。除Custom之外的所有方法都會忽略調色板輸入數組。
17)、Start Camera Acquisition: 從所選的活動圖像源開始採集。
19、IO: Keyboard
1)、Test any key: 測試任意按鍵。如果在執行此指令期間按下任意鍵(綁定或預定義的快捷鍵/加速鍵除外),則輸出”keypress”為真。如果”keypress”為false,則輸出鍵碼”keycode”為false。
2)、Test one key (number) / Test one key (string): 測試特定鍵。如果在執行此指令期間按下與給定鍵碼匹配的鍵,則輸出為true。KeyCode是Windows虛擬鍵碼。
20、IO: Melsec FX/Q/Tcp
MELSECNET是三菱為其產品開發的專用數據鏈路系統。
1)、MC FX serial read word: 使用串行協議從設備讀取字。
該指令使用格式1和4實現Melsec-FX協議。
必須正確配置PC的串行端口設置(波特率,數據大小,奇偶校驗)以匹配Melsec PLC設置。 然後必須將該指令中的其他參數配置為與Melsec PLC一致。
2)、MC FX serial write word: 使用串行協議從設備寫入字。
該指令使用格式1和4實現Melsec-FX協議。
必須正確配置PC的串行端口設置(波特率,數據大小,奇偶校驗)以匹配Melsec PLC設置。 然後必須將該指令中的其他參數配置為與Melsec PLC一致。
3)、MC Q serial read word: 使用串行協議從設備讀取字。
該指令使用幀4C和格式5(二進制通信)實現Melsec-Q協議。
必須正確配置PC的串行端口設置(波特率,數據大小,奇偶校驗)以匹配Melsec PLC設置。 然後必須將該指令中的其他參數配置為與Melsec PLC一致。
4)、MC Q serial write word: 使用串行協議從設備寫入字。
該指令使用幀4C和格式5(二進制通信)實現Melsec-Q協議。
必須正確配置PC的串行端口設置(波特率,數據大小,奇偶校驗)以匹配Melsec PLC設置。 然後必須將該指令中的其他參數配置為與Melsec PLC一致。
5)、MC tcp read word: 使用TCP/IP協議從設備讀取字。
6)、MC tcp write word: 使用TCP/IP協議從設備寫入字。
21、IO: Modbus Master/Slave
註:必須現在【Options】->【IO】->【Modbus】中定義Modbus設備。
1)、Read Multiple Discretes: 讀取多個離散的輸入或輸出。
2)、Read Multiple Registers: 從多個寄存器讀取值。
3)、Read single Discrete: 讀取單個離散的輸入或輸出。
4)、Read Single Register: 從寄存器讀取值。
5)、Write Multiple Ciols: 將值數組寫入多個線圈。(線圈(Coil)是個什麼鬼????)
6)、Write Multiple Registers: 將值數組寫入順序寄存器。
7)、Write Single Coil: 將值寫入單個線圈。
8)、Write Single Register: 將值寫入寄存器。
9)、Read Discrete: 讀取單個離散的輸入或輸出。
10)、Read Register: 從寄存器讀取值。
11)、Write Discrete: 寫入單個離散輸出。
12)、Write Register: 將值寫入寄存器。
22、IO: Omron Ethernet/Host Link
1)、UDP read word: 使用UDP協議從設備讀取字。該指令從Omron PLC上的數據區(DM區)一次讀取1到70個字值。
註:1) 必須先在【Options】->【IO】->【Udp/Ip】中定義以太網連接。
2) 在執行指令或運行一次(至少一次)之前,Profinet通信不會初始化。 如果指令尚未執行,PLC軟件將無法訪問運行Sherlock的系統。 或者,您可以在啟動Sherlock時自動啟動EthernetIP通信服務器。 在以下路徑進行設置:菜單欄【Options】->【Application】->【Advanved】->【EthernetIP: start EthernetIP server on Sherlock startup】。
2)、UDP write word: 使用UDP協議從設備寫入字。
3)、Serial read word: 使用串行協議從設備讀取字。該指令從Omron PLC上的數據區(DM區)一次讀取1到29個字值。
必須正確配置PC的串行端口設置(波特率,數據大小,奇偶校驗)以匹配Omron PLC設置。 然後必須將該指令中的其他參數配置為與Omron PLC一致。
4)、Serial write word: 使用串行協議從設備寫入字。
23、IO: Profinet
PROFINET是由PROFIBUS國際組織(PROFIBUS International,PI)推出的新一代基於工業以太網技術的自動化總線標準。
註:1) 在執行指令或運行一次(至少一次)之前,Profinet通信不會初始化。 如果指令尚未執行,PLC軟件將無法訪問運行Sherlock的系統。 或者,您可以在啟動Sherlock時自動啟動Profinet通信服務器。 在以下路徑進行設置:菜單欄【Options】->【Application】->【Advanved】->【Profinet: start Profinet server on Sherlock startup】。
2) Profinet通信僅適用於32位Windows環境,而不適用於64位環境。
1)、Read: 讀取一組數值(數值數組)。
要從PLC輸出標籤表中讀取值,需要計算GEVA空間中的正確偏移量(從256開始)。 使用標記索引減去256(GEVA起始地址)除以元素類型中的位元組數。
2)、Read String: 讀取已知長度的ASCII字符串。
3)、Write: 寫入一組數值(數值數組)。
4)、Write String: 寫入一個ASCII字符串。
24、IO: Reporter
1)、Clear: 清除報告。
2)、Print: 打印報告窗口。
25、IO: Roi(ROI指令集)
1)、Check In Image: 確定(檢查)ROI是否位於圖像窗口內。
2)、Enable Preprocessor: 在ROI中啟用或禁用預處理器。此IO指令的效果與檢查或清除ROI處理窗口中預處理器旁邊的複選框相同。該預處理器是禁用,並非刪除。
3)、Get Bounding Box: 獲取ROI檢測框的邊框點和中心點。
4)、Get Coord: 獲取ROI(元素或角)的坐標、旋轉角度和元素(角)的數量。
5)、Set Coord: 將ROI移動至指定的坐標位置,如果refresh為true則重繪。
註:使用過程中應確保使用的坐標有效,因為Sherlock並不會檢查坐標的有效性。
特別地,對於矩形或者靶式(Rake)ROI,應確保左上角坐標的x/y分別小於右下角坐標的x/y,否則運行時會導致錯誤“無法分配第一個圖像緩衝區以進行提取”。
6)、Get/Set Display Outline: 獲取 / 設定ROI屬性中display->outline的值(選擇為true,不選擇為false)。
7)、Get / Set Element Count: 獲取 / 設定複合ROI中元素(角點)的數量。
8)、Get / Set Rotation: 獲取 / 設定ROI的角度。
9)、Offset: 通過給定的偏移值移動ROI,如果refresh為true則重繪。
10)、Rotate: 繞着輸入的中心點將ROI旋轉指定的角度。這會重新計算ROI的坐標,但不會改變ROI的角度屬性。
註:重新計算坐標會導致累積錯誤,不要在循環內或者連續旋轉中使用此指令。
11)、Set Alignment: 設定要使用的ROI對齊方式。可以結合IfElse語句實現在不同情況下選擇使用不同的對齊方式(Alignment),或者是否使用對齊方式。
12)、Set Interpolate: 在移動或旋轉ROI時啟用像素值的插值。啟用時,使用雙線性插值來估計像素值;禁用時,使用最鄰近插值來估計像素值。
13)、Set Pass/Fail Flag: 通過設置ROI的Pass(true) / Fail(False)標誌,來更改圖像窗口中顯示的ROI輪廓的顏色,便於在具有多個ROI的圖像中指出是哪個ROI導致錯誤。這不會對程序造成其他的影響。
26、IO: Serial(串口通訊指令集)
1)、Purge Buffer: 清除指定的緩衝區。
在嘗試使用串行端口之前,應使用此指令將串行端口的緩衝區清除或重置為已知狀態。對於TX緩衝區,不傳輸已刪除的字符。
2)、Receive Characters: 從串行端口接收字符。 如果在超時之前未收到最小字符數,則超時。
3)、Receive Line: 從串行端口接受一行字符。接收字符,直到收到終止字符。如果在超時之前未收到終止字符,則超時。
4)、Send String: 將字符串發送到串行端口,以便立即傳輸。
註:使用’ r’結束字符串以發送回車符,或’ n’發送換行符。
27、IO: SPC
1)、Get SPC values: 無輸入參數,輸出參數如下:
“sample count” – SPC中的零件數量或檢驗樣本數量。
“min / avg / max / std / 3std” – 最小值 / 平均值 / 最大值 / 標準差 / 3*標準差。
“range” – 範圍。
“Cp / Cpk / CpkLo / CpkHi / LoLim / HiLim” – 能力指數…
2)、Reset SPC: 複位或者清除SPC數據。
3)、Save SPC report: 保存SPC報告。
28、IO: System(系統指令集)
1)、Beep: 聲卡或揚聲器發出嗶聲。
2)、DiskSpace: 返回指定磁盤剩餘空間和總空間大小。
3)、Exit Application: 關閉應用,可在關閉之前選擇保存程序。
4)、FileCopy: 將源文件複製到目標文件。
5)、FileDelete: 刪除指定的文件,即使指定的文件不存在也表示刪除成功,返回true。
6)、FileExists: 判斷指定的文件是否存在。
7)、FileMove: 將源文件移動到指定的目錄。
8)、FolderCreate / FolderDelete: 創建 / 刪除具有指定名稱的文件夾。
9)、Generate Engine Control Event: 創建一個在VEngine Control(IpeEngCtrl.dll)中調用的事件。該指令將創建按一個事件句柄,用於在VB / VC / C#程序中調用。
該指令將導致SherlockCOM引擎接口生成事件“UserProgramEvent(long nEventId)”。 在使用Sherlock COM引擎並處理此事件的自定義GUI應用程序中,將允許混合執行Sherlockprogram代碼和用戶VB / VC / C#/(等)代碼。
典型情況是:
1、Sherlock程序執行IO: System -> UserProgramEvent;
2、SherlockCOM引擎創建UserProgramEvent COM事件;
3、UserProgramEvent COM事件被調用,用戶代碼被執行;
4、用戶完成對UserProgramEvent COM事件的處理,Sherlockresumes執行程序。
註:”UserProgramEvent(long nEventId)”僅在程序使用SherlockCOM引擎時有用。
10)、GetData / GetTime: 以dd/mm/yy和hh:mm:ss的格式返回本地日期和時間,時間採用24小時制。
11)、GetDataFormat / GetTimeFormat: 以指定格式返回本地日期 / 時間。
12)、GetEnv / SetEnv: 獲取 / 設定指定環境變量的值。
13)、GetEnvNames: 返回一個字符串數組,其每個元素包含一個環境變量的名稱。
14)、GetEnvVars: 返回一個字符串數組,其每個元素包含一對ENV_Var=String形式。
15)、GetMiliSecCount: 獲取系統毫秒計數。獲取雙精度毫秒計時器,用於計時檢測等。
16)、GetTimeDiff: 以ms為單位返回當前時間和指定時間的時間差。
17)、InputBox: 顯示一個對話框,等待用戶輸入一個字符串並將其關閉,在此期間停止程序的執行。
18)、Log: 在應用程序日誌中記錄消息。
19)、Message Beep: 為所選事件生成系統提示音。
20)、Message Box: 顯示一個對話框並等待用戶將其關閉,在此期間停止程序的執行,消息框為應用程序模式。
按鈕返回值為:1表示“OK”,2表示“取消”,3表示“中止”,4表示“重試”,5表示“忽略”,6表示“是”,7表示“否”。
button(s): OK、OK/Cancel、Retray/Cancel、Yes/No、Yes/No/Cancel、Abort/Retray/Ingore。
icon: Information、Warning、Question、Error。
default button: Button1、Button2、Button3。
注意:如果遠程執行包含消息框的程序,它將掛起,直到在服務器上按下按鈕。
21)、Pass Fail Dialog: 顯示通過/失敗對話框。
22)、Play Wav: 播放一個WAV文件(波形聲音文件)。
23)、Random: 隨機生成0.00~1.00減的任意數值。
24)、Set error handing strategy: 通過修改默認行為來定義錯誤處理策略。
此指令旨在用於“執行錯誤”的子例程,並允許你定義要採取的操作。沒有此指令的默認行為是在子例程結束時停止錯誤。
25)、Sleep: 程序暫停執行(休眠)指定的時間(ms)。
26)、Stopwatch Start: 在指定索引處啟動秒錶,如果秒錶在運行狀態則重啟。
註:在循環內放置秒錶開始將在循環的每次迭代時重新啟動秒錶計數。
27)、Stopwatch Stop: 在指定索引處關閉秒錶,如果秒錶不在運行則返回0。
29、IO: Tcp/Ip
1)、Reveive Buffer: 從給定的連接處接受一些字符。TCP/IP設備或連接必須在Options->IO中預先定義。
2)、Receive Byte Array: 接收指定數量的位元組數並將它們放入一個數字數組中。不在0~255範圍之內的值會被截去掉,256->0,257->1;負數會被轉換成正的,-1->255,-2->254。
註:如果預期的位元組數在超時時間內到達,則以位元組為單位返回;bytes recvd返回接收的位元組數(等於元素數);並且結果返回True。
如果預期位元組數未在超時時間內到達,則位元組為空; bytes recvd返回已接收的位元組數(如果有); 並且結果返回False。
3)、Receive Line: 從給定連接處接收一行字符,直到接收到目標字符串。
4)、Send Byte Array: 將整數數組作為位元組發送。不在0~255範圍之內的值會被截去掉。
註:只有在執行發送位元組數組時尚未建立服務器/客戶端連接時,結果才會返回false。這意味着執行指令時應用程序不必時刻主動偵聽數組。
5)、Send Line: 發送一行字符至給定的連接。
30、IO: Udp/Ip
1)、Receive Byte Array: 從遠程主機接收指定數量的位元組數並將它們存儲到一個數字數組中。該指令允許”任何”主機IP值。UDP/IP連接必須預先在Option->IO->UDP/IP中定義。
字符串和位元組數組的最大大小為1400個位元組。
2)、Receive String: 從遠程主機接受一個字符串,該指令允許”任何”(不關心)主機IP值。
3)、Send Byte Array: 通過UDP把整數數組作為位元組發送到單個遠程主機,只截取0~255範圍內的值。
4)、Send String: 通過UDP把字符串(包括終結符)發送至單個遠程主機。
31、Numeric(浮點型數據處理指令集)
1)、Abs / Max2 / Min2 / Pow / Sqrt / Square: 絕對值 / 最大值 / 最小值 / 乘冪 / 平方根 / 平方。
2)、Add / Subtract / Multiply / Divide / Remainder: 加減乘除求余。
3)、Copy: 複製輸入的數字。
4)、Increment / Decrement: 加減1。
5)、Eq / NotEq / Greater / GreaterOrEq / Less / LessOrEq: 如果n1(= / != / > / >= / < / <=)n2,則返回true,否則返回false。
6)、Truncate / Fractional: 返回數字的整數 / 小數部分。
7)、Integer Divide: 兩個整數相除,返回商(整數),如7/2=3。
8)、Negate: 返回數字的否定值。
9)、NumToString: 數字轉換成字符串。
10)、StringToNum: 返回從給定字符串掃描得到的數字。比如:12er345–>12(true);er445–>0(false)。
11)、Round: 返回最接近的整數。比如:0~0.5返回0(包括0.5),0.5~1返回1(不包括0.5)。
12)、SetNumber: 設定輸出為特定的數值。
32、Statistics(數據處理指令集)
1)、Cp: 返回過程能力指數CP。
2)、CpArr: 返回數組參數中所有值的過程能力指數CP。
3)、Cpk: 返回過程能力指數CPK(雙邊規格限制)。
4)、CpArr: 返回數組參數中所有值的過程能力指數CPK(雙邊規格限制)。
5)、Max / Min / Mean / Variance: 返回作為參數接收的所有數字的最大值 / 最小值 / 均值 / 方差。
6)、MaxArr / MinArr / MeanArr / VarianceArr / SumArr: 返回數組參數中所有值的最大值 / 最小值 / 均值 / 方差 / 和。
33、String(字符串指令集)
1)、AddStr: 將兩個字符串首尾相接來創建一個新的字符串。
2)、CharToNum: 返回字符竄字符值對應的ASCII數值。
3)、CompStr: 比較兩個字符串的大小,如果String1>String2,則返回1;如果String1=String2,則返回0;如果String1<String2,則返回-1。默認情況下區分大小寫。
4)、CopyStr: 複製字符串。
5)、CreateStrInf: 用輸入的字符串創建一個新的字符串。
6)、FindStr: 在源字符串中前向搜索目標字符串,並返回第一個匹配項的位置(如果有)或-1(如果未找到)。區分大小寫。
7)、FindStrNth: 在源字符串的前向搜索中返回第n次出現目標字符串的位置,如果沒找到則返回-1。區分大小寫。
8)、FindStrReverse: 在源字符串中反向搜索目標字符串的位置,如果沒找到則返回-1。區分大小寫。
9)、GetAt: 返回字符串指定索引處字符的ASCII值。
10)、GetWordLength: 獲取字符串中最小和最大單詞的長度(以字符為單位),並且返回單詞的個數。
比如: ”This is a string“ 中最小、最大單詞長度分別是1、6,單詞個數是4。
11)、InsertAtStr: 在源字符串指定索引處插入參數字符串。
12)、LeftStr / RightStr / MidStr: 截取輸入字符串左邊 / 右邊 / 指定索引處開始的n個字符組成一個新的字符串。
13)、LenStr: 返回字符串的長度。
14)、NumToChar: 返回由ASCII值數組構建的字符串。將數字(ASCII值)轉換為字符。
15)、PackStr: 連接輸入的字符串,返回新的字符串。
16)、PrintfNum: 將一個數字格式化為字符串,類似於C語言中的”sprintf”命令。
格式:%[-]n.mf
其中,”n”表示小數點左邊的最大字符數;
“m”表示小數點右邊的最大字符數;
“f”表示浮點數;
“-“(可選)表示如果小數點左邊的實際字符數小於”n”,則將字符串向左移。
17)、ReplaceStr: 將源字符串中指定的字符串部分替換成新的字符串。
18)、SetAtStr: 設置源字符串指定索引處字符的值。
19)、SetString: 給字符串賦值。
20)、TrimStr: 刪除源字符串的前m個字符和後n個字符,獲得一個新的字符串。
34、Trigonometric(三角函數指令集)
1)、Sin / Cos / Tan / ArcSin / ArcCos / ArcTan
2)、RadToDeg: 弧度轉化為角度。
3)、DegToRad: 角度轉化為弧度。
4)、GetPi / GetPiDiv2 / GetPiDiv4: 檢索π,π/2,π/4的值(由應用程序內部使用)。