從通道中讀取數據。
CREAD從加載的LD_EXT_OBJ類型的外部模塊讀取數據。
無法從LD_EXT_FCT類型的外部模塊或命令通道讀取。
應用的例子: 在KRC1和外圍數據(PC, 智能傳感器...) 數據交換(讀語句)。
? INT類型的數據必須是Little Endian格式,并且前面必須有一個符號。
? REAL類型的數據必須是IEEE 754標準格式的32位表示形式。
CREAD (Handle, State, Mode, TIMEOUT, OFFSET, Format, Var1 < ,??
…, Var10 >)
“CREAD”語句用于從打開的通道中讀取數據。在這有兩個區別::
主動讀入
程序請求通過通道進行輸入。通道驅動器提出輸入請求并將接受到的數據作為結果返回到CREAD語句 。
被動讀入
預先確定的變量(INT$DATA_SER1orINT$DATA_SER2), 未被請求的數據到達后通過增加通道驅動器,每個通道都是這樣的。當執行熱啟動或當打開/關閉通道時變量初始化為0。在系統等待讀入請求的反饋信號方面也是有差別的:絕對的或有條件的。絕對的意思是系統等待直到通道給出請求的數據。在有條件的情況下,系統檢查數據是否有效。
Handle |
INT |
由“COPEN”轉移變量。注意:變量“$CMD ”將被拒絕 |
State |
STATE_T |
類型:STATE_T 自動返回CREAD的狀態 |
Mode |
MODUS_T |
“MODUS_T”是列舉類型,它有與下列“CREAD”有關的值: ABS 激活讀入通道。函數等待到通道產生一個可用的數據塊或等待到“Timeout”失敗。 COND 未被請求的通道讀入。 SEQ 從以前被請求使用“ABS ”或“COND ”或作為結果返回“CWRITE”的字節補償讀入完成了的數據塊
|
Timeout |
REAL |
參數“TIMOUT”可被用于指定時間,在等待數據塊失敗之后。 Timeout的值0.0允許無止境的等待。.
一個值大于60 或是為負值,則數值是無效的。與系統有關的錯誤在等待時間內是是固有的。 |
Offset |
INT |
變量“Offset”用于指定被承認的數據中的字節數,在系統開始讀入之前。 如果開始就讀入,偏移量t必須設為0 (原點)。 “CREAD”語句不能分配所有被程序承認的數據變量,偏移量指定已經分配的字符數。 |
Format |
CHAR[ ] |
變量“Format”的類型“CHAR[ ] ”( 文字訊息) 包含產生了的文本格式。 變量結構主要符合“C ”語言 “FPRINTF”功能的格式。 |
Var |
變量符合“Format”。 |
如果操作不是來于“COPEN”語句程序是被傳送的 “CREAD” 語句或通道已經又再關閉,承認信息“INVALIDHANDLE” 被顯示。
其它方式的規定或非初始化的變量導致一個被變量“STATUS ”發現錯誤 。如果讀“ABS ”“COND ”成功,那么數據塊的數據是先前被承認的,就像他們完全的讀出。
文本是按照格式規定的程序段返回的。值決定被分配的適當的變量,系統檢查值之否在任何區域有效。“變量FOMAT”轉換支持由“Kernighan/Ritchie”指定的格式規定(C 語言1978),O,P,N,U和【list 】出外。
字符長度規范“H”和“L”不能使用。
只有9個格式參數可用于指定“CREAD”語句。如果幾個變量是格式化可用到的,則必須在“# SEQ ”模式下讀入。
系統不能區別大小寫字符。在發生一個錯誤后讀入失敗( 不符合格式或無效的值) 。
轉換字符“R”,當讀入任何一個字節指定的字符長度次序 ( 與寫入類似,例如“%2.5r”)或這所有字節在結束信息之前,他也同樣傳入。
不像其它格式,單獨字節的讀入必須被“%1r”明確規定。.
沒有用“%c格式”指定寬度,這樣的格式是不合格的。字節能被分配到INT ,REAL ,CHAR ,BOOL ,ENUM數據類型的變量或這種類型的一維數組。
假定整數數據類型出現在“little endian ”格式中,而且是有正負之分的。
Real 的數據類型在IEEE754 標準格式中用32位表示。
任何不等于0(zero) 的值可以被TURN 轉換。
系統控制值是否被ENUM值允許。如果不是,讀失敗。ENUM開始為1 。
如果沒有足夠的格式數據,(例如%2.5r,但只有7位), 沒有數據從格式讀出,CREAD語句失敗。被忽略的數據依然被READ 讀取。.
變量的讀就像變量裝入一些字節一樣。直到讀準備好后重新啟動。如果數組足夠大但是數字用到的字節不是要素排列的倍數,那么多余的字節列在格式后或在下一個CREAD語句的左面讀取。
通過“CREAD”調用下列更多的讀取。字節數“%s” 或“%r 的格式指定首先讀取實際上被狀態變量返回的格式行。
所有其他的字長度不是確定的。因此用“%s”或“%r”格式只是一次“CREAD”調用格式行和重復。
如果“%s”或“%r”格式不在已經成功讀取的格式之中( 看“HITS”的變量狀態) ,“LENGTH” 的值在語句中不變。
使用中斷讀取
監控系統變量以確定數據是否可用于
讀數:
$外部模塊LD_EXT_OBJx的DATA_LD_EXT_OBJx
當接收到數據時,通道驅動器會增加系統變量。然后可以使用中斷程序讀取數據。
當執行熱重啟或打開或關閉通道時,變量將用0初始化。如果“保留數據”選項被激活,則變量不會重置。
帶中斷的示例
帶有中斷聲明的主程序:
INTERRUPT DECL 10 WHEN $DATA_LD_EXT_OBJ2<>0 DO OBJ_INT ()
INTERRUPT ON 10
...
中斷程序:
DEF OBJ_INT ()
DECL MODUS_T MODE
...
INTERRUPT OFF 10
WHILE ($DATA_LD_EXT_OBJ2<>0)
...
MODE=#COND
OFFSET=0
CREAD (HANDLE,..., MODE,...)
...
ENDWHILE
INTERRUPT ON 10
END
審核編輯 :李倩
-
機器人
+關注
關注
211文章
28575瀏覽量
207743 -
智能傳感器
+關注
關注
16文章
602瀏覽量
55369 -
KUKA
+關注
關注
3文章
217瀏覽量
16574
原文標題:KUKA機器人高級編程CREAD的用法詳解
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論