威纶触摸屏与西门子PLC字符串显示问题分析及解决方案
问题现象
当威纶触摸屏显示西门子PLC(如S7-1200)的字符串变量时,若第二次写入的字符串长度小于第一次,触摸屏会残留第一次字符串的部分内容。例如:
第一次写入
"ABCD1234"
,触摸屏显示"ABCD1234"
;第二次写入
"abcd5"
,触摸屏显示"abcd5234"
(残留"234"
)。
问题原因
PLC内存未清空
西门子PLC在修改字符串长度时,仅更新显示长度,未清除内存中原有字符。例如,
"ABCD1234"
(8字符)修改为"abcd5"
(5字符)时,PLC内存仍保留后3字符("234"
),导致触摸屏显示异常。触摸屏读取机制
威纶触摸屏按固定长度读取字符串(如4字符),若PLC未清空内存,触摸屏会读取残留字符。例如,PLC变量实际为
"abcd5234"
,触摸屏读取前4字符为"abcd"
,但残留部分仍可能影响显示。编码方式不匹配
若字符串包含中文,需确保PLC和触摸屏使用相同编码(GBK或UNICODE)。编码不一致会导致乱码或显示异常。
解决方案
方法1:PLC端清空字符串内存
使用
FILL_BLK
指令
在PLC程序中,通过FILL_BLK
指令将字符串内存清空。例如:pascal// 清空字符串变量"datastring"(长度为254)FILL_BLK(IN := '', OUT := "datastring", COUNT := 254);
IN
:填充值(空字符串''
);OUT
:目标字符串变量;COUNT
:填充长度(需与字符串最大长度一致)。参数说明:
逻辑优化
在写入新字符串前,先执行清空操作:pascal// 先清空,再写入新值FILL_BLK(IN := '', OUT := "datastring", COUNT := 254);"datastring" := "abcd5";
方法2:触摸屏端强制覆盖显示
动态字符串ID关联
在威纶触摸屏中,通过动态字符串ID触发显示更新:在触摸屏中建立字符串表,定义多个状态(如
"状态1"
、"状态2"
)。使用位状态切换开关关联字符串ID,每次切换时强制刷新显示。
脚本控制
通过触摸屏脚本(如VBscript)在显示前清空文本框内容:vb// 示例:清空文本框后显示新值TextBox1.Text = "";TextBox1.Text = "abcd5";
方法3:检查编码与通讯配置
编码一致性
S7-1200/1500支持WString(UNICODE)和String(GBK);
威纶触摸屏需在“系统参数”中设置对应编码。
确保PLC和触摸屏使用相同编码(GBK或UNICODE)。例如:
通讯参数匹配
检查PLC和触摸屏的通讯协议(如Modbus TCP、S7协议)是否支持字符串传输。
确认变量地址映射正确(如DB1.DBW0对应触摸屏的
LW0
)。
验证与调试
在线监视PLC变量
使用TIA Portal或STEP 7的在线监视功能,确认PLC中字符串变量值是否正确。
触摸屏日志分析
查看触摸屏的报警日志,排查通讯错误或显示异常记录。
分段测试
先测试短字符串(如2字符),逐步增加长度,观察显示变化。
推荐实践
结构化编程
将字符串处理封装为功能块(FB),例如:pascalFUNCTION_BLOCK FB_StringHandleVAR_INPUTClearCmd : Bool; // 清空命令NewString : String(254); // 新字符串END_VARVAR_OUTPUTActualString : String(254); // 实际显示字符串END_VARBEGINIF ClearCmd THENFILL_BLK(IN := '', OUT := ActualString, COUNT := 254);END_IF;ActualString := NewString;END_FUNCTION_BLOCK
异常处理
在程序中加入长度检查逻辑,避免字符串越界:pascalIF LEN("datastring") > 254 THEN// 触发报警或截断字符串END_IF;