Search code examples
c#oledbproficyhistorian

How do I query raw data from a Proficy Historian?


How can I retrieve raw time-series data from a Proficy Historian/iHistorian?

Ideally, I would ask for data for a particular tag between two dates.


Solution

  • There are several different sampling modes you can experiment with.

    • Raw
    • Interpolated
    • Lab
    • Trend
    • Calculated

    These modes are available using all of the following APIs.

    • User API (ihuapi.dll)
    • SDK (ihsdk.dll)
    • OLEDB (iholedb.dll)
    • Client Acess API (Proficy.Historian.ClientAccess.API)

    Of these the trend sampling mode is probably what you want since it is specifically designed for charting/trending. Though, lab and interpolated may be useful as well.

    Read the electronic book for more information on each sampling mode. On my machine it is stored as C:\Program Files\GE Fanuc\Proficy Historian\Docs\iHistorian.chm and I have version 3.5 installed. Pay particular attention to the following sections.

    • Using the Historian OLE DB Provider
    • Advanced Topics | Retrieval

    Here is how you can construct an OLEDB to do trend sampling.

    set 
        SamplingMode = 'Trend',
        StartTime = '2010-07-01 00:00:00',
        EndTime = '2010-07-02 00:00:00',
        IntervalMilliseconds = 1h
    select 
        timestamp, 
        value, 
        quality 
    from 
        ihRawData 
    where 
        tagname = 'YOUR_TAG'
    

    Showing the equivalent methods using the User API and the SDK are complex (more so with the User API) since they require a lot of plumbing in the code to get setup. The Client Access API is newer and uses WCF behind the scenes.

    By the way, there are a few limitations with the OLEDB method though.

    • Despite what the documentation says I have never been able to get native query parameters to work. That is a showstopper if you want to use it with SQL Server Reporting Services for example.
    • You cannot write samples into the archive or in any way make changes to the Historian configuration including adding/changing tags, writing messages, etc.
    • It can be a little slow in some cases.
    • It has no provision for crosstabbing multiple tagnames into the columns and then carrying forward samples so that a value exists for each timestamp and tag combination. The trend sampling mode gets you halfway there, but still does not crosstab and does not actually load raw samples. Then again the User API and SDK cannot do this either.