浅谈KUKA机器人CWRITE编程用法

cwrite
“cwrite”语句能够使文字写入打开的通道,或者命令被写入命令通道。 应用实例:  数据 ( 写语句) 在krc1 和装置间( pc, 智能传感器...).  转换。 
cwrite 将数据写入打开的串行接口或加载的 ld_ext_obj 类型的外部模块。在加载的 ld_ext_fct 类型的外部模块中,cwrite 调用一个函数。
cwrite 将命令写入命令通道。
cwrite 触发提前运行停止。
cwrite ( handle or  $cmd,  state, mode, format, var1 )
handle/$cmd
类型:int
句柄:由 copen 传输到 write 的变量,用于标识通道
$cmd:用于写入命令通道的预定义变量
state state_t
自动返回到 write 的状态
mode : type: int
类型:modus_t
写入模式, 必须初始化模式。
format: type: char[]
在将 var 变量写入字符串之前转换它们。必须为每个 var 变量指定格式.
var:
其数据写入字符串的变量。每个语句最多可以有 10 个变量。
写模式 mode
写入模式由 modus_t 类型的变量确定。modus_t 是一个预定义的枚举类型:
enum modus_t sync, async, abs, cond, seq 对于 cwrite,只有 sync 和 async 相关:
sync同步
一旦伙伴控制器从接收缓冲区中取出传输的数据,则认为该语句已执行。
async异步
写入 ld_ext_fct 类型的外部模块时,不允许 async 模式!
以下适用于所有其他通道:一旦数据到达伙伴控制器的接收缓冲区,则认为该语句已执行。
优于 sync:程序执行速度更快。
与 sync 相比的缺点:可能会丢失数据。
其他价值
如果模式具有 sync 或 async 以外的值,则默认在 sync 模式下执行写入。
state.ret1=#data_ok:函数成功执行
state.ret1=#cmd_abort:功能已取消,但出现错误
例如:
cwrite($cmd,stat,mode,run /r1/cell ())程序执行cell程序
$cmd
通过命令通道$ cmd进行通信
cwrite可以通过命令通道将语句传输到程序解释器。示例:通过run启动程序并使用stop将其停止。
与命令通道$ cmd通信
命令通道:启动、停止和取消选择程序
程序 a6.src 将通过命令通道启动、停止和取消选择。这是通过 sub 文件中的以下程序行来完成的。
decl state_t stat 
decl modus_t mode 
mode=#sync 
... 
;选择程序a6()
;要启动程序,请单击“开始”按钮或
;需要外部启动信号
if $flag[1]==true then 
cwrite($cmd,stat,mode,run/r1/a6())  运行程序
$flag[1]=false 
endif 
;stop program a6()
if $flag[2]==true then 
cwrite($cmd,stat,mode,stop 1)  程序停止
$flag[2]=false 
endif 
;cancel program a6() 
if $flag[3]==true then 
cwrite($cmd,stat,mode,cancel 1) 退出程序
$flag[3]=false 
endif
哪个变量的格式?
一方面,cread和sread以及cwrite和swrite的格式使用相同。
对于大多数数据类型,有几种允许的格式,例如char数组的“%s”和“%1.r”。需要选择哪种格式取决于伙伴控制器发送或接收数据的方式。
对于数组,规范“z”可用于定义要考虑的数组元素的数量。如果没有为“z”指定值,则考虑所有数组元素。进程在第一个未初始化的值处被中止。格式r是一个例外。在这种情况下,进程不会中止。相反,为尚未初始化的变量或数组元素输出随机值。
cread或sread的格式规范具有以下结构:“%u”
数组的格式规范具有以下结构:“%u”
w要读取的最大字符数。可选择的
z要写入的数组元素数。可选择的
u转换字符
cwrite/swrite的“格式”变量
cwrite或swrite的格式规范具有以下结构:“%u”
数据类型bool
每个不等于零的值都转换为true
数据类型enum
系统检查该值是否为允许的enum值。如果不是,读取将中止。第一个enum常量的值为1。
阵列的格式规范
如果没有足够的数据可用于满足格式规范(例如“%2.5r”,但只有7个字节),则此格式不读取任何内容,cread语句将中止。忽略的数据仍然可以读取。
format %r
只能读取变量所能容纳的字节数。其余的仍然可以阅读。如果数组足够大,但字节数不是数组元素大小的倍数,则冗余字节仍可用于读取(对于以下格式或下一个cread语句)。
语句“cwrite”使文本能够写入打开的通道或命令能够写入命令通道。 
“ mode”的值写入命令通道的无关。如果“mode”是非初始化的变量,那么语句失败而且在变量“status ”中放置错误标记。 
如果“mode”有一个除sync 或async以外的值,那么数据在sync 模式下写入通道。 
变量格式的转换规定有以下构造: 
%fwgu 
下面定义的应用: 
  f   格式字符+,-,# ,etc,( 可选) 。 
  w   宽度,指定输出的最小字符数(可选) 
  g    精度,它的意义是由字符转化决定’ . ’ 或’ *’ 或’ 整数’ 可以被使用( 可选). 
  u   允许转换的字符:c,d ,e,f ,g ,i,s,x 和%。系统不能区别大小写。 
