SIEMENS, DF&PD

Предыдущее посещение: Ср июн 29, 2016 12:57 Текущее время: Ср июн 29, 2016 12:57

Часовой пояс: UTC + 3 часа




 [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 29, 2012 6:34 
Не в сети
Известный Писатель

Зарегистрирован: Вт май 02, 2006 5:02
Сообщения: 355
Eugene1974 писал(а):
Что за ТТХ у компьютера, который способен на это?

Intel Core 2 Quad Q9650 3ГГц 2ГБ ОЗУ WinXP 32 SP2
WinCC 7.0.3.0

В момент запроса загрузка процессора ~ 38% (98 процессов) 1,3ГБ памяти
Пиковое использование памяти sqlservr 177160 КБ
Пиковое использование памяти script 114496 КБ
Пиковое использование памяти CCTlgServer 68208 КБ
Пиковое использование памяти PdlRt 63544 КБ

Подсчет времени производился скриптом для:

Код:
   timer = GetTickCount();
      TLGConnect (NULL, &Error );
      TLGGetArchivDataEx ("PVA", "NewTag_4", &stStart, &stStop, &pTlgData, &dwNumberOfData, &dwFlags, &Error );
      pTlgData2 = SysMalloc(sizeof(TLG_ARCHIVDATARAW)*dwNumberOfData);
      memcpy(pTlgData2, pTlgData, sizeof(TLG_ARCHIVDATARAW)*dwNumberOfData);
      TLGFreeMemory (pTlgData);
      TLGDisconnect (&Error );
   timer = GetTickCount() - timer;


Остановки работы других скриптов не наблюдается.

Специально дождался юбилейной цифры:
> миллиона записей: Время 3с 328мс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 29, 2012 13:45 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7508
Откуда: Украина
Последний вопрос:-)

Если убрать из примера бесполезный в данном случае код
Код:
pTlgData2 = SysMalloc(sizeof(TLG_ARCHIVDATARAW)*dwNumberOfData);
memcpy(pTlgData2, pTlgData, sizeof(TLG_ARCHIVDATARAW)*dwNumberOfData);
насколько велика разница?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 29, 2012 13:52 
Не в сети
Известный Писатель

Зарегистрирован: Вт май 02, 2006 5:02
Сообщения: 355
Eugene1974 писал(а):
Последний вопрос:-)
насколько велика разница?

Ни насколько :)
Разница в пределах погрешности-занятости сервера ±150ms. "Чистого" эксперимента, без помех я создать не могу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс май 19, 2013 18:09 
Не в сети
Известный Писатель

Зарегистрирован: Пн ноя 15, 2010 6:41
Сообщения: 322
Откуда: Томск
Спрошу в данной теме, цель похожа.
Хочу суммировать значения ряда архивных тегов в определенном периоде.
Воспользовался функцией, что любезно предоставили в данной теме.

Кусок кода:
Код:
  if (TLGConnect(NULL, &Error)) // Соединение с базой
  {
   // Суммирование компонента 1
     TLGGetArchivDataEx("CompArc", "C1PV", &stFrom, &stTo, &Raw, &Number, &dwFlags, &Error);
          for ( i=1; i<=Number; i++)
          {
               Sum+= (float)Raw[i].doValue;
          }
      SetTagFloat("C1Sum", Sum);
      Sum = 0;

   // Суммирование компонента 2
     TLGGetArchivDataEx("CompArc", "C2PV", &stFrom, &stTo, &Raw, &Number, &dwFlags, &Error);
          for ( i=1; i<=Number; i++)
          {
               Sum+= (float)Raw[i].doValue;
          }
      SetTagFloat("C2Sum", Sum);
      Sum = 0;

........

}
TLGFreeMemory(Raw);
TLGDisconnect(NULL); // Отсоединяемся от базы
}


Всего суммирований 11, код однотипный, меняется лишь номер переменной. Проверял, перепроверял - в имени переменных ошибок нет.
Проблема в том, что суммирование проходит только по 2й переменной, и не в периоде, а все значения в архиве.
Код висит на кнопке, по нажатию оператору выводится сумма за период.
Наполнение переменных stFrom и stTo перепроверял, вроде ошибок нет. Дату/время беру из Microsoft DTPicker, VBS скриптом переношу в локальные теги типа Unsigned 16Bit Value. Получаемую дату/время выводил на экран, совпадает.
Значения в архивных тегах есть, не нулевые.
Что я делаю не так? Хелп.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн май 20, 2013 10:30 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7508
Откуда: Украина
По приведенному коду мало что можно сказать определённо. Как объявлены переменные stFrom, stTo, Raw, Number, dwFlags, Error?


Цитата:
Наполнение переменных stFrom и stTo перепроверял, вроде ошибок нет. Дату/время беру из Microsoft DTPicker, VBS скриптом переношу в локальные теги типа Unsigned 16Bit Value.

Переменные stFrom и stTo должны быть типа SYSTEMTIME...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн май 20, 2013 13:49 
Не в сети
Известный Писатель

Зарегистрирован: Пн ноя 15, 2010 6:41
Сообщения: 322
Откуда: Томск
Объявление переменных:
Код:
SYSTEMTIME stFrom, stTo;
  PTLG_ARCHIVDATARAW Raw;
  DWORD dwFlags = 0;
  DWORD Number = 0;
  FLOAT Sum = 0;
  CMN_ERROR Error;
  int i;

