Бета тестирование версии 4.4

Avatar
  • обновлен
Сюда постим все, что касается тестирования версии 4.4:
ошибки, недоработки, пожелания.
Avatar
Михаил
Добрый день.
Не работает пример с функцией получения из под скрипта времени работы оборудования.
Avatar
SIMP Tech (Сергей)
Добрый день.

Не работает пример с функцией получения из под скрипта времени работы оборудования.

Данные в БД есть? Скрипт не отдает расчетных значений?
Avatar
Михаил
На графике виртуальную переменную вижу.
скрипт выдает нули.
Avatar
SIMP Tech (Сергей)
На графике виртуальную переменную вижу.

Ок. Скиньте проект на почту, посмотрим.
Avatar
Михаил
Отправил
Avatar
SIMP Tech (Сергей)
Отправил

Хорошо.Пока нет письма. Ждем.
Avatar
SIMP Tech (Сергей)
Отправил

Хорошо. Пока нет письма. Ждем.
Avatar
Михаил
Писмо в 12 метров.
Avatar
Михаил
РАБОТАЮЩИЙ ПРИМЕР
{Пример вычисления времени работы и простоя насосов}
var
date1, date2: TDateTime;
val: TDateTime;
resOn, resOff: integer;
posit: string;
val1:word;
const
FORMAT_RESULT = '%d дней, %d час. %d мин. %d сек.';

// перевод из секунд в дни ,часы,минуты и секунды
function GetTimeString(ASec: integer): string;
var
sec: integer;
day, hour, min: word;
begin
sec := ASec;
// кол - дней
day := Trunc(sec / 86400);
if day <> 0 then
sec := sec - (day * 86400);

// кол - часов
hour := trunc(sec / 3600);
if hour <> 0 then
sec := sec - (hour * 3600);

// кол - минут
min := trunc(sec / 60);
if min <> 0 then
sec := sec - (min * 60);

result := Format(FORMAT_RESULT, [day, hour, min, sec]);
end;

begin
val := ReadValue('Расчет');
val1 := ReadValue('Сигнальный');
posit := ReadValue('Combo');
// reset input
if val = -1 then
begin
WriteValue(' Сигнальный ',0);
date1 :=0;
date2 := 0;
WriteValue('D1',date1);
WriteValue('D2',date2);
Exit;
end
else
if (date1=0) and (val > 0) then
begin
date1 := val;
WriteValue('D1',date1);
WriteValue(' Сигнальный ',1);
WriteValue(‘Расчет ', 0);
Exit;
end
else
if (date2=0) and (val > 0) then
begin
date2 := val;
WriteValue('D2',date2);
WriteValue(' Сигнальный ',2);
WriteValue(' Расчет ',0);
Exit;
end
else
if val = -2 then
begin
if date1 > date2 then
begin
date1 := 0;
date2 := 0;
WriteValue(' Сигнальный ',0);
WriteValue(' Расчет ',0);
WriteValue('D1',date1);
WriteValue('D2',date2);
Exit;
end;
if ((val = -2)and (date1 < date2) ) then
//posit := ReadValue('Combo');

if (posit = 'Насос 1') then
begin
GetOperationTimeValueFromDB(date1, date2, 'Skvajina1', resOn, resOff);
WriteValue('работал 1', GetTimeString(resOn));
WriteValue('не работал 1', GetTimeString(resOff));
WriteValue(' Сигнальный ',3);
end
else
if (posit = 'Насос 2') then
begin
GetOperationTimeValueFromDB(date1, date2, 'Skvajina2', resOn, resOff);
WriteValue(' работал 2', GetTimeString(resOn));
WriteValue('не работал 2', GetTimeString(resOff));
WriteValue(' Сигнальный ',4);
end
else
if (posit = 'Насос 3')then
begin
GetOperationTimeValueFromDB(date1, date2, 'Skvajina3', resOn, resOff);
WriteValue(' работал 3', GetTimeString(resOn));
WriteValue('не работал 3', GetTimeString(resOff));
WriteValue(' Сигнальный ',5);
end;
CloseMnemo('Test');
end;
end.

Все каналы виртуальные

Сигнальный – word;
Расчет – (Cкрипт по таймеру) – DateTime;
Работал – string;
Не работал – string;
Инициализация – (скрипт по таймеру) Double;
Combo – string;
Насос 1 – Bool;
Насос 2 - Bool;
Насос 3 - Bool;

Остальное как в примере http://simplight.ru/files/4.4/time_EQ_example.slz
Скачивать методом – «Сохранить объект как»
Avatar
Добрый день!

Разрешите тоже задать вопрос по скрипту.
Задался целью доставать из базы статистическую информацию.
Набросал примерную функцию:
// Функция чтения базы данных и запись статистических данных в текстовый файл
// возвращает 1 при удачном завершении, соответственно 0 - при неудаче
// i = Statistika("Сигнальный", "10.06.2015 01:00:00", "10.06.2015 03:00:00");
// if(i==1) {ShowMessageBox("—","Всё готово!",1);} else {ShowMessageBox("—","Произошла ошибка!",1);}
int Statistika(string sName, string sBegin, string sEnd)
{
string stroka;
int count=0, i, iValue, iVozvrat=1;
TMemoryStream Stream;
word error;

TDateTime dtBegin = StrToDateTime(sBegin);
TDateTime dtEnd = StrToDateTime(sEnd);
TDateTime dtDate;

ShowMessageBox("—", "Приступаем!", 1);

Stream = TMemoryStream.Create;
error = StreamReadFromDatabase(dtBegin, dtEnd, sName, Stream);
if(error == 0)
{
count = GetCountRecordToStream(Stream);
for(i=0;i<count;i++)
{
GetValueFromStream(Stream, dtDate, iValue);
stroka = " " + DateTimeToStr(dtDate) + " : " + IntToStr(iValue);
SaveToTxtFile("d:\\history.txt", stroka);
}
}
else { ShowMessageBox("—", "Ошибка считывания базы!", 1); iVozvrat=0; }
Stream.free;
return iVozvrat;
}

в результате работы получаю текстовый файл с таким содержимым:

30.12.1899 : 0
17.03.1900 : 77
30.12.1899 : 0
17.03.1900 : 77
30.12.1899 : 0

Не подскажите, в чем проблема?

С уважением, Кондратенко Анатолий
Новочеркасск