KUKA机器人中-TCP通讯里纯理论的东西

描述

下面是KUKA机器人中-TCP通讯里的纯理论的东西.
 CAST_TO
 CAST_TO使得使用单个CWRITE语句处理多达4 KB的数据成为可能。CAST_TO将单个变量分组为一个缓冲区。然后,CWRITE将此缓冲区写入通道。
 最大缓冲区大小:4 KB(= 4,096字节)。如果数据量太大,以致最大缓冲区大小不足,则必须使用几个连续的CWRITE语句。

 CAST_TO不会触发提前运行停止,但是,如果处理的变量确实触发了提前运行stop,则间接触发提前运行停止。
 如果使用CWRITE传输使用CAST_TO生成的缓冲区,则CWRITE语句中仅允许以下转换字符:
 r=原始数据格式)s=字符串格式)与s相比,r具有以下优点:如果传输了字符0,则将其整数表示为字符串的结尾。r不会发生此问题。
 偏移量以字节为单位。如果CREADr即二进制读取数据,则可以使用偏移量轻松计算已传输的值的数量。

 CAST_TO (Buffer, OFFSET, Var1 < ,  … , Var10 > )Buffer:类型:CHAR数组,将变量Var1…Var10写入的缓冲区.OFFSET:类型:INT 缓冲区内的位置(以字节为单位),之后将数据写入缓冲区。偏移量从0开始。
 Var1 … Var10写入缓冲区的变量。每个语句最多可以有10个变量。



 对于未初始化的变量或数组元素,会将随机值写入缓冲区。由于随机值可能会导致缓冲区接收器出现问题,因此建议初始化所有变量和数组元素。

   CAST_FROM如果缓冲区是在数据列表中声明的,则不能设置初始值!
 原因:初始值被当前值覆盖。电流值可以高达4KB,因此超过了KRL线路的最大允许长度。
 对的:DECL CHAR mybuffer[4096]不正确:DECL CHAR mybuffer[4096]=" "CAST_FROM使得使用单个CREAD语句处理多达4 KB的数据成为可能。如果CREAD已从通道读取缓冲区,则CAST_FROM可以将缓冲区分解为各个变量。
 最大缓冲区大小:4 KB(= 4,096字节)。如果数据量太大以至于最大缓冲区大小不足,则必须使用几个连续的CREAD语句。

 CAST_FROM不会触发提前运行停止,但是,如果处理的变量确实触发了提前停止,则间接触发提前运行停止。
 CAST_FROM ( Buffer , OFFSET, Var1 < ,  … , Var10 > )
Buffer 类型:CHAR数组其数据用于填充变量Var1…Var10的缓冲器
OFFSET  类型:INT缓冲区内的位置(以字节为单位),在该位置之后,数据被用来将它们写入变量Var1…Var10。偏移量从0开始。示例: OFFSET=0:缓冲器从第一个位置开始使用。 OFFSET=2:缓冲器从第三个位置开始使用。位置1和2被忽略。
Var1 … Var10 使用缓冲区中的数据写入的变量。每条语句最多可以有10个变量。每个变量从缓冲区接收的字节数由其数据类型决定。INT变量1、BOOL变量2、REAL变量3Var1接收4个字节;Var2接收1个字节;Var3接收4个字节。
   CAST 语句中允许的数据类型
INT 4 bytes
REAL 4 bytes
BOOL 1 byte
CHAR  1 byte
ENUM 4 bytes
SIGNAL 1 byte
FRAME  6*REAL
POS  6*REAL + 2*INT
AXIS  6*REAL
E3POS  6*REAL + 2*INT + 3*REAL
E3AXIS  6*REAL + 3*REAL
E6POS 6*REAL + 2*INT * 6*REAL
E6AXIS  6*REAL + 6*REAL
   例如在EthernetKRL( )程序中设定的EKI_GetFrame:
 EKI_GetFrame从存储器读取 FRAME 类型的数值示例 RET = EKI_GetFrame("Channel_1", "Root/TCP", MyFrame)程序分析:GLOBAL DEFFCT EKI_STATUS EKI_GetFrame(strChannelName[]:IN,strPlace[]:IN,value:OUT)声明变量:    DECL CHAR strChannelName[]    字符串   DECL CHAR strPlace[]    字符串   DECL FRAME value   FRAME坐标类型变量   DECL CHAR Buff[24]  24长度的字符串   DECL STATE_T Stat    状态变量   DECL MODUS_T Mode      DECL EKI_STATUS Ret   EthernetKRL通讯专用变量   DECL INT Offset 设置模式:   Mode = #SYNC  设置同步模式   Ret = EKI_NULL_STATUS    ret.buff=1     Offset = 0   Cast_To(Buff[], Offset,value)  将坐标变量写入缓冲区     CONTINUE   CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],Buff[],Ret.Buff, Ret.Read, TYPEFRAME,Ret.Connected)使用”EFC_eki_Get”将Buff[] 里字符串坐标FRAME值通过EthernetKRL软件发出开通的通道,给PC上位机软件使用   Offset=0   Cast_From(Buff[], Offset,value)将缓存区里的值再发给变量     Ret.Msg_No = Stat.Msg_No    RETURN Ret  发出反馈值ENDFCTKUKA机器人KUKA机器人发送标准编码的real数据,PLC端可直接使用ID数据进行real数据的判断。(注:使用CAST_TO函数后,Bytes[1]为对应二进制的低位,Bytes[4]为高位。上面的KUKA1对应的bytes4是为了将PLC能直接读数据而不用通过SWAP指令进行转换)接收到的数据存于DATA2中。
  
      审核编辑:彭静

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

全部0条评论

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

×
20
完善资料,
赚取积分