Это определенно возможно. Все инструменты есть. Здесь ведутся дискуссии: https://github.com/davidhalter/jedi-vim/issues/870 .
ИМО нужен патч для джедая, который использует jedi.api.environment.InterpreterEnvironment
в некоторых случаях, таких как ваш. Это определенно возможно, это просто глючит в данный момент.
Есть несколько различных режимов выборки, с которыми вы можете поэкспериментировать.
Эти режимы доступны с использованием всех следующих API.
Из них тенденция Вероятно, вам нужен режим выборки, поскольку он специально разработан для построения графиков / трендов. Хотя лабораторные и интерполированные тоже могут быть полезны.
Прочтите электронную книгу для получения дополнительной информации о каждом режиме выборки. На моей машине он хранится как C: \ Program Files \ GE Fanuc \ Proficy Historian \ Docs \ iHistorian.chm
, и у меня установлена версия 3.5. Обратите особое внимание на следующие разделы.
Вот как вы можете построить OLEDB для выполнения выборки тренда.
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'
Отображение эквивалентных методов с использованием пользовательского API и SDK является сложным (особенно с пользовательским API), поскольку для их настройки требуется много врезки в код. API клиентского доступа новее и негласно использует WCF.
Между прочим, у метода OLEDB есть несколько ограничений.
Мой коллега соединил это:
В web.config:
<add name="HistorianConnectionString"
providerName="ihOLEDB.iHistorian.1"
connectionString="
Provider=ihOLEDB.iHistorian;
User Id=;
Password=;
Data Source=localhost;"
/>
В слое данных:
public DataTable GetProficyData(string tagName, DateTime startDate, DateTime endDate)
{
using (System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection())
{
cn.ConnectionString = webConfig.ConnectionStrings.ConnectionStrings["HistorianConnectionString"];
cn.Open();
string queryString = string.Format(
"set samplingmode = rawbytime\n select value as theValue,Timestamp from ihrawdata where tagname = '{0}' AND timestamp between '{1}' and '{2}' and value > 0 order by timestamp",
tagName.Replace("'", "\""), startDate, endDate);
System.Data.OleDb.OleDbDataAdapter adp = new System.Data.OleDb.OleDbDataAdapter(queryString, cn);
DataSet ds = new DataSet();
adp.Fill(ds);
return ds.Tables[0];
}
}
Обновление:
Это работало хорошо, но мы столкнулись с проблемой с тегами, которые не обновляют очень часто. Если бы тег не обновил около запуска или конца требуемого startDate и endDate, то тенденции выглядели бы плохо. Хуже, все еще были случаи, где не было никаких явных точек во время окна, которое требуют - мы не вернем данных.
Я разрешил это путем создания трех запросов:
Это - потенциально неэффективный способ сделать это, но Это Работы:
public DataTable GetProficyData(string tagName, DateTime startDate, DateTime endDate)
{
DataSet ds = new DataSet();
string queryString;
System.Data.OleDb.OleDbDataAdapter adp;
using (System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection())
{
cn.ConnectionString = proficyConn.ConnectionString;
cn.Open();
// always get a start value
queryString = string.Format(
"set samplingmode = lab\nselect value as theValue,Timestamp from ihrawdata where tagname = '{0}' AND timestamp between '{1}' and '{2}' order by timestamp",
tagName.Replace("'", "\""), startDate.AddMinutes(-1), startDate);
adp = new System.Data.OleDb.OleDbDataAdapter(queryString, cn);
adp.Fill(ds);
// get the range
queryString = string.Format(
"set samplingmode = rawbytime\nselect value as theValue,Timestamp from ihrawdata where tagname = '{0}' AND timestamp between '{1}' and '{2}' order by timestamp",
tagName.Replace("'", "\""), startDate, endDate);
adp = new System.Data.OleDb.OleDbDataAdapter(queryString, cn);
adp.Fill(ds);
// always get an end value
queryString = string.Format(
"set samplingmode = lab\nselect value as theValue,Timestamp from ihrawdata where tagname = '{0}' AND timestamp between '{1}' and '{2}' order by timestamp",
tagName.Replace("'", "\""), endDate.AddMinutes(-1), endDate);
adp = new System.Data.OleDb.OleDbDataAdapter(queryString, cn);
adp.Fill(ds);
return ds.Tables[0];
}
}
И да, я знаю, те запросы должны быть параметризованы.
Майкл - в IP21 есть «интерполированная» таблица, а также «фактическая» таблица точек данных. У вас тоже есть что-то?