2019年7月30日

ThingWorx Service: InfoTable2CSV

编写了一个通用程序,能够将InfoTable转换成CSV格式,用于Dygraph展示数据。

----------------------------------------------------------------------
// InfoTable2CSV: Service to convert InfoTable to CSV, to display data into Dygraph widget
// Input: myInfoTable:InfoTable without DataShape
// Output: TEXT
// Note 1: The name of Datetime field is always 'TIME', which is 1st field for Dygraph
// Note 2: TIME values will be converted into dateFormatISO to match Dygraph requirement

var iLF;
var tmp = 'TIME';
var i = 0;
var fd = []; // array to store Fields
fd[0] = 'TIME';

// Get CSV Header
if ((myInfoTable.dataShape===null)||(myInfoTable.dataShape===undefined)) {
   iLF = myInfoTable.ToJSON().dataShape.fieldDefinitions;
 } else {
   iLF = myInfoTable.dataShape.fields;
 }
for (var key in iLF) {
if(key != 'TIME') {
        i = i + 1;        
        fd[i] = key; // Store field sequence
        tmp = tmp + ',' + key;
}
    //Logger.info("Field Name "+key+" baseType: "+iLF[key].baseType);
}
tmp = tmp + ' \n';

// Get CSV Data
var tableLength = myInfoTable.rows.length;
for (var x=0; x < tableLength; x++) {
    var row = myInfoTable.rows[x];
    tmp = tmp + dateFormatISO(row.TIME);  // Get TIME Value 

    var fd2 = []; // To output data in sequence
    for (var property in row) {
    tmp2 = property; //row property
        tmp3 = row[property]; //row value
        var j = fd.indexOf(tmp2);
        fd2[j] = tmp3;
    }
    
    for (var k=1; k
        tmp = tmp + ',' + fd2[k];
    }    
    tmp = tmp + ' \n';
}

var result = tmp;
----------------------------------------------------------------------

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小组件。



2019年7月10日

ThingWorx的大数据分析工具


ThingWorx是目前较为流行的工业物联网数据集成、分析、开发平台。
在业务方面,工艺实时数据有较大的分析价值,也符合大数据的分析特点。
本文介绍一下其大数据分析工具。
1.     数据存储
要对实时数据进行大数据分析,需要在创建Thing的时候满足以下条件:
1)     Thing指定Value Stream
Value Stream是存储数据的实体,其配置的Persistence Provider对应物理数据库,可以是内置的ProgreSQL数据库,也可以是支持ODBC的其它主流数据库。
2)     对于要追踪的属性打勾Logged选项
此选项在属性的值发生变化时,自动向Value Stream插入记录。

PostgreSQL中使用以下SQL可以查询数据:
---------------------------------------------------------------------
SELECT * FROM value_stream
WHERE ENTITY_ID = 'ValueString_KBSZ_MM'             -- Value Stream Name
AND source_id = 'KBSZ_DEMO_MM21_THING'           -- Thing Name
AND PROPERTY_NAME = 'Main_Speed'              -- Property Name
AND TIME > to_timestamp(EXTRACT(EPOCH FROM NOW())- 2*24*3600)  -- 2 days earlier till now
ORDER BY time --DESC
---------------------------------------------------------------------

2.     数据分析工具之Time Series Chart
要将ThingProperty数值传递给Mashup,通常通过这2ServiceGetPropertiesQueryPropertyHistory,前者传递当前值,后者传递历史数据。
QueryPropertyHistory有以下几个输入参数:
-       startDate,起始时间
-       endDate,结束时间
-       maxItems,记录数,相当于SQL中的TOP/LIMIT
-       oldestFirst,排序方式,相当于ORDER BY TIME ASC
-       query,过滤条件,相当于追加WHERE语句
然后把输出条件中的All Data绑定到Time Series ChartDataSource,然后设定:
-       NumberOfSeries,参数个数
-       DataSourceX.DataFieldX,纵坐标,选择对应的Property
-       DataSourceX.XAxisFieldX,横坐标,选择timestamp
需要说明的是,QueryPropertyHistory返回的是符合条件的查询结果数据集,因此结果集越大,查询越慢。
此外,Time Series Chart加载了QueryPropertyHistory结果集的所有数据,因此结果集越大,显示越慢。
因此,要慎重设定查询参数,特别是startDate/endDate/maxItems


