下面是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不会发生此问题。
偏移量以字节为单位。如果CREAD用r即二进制读取数据,则可以使用偏移量轻松计算已传输的值的数量。
CAST_TO (Buffer, OFFSET, Var1 < , … , Var10 > )
Buffer:
类型:CHAR数组,将变量Var1…Var10写入的缓冲区.
OFFSET:
类型:INT 缓冲区内的位置(以字节为单位),之后将数据写入缓冲区。偏移量从0开始。
Var1 … Var10
写入缓冲区的变量。每个语句最多可以有10个变量。
对于未初始化的变量或数组元素,会将随机值写入缓冲区。由于随机值可能会导致缓冲区接收器出现问题,因此建议初始化所有变量和数组元素。
CAST_FROM
CAST_FROM使得使用单个CREAD语句处理多达4 KB的数据成为可能。如果CREAD已从通道读取缓冲区,则CAST_FROM可以将缓冲区分解为各个变量。
最大缓冲区大小:4 KB(= 4,096字节)。如果数据量太大以至于最大缓冲区大小不足,则必须使用几个连续的CREAD语句。
CAST_FROM不会触发提前运行停止,但是,如果处理的变量确实触发了提前停止,则间接触发提前运行停止。
CAST_FROM ( Buffer , OFFSET, Var1 < , … , Var10 > )
例如在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 发出反馈值
ENDFCT
审核编辑:刘清
评论
查看更多