问题描述:使用串口码枪读取二维码,存储于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 |
目标范围中填充的起始地址 |
本文介绍了在使用串口码枪读取二维码并存储到西门子PLC的string变量中遇到的问题:当字符串为空时触摸屏显示不更新,以及不同长度二维码扫描后仅部分字符改变。通过分析,发现西门子逻辑仅修改显示长度而不清除内存。解决方案是利用`FILL_BLK`指令填充字符串,确保内存彻底清空。测试表明此方法有效,解决了触摸屏显示异常的问题。
9619





