在 Twincat 3 HMI 中通过文本框设置时间变量

Setting time variable via textbox in Twincat 3 HMI

对于整数、浮点数或字符串等变量,我使用 Write To Symbol 通过 .onTextChanged[= 下的 HMI 文本框将变量写入 PLC 18=] 在属性 window 中(见下图)。

但它不适用于时间变量。 如何在不更改 PLC 代码的情况下完成这项工作?

我以前从未使用过 javascript,但那是我找到解决方案的地方。 我还使用 .onUserInteractionFinished 而不是 .onTextChanged 如下图所示:

之后我写了这个 javascript 代码:

(function (TcHmi) {

    var CheckTextboxForNumber = function (Textbox) {
        //get content from the textbox
        var _text = Textbox.getText();
        //convert to time variable in 
        if (!_text.startsWith('PT')) {
            var _value = Number(_text);
            Textbox.setText('PT' + _value.toFixed(3) + 'S');
            return _value.toFixed(3);
        }
    };

    TcHmi.Functions.registerFunction('CheckTextboxForNumber', CheckTextboxForNumber);
})(TcHmi);

我将代码放在 Write To Symbol 之前,并添加了四舍五入,因为小数点后第三位的四舍五入方式不同:当我测试它时没有四舍五入小数点, 从第 4 位开始,PLC 会显示其他小数点,然后我在 HMI 文本框中输入。

我在 'actions and conditons' window 中输入的内容如下图所示:

之后它按预期工作。