下面是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 )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 ) 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 发出反馈值endfct发送标准编码的real数据,plc端可直接使用id数据进行real数据的判断。(注:使用cast_to函数后,bytes[1]为对应二进制的低位,bytes[4]为高位。上面的kuka1对应的bytes4是为了将plc能直接读数据而不用通过swap指令进行转换)接收到的数据存于data2中。
揭秘电动汽车BMS系统及七大故障分析法
浙江大学提出了十大具有前沿性、挑战性的科学问题
汽车音响假性故障判断与分析
如何选择视频会议网络线路?
FD4的推出将Capgemini和SAP在大中华地区的战略合作推向了更高的层面
KUKA机器人中-TCP通讯里纯理论的东西
为数字通信系统选择混合信号组件
华为已宣布该开发者能够获得从AppGalllery高达90%的收入
凌度AI智能行车记录仪新品有哪些惊喜?
无线蓝牙耳机哪款佩戴最舒服?带着舒服的蓝牙耳机推荐
探讨与分析电力系统谐振消除方法
详解全数字无线麦克风K歌模组S62KTV-X系列
DIP开关与单片机,MCU接口的基本原理
采用PNP管扩展输入的正极性输出稳压电源电路图
飞凌i.MX8MM-C核心板之机器人控制平板方案的介绍
浅谈兆芯、海光、鲲鹏等国产通用芯片的发展道路
一个低成本立体声线路驱动器的电路图
什么是HDSL
音响发烧友俚语大全
ROCCAT高性能光学键轴亮相 VULCAN系列又添新款