对于整数、浮点或字符串等变量,我使用 Write To Symbol 将变量写入 PLC,并使用属性窗口中 .onTextChanged 下的 HMI 文本框(参见下图)。
但它不适用于时间变量。 如何在不更改 PLC 代码的情况下完成这项工作?
尝试使用 TC Hmi 上的对象“数字输入”将变量写入 PLC,事件为“.onUserInteractionFinished”。它应该有效。
我以前从未使用过 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);
我将代码放在写入符号之前,并添加了舍入,因为舍入在第3位小数之后的舍入方式有所不同:当我在不舍入小数的情况下测试它时,从第4位开始,PLC将显示其他小数然后我在 HMI 文本框中输入。
我在“操作和条件”窗口中输入的内容如下图所示:
之后它就按预期工作了。
在较新版本的 TwinCAT HMI 中(至少在版本 1.12.760.59 中),工具箱中有
Timespan Input
和 Timespan Picker
控件。看看他们。
不幸的是,您可能会发现与通过
Numeric input
控件设置(例如)INT 变量相比,使用这些控件可能仍然需要更多工作。我希望倍福将来能够改进这些控件。但是,现在,我相信这些控件仍然可以帮助您。