Пример переменной для наполнения stFrom и stTo
Код:
  WORD Start_Year = GetTagWord("R1StartYear");

"R1StartYear" - в нее пихаю как раз VBS скриптом поле Year из Microsoft DTPicker.

Наполнение переменных stFrom и stTo
Код:
// Наполнение stFrom - точки начала отсчета
   stFrom.wYear = Start_Year;
   stFrom.wMonth = Start_Month;
   stFrom.wDay = Start_Day;
   stFrom.wHour = Start_Hour;
   stFrom.wMinute = Start_Minute;
   stFrom.wSecond = Start_Second;

// Наполнение stFrom - точки конца отсчета
   stTo.wYear = Finish_Year;
   stTo.wMonth = Finish_Month;
   stTo.wDay = Finish_Day;
   stTo.wHour = Finish_Hour;
   stTo.wMinute = Finish_Minute;
   stTo.wSecond = Finish_Second;

Основа кода взята из примера в данной теме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 21, 2013 18:15 
Не в сети
Известный Писатель

Зарегистрирован: Пн ноя 15, 2010 6:41
Сообщения: 322
Откуда: Томск
Вопрос закрыт.
Оказался виноват сам, "смотрю в книгу, вижу фигу". Код рабочий, описку не увидел :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 07, 2013 10:13 
Не в сети
Новый писатель

Зарегистрирован: Вт окт 25, 2011 9:15
Сообщения: 22
Maksim.Rakshin писал(а):
Вопрос закрыт.
Оказался виноват сам, "смотрю в книгу, вижу фигу". Код рабочий, описку не увидел :(


Где у него описка?) а то тоже не работает(((
Код:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SYSTEMTIME stFrom, stTo;
  PTLG_ARCHIVDATARAW Raw;
  DWORD dwFlags = 0;
  DWORD Number = 0;
  FLOAT Sum = 0;
  CMN_ERROR Error;
  int i;
 
WORD Start_Year = GetTagWord("R1StartYear");
WORD Start_Month = GetTagWord("R1StartMonth");
WORD Start_Day = GetTagWord("R1StartDay");
WORD Start_Hour = GetTagWord("R1StartHour");
WORD Start_Minute = GetTagWord("R1StartMinute");
WORD Start_Second = GetTagWord("R1StartSecond");


WORD Finish_Year = GetTagWord("R1FinishYear");
WORD Finish_Month = GetTagWord("R1FinishMonth");
WORD Finish_Day = GetTagWord("R1FinishDay");
WORD Finish_Hour = GetTagWord("R1FinishHour");
WORD Finish_Minute = GetTagWord("R1FinishMinute");
WORD Finish_Second = GetTagWord("R1FinishSecond");



// Íàïîëíåíèå stFrom - òî÷êè íà÷àëà îòñ÷åòà
   stFrom.wYear = Start_Year;
   stFrom.wMonth = Start_Month;
   stFrom.wDay = Start_Day;
   stFrom.wHour = Start_Hour;
   stFrom.wMinute = Start_Minute;
   stFrom.wSecond = Start_Second;

// Íàïîëíåíèå stFrom - òî÷êè êîíöà îòñ÷åòà
   stTo.wYear = Finish_Year;
   stTo.wMonth = Finish_Month;
   stTo.wDay = Finish_Day;
   stTo.wHour = Finish_Hour;
   stTo.wMinute = Finish_Minute;
   stTo.wSecond = Finish_Second;

if (TLGConnect(NULL, &Error)) // Ñîåäèíåíèå ñ áàçîé
  {
   // Ñóììèðîâàíèå êîìïîíåíòà 1
      TLGGetArchivDataEx("ProcessValueArchive", "SMENA", &stFrom, &stTo, &Raw, &Number, &dwFlags, &Error);
          for (  i=1; i<=Number; i++)
          {
               Sum+= (float)Raw[i].doValue;
          }
      SetTagFloat("C1Sum", Sum);
      Sum = 0;

   

}
TLGFreeMemory(Raw);
TLGDisconnect(NULL); // Îòñîåäèíÿåìñÿ îò áàçû
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Вт сен 08, 2015 14:50 
Не в сети
Новый писатель

Зарегистрирован: Пт ноя 07, 2014 13:41
Сообщения: 31
barracuda писал(а):
barracuda писал(а):
сейчас попробую записать больше 10т и прочитать на 7-е, отпишусь

На данный момент в базе более 500 000 записей, и все они выдаются за один вызов функции


Доброго времени суток!
Опишите по подробней или киньте пример пожалуйста.
Что то не выходит вывести >10к записей. Поделитесь секретом
WinCC 7.0.3 upd 5.

Часть программы:
if (TLGConnect(NULL, &Error))
{
for(ii=0;ii<25;ii++)
{
Number[ii]=1440*TimeTo.wDay;
if (!TLGGetArchivDataEx(lpszArchivName[ii], lpszVar[ii], &TimeFrom, &TimeTo, &Raw[ii], &Number[ii], &dwFlags, &Error))
{
printf("Не читается %s \n",Error.szErrorText);
TLGDisconnect (&Error);
return ;
}
else
{
printf("Считано %d\n",lpszVar[ii],Number[ii]);
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 29 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: nick_user и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group