西门子HMI迁移后显示TEXT?文本引用断裂的排查与修复全攻略
做西门子HMI项目迁移的工程师十有八九都撞见过这种怪事画面明明从A项目完整复制到B项目编译也没报错下载到触摸屏之后按钮文字、报警信息、单位注释却一溜烟变成了大写的“TEXT”。操作工指着屏幕问这个英文单词是什么意思你第一反应是程序没传对重新下载一遍还是TEXT。别急着删项目重做“SIEMENS触摸屏迁移到另一个项目中显示TEXT问题”其实是文本引用链断裂的典型症状有固定的排查路径也能彻底解决。这篇文章就把TEXT问题的成因、排查顺序和可落地的修复方案完整捋一遍。刚接触TIA Portal的新手遇到它会慌老手大概知道和文本引用有关但未必系统整理过排查顺序——这两类人都可以参考。1. 迁移项目后画面显示TEXT先认准现象和报错类型1.1 画面上最常见的三种TEXT表现迁移完成后TEXT最常出现在三个地方。第一个是报警栏报警控件在运行时实时弹出故障文本正常应该显示“电机过载”“气压不足”这类描述结果全屏滚动TEXT。第二个是按钮标签启动、停止、复位这些按钮下方的文字变成了TEXT按下去功能照常纯粹是显示问题。第三个是IO域周围的注释和单位温度显示数值正常但“℃”和“当前温度”这几个字变成了TEXT。这三种表现的性质不完全一样报警栏TEXT几乎都是文本列表引用断裂按钮TEXT可能是项目文本或文本列表引用断裂IO域注释TEXT还要顺带检查变量连接是否健康。观察时留意TEXT前面有没有符号比如“TEXT”多数指向项目文本TEXT[2]或TEXT.2多数指向文本列表的条目ID这些细节能帮助缩小排查范围。另外注意编译输出窗口。有些TEXT问题编译时会有提示比如“对象报警[20]的文本引用无效”或“无法解析文本引用”找到这些关键字能直接定位到具体的画面对象。不过也有不少TEXT问题编译时一声不吭这是文本引用机制的坑后面会说为什么。1.2 TEXT到底是什么文本引用链断裂的占位符要彻底解决TEXT得先明白HMI文本的存储机制。触摸屏画面上的文字组态时有两种存储方式。第一种是静态文本直接在对象属性里敲入“启动”运行时就永远显示“启动”。第二种是引用式文本画面对象里并不直接保存文字而是保存一个引用关系比如“文本列表AlarmTexts的第10号条目”或“项目文本节点MotorOverload”运行时面板根据当前语言去文本表里查出真正要显示的文字。引用式文本是为多语言切换设计的。设备要出口操作界面要切换中英文直接在画面里敲死文字就没法自动翻译改成文本列表就能做到一套画面、多语言自动切换。代价是引用链一旦断裂系统查不到文本值运行时只能显示一个占位符。在TIA Portal里这个占位符的默认显示就是“TEXT”。打个比方这和Excel里公式引用另一张工作表有点像源工作表一旦被删掉公式单元格就显示“#REF!”。TEXT就是HMI世界里的“#REF!”它是在提示你“这里有一个文本引用没找到对应项”而不是程序损坏或者屏坏了。所以看到TEXT第一反应应该是“哪个引用断了”而不是“重新传一遍试试”。2. 三个导致TEXT的根因多数人栽在第二个2.1 根因一HMI变量与PLC连接的引用失效先说第一个根因——变量连接。HMI变量表里每个变量都需要指定一个PLC连接例如连接“新_连接_1”下的PLC变量“I0.0”或“DB1.DBX0.0”。这个连接关系会跟着HMI变量一起被记录下来。从A项目复制变量表和画面到B项目时如果B项目的PLC连接名称变了或者连接指向的PLC变量名对不上变量就会处于“未连接”状态表格里出现黄色感叹号。变量连接失效不会直接让画面显示TEXT但会让画面对象整体处于不健康状态。比如IO域的过程值属性里选中的HMI变量失效这个IO域可能出现“#####”或数值不变而按钮的“使能”或“可见性”绑定到失效变量后按钮文本也可能随之失去正常渲染。更常见的是报警控件里报警的“触发变量”失效时报警文本的显示也会连带出问题。所以排查TEXT先把变量连接这一层排除掉不要一上来就钻到文本列表里。在HMI变量表里扫一眼“连接”列如果有空值或叹号优先重建连接。这个检查最多花三分钟但能避免后面一半的无效排查。2.2 根因二文本列表没有跟着画面一起走这是TEXT问题里最典型的根因也是标题里“迁移”最直接的坑。画面对象引用文本列表时复制的只是“引用本身”不是“文本列表的定义”。比如A项目中报警文本的内容放在文本列表“报警文本”里条目ID1是“电机过载”ID2是“气压不足”。当你把报警控件复制到B项目时控件记住的是“报警文本这个列表的ID1条目”但B项目里根本没有“报警文本”这个列表或者有列表但没有ID1这个条目。运行时查不到屏幕上就是TEXT。这个机制坑人之处在于复制HMI画面时TIA不会主动问“要不要把引用的文本列表一起复制”它把这件事交给用户。很多工程师不知道文本列表独立于画面存在迁移完只看到画面没意识到文本数据也要迁移。还有一个更隐蔽的细节就算你在B项目里新建了一个同样叫“报警文本”的列表只要条目ID和源项目不一致照样显示TEXT。因为控件绑定的是条目ID不绑定文本值。我见过有人在B项目重新录了一遍报警文本条目顺序和源项目不同结果一半报警正常、一半TEXT。所以文本列表的迁移最好用导出导入而不是手工重建确保ID完全一致。2.3 根因三项目语言和参考语言不一致第三个根因相对隐蔽但多语言项目里很常见。TIA的HMI设备有“项目语言”和“参考语言”两个概念。参考语言是组态时你正在使用的编辑语言比如你在中文参考语言下输入了“启动”两个字这些文字会存在中文语言列里。如果你把画面复制到一个参考语言为英文的项目中画面里原本在中文列的文字可能匹配不到英文列内容运行时按英文语言去查表查不到就显示TEXT。项目文本的机制也一样。项目文本表里每条记录有多个语言列中文、英文、德文……如果在目标项目的参考语言下没有录入对应翻译引用就取不到值。这种现象跟前面的文本列表丢失可以叠加出现排查时需要区分是所有文本都TEXT还是只有某一种语言下TEXT如果切换语言后有些文本能正常显示基本就是参考语言和项目语言设置的问题。处理起来不复杂在HMI设备属性“常规-语言”里把参考语言改成和源项目一致或者把源项目的语言数据一并导入。关键是别忽略这个维度因为有时候你修好了文本列表TEXT还在就是语言这一层没对上。3. 四种场景的修复方法按这个顺序排查最快3.1 场景A变量连接失效IO域与报警变量全断遇到TEXT先不要进画面改字按下面的步骤走。第一步打开项目树里该HMI设备下的“HMI变量”表格看“连接”列。如果有空值或黄色感叹号说明变量连接断了。接下来打开“设备与网络”确认HMI和PLC之间是否建立了连接。如果没有先拖一根连接线把连接名称记录下来。第二步回到HMI变量表在“连接”列下拉菜单里选择正确的连接。如果连接名和源项目不一致可以先把连接建得和源项目一样或者统一改成新项目的连接名总之内部命名一致即可。第三步编译一次。编译输出窗口里搜“未分配”“无效”这些词能快速列出所有变量引用问题。之后再到画面里选中IO域或报警控件在属性面板“过程值”属性中重新选择HMI变量。如果画面很多可以在画面里CtrlA全选对象批量检查属性里的变量引用。这一步做完变量连接层面的问题应该清零。3.2 场景B文本列表丢失报警文本和按钮文本变TEXT变量连接没问题但TEXT还在九成是文本列表和项目文本的问题。第一步在项目树中找到该HMI设备下的“文本和图形列表”对照源项目看目标项目缺哪些列表。缺了就直接在源项目里右键列表名选择“导出”目标项目里右键空白处“导入”。导入后展开列表确认条目ID完整带过来了。第二步如果列表已经存在但就是显示TEXT重点比对条目ID。举个例子源项目里ID3是“复位中”目标项目里ID3可能是“复位完成”或者干脆没有ID3。画面对象引用的是ID不认文本ID对不上就会TEXT。这种细微差别只有逐条核对才能发现。第三步去画面对应的报警控件或按钮在属性面板的“文本”分类里把引用方式重新指定一次。报警控件通常有两个地方会引用文本报警表格里的“报警文本”属性和报警控件本身绑定的“文本列表”。重点检查后者控件属性里如果引用了一个不存在的列表运行时全部报警都会TEXT。第四步重新编译并下载。这个场景下修复后画面里大部分TEXT会一次性恢复。另外如果只想尽快让设备跑起来可以省掉复杂绑定直接把按钮文本改成静态文字。右键按钮属性“文本”类型选“无”然后直接输入中文。等于砍掉多语言能力代价小、见效快适合交期紧、又确实不需要切换语言的设备。3.3 场景C旧版WinCC flexible项目移植后的残留问题从WinCC flexible 2008往TIA Portal移植是另一条高频踩坑路线。旧项目移植到TIA后报警文本、按钮文本、系统消息都可能变成TEXT。原因和前面差不多移植时文本列表和项目文本没有被完整带进新工程。差别在于移植向导里有一个选项容易被跳过。具体做法是在TIA里选“项目-移植”选择旧项目文件后移植向导会问你要不要传送更多内容包括“传送所有文本”“传送项目文本/文本列表”。这两个选项务必勾上。不要只看画面觉得画面过来了就完事文本数据在移植过程中是独立的环节。移植完成后还要检查语言设置。旧项目里参考语言是中文新项目里如果参考语言默认成了英文画面里那些引用文本就可能取不到中文运行时直接TEXT。把参考语言改回来或者把旧项目的语言数据导入进来问题就能解决。如果移植后只是个别报警显示TEXT优先检查报警类别。WinCC flexible里报警文本可以挂在“报警类别”上移植后报警类别映射有时会丢重新给报警类别指定文本列表即可。另外老版本软件跑在32位环境下移植前把工程文件路径里的中文和空格处理干净能省掉不少莫名其妙的小问题。3.4 场景D几十张画面批量修复TEXT的高效做法画面少可以一个个改遇到几十张画面的项目就必须用批量手段。第一招用TIA的查找和替换。CtrlF打开搜索框搜索范围选“HMI画面”输入“TEXT”语言筛选记得关掉不然可能漏掉一部分对象。搜出来之后逐个确认是不是要修复的文本统一替换成正确的静态文本或者替换成正确的引用格式。第二招CSV导入导出。文本列表和项目文本都可以右键导出CSV文件。在源项目里导出Excel打开检查目标项目里再导入。这招在处理数十条报警文本时尤其好用比手工添加快一个数量级还能保证条目ID完全一致。导入之后编译一下确认所有条目都在。第三招批量处理报警表格。报警文本不要进画面改直接在HMI的“报警”表格里选中多行报警在“文本”列统一重新选择文本列表条目。一次选中所有报警行批量赋值效率很高。做批量操作前一定要把文本列表修复好否则批量替换只是把一种错误换成另一种错误。顺序不能反。4. 一次迁移TEXT问题的完整修复实录4.1 故障现场报警栏飘满TEXT按钮全成了英文占位符说一个具体的案例很有代表性。某设备的HMI程序要从项目A迁到项目B项目B的PLC型号一致但变量表做过重构大概三成PLC变量改了名字HMI的连接名也从原来的“PLC_1”变成了“新_连接_1”。迁移方式很粗暴直接TIA里复制画面、粘贴过去。下载运行后报警栏滚动显示TEXT启动和停止按钮文字也是TEXTIO域数值能正常显示但单位旁边的注释文字全是TEXT。第一件事没有进画面而是打开HMI变量表扫“连接”列发现一批变量带黄色感叹号。再打开“文本和图形列表”果然目标项目里压根没有“报警文本”这个列表。到这里基本定位到两块问题变量连接断加文本列表丢失。4.2 修复过程连接重建、文本列表导入、逐项验证修连接花了大概十五分钟。先在“设备与网络”里把HMI到PLC的连接补上命名为“新_连接_1”回变量表把所有带叹号的变量在连接列里重新选到“新_连接_1”编译一次确认没有未分配引用。修文本列表反而是最快的。在源项目里右键“报警文本”文本列表导出CSV目标项目里右键“文本和图形列表”空白处导入刚才的CSV。打开列表看了眼条目ID都完整带过来了。然后打开报警表格把报警文本的引用方式重新指定为“文本列表-报警文本-对应条目”。这一步做完编译下载报警栏的TEXT全部恢复。按钮文本单独处理。启动按钮在属性“文本”分类里引用了项目文本节点“启动”但目标项目的项目文本表里没有这个节点。我在项目文本编辑器中补上了这个节点和中文/英文翻译按钮文字恢复。如果你嫌麻烦也可以直接改静态文本但考虑到设备可能出口我当时保留了引用方式。4.3 这次修复复盘哪些步骤真正节省了时间复盘下来最省时间的是先做文本列表导入而不是先逐条修按钮文本。文本列表带过来之后画面里一半的TEXT其实已经自动恢复因为报警控件和按钮绑定的是“列表名条目ID”列表存在且ID一致运行时就能查到文本。剩下那些还显示TEXT的才是真正需要逐个手动处理的。第二个省时间的点是用了CSV而不是手工录入。报警文本大概有30多条手工录入可能一小时起步导出导入十分钟搞定还不会出现ID错位。第三个经验是编译输出窗口的“文本引用无效”提示要重视。虽然有些TEXT编译时不报错但凡是报出这个提示的都是文本列表或项目文本的硬问题顺着提示双击跳转到具体对象修一个少一个。5. 避坑速查表与迁移前必做的准备工作5.1 常见问题速查表六种TEXT现象对照把实际遇到的TEXT现象、原因和解决办法整理成一张速查表现场排查时可以对着看。现象可能原因检查点解决办法报警信息全部显示TEXT报警文本引用的文本列表未迁移HMI设备下的“文本和图形列表”源项目导出文本列表目标项目导入大部分报警正常个别显示TEXT文本列表条目ID不一致比对源项目与目标项目的条目ID用CSV导入保证ID完全一致按钮文字显示TEXT按钮引用的项目文本节点不存在项目文本编辑器补上对应项目文本节点或改用文本列表IO域数值正常注释显示TEXT参考语言不匹配HMI设备属性-语言统一参考语言导入全部语言数据多个画面批量显示TEXT文本列表健康但画面对象引用方式错误画面对象属性-文本全选对象统一指定文本列表引用旧项目移植后大量TEXT移植向导未勾选文本选项移植设置重新移植并勾选“传送所有文本”这张表实际用过大部分现场问题都能对上号。如果碰到表中没有的现象多数是两种原因叠加先修文本列表再修连接顺序别反。5.2 迁移前必做的三件准备工作经历过几次TEXT问题之后我养成一个习惯迁移HMI程序之前先花十五分钟做准备工作。第一件导出源项目的文本数据。在源项目里分别导出“项目文本”和“文本和图形列表”为CSV顺手截一张HMI变量表和连接配置的截图。这些东西就像保险单出问题时能立刻对照不用再去翻旧电脑。第二件在目标项目里把PLC连接和变量表提前建好。HMI迁移最怕目标项目本身还有一堆编译错误这样根本分不清TEXT是原有问题还是迁移引入的。先把基础打好再迁移画面问题边界清晰很多。第三件复制对象时看清楚TIA的弹窗。TIA在跨项目复制HMI对象时会询问是否同时复制引用的对象比如文本列表、图形列表、项目文本。这个时候要选“包含引用对象”不要嫌麻烦直接点掉。点掉一时省事后面修复TEXT花的时间会多得多。5.3 一条可以少走弯路的排查顺序建议最后聊点个人经验。TEXT问题本身不难难的是很多人喜欢从画面里一个一个找着改改到一半发现根因没解决白费功夫。我现在遇到TEXT固定的排查顺序是先看“文本和图形列表”再看“HMI变量表的连接列”然后“项目语言设置”最后才“画面对象属性”。这个顺序是按照出现频率排的文本列表出问题的概率最高变量连接次之语言设置较少画面对象属性本身出问题的概率最低。按这个顺序排查绝大多数情况下十分钟内就能定位到根因。还有人问我为什么不用交叉引用功能。交叉引用当然能用但那是定位“某个变量被哪些对象用了”的工具适合在明确知道故障变量时用。TEXT问题更多是“引用指向的对象不存在”先在文本列表和变量表里找缺失项效率更高。工具用对场景才有价值。