3

私は python27 で Proficy Historian SDK を使用しています。データ レコード オブジェクトを作成し、クエリ条件属性 (サンプル タイプ、開始時間、終了時間、サンプル間隔 - ミリ秒単位) を追加し、datarecord.QueryRecordset() を使用してクエリを実行できます。

私が直面している問題は、メソッド QueryRecordset が少数のデータセット (最大で数百レコード)、つまり小さな日付範囲を返す場合にのみ機能するように見えることです。それ以外の場合は、SCADA タグの結果が返されません。日付範囲をゆっくりとインクリメントすることで、より多くの (数千の) レコードを返すことができる場合もありますが、信頼性がないようです。それで、これを修正する方法、またはクエリを実行または設定する別の方法はありますか? 私のクエリのほとんどには、複数のタグが含まれています。それ以外の場合は、クエリを連続して実行するか、日付範囲をスライドさせて、一度に数百のレコードを取得する必要があると思います。

更新: 次の手順を使用してクエリを実行しています。

from win32com.client.gencache import EnsureDispatch
from win32com.client import constants as c
import datetime

ihApp = EnsureDispatch('iHistorian_SDK.Server')
drecord = ihApp.Data.NewRecordset()
drecord.Criteria.Tags = ['Tag_1', 'Tag_2', 'Tag_3']
drecord.Criteria.SamplingMode = c.Calculated
drecord.Criteria.CalculationMode = c.Average
drecord.Criteria.Direction = c.Forward
drecord.Criteria.NumberOfSamples = 0 # This is the default value
drecord.Criteria.SamplingInterval = 30*60*1000 # 30 min interval in ms
# I've tried using the win32com pytime type instead of datetime, but it
# doesn't make a difference
drecord.Criteria.StartTime = datetime.datetime(2015, 11, 1)
drecord.Criteria.EndTime = datetime.datetime(2015, 11, 10)

# Run the query
drecord.Fields.Clear()
drecord.Fields.AllFields()
drecord.QueryRecordset()

発生する可能性のある問題の 1 つは、dd/mm/yyyy hh:mm 形式での日付/時刻の使用です。pytime または datetime オブジェクトを作成すると、年、日、月、時、分などの個々の属性は、drecord.Criteria.StartTime および drecord.Criteria.EndTime への割り当ての前後ですべて正しくなりますが、変数を出力すると常に表示されます。 mm/dd/yyyy hh:mm 形式で出力されますが、これはおそらくオブジェクトのstrまたはreprメソッドによるものです。

4

1 に答える 1