写程序
CWRITE 将数据写入开放串行接口或加载的LD_EXT_OBJ 类型的外部模块。 CWRITE 调用已加载的LD_EXT_FCT 类型外部模块中的函数。
CWRITE 将命令写入命令通道。
CWRITE 触发提前停止运行。
CWRITE(句柄或$CMD、状态、模式、格式、Var1、Var10)
句柄/$CMD
类型:INT
Handle:从COPEN传输到WRITE的变量,用于标识通道
$CMD:用于写入命令通道的预定义变量
状态:类型: STATE_T
自动返回WRITE状态
模式: 类型: INT
类型:MODUS_T
要写入模式,必须初始化模式。
格式: 类型: CHAR[]
在将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 相比的缺点: 可能会丢失数据。
其他值
如果mode 的值不是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 统计
DECL MODUS_T 模式
模式=#同步
.
;选择程序A6()
;要启动该程序,请单击“开始”按钮或
;需要外部启动信号
如果$FLAG[1]==TRUE 那么
CWRITE($CMD,STAT,MODE,'RUN/R1/A6()') 运行程序
$FLAG[1]=FALSE
万一
;停止程序A6()
如果$FLAG[2]==TRUE 那么
CWRITE($CMD,STAT,MODE,'STOP 1') 程序停止
$FLAG[2]=FALSE
万一
;取消程序A6()
如果$FLAG[3]==TRUE 那么
CWRITE($CMD,STAT,MODE,'CANCEL 1') 退出程序
$FLAG[3]=FALSE
万一
哪种变量格式?
一方面,CREAD和SREAD以及CWRITE和SWRITE使用相同的格式。
对于大多数数据类型,有多种允许的格式,例如CHAR 数组的“%s”和“%1.r”。您需要选择哪种格式取决于合作伙伴控制器发送或接收数据的方式。
对于数组,规范“Z”可用于定义要考虑的数组元素的数量。如果没有为“Z”指定值,则考虑所有数组元素。该过程在第一个未初始化值处终止。格式r 是一个例外。在这种情况下,该过程不会中止。相反,为尚未初始化的变量或数组元素输出随机值。
CREAD 或SREAD 的格式规范具有以下结构: "%U" 数组的格式规范具有以下结构: "%U" W 要读取的最大字符数。可选Z 要写入的数组元素的数量。可选的U转换字符
CWRITE/SWRITE 的“格式”变量
CWRITE 或SWRITE 的格式规范具有以下结构:“%U”
数据类型布尔型
每个不等于零的值都会转换为TRUE
数据类型ENUM
系统检查该值是否是允许的ENUM 值。如果没有,读取将中止。第一个ENUM 常量的值为1。
数组格式规范
如果没有足够的数据来满足格式规范(例如“%2.5r”,但只有7 个字节),则不会读取该格式的任何内容,并且CREAD 语句将中止。被忽略的数据仍然可以读取。
格式%r
只能读取变量可以保存的字节数。剩下的还是可以读的。如果数组足够大,但字节数不是数组元素大小的倍数,则冗余字节仍然可供读取(对于以下格式或下一个CREAD 语句)。
转换示例:
实施例1
整型变量VI的值以十进制和十六进制ASCII表示法传输。第一个CWRITE 语句传输字符123。第二个CWRITE 语句传输字符7B。
第六期
VI=123
CWRITE(HANDLE,SW_T,MW_T,'%d',VI)
CWRITE(HANDLE,SW_T,MW_T,'%x',VI)
实施例2
整型变量VI 的值以二进制表示形式传输:
第六期
VI=123
CWRITE(HANDLE,SW_T,MW_T,'%r',VI)
实施例3
传输数组的所有数组元素:
真实虚拟现实[10]
CWRITE(HANDLE,SW_T,MW_T,'%r',VR[])
当使用'%r'格式时,系统不检查变量或数组元素是否已初始化。为尚未初始化的数组元素传输随机值。
实施例4
数组的前五个数组元素以二进制表示形式传输:
真实虚拟现实[10]
CWRITE(HANDLE,SW_T,MW_T,'%.5r',VR[])
20 个字节以二进制表示形式传输。
将所有数组元素转移到第一个未初始化的元素:
字符VS[100]
CWRITE(HANDLE,SW_T,MW_T,'%s',VS[])
实施例6
传输前50 个数组元素:
字符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 值与附加文本一起传输:
真实V1、V2
V1=3.97
V2=-27.3
CWRITE(..'值1=%+#07.3f 值2=+#06.2f',V1,V2)
传输以下数据:
值1=+03.970
值2=-27.30
CWRITE 和命令接口
可以通过CWRITE 语句和RUN 从SPS.SUB 程序中选择CELL.SRC。该调用仅在冷启动时生效。
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,模式,'停止0')
该程序行仅在机器人程序中有意义。单提交模式下的行为:停止系统提交解释器。多提交模式下的行为:停止所有正在运行的提交解释器。
CWRITE ($CMD, STAT, MODE, '取消0')
单提交模式下的行为:取消选择系统提交解释器。多重提交模式下的行为:取消选择所有提交的解释器。
CWRITE ($CMD, STAT, MODE, 'RUN/R1/MySubProg() 5')
在单提交模式下不允许使用此语句。
多重提交模式下的行为:如果MySubProg() 是一个SUB 程序,它将从扩展提交3 开始。
该程序行可以与其他提交解释器或机器人一起使用。
审稿人:刘庆