SWRITE具有与CWRITE类似的功能和语法。但是,与之相似。CWRITE不同的是,SWRITE数据不会写入通道,而是写入通道CHAR数组。
SWRITE可以与CWRITE结合在程序中。
lCWRITE可限制为将数据写入通道。SWRITE可以执行更复杂的格式化任务。这使程序更加灵活。
lCWRITE最多可处理10个变量。结合多个变量。SWRITE句子,可以写入10多个变量的数据。
SWRITE触发器提前停止运行。
SWRITE(String,State,OFFSET,Format,Var1<,var10="">)
String:Type:CHAR[]
Var字符串中写入了变量的格式化内容。
State:Type:STATE_T
自动返回到WRITE的状态
OFFSET:Type:INT
SWRITE开始在字符串中写入的位置。若要从头开始写入,则偏移量必须设置为0。
例如:
OFFSET=0:SWRITE从第一个位置开始写入。
OFFSET=2:SWRITE从第三个位置开始。位置1和2被忽略。
在写入过程中,偏移量增加。如果在另一个方面。SWRITE在句子的情况下,如果要从第一个位置重新写入,则必须在句子之前将偏移设置为0。否则,将接受前一句的增量偏移。
Format:Type:CHAR[]
在将Var在将变量写入字符串之前,转换它们。必须为每个字符串。Var变量指定格式.
Var:
数据写入字符串的变量。每个句子最多可有10个变量。
例如:
报警信息:
OFFSET=0
SWRITE(user_msg.msg_TXT[],ST_AUSG,OFFSET,"TotzeitAchse%dnachTestlauf=%d*12ms",(EaxNum+6),TotzeitNeu)
Format:CWRITE/SWRITE的“格式”变量
CWRITE或SWRITE格式规范具有以下结构:“%U”
格式化字符。可选的。
多个格式字符可用于一个格式。
输出的最小位置数,可选的。
小数点被认为有助于弥补最小数字,而前置符号则不是。为了达到最小数量,在最后添加零字节(以小端格式)。必要时可以超过最小数量。
例子:
„VAR=1.56
"%+8.4d",VAR
结果:__+1.5600
VAR=125.568
"%+8.4d",VAR
结果:+125.5680
若宽度指定为0x,这意味着输出充输出位置。
例子:
„VAR=1
"%+04d",VAR
Result:+0001
与不带0的规格相比:
„"%+4d",VAR
Result:___+1
若未指定宽度,则使用以下默认宽度:
INT,REAL,ENUM:4bytes
BOOL,CHAR:1byte
精度规格
r在数组的情况下:要表示的数组元素数.
e,f:要表示的数组元素数.
G:有效的数字位数
S:最大字符数
所有其他格式:要表示的字符数。如果源值包含更多的字符,则会被切断或四舍五入。
对于大多数数据类型,有几种允许的格式,比如"%s"和"%1.r"用于CHAR数组。需要选择哪种格式取决于合作伙伴控制器发送或接收数据的方式。
在数组的情况下,标准化“Z”它可以用来定义要考虑的数组元素的数量。如果没有,“Z”指定值考虑所有数组元素。然而,该过程在第一个未初始化值中停止。一个例外是格式。r。在这种情况下,这个过程不会停止。相反,输出未初始化的变量或数组元素的随机值。
数据类型BOOL
每个不等于零的值都转换为TRUE
数据类型枚举
系统检查该值是否允许ENUM值。如果没有,则停止阅读。第一个。ENUM常量值为1。
数组格式规范
如果没有足够的可用数据来满足格式规范(例如)“%2.5r”,但只有7个字节),则不会读取此格式的任何内容停止,CREAD句子。被忽略的数据仍然可以读取。
格式%r
只读取变量所能容纳的字节数。其余的仍然可以阅读。如果数组足够大,但字节数不是数组元素大小的倍数,冗余字节仍然可以读取(对于以下格式或下一个格式)CREAD语句)。
f80a080e-e892-11ec-ba43-dac502259ad0.png
f82ea1f0-e892-11ec-ba43-dac502259ad0.png
转换示例:
例子1
整数变量VI价值为十进制和十六进制ASCII表示法传输。第一个CWRITE第二个语句传输字符123。CWRITE语句传输字符7B。
INTVI
VI=123
CWRITE(HANDLE,SW_T,MW_T,"%d",VI)
CWRITE(HANDLE,SW_T,MW_T,"%x",VI)
例子2
整数变量VI二进制表示法传输的值:
INTVI
VI=123
CWRITE(HANDLE,SW_T,MW_T,"%r",VI)