? ? ? ? ?最近因为业务需要,研究了一下如何从霍尼韦尔的PHD实时库读取数据,这个玩意跟平常用的数据库Oracle,Sqlserver,Mysql都不太一样,网上几乎搜不到任何资料。至于为什么资料这么少,我也不太明白,大概是这个东西仅仅在自动化行业有应用吧。
? ? ? ? 经过各种努力,又是百度,又是电话,一番瞎整。终于明白一点点了,读PHD实时库有三种方式,一是从PHD的OPC服务读取数据,二是让霍尼单独提供webservice,三是自己写程序通过PHD所提供的动态库phdapinet.dll。OPC读数点不能太多,而且也不是特别稳定。webservice是单独开发,明显是需要单独付费。所以第三种方式是最好的。
? ? ? ?既然是最好的方式,就没啥研究的了,不过写代码之前还得做一件事情,在我们采集程序的前置机上必须安装PHD客户端Modtag,网上下载直接安装即可。
? ? ? 如上图就算可以了,注意在你开发环境可以不装,只是编译不运行就可以。
? ? ?动态库的方式开发语言是c#,据说JAVA和C++可以,但是没实战过。话不多说,直接开撸。
C#语言开发,首先当然是 using,代码简单。
using System;
using System.Data;
using System.Collections.Concurrent;
using System.Text;
using Uniformance.PHD;
? ?这里写点简单调用代码,就一个方法,相信大家都能看懂。?
public static string GatherTest()
{
PHDHistorian oPhd = new PHDHistorian();
PHDServer defaultServer = new PHDServer("127.0.0.1"); // phdAddress 地址
defaultServer.APIVersion = SERVERVERSION.RAPI200;
oPhd.DefaultServer = defaultServer;
oPhd.StartTime = "now";
oPhd.EndTime = "now";
oPhd.Sampletype = SAMPLETYPE.Snapshot;
oPhd.SampleFrequency = 300;
try
{
string[] tagArray = "abc.123;abc.002".Split(';');
Tags tags = new Tags();
foreach(string tag in tagArray)
{
tags.Add(new Tag(tag));
}
StringBuilder sb = new StringBuilder();
DataSet ds = oPhd.FetchRowData(tags);
if (ds == null || ds.Tables == null || ds.Tables.Count == 0)
{
return string.Concat("测点", "abc.123;abc.002","无数据");
}
foreach (DataRow dr in ds.Tables[0].Rows)
{
sb.Append("TagName:" + dr["TagName"]);
sb.Append("Value:" + dr["Value"]);
sb.Append("TimeStamp:" + dr["TimeStamp"]);
sb.Append("Confidence:" + dr["Confidence"]);
}
return sb.ToString();
}
catch (Exception e)
{
//LogHelper.WriteLog("获取数据失败" + e.Message);
return "获取数据失败" + e.Message;
}
finally
{
oPhd.Dispose();
}
}
? ?相信大家都能运行起来,简单得都不想说了啥了。这个代码只是演示两个点,在实际生产环境大概有2万点多,如下代码。
Tags oTags = new Tags();
//增加测点
DataSet ds = oPhd.FetchRowData(oTags);
? 运行正常,如需帮助,可以留言。
|