命令通道$FCT_CALL的功能

命令通道 $fct_call 的功能
使用 cwrite 调用命令通道 $fct_call 的文件系统函数。调用时,函数参数必须作为 var1 … var10 传送到 cwrite。此外,cwrite 传输的写入模式必须是#sync。
默认情况下,函数访问的文件存储在本地目录c:krcroboteruserfiles。存储在那里的文件的最大总大小限制为 10 mb,即存储在那里的所有文件的总大小不得超过此限制。也可以通过函数 krl_mount() 使用启用的网络驱动器。
可以从机器人解释程序或提交解释程序调用文件系统函数。不允许从一个解释器打开文件,然后从另一个解释器访问它,例如 写入或再次关闭文件。
错误处理
每个文件系统函数通过 cwrite 提供一个返回值,可以在 krl 程序中查询和评估。返回值指示函数是成功执行还是因错误而中止。
调用 cwrite 时传递的变量 state.ret1 用于监控是否发生错误:
 state.ret1= #data_ok:函数执行成功
 state.ret1= #cmd_abort: 函数因错误而取消
在发生错误的情况下,返回的错误号可用于定位原因。使用变量 state.msg_no 轮询错误号。描述了每个功能的可能错误编号。
$fct_call: 将字符写入文件
命令通道 $fct_call 的管理号(句柄)
cwrite() 函数可用于通过 $fct_call 命令通道调用函数。变量本身是写保护的。
$fct_call=number
字符“a”将通过命令通道 $fct_call 写入文件mytest.txt。如果文件已经存在,则在打开文件时删除文件的内容。 对于使用 cwrite 的每个函数调用,都要进行检查以查看函数是成功执行还是因错误而中止。如果发生错误,可以根据错误原因编程相应的错误处理。如果没有发生错误,将写入字符并再次关闭文件.  krl_mount()创建和连接挂载点
为了从 krl 连接到启用的网络驱动器,必须为挂载点分配一个名称,并且必须知道启用目录的完整路径。连接网络驱动器也需要用户的用户名和加密密码。
机器人控制器 c:krcutilhash 目录下的程序 khash.exe 可用于加密密码。程序 khash.exe 必须在 windows shell cmdk.exe 上执行,并且需要输入密码。
例如,如果用户的密码是“kuka”,则 windows shell 上的加密程序调用如下:khash.exe kuka
在 krl 程序中调用 krl_mount() 时必须使用的加密密码随后会显示在 windows shell 上。
krl_mount(char[] name, char[] path, char[] user, char[] password)
例:
使用名称 transfernet 建立到网络驱动器 \160.160.113.23 ransfer 的挂载点。使用加密密码为用户“administrator”建立连接:
cwrite($fct_call, state, mode, krl_mount, /transfernet,//160.160.113.23/transfer,administrator,04ff94d4b99a1153c8cf3d479089a77afe)
krl_unmount()
删除挂载点
此函数可用于终止与使用 krl_mount() 建立的网络驱动器的连接。
krl_unmount(char[] name)
name 创建的挂载点名称
名称必须以字符“/”开头,并且不得包含另一个“/”字符。
与挂载点 transfernet 的连接被终止:
cwrite($fct_call, state, mode, krl_unmount, /transfernet)
 krl_fopen()
打开一个文件
根据选择的模式,文件以文本文件或二进制文件的形式打开以进行读访问和/或写访问。可用模式对应于头文件 stdio.h 的 fopen() 函数。
在 krl 程序中使用此功能最多可以同时打开 11 个文件。
krl_fopen(char[] name, char[] mode, int  handle )
mode
“r” 
作为文本文件打开以进行读取访问
在这种模式下,一个文件可以连续打开多次(包括由机器人和提交解释器同时打开)而无需先关闭。在每种情况下都会返回一个不同的句柄。这些句柄中的每一个都必须在某个时候关闭,因为否则无法以不同的模式打开文件。
“w” 
作为文本文件打开以进行写访问
在这种模式下,文件的内容在打开时被删除。如果他的文件不存在,则创建它。
“a” 
作为文本文件打开以进行写访问
在这种模式下,文件的内容在打开时不会被删除;相反,写入的值被添加到文件的末尾。如果文件不存在,则创建它。
“rb”
作为二进制文件打开以进行读取访问
“wb”
作为二进制文件打开以进行写访问
“r+” 
作为文本文件打开以进行读写访问
注意:打开文件后,文件指针指向文件的开头。为确保在将数据写入文件时不会覆盖任何内容,必须通过函数 krl_fseek() 将文件指针放在文件末尾。
例:
文件 roboteruserfilesmyfile.txt 作为文本文件打开以进行读取访问:
cwrite($fct_call, state, mode, krl_fopen, myfile.txt, r, filehandle)
文件 roboteruserfiles estmyfile.txt 作为二进制文件打开,用于读写访问。如果该文件已存在,则删除该文件的内容。
如果文件不存在,则创建它:
cwrite($fct_call, state, mode, krl_fopen, test/myfile.txt, wb+, filehandle)
myfile.txt 文件作为文本文件打开,用于读取访问,无需在启用的网络驱动器上进行缓冲。名称为 net1 的网络驱动器的挂载点必须首先通过 krl_mount() 创建:
cwrite($fct_call, state, mode, krl_fopen, /net1/myfile.txt, r, 
filehandle, #no_buff)
krl_fclose()
关闭文件
该文件由传输的句柄明确确定。一旦文件被关闭,句柄就无效并且不能用于进一步的文件系统操作。
当文件关闭时,写入缓冲区的内容将写入文件。
krl_fclose(int handle)
文件通过文件句柄关闭:cwrite($fct_call, state, mode, krl_fclose, filehandle)
 krl_fputc()
将字符写入文件
文件中写入字符的点取决于打开文件的模式和文件指针的位置。
krl_fputc(int handle, char character)
字符“x”被写入句柄传输的文件中:cwrite($fct_call, state, mode, krl_fputc, filehandle, x)
 krl_fputs()
将字符串写入文件
该函数可用于将常量字符串或可变字符串写入文件。如果使用变量,则 char 数组的每个元素都必须初始化并包含一个有效值。
文件中写入字符串的点取决于打开文件的模式和文件指针的位置。
krl_fputs(int handle, char[] string)
例:
一个常量字符串被写入到句柄传送的文件中:
cwrite($fct_call, state, mode, krl_fputs, filehandle, write this!)
将变量“stringvar[]”中包含的字符串写入句柄传送的文件中:
cwrite($fct_call, state, mode, krl_fputs, filehandle, stringvar[])
krl_fwriteln()
将字符串逐行写入文件
该函数可用于将常量字符串或可变字符串写入文件。将行尾字符附加到要写入的字符串。如果使用变量,则 char 数组的每个元素都必须初始化并包含一个有效值。
文件中写入字符串的行取决于打开文件的模式和文件指针的位置。
krl_fwriteln(int handle, char[] string)
将一个空行写入句柄传输的文件中:
cwrite($fct_call, state, mode, krl_fwriteln, filehandle, )
 krl_fprintf()
将字符串格式化写入文件
要写入的格式作为字符串传送给函数。要写入的值也会被传送。
可用格式在头文件 stdio.h 的 fprintf() 函数的文档中列出。除了“%o”、“%p”、“%n”和列表“[list]”之外,所有格式都是允许的。
krl_fprintf(int  handle, char[] format, par1,  …  , par8)
由字符“;”分隔的 3 个值 被写入由句柄传输的文件并格式化:
cwrite($fct_call, state, mode, krl_fprintf, filehandle, %s;%x;%c, item1, 'ha0', charvar)
例:
decl inthandle decl state_t stat decl modus_t mode
...
char mychar
...
mode =#sync handle = 0 mychar = a
...
; 在 c:krcroboteruserfiles 下创建一个文件
cwrite($fct_call, stat, mode,krl_fopen, mytest.txt, w, handle)
; 检查是否发生错误
if (stat.ret1 == #cmd_abort)then
if (stat.msg_no == -5) then
; 如果有很多文件已经打开,则错误处理...
else
; 如果需要,检查其他错误代码
... endif
else
; 没有发生错误
; 将字符写入文件
cwrite($fct_call, stat, mode, krl_fputc,handle, mychar) if (stat.ret1 == #cmd_abort) then
; 错误处理
... endif
; 关闭文件
cwrite($fct_call, stat, mode,krl_fclose, handle) if (stat.ret1 == #cmd_abort) then
错误处理
... endif
endif
原文标题:也许使用它会对kuka编程有一个突破性的认识---$fct_call。
文章出处:【微信公众号:机器人及plc自动化应用】欢迎添加关注!文章转载请注明出处。


盘点:2016年最值得购买的六大运动耳机
单片机低功耗设计杂谈
特斯拉中国召回超110万辆汽车 涉及国产Model 3 Model Y
甘肃中等强度地震为何伤害这样大,5G智慧减灾应该广泛推广
时代万恒表示两条锂离子动力电池生产线相继投产处于试运行状态 尚未实现盈利
命令通道$FCT_CALL的功能
电压可以是负的吗?了解负电压
lpc5411x系列mcu的单核结构与应用
讲解一下容易导致软件问题的5种情况以及应对措施
使用云监控实现GPU云服务器的GPU监控和报警(上) - 自定义监控
深度摄像头行业已然崛起
巴西将允许华为参与5G网络建设
如何用钳形电流表判查低压电网接地故障点
针对大规模生产的R&S 5G NR解决方案
RTC的特定
工业物联网实现的五个环节和两大阶段
明纬电源——导轨电源15W-480W
ARM发布CORELINK 400系统IP,展现GPU系统潜
iPhone频繁杀后台为什么会更卡顿
联想Z5评测 如果作为旗舰机的话在性能上还差一点