给上面增加转换字符( 相应于”“c” 中的“fprintf) ,字符“r”是也可能用到的。 
格式变量“%r”使它的变量值不使用ascii但使用二进制符号。由于“%r”,系统不能检查变量或排列元素是否经过初始化。 
依靠输入的宽度(“%2r”),你可以指定多少字节的值会被延长或压缩。real的值出外。 
当数值被压缩,高位字节被忽略;值通过在结尾增加原点位来延长  (little endian format)  。 
如果宽度没有指定,固有的显示输出:  integer ,real 和enum 4 个字节,bool 和char  1 个字节。 
精度仅仅能被数组指定和循环数解释。与数组元素的相应的数能在开始时就被输出。如果循环的数字比数组排列的更多,那么没有数组元素写入而且输出失败。 
“* ”不能指定精度。如果值的精度被省略,数组全部写入。 
“ var1”,...,“varn ” 可能不是结构类型或数组的结构类型的变量( 包括像 “ pos ” 的结构) 。类型在下表的运行时间内检查一致性。 
如果类型是不兼容的或者系统遇到的第一个值是未初始化的,那么转换失败(除了“%r”的场合)。不输出错误信息。 
“cwrite”语句被用程序控制或机器人移动控制触发先前停止的运行。
首先写入数组名r[ ]的5 个值 
首先写入数组名为r[ ]”的5 个值,因为数组还没有被初始化的值而产生任意的值。 
real r[10] 
%.5r,r[ ] ;发送20位二进制的数据 
输出所有数组元素的值 
下面的语句用于输出所有数组元素的值: 
real r[10] 
%r,r[ ] 
输出特定的数组元素 
输出数组元素“s”,结尾用第一个为初始化的元素:: 
char s[100] 
%s,s[ ] 
首先写入50个数组元素s  
首先写入数组“s ”的50个数,忽视初始化信息。 
char s[100] 
%.50r,s[ ] 
写入两个真实值的名字( 定义字符长度) 
real w1,w2   
w1=3.97  
w2=-27.3 
cwrite(..,..,..,”value1=%+#07.3f value2=+#06.2f”,w1.w2)   
;发送数据: value1=+03.970 value2=-27.30 
转换示例:
例子1
整数变量 vi 的值以十进制和十六进制 ascii 表示法传输。第一个 cwrite 语句传输字符 123。第二个 cwrite 语句传输字符 7b。
int vi
vi=123
cwrite(handle,sw_t,mw_t,%d,vi)
cwrite(handle,sw_t,mw_t,%x,vi)
例子2
整数变量 vi 的值以二进制表示法传输:
int vi
vi=123
cwrite(handle,sw_t,mw_t,%r,vi)
例子3
传输数组的所有数组元素:
real vr[10]
cwrite(handle,sw_t,mw_t,%r,vr[])
使用“%r”格式时,系统不会检查变量或数组元素是否已初始化。为尚未初始化的数组元素传输随机值。
例子4
数组的前五个数组元素以二进制表示法传输:
real vr[10]
cwrite(handle,sw_t,mw_t,%.5r,vr[])
20 个字节以二进制表示法传输。
例子5
传输直到第一个未初始化元素的所有数组元素:
char vs[100]
cwrite(handle,sw_t,mw_t,%s,vs[])
例子6
传输前 50 个数组元素:
char vs[100]
cwrite(handle,sw_t,mw_t,%s,vs[])
例子7
enum 常量的内部值以 ascii 符号传输。对应号码转:
decl enum_typ e
cwrite(handle,sw_t,mw_t,%d,e)
例子8
两个 real 值与附加文本一起传输:
real v1,v2
v1=3.97
v2=-27.3
cwrite(...,...,...,value1=%+#07.3f value2=+#06.2f,v1,v2)
传输以下数据:
value1=+03.970
value2=-27.30
cwrite和命令界面
cell.src可通过cwrite语句和run从sps.sub程序中选择。呼叫仅在冷启动时生效。
cwrite可以通过命令通道$cmd将语句传输到解释器。除了机器人口译员和系统提交外,扩展提交也可在多提交模式下用于此目的。
与单一提交模式相比,以下命令的含义发生了变化:
run[口译员id]
stop[口译员id]
重置[口译员id]
取消[口译员id]
口译员id:
0:所有提交口译员
1:机器人翻译
2:系统提交解释器
3:扩展提交解释器1
4:扩展提交解释器2

9:扩展提交解释器7
此外,run还扩展了可选元素[>口译员id]。
cwrite ($cmd, stat, mode, run/r1/cell())
单次提交模式下的行为:
启动程序cell()。由于cell()是一个src程序,因此它在机器人解释器中启动。
多提交模式下的行为:
与单次提交模式相同。该程序行可用于系统提交或扩展提交。
cwrite ($cmd, stat, mode, run/r1/sps())
单次提交模式下的行为:
启动程序sps()。由于sps()是一个sub程序,它在系统提交解释器中启动(=仅在单次提交模式下提交解释器)。
多提交模式下的行为:
启动程序sps()。由于sps()是sub程序,它在系统提交解释器中启动。
cwrite ($cmd, stat, mode, stop 0)
这个程序行只在机器人程序中有意义。
单次提交模式下的行为:
停止系统提交解释器。
多提交模式下的行为:
停止所有正在运行的提交解释器。
cwrite ($cmd, stat, mode, cancel 0)
单次提交模式下的行为:
取消选择系统提交解释器。
多提交模式下的行为:
取消选择所有提交的口译员。
cwrite ($cmd, stat, mode, run/r1/mysubprog() > 5)
在单次提交模式下不允许使用此语句。
多提交模式下的行为:
如果mysubprog()是sub程序,它将从扩展的submit 3开始。
该程序行可用于其他提交解释器或机器人程序。


OrCAD FPGA系统规划
python环境变量的配置pip
英睿达新款P2固态硬盘,250GB读取速度可达2100M/s
联通将推自有品牌手机“沃Phone”
三星/SK海力士/美光纷纷减产 存储器行业或将面临相当大的挑战
浅谈KUKA机器人CWRITE编程用法
采用FPGA技术芯片模块实现运动估计的设计方案并进行仿真研究
土壤成分检测仪器的特点及技术指标
30种SQL语句优化方法
是德科技宣布推出一套端到端解决方案
怎样设计一个以PLC控制器为核心的矿井副井提升信号系统?工作原理是什么?
三星Galaxy Buds+正式开售拥有三种配色可选售价999元
NETGEAR亮相CES2013 无线新品魅力十足
用于可穿戴无人机控制系统的仿生多功能水凝胶基电子皮肤
Boreas数字光纤陀螺仪介绍
学生党高音质蓝牙耳机推荐?学生党入门无线耳机推荐!
比亚迪副总裁豪捐1.6亿
分享吸顶消防应急灯的安装及调试技巧
太空3D打印 揭开了人类 太空制造 自给自足 的序幕
单片机模拟银行自动取款机仿真设计方案