问题描述
我正在使用Twincat 3(4024.10),并尝试了SysLibTargetVisu库中的函数“ GetTextByStringId”和“ GetText”,但编译器已经给我一个错误:
似乎在Codesys 2中有效: https://forge.codesys.com/forge/talk/CODESYS-V2/thread/8f2fc2e158/
谢谢!
解决方法
我还记得我在这上面浪费时间。不幸的是,它似乎是一个古老的未记录且未维护的库。
我用Java编写了一个xml阅读器,在几小时内解决了这个问题,该阅读器从文本列表中读取id和文本,并将它们通过广告推送到plc,然后将它们存储在内存中。然后可以根据需要使用这些值。
此方法的另一个优点是您无需使用plc hmi许可证。
,我在VisuElems库中找到了一个解决方案。它确实有效。这是功能:
sTextList := CONCAT('Port_851.',sTextList);
F_GetText := VisuElems.CmpDynamicText.DynamicTextGetText(
pstTextList:= ADR(sTextList),pstTextIndex:= ADR(sId)
)^;
sTest := F_GetText(sId := 'maschine',sTextList := 'TL_Visu');
在程序中我们这样称呼它:
DE: STRING(8) := 'default';
您可能需要默认翻译。可以说默认翻译是德语,我们有一个常数:
sTextList := CONCAT('Port_851.',sTextList);
IF VisuElems.CURRENTLANGUAGE = DE THEN
F_GetText := VisuElems.CmpDynamicText.DynamicTextGetDefaultText(
pstTextList:= ADR(sTextList),pstTextIndex:= ADR(sId)
)^;
ELSE
F_GetText := VisuElems.CmpDynamicText.DynamicTextGetText(
pstTextList:= ADR(sTextList),pstTextIndex:= ADR(sId)
)^;
END_IF
函数是:
IonicStorageModule.forRoot()
我从这个德国网页上得到了这个解决方案: https://www.sps-forum.de/archive/index.php/t-88760.html