问题描述:使用串口码枪读取二维码,存储于string类型的变量中,当PLC中的字符串中内容为空时,触摸屏依然显示原来的字符,当使用不同字符数的二维码扫进PLC时,string的变量只有前面的字符发生变化,后面的依然存在;
解决办法:
将string的数据转换为Byte数组后,发现原来西门子的逻辑为修改字符串显示的长度,而内存中的字符依然存在,后使用
如上代码快,datastring这个变量,程序监控时,是不可见的,西门子触摸屏显示也一致,但是使用第三方就会显示异常,清空的字符串在触摸屏依然显示原来的字符;
经过测试,使用以下方法解决;
FILL_BLK:填充块(来源于西门子帮助文件) |
说明
可以使用“填充存储区”指令,用 IN 输入的值填充一个存储区域(目标范围)。从输出 OUT 指定的地址开始填充目标范围。可以使用参数 COUNT 指定复制操作的重复次数。执行该指令时,输入 IN 中的值将移动到目标范围,重复次数由参数 COUNT 的值指定。
仅当源范围和目标范围的数据类型相同时,才能执行该指令。
变更元素的最大值为 ARRAY 或结构中的元素个数。如果复制的数据超过 OUT 输出中的元素,则将返回一个意外结果。
说明 ARRAY 的使用 该指令读取源范围中所选元素的内容,并从指定索引开始将该内容向目标范围复制 n 次(n = 取决于参数 COUNT 的值)。 |
填充结构
与 ARRAY 中的元素相同,也可为结构(STRUCT、PLC 数据类型)中多个元素填充相同的值。待填充元素的结构中包含元素的元素数据类型必须相同。而且,该结构也可嵌入到其它结构中。
参数
下表列出了该指令的参数:
参数 | 声明 | 数据类型 | 存储区 | 说明 | |
---|---|---|---|---|---|
S7-1200 | S7-1500 | ||||
IN | Input | 二进制数、整数、浮点数、定时器、TOD、DATE、CHAR、WCHAR | 二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD、LTOD | I、Q、M、D、L、P | 用于填充目标范围的元素 |
COUNT | Input | USINT、UINT、UDINT | USINT、UINT、UDINT、ULINT | I、Q、M、D、L、P | 移动操作的重复次数 |
OUT | Output | 二进制数、整数、浮点数、定时器、TOD、DATE、CHAR、WCHAR | 二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD、LTOD | D、L | 目标范围中填充的起始地址 |