2019年7月26日

ThingWorx Dygraph研究


ThingWorx Manufacturing Appstrending and troubleshooting功能提供了趋势分析工具,能够将根据时间序列存储的数据予以动态展示。
此功能在Mashup中对应的WidgetDygraph 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进行转换,之后才能bindDygraph使用。
在编写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小组件。



没有评论: