浅谈KUKA机器人CWRITE编程用法
2025-09-09 来源:cnblogs
CWRITE
“CWRITE”语句能够使文字写入打开的通道,或者命令被写入命令通道。 应用实例: 数据 ( 写语句) 在KRC1 和装置间( PC, 智能传感器...). 转换。
CWRITE 将数据写入打开的串行接口或加载的 LD_EXT_OBJ 类型的外部模块。在加载的 LD_EXT_FCT 类型的外部模块中,CWRITE 调用一个函数。
CWRITE 将命令写入命令通道。
CWRITE 触发提前运行停止。
CWRITE ( Handle or $CMD, State, Mode, Format, Var1 <, ..., Var10>)
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”
数组的格式规范具有以下结构:“% 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开始。 该程序行可用于其他提交解释器或机器人程序。



上一篇:西门子S7-1500 PLC案例
下一篇:伺服驱动器的常见接线方法
- 嵌入式的风向变了:2026纽伦堡嵌入式展透露这些趋势
- 高通确认不在GDC 2026发布新款骁龙G系列掌机处理器SoC
- 行业评论 从工具到平台:如何化解跨架构时代的工程开发和管理难题
- 面向嵌入式部署的神经网络优化:模型压缩深度解析
- 摩尔线程MTT S5000全面适配Qwen3.5三款新模型
- Mujoco中添加Apriltag标签并实现相机识别教程
- 英飞凌与宝马集团携手合作,基于Neue Klasse架构塑造软件定义汽车的未来
- 物理AI仿真新突破:摩尔线程与五一视界共建全栈国产化生态
- 阿里达摩院发布玄铁C950,打破全球RISC-V CPU性能纪录
- 爆火的OpenClaw! 告别云端,米尔RK3576开发板本地部署
- 边缘计算主机盒选购指南:五大核心指标解析
- Arm AGI CPU 更多细节:台积电 3nm 制程、Neoverse V3 微架构
- Arm AGI CPU 重磅发布:构筑代理式 AI 云时代的芯片基石
- Arm 拓展其计算平台矩阵,首次跨足芯片产品
- 阿里达摩院发布RISC-V CPU玄铁C950,首次原生支持千亿参数大模型
- 边缘 AI 加速的 Arm® Cortex® ‑M0+ MCU 如何为电子产品注入更强智能
- 阿里达摩院发布玄铁C950,打破全球RISC-V CPU性能纪录
- VPU中的“六边形战士”:安谋科技Arm China发布“玲珑”V560/V760 VPU IP
- 利用锚定可信平台模块(TPM)的FPGA构建人形机器人安全




