大家好,又是辛苦搬砖的周一。今天二师兄想跟大家分享一个我解决的客户小难题。
小技巧解决小问题,积跬步才能至千里~今天的问题是关于WinCC 输入/输出域没有所需要的预定义输出格式该如何操作的。
应该大多数人都知道 WinCC 的 IO 域对于浮点数的显示都支持格式预定义,例如原数 567.89 可以在经过 IO 域的预定义后在画面上显示为 567.9 。
甚至是带符号或不带符号,带前导 0 或不带:
相对常规应用而言基本还是能满足项目开发的需求了。但是最近确实也遇到了用户的一个合理需求让 WinCC 的输入/输出域格式预定义犯难了。
用户发现在画面中显示的累计量,不管是水还是电,项目初期都还 OK ,项目初期的水电累计量:
还比较容易读数:三百六十五点九吨水,一千七百八十九点三度电。
可是随着项目运行时间长了之后问题就来了:
数据位数不过来了。能不能给加个千位分隔符让数好读一些呢?
这对 WinCC 的输入/输出域来说确实就犯难了,软件本身没有提供千位分隔符的格式预定义啊。但是客户的需求倒也是合理的,想想办法吧。还好 WinCC 支持脚本功能,自己写一个应该也不算难,写吧。于是想想,写起来貌似用静态文本来输出这些累计量可能更方便,于是最终给用户呈现出了下面这种效果。
加上了千位分隔符确实看起来好读一些了。
分享一下实现方法,小技巧解决些小问题,兴许能带来一些启发,别的地方也能用上。
画面上添加两个“静态文本”,在属性窗口中打开“文本”属性的“ VBS 动作…”编程窗口,然后写上代码就完成了:
对于不同累计量的静态文本,只需要将脚本中的变量名替换掉就 ok 了。其实只是用了 VBS 简单的一个 Formatnumber 函数来解决了这个问题。为了省去各位看官用的时候再去查这个函数的用法,简单在此解释一下这个函数吧(其实度娘上倒也很容易找到用法)。
Formatnumber 函数可返回作为数字被格式化的表达式。
语法:
Formatnumber (Expression [, NumDigAfterDec [, IncLeadingDig [, UseParForNegNum [, GroupDig]]]])
对应于刚才的脚本,解释一下用到的。
Expression 也就是累计量值:HMIRuntime.Tags("Water_Total").Read ,这个毫无疑问是必须的。
NumDigAfterDec, 默认值为 -1,当然也可以省略,如果选择 -1 或者省略,也就自动根据计算机区域设置来显示了。在上面的脚本里用了 1 ,实际也就是指定了小数点后保留 1 位小数。
GroupDig,默认 -1 也可以,上面的脚本里指定了 -2,也就是使用计算机区域设置中的设置。那这个设置如何打开如何设置?
打开操作系统的控制面板,切换为以小图标方式查看就可以找到“区域”设置了。
打开“区域”设置,点击“其他设置(D)…”就可以找到“数字分组符号(I):”设置了。默认情况下通常分组符为“,”,当然您也可以根据您的需要任意选择或者输入。哪怕是“空格”甚至是“@”。设置完成重新激活您的 WinCC 画面就能看到您想要的效果了。