KUKA机器人高级编程CREAD的用法详解

描述

从通道中读取数据。 

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

 

 

   


审核编辑 :李倩

 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分