3.     数据分析工具之Dygraph Chart
PTC ThingWorx Manufacturing Apps提供了PTC.Factory.TrendManagementUtils,其GetJSONStringTrendHistory方法可以将属性的历史值转换成JSON格式。
然后配合Dygraph Chart,可以实现数据的动态加载。
具体实现方式为:
1)     Manufacturing Apptrending and troubleshooting设定追踪项,记录Trend Name
2)     Mashup中加载GetJSONStringTrendHistory方法,将displayId设为步骤1Trend Name。并设置startDate/endDate等其它参数。
3)     Mashup中将GetJSONStringTrendHistory绑定到dygraphchartwidget,将Data映射为JSONData,将TrendNameX映射为DataLabelX
我们注意到,在GetJSONStringTrendHistory方法中并没有maxItems参数,在dygraphchartwidget中也不可设置时间。
这是因为GetJSONStringTrendHistory查询得到了所有符合条件的数据集,此数据集以JSON字符串的形式予以输出。
dygraphchartwidget得到JSON数据后,根据数据的特点动态地予以展示,因此数据集的大小不会影响显示的时间。
我们从PTC的文档可以看到,Dygraph Chart采用了开源的JavaScriptdygraphs,具体使用可参考ThingWorx Apps自定义指南的第21章。



2019年7月2日

谈谈840D机床的联网


SINUMERIK 840D(SL)是西门子广受好评的CNC自动化控制系统,它和SINAMICS S120内置式变频器组合,广泛应用于高端机床和加工中心。
近几年来,随着工业互联网和工业4.0的发展,对机床联网以实现监控和数采的需求也越来越多。
本文试谈谈840D机床的联网。

一、硬件
840D(SL)的控制单元(Control Unit)包括:NCUPCUTCU
NCUNumeric Control Unit(数控单元),是控制系统的核心。
NCU又包含了Linux内核、PLC CPUPLC通信卡(840D SL)等模块。
其中Linux内核从CF卡加载,PLC CPU采用S7-300标准PLCPLC通信卡即CP343-1系列通信模块。
PCUPC Client Unit(PC客户端),采用工业PC,内置WindowsLinux操作系统。
TCUThin Client Unit(瘦客户端),通过VNC软件远程运行Linux内核程序。


二、联网
840D包含了MPIProfiBus等接口。其中ProfiBus又包括DP IntegratedDP Master接口。DP Integrated是内核与SINAMICS S120通信的专用接口,DP Master用于连接外围设备如PCUTCU、远程I/O等。MPI是编程专用接口。
除了以上接口外,840D SL还增加了ProfiNet(X150)EtherNet(X120/X127/X130)接口。
ProfiNet可连接工业交换机、远程I/O等,其默认IP地址是192.168.0.1
X120用于连接PCUTCU,其默认IP地址是192.168.214.1
X127用于连接工程师电脑,来进行PLC组态及下载,其默认IP地址是192.168.215.1
X130用于连接工厂网络(IT网络),通常接到IT交换机上,由IT交换机分配IP地址。
因此对于840D SL,我们可以直接将X130接入IT网络,以实现机床的联网。
840D NCU并没有提供以太网口,要联网可以采用以下两种方式。
方式1:增加CP343-1通信模块。
CP343-1S7-300系列PLC的以太网通信模块,在组态后,可以为PLC CPU分配一个以太网IP地址。此模块性能好非常稳定,但是需要组态及下载PLC,价格也较高,单价1万多。
方式2:增加MPI-EtherNet转换头。
德国Hilscher公司提供了NetLink商标的MPI-EtherNet转换头,能够将MPI协议转换成S7 TCP/IP协议,且无须组态,价格约4000元。NetLink提供了一个网页服务器,用于配置MPI参数和IP地址。替代产品有德国DeltalogicNetLink和国内大连德嘉的ETH-MPI(DP)



三、应用
840D(SL)的硬件我们可以看出,机床的控制分为文件控制和逻辑控制两大块,文件控制通过Windows/Linux操作系统实现,逻辑控制通过PLC实现。
因此,IT系统在与机床联网时,可以进行针对性的设计。
如果我们要向机床传加工程序,或者采集加工日志,则可以通过操作系统实现,比如文件共享、FTP、串口连接等。
如果我们要采集机床的状态、故障、工艺参数,则可以通过PLC实现,比如通过Kepware连接NCU PLC,或者通过OPC Client连接机床内置的OPC-UA服务器。