ThingWorx Manufacturing Apps的trending and troubleshooting功能提供了趋势分析工具,能够将根据时间序列存储的数据予以动态展示。
此功能在Mashup中对应的Widget是Dygraph Widget,是基于开源的dygraphs实现的。
下面说一下在ThingWorx中应用Dygraph的注意事项。
1.
Dygraph的数据源即JSONData
此属性有一定的误导性,说是JSONData,但其实是csv格式的长字符串。
Csv格式就是带分隔符的文本文件,通常用“,”或”;”分隔;第一行定义表头,从第二行开始定义数据。
一些注意事项:
1)
表头的字段之间用”,”分隔,以“\n”换行;
2)
第一个字段必须是时间,对应于Dygraph的横坐标;
3)
其它的字段对应DataLabel1~DataLebel6;
4) 从第二行开始,即数据存储区,字段之间以“,”分隔,最后以”\n”换行。
2.
如果数据的原始格式是InfoTable,则必须先转换成csv
比如我们想从外部的实时数据库抽取数据,则必须在查询后进行转换才能使用。
通常在ThingWorx中,查询输出的格式是InfoTable,而InfoTable的实际格式是JSON。
对于此类数据,则必须自己编写Service进行转换,之后才能bind给Dygraph使用。
在编写Service时,注意Output类型是TEXT。
转换代码示例:
------------------------------------------------------
var tmp = 'TIME,OEE \n'; //表头
var tmp1 = ''; //存储第1个字段
var tmp2 = ''; //存储第2个字段
var tableLength = IT1.rows.length; //IT1是输入的InfoTable
for (var x=0; x < tableLength; x++) { //从InfoTable中逐行取值
var row = IT1.rows[x];
tmp1 = dateFormatISO(row.TIME); //转换时间格式,这里TIME是第1个字段名称
tmp2 = row.OEE; //这里OEE是第2个字段名称
tmp = tmp + tmp1 + ',' + tmp2 + ' \n'; //生成一行数据记录
}
var result = tmp;
------------------------------------------------------
3.
时间序列的类型必须是ISO TIME
ISO TIME包含了日期、时间、时区的信息,如2019-07-26T01:30:00.000+08:00。
我们可以利用dateFormatISO函数将DateTime类型转换成String类型。
4.
关于取值范围
如果从数据库中查询,然后转换成CSV使用,则要在Service Info中配置Max Rows,即返回的查询结果记录数,对应于SQL中的TOP/LIMIT条件,默认值是500。
5.
更多Dygraph信息参考
可参考ThingWorx Apps自定义指南的第21章-Dygraph小组件。
没有评论:
发表评论