在 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 中输入的内容如下图所示:
之后它按预期工作。
对于整数、浮点数或字符串等变量,我使用 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 中输入的内容如下图所示:
之后它按预期工作。