Codesys 3.如何从ST中的静态或动态文本文件获取翻译?

问题描述

我正在使用Twincat 3(4024.10),并尝试了SysLibTargetVisu库中的函数“ GetTextByStringId”和“ GetText”,但编译器已经给我一个错误

错误解决参考:'GETTEXTBYSTRINGID'0

似乎在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