Ваши комментарии

Отлично. На данный момент предлагаем нашему заказчику вариант HMI интерфейса на компьютере с Линукс. Пока рассматривают наше предложение. По факту их ответа будем двигаться дальше.
Но может и на другом объекте тоже реализуем такой вариант.

Хотелосьбы узнать результат по реализации на Линукс.

Спасибо!!!
Скачал, обновил, всё работает прекрасно и, похоже, даже быстрей.

За пять шагов- жму крепко пять!    

Спасибо, понятно, всё получилось!  

Жаль. нигде в документации этого не встретилось.

Если я добавляю в репорте, он его не видит. А как это сделать в каналах??

Это я уже понял, Спасибо. Но как в демо добавить его???

Добрый день!

Та же ерунда - время повторяется дважды просто на панелях и при формировании списка. С вашими изменениями. Проект и инструкцию прикладываю

Запустить мнемо "толчок22", 

нажать несколько раз (~10-12)  кн "толчок"

Подождать несколько секунд для записи в БД

нажать кн "сейчас"

нажать кн."список вышедших"

убедиться в правильной записи в выпадающий список

выбрать строчку в списке

Нажать "диаграмма по вагонетке 1", 

Повторить со "списка вышедших", убедиться в правильности списка.

На рис. все двойные отображения времени отмечены рамочками и стрелками.

"Список вышедших" запускает скрипт канала "Список"

Демо проект.slz 

Добрый день, смущает не выдача даты, а то что после даты и время ещё раз повторяется время просто при отображении TdataTime на панели и иногда в формируемом выпадающем списке.

Место формирования выделено в скрипте жирным подчёркнутым  шрифтом.

Спасибо!

Var

begindate, enddate, date: TDateTime;

reccount,ryi,rvi,ry,rv: integer;

value: integer;

stream: TMemoryStream;

error: word;

ss,s:string;

masdv, masdy,masdr: array [0..1000] of TdateTime;

masvv,masvy: array [0..1000] of integer;

begin

begindate := ReadValue('дата нач');

// конечная дата

enddate := ReadValue('дата кон');

// считаем данные из БД в буфер

stream.clear;

error := StreamReadFromDatabase(begindate, enddate,'ваг вышли', stream);


ry := -1; // записей по выходу

if error = 0 then begin

reccount := GetCountRecordToStream(stream);

while GetValueFromStream(stream, date, value) do begin

inc(ry); if ry>1000 then ry:=1000;

masdy[ry]:=date; //дата выхода

masvY[ry]:=value; //номер вагонетки вышедшей

masdr[ry]:=0; //пока нет захода

end;

// дата начала

begindate := masdy[0]-1; // надо за 4 дня назад, пока 1 !!!

stream.clear;

error := StreamReadFromDatabase(begindate, enddate,'ваг вошли', stream);

rv := -1; //записей по входу

if error = 0 then begin

while GetValueFromStream(stream, date, value) do begin

inc(rv); if rv>1000 then rv:=1000;

masdv[rv]:=date; //дата заходаа

masvv[rv]:=value; //номер вагонетки зашедшей

end;

for ryi:=ry downto 0 do begin // поиск назад в вых

for rvi:=rv downto 0 do begin // поиск назад в заходе

if (masvy[ryi]=masvv[rvi]) then begin //найден заход

masdr[ryi]:=masdv[rvi];// когда заехала

break;

end;

end;

end;

end; //по заходу

end;// по выходу

ss:='';

for ryi:=ry downto 0 do begin// формирование списка

if masdr[ryi]=0 then s:='; Не вышел' else begin

s:=dateTimeToStr( masdy[ryi])+'; Всего:'+inttoStr(round((masdy[ryi]-masdr[ryi])*24*3600))+'сек';

end;

ss:=ss+intToStr(ryi+1)+' №'+IntToStr(masvy[ryi])+' '+DateTimeToStr(masdr[ryi])+'-'+s+',';

end;

SetComboBox('толчок22','ВыпадающийСписок',ss,0,true);

end.



Сервис поддержки клиентов работает на платформе UserEcho