CWRITE 或 SWRITE 的格式規(guī)范具有以下結(jié)構(gòu):“%
F:格式化字符??蛇x的。
W:要輸出的最小位置數(shù)。可選的。
G:精度規(guī)格
U:轉(zhuǎn)換字符
例1:
整數(shù)變量 VI 的值以十進(jìn)制和十六進(jìn)制 ASCII 表示法傳輸。第一個(gè) CWRITE 語(yǔ)句傳送字符 123。第二個(gè) CWRITE 語(yǔ)句傳送字符 7B。
命令通道 $FCT_CALL 的功能
使用 CWRITE 調(diào)用命令通道 $FCT_CALL 的文件系統(tǒng)函數(shù)。調(diào)用時(shí),函數(shù)參數(shù)必須作為 Var1 … Var10 傳送到 CWRITE。此外,CWRITE 傳輸?shù)膶懭肽J奖仨毷?SYNC。
默認(rèn)情況下,函數(shù)訪問(wèn)的文件存儲(chǔ)在本地目錄C:KRCROBOTERUserFiles。存儲(chǔ)在那里的文件的最大總大小限制為 10 MB,即存儲(chǔ)在那里的所有文件的總大小不得超過(guò)此限制。也可以通過(guò)函數(shù) krl_mount() 使用啟用的網(wǎng)絡(luò)驅(qū)動(dòng)器。
可以從機(jī)器人解釋程序或提交解釋程序調(diào)用文件系統(tǒng)函數(shù)。不允許從一個(gè)解釋器打開文件,然后從另一個(gè)解釋器訪問(wèn)它,例如 寫入或再次關(guān)閉文件。
錯(cuò)誤處理
每個(gè)文件系統(tǒng)函數(shù)通過(guò) CWRITE 提供一個(gè)返回值,可以在 KRL 程序中查詢和評(píng)估。返回值指示函數(shù)是成功執(zhí)行還是因錯(cuò)誤而中止。
調(diào)用 CWRITE 時(shí)傳遞的變量 State.RET1 用于監(jiān)控是否發(fā)生錯(cuò)誤:
State.RET1= #DATA_OK:函數(shù)執(zhí)行成功
State.RET1= #CMD_ABORT: 函數(shù)因錯(cuò)誤而取消
在發(fā)生錯(cuò)誤的情況下,返回的錯(cuò)誤號(hào)可用于定位原因。使用變量 State.MSG_NO 輪詢錯(cuò)誤號(hào)。描述了每個(gè)功能的可能錯(cuò)誤編號(hào)。
$FCT_CALL: 將字符寫入文件
命令通道 $FCT_CALL 的管理號(hào)(句柄)
CWRITE() 函數(shù)可用于通過(guò) $FCT_CALL 命令通道調(diào)用函數(shù)。變量本身是寫保護(hù)的。
$FCT_CALL=Number
字符“a”將通過(guò)命令通道 $FCT_CALL 寫入文件MyTest.TXT。如果文件已經(jīng)存在,則在打開文件時(shí)刪除文件的內(nèi)容。
對(duì)于使用 CWRITE 的每個(gè)函數(shù)調(diào)用,都要進(jìn)行檢查以查看函數(shù)是成功執(zhí)行還是因錯(cuò)誤而中止。如果發(fā)生錯(cuò)誤,可以根據(jù)錯(cuò)誤原因編程相應(yīng)的錯(cuò)誤處理。如果沒(méi)有發(fā)生錯(cuò)誤,將寫入字符并再次關(guān)閉文件.
krl_fopen()
打開一個(gè)文件
根據(jù)選擇的模式,文件以文本文件或二進(jìn)制文件的形式打開以進(jìn)行讀訪問(wèn)和/或?qū)懺L問(wèn)??捎媚J綄?duì)應(yīng)于頭文件 stdio.h 的 fopen() 函數(shù)。
在 KRL 程序中使用此功能最多可以同時(shí)打開 11 個(gè)文件。
krl_fopen(CHAR[] Name, CHAR[] Mode, INT Handle <, BUFF_MODE_T Buffering> )
Mode
“r”
作為文本文件打開以進(jìn)行讀取訪問(wèn)
在這種模式下,一個(gè)文件可以連續(xù)打開多次(包括由機(jī)器人和提交解釋器同時(shí)打開)而無(wú)需先關(guān)閉。在每種情況下都會(huì)返回一個(gè)不同的句柄。這些句柄中的每一個(gè)都必須在某個(gè)時(shí)候關(guān)閉,因?yàn)榉駝t無(wú)法以不同的模式打開文件。
“w”
作為文本文件打開以進(jìn)行寫訪問(wèn)
在這種模式下,文件的內(nèi)容在打開時(shí)被刪除。如果他的文件不存在,則創(chuàng)建它。
“a”
作為文本文件打開以進(jìn)行寫訪問(wèn)
在這種模式下,文件的內(nèi)容在打開時(shí)不會(huì)被刪除;相反,寫入的值被添加到文件的末尾。如果文件不存在,則創(chuàng)建它。
“rb”
作為二進(jìn)制文件打開以進(jìn)行讀取訪問(wèn)
“wb”
作為二進(jìn)制文件打開以進(jìn)行寫訪問(wèn)
“r+”
作為文本文件打開以進(jìn)行讀寫訪問(wèn)
注意:打開文件后,文件指針指向文件的開頭。為確保在將數(shù)據(jù)寫入文件時(shí)不會(huì)覆蓋任何內(nèi)容,必須通過(guò)函數(shù) krl_fseek() 將文件指針?lè)旁谖募┪病?/p>
例:
文件 ROBOTERUserFilesMyFile.txt 作為文本文件打開以進(jìn)行讀取訪問(wèn):
CWRITE($FCT_CALL, State, Mode, "krl_fopen", "MyFile.txt", "r", FileHandle)
文件 ROBOTERUserFiles estMyFile.txt 作為二進(jìn)制文件打開,用于讀寫訪問(wèn)。
如果該文件已存在,則刪除該文件的內(nèi)容。
如果文件不存在,則創(chuàng)建它:
CWRITE($FCT_CALL, State, Mode, "krl_fopen", "Test/MyFile.txt", "wb+", FileHandle)
MyFile.txt 文件作為文本文件打開,用于讀取訪問(wèn),無(wú)需在啟用的網(wǎng)絡(luò)驅(qū)動(dòng)器上進(jìn)行緩沖。
名稱為 Net1 的網(wǎng)絡(luò)驅(qū)動(dòng)器的掛載點(diǎn)必須首先通過(guò) krl_mount() 創(chuàng)建:
CWRITE($FCT_CALL, State, Mode, "krl_fopen", "/Net1/MyFile.txt", "r",
FileHandle, #NO_BUFF)
krl_fclose()
關(guān)閉文件
該文件由傳輸?shù)木浔鞔_確定。一旦文件被關(guān)閉,句柄就無(wú)效并且不能用于進(jìn)一步的文件系統(tǒng)操作。
當(dāng)文件關(guān)閉時(shí),寫入緩沖區(qū)的內(nèi)容將寫入文件。
krl_fclose(INT Handle)
文件通過(guò)文件句柄關(guān)閉:CWRITE($FCT_CALL, State, Mode, "krl_fclose", FileHandle)
krl_fputc()
將字符寫入文件
文件中寫入字符的點(diǎn)取決于打開文件的模式和文件指針的位置。
krl_fputc(INT Handle, CHAR Character)
字符“x”被寫入句柄傳輸?shù)奈募校篊WRITE($FCT_CALL, State, Mode, "krl_fputc", FileHandle, "x")
krl_fputs()
將字符串寫入文件
該函數(shù)可用于將常量字符串或可變字符串寫入文件。
如果使用變量,則 CHAR 數(shù)組的每個(gè)元素都必須初始化并包含一個(gè)有效值。
文件中寫入字符串的點(diǎn)取決于打開文件的模式和文件指針的位置。
krl_fputs(INT Handle, CHAR[] String)
例:
一個(gè)常量字符串被寫入到句柄傳送的文件中:
CWRITE($FCT_CALL, State, Mode, "krl_fputs", FileHandle, "write this!")
將變量“StringVar[]”中包含的字符串寫入句柄傳送的文件中:
CWRITE($FCT_CALL, State, Mode, "krl_fputs", FileHandle, StringVar[])
krl_fwriteln()
將字符串逐行寫入文件
該函數(shù)可用于將常量字符串或可變字符串寫入文件。將行尾字符附加到要寫入的字符串。
如果使用變量,則 CHAR 數(shù)組的每個(gè)元素都必須初始化并包含一個(gè)有效值。
文件中寫入字符串的行取決于打開文件的模式和文件指針的位置。
krl_fwriteln(INT Handle, CHAR[] String)
將一個(gè)空行寫入句柄傳輸?shù)奈募校?/p>
CWRITE($FCT_CALL, State, Mode, "krl_fwriteln", FileHandle, " ")
krl_fprintf()
將字符串格式化寫入文件
要寫入的格式作為字符串傳送給函數(shù)。要寫入的值也會(huì)被傳送。
可用格式在頭文件 stdio.h 的 fprintf() 函數(shù)的文檔中列出。
除了“%o”、“%p”、“%n”和列表“[List]”之外,所有格式都是允許的。
krl_fprintf(INT Handle, CHAR[] Format, Par1, … , Par8)
由字符“;”分隔的 3 個(gè)值 被寫入由句柄傳輸?shù)奈募⒏袷交?/p>
CWRITE($FCT_CALL, State, Mode, "krl_fprintf", FileHandle, "%s;%x;%c", "Item1", 'HA0', CharVar)
krl_fsizeget()
確定文件大小,文件大小以字節(jié)為單位。此函數(shù)只能用于確定首先使用 krl_fopen() 打開的文件的大小。
krl_fsizeget(INT Handle, INT Size )
由句柄傳輸?shù)奈募拇笮”淮_定并寫入變量“IntVar”:
CWRITE($FCT_CALL, State, Mode, "krl_fsizeget", FileHandle, IntVar)
例:
DECL INTHANDLE DECL STATE_T STAT DECL MODUS_T MODE
...
CHAR MYCHAR
...
MODE =#SYNC HANDLE = 0 MYCHAR = "a"
...
; 在 C:KRCROBOTERUserFiles 下創(chuàng)建一個(gè)文件
CWRITE($FCT_CALL, STAT, MODE,"krl_fopen", "MyTest.TXT", "w", HANDLE)
; 檢查是否發(fā)生錯(cuò)誤
IF (STAT.RET1 == #CMD_ABORT)THEN
IF (STAT.MSG_NO == -5) THEN
; 如果有很多文件已經(jīng)打開,則錯(cuò)誤處理...
ELSE
; 如果需要,檢查其他錯(cuò)誤代碼
... ENDIF
ELSE
; 沒(méi)有發(fā)生錯(cuò)誤
; 將字符寫入文件
CWrite($FCT_CALL, STAT, MODE, "krl_fputc",HANDLE, MYCHAR) IF (STAT.RET1 == #CMD_ABORT) THEN
; 錯(cuò)誤處理
... ENDIF
; 關(guān)閉文件
CWRITE($FCT_CALL, STAT, MODE,"krl_fclose", HANDLE) IF (STAT.RET1 == #CMD_ABORT) THEN
錯(cuò)誤處理
... ENDIF
ENDIF
大家有空可以試試吧!
審核編輯:劉清
-
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
52文章
8099瀏覽量
145817 -
ASCII
+關(guān)注
關(guān)注
5文章
172瀏覽量
35019 -
CMD文件
+關(guān)注
關(guān)注
0文章
5瀏覽量
7422
原文標(biāo)題:也許使用它會(huì)對(duì)KUKA編程有一個(gè)突破性的認(rèn)識(shí)---$FCT_CALL。
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論