Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Proficy Historian查询[大]数据记录?_Python_Win32com_Historian_Proficy - Fatal编程技术网

Python 从Proficy Historian查询[大]数据记录?

Python 从Proficy Historian查询[大]数据记录?,python,win32com,historian,proficy,Python,Win32com,Historian,Proficy,我将Proficy Historian SDK与python27一起使用。我可以创建一个数据记录对象,添加查询条件属性(样本类型、开始时间、结束时间、样本间隔-以毫秒为单位),并使用datarecord.QueryRecordset()执行查询 我面临的问题是,方法QueryRecordset似乎只用于返回少量数据集(最多几百条记录),即一个小的日期范围,否则它不会返回任何SCADA标记的结果。有时,我可以通过缓慢地确定日期范围来让它返回更多(几千)条记录,但这似乎不可靠。那么,有没有一种方法可

我将Proficy Historian SDK与python27一起使用。我可以创建一个数据记录对象,添加查询条件属性(样本类型、开始时间、结束时间、样本间隔-以毫秒为单位),并使用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()

可能出现的一个问题是在dd/mm/yyyy hh:mm格式中使用日期/时间。创建pytime或datetime对象时,在分配到drecord.Criteria.StartTime和drecord.Criteria.EndTime之前和之后,各个属性(例如年、日、月、小时、分钟)都是正确的,但是当我打印变量时,它总是以mm/dd/yyyy hh:mm格式显示,但这可能是由于对象的strrepr方法造成的。

因此,有两个属性可以调整,以增加返回的样本数和超时发生前的时间。这两个属性都是在服务器对象(ihApp)上设置的:

增加这两个值似乎可以解决我的问题。某些标记显然比其他标记需要更长的查询时间(在相同的时间段和相同的采样方法),因此增加最大查询时间有助于使返回的查询数据更可靠

当QueryRecordset()完成时,如果出现错误且未填充任何数据记录,则返回False。错误类型可通过以下方式显示:

drecord.LastError

我不知道你在说什么,但无论如何,好问题。我明天回来工作时会添加一些代码。与此同时,我的问题是沿着延伸所展示内容的路线
drecord.LastError