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

[复制链接]
查看27432 | 回复0 | 2024-2-28 09:31:20 | 显示全部楼层 |阅读模式
从通道中读取数据。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则