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

Добрый день!

О! То, что нужно. Коротко и чётко. Спасибо. Забираю.

Удачи!
С уважением, Анатолий.
Новочеркасск
Добрый день!

Свершилось, я слепил таймер. :)
Что значит слово, упавшее на благодатную почву. Ваши слова про "…все дело в формате TDateTime…" застряли в голове. И вот неожиданно в голове всплыл вопрос к самому себе: "ну и замечательно, что все дело в формате, а стоит ли с ним бороться?". И, воспользовавшись принципом айкидо, поставил себе на службу работу этого формата, получилось вот что:

{
if(AsFirstRun) WriteValue("time4",DateTimeToStr(Now()));
string data, dd;
int poz;
data=DateTimeToStr(Now()-StrToDateTime(ReadValue("time4")));
poz=Pos(" ",data);
dd=Copy(data,0,poz);

if (dd == "30.12.1899 ") data=" "+Copy(data,poz,8);
else if (dd == "31.12.1899 ") data="1 день "+Copy(data,poz,8);
else if (dd == "01.01.1900 ") data="2 дня "+Copy(data,poz,8);
else if (dd == "02.01.1900 ") data="3 дня "+Copy(data,poz,8);
else if (dd == "03.01.1900 ") data="4 дня "+Copy(data,poz,8);

WriteValue("time4v",data);
}

Для запуска этого скрипта необходимо иметь:
1) канал time4, тип "строковый"
2) канал time4v, тип "строковый", со скриптом, приведенным выше
3) форма с двумя элементами "панель", прикрепленные к указанным каналам
4) можно добавить элемент "строковый задатчик", прикрепленный к каналу time4 (для задания начального значения таймера в формате "01.04.2014 10:10:35").

Идея надеюсь понятна!

Удачи!
С уважением, Анатолий
Новочеркасск
Добрый день!

:woohoo: Ура!
Спасибо огромное.
Нашел указанные вами файлы Passport.
Взял эти файлы из архива от 28.03.2014.
И вуаля - появились мои временные канальчики и общее число каналов стало 146 вместо 144.

Удачи!
С уважением, Анатолий.
Новочеркасск
Добрый день!

1) Да-да, именно так: 3 дня 21:15:00. Просто отображаем эту информацию на мнемосхеме.
Но!
Тут есть и побочные эффекты в виде зависания системы, пропадания электроэнергии, поломки компьютера и др. То есть, по какой-то причине система SIMP Light будет перезапущена. А производственная установка продолжает работает и "шоу маст гоу". Т.е. хотелось бы, чтобы запущенный таймер продолжил работать и после перезапуска системы, невзирая на такое "выпадение из реальности". Ну, на это пока не обращайте внимание, это просто информация для размышления. Пока просто хочется видеть на экране надпись: "процесс продолжается 3 дня 21 час 15 минут 00 секунд"

2) А как можно сделать бекап без информационных баз? Насколько помню, при выборе "сделать копию" никаких вопросов не задается, а сразу стартует процесс создания резервной копии. И как должен происходить процесс восстановления из бекакпа без информационных баз? Не "обнулит" ли в этом случает система базу данных?

3) "Не осталось копии файлов конфигурации на момент когда каналы "выпали"?" Дак, вот сейчас пытался найти где же хранится список каналов. И ничего не нашел. Полагал, что этим занимается каталог InternalTag, но там в файле InTaglist всего тридцать строк с какими-то цифрами, а каналов у нас полторы сотни. Или речь идет о файлах .dll в каталоге размещения программы. При старте Конфигуратора каналов вижу, что он загружает информацию из файла конфигурации, а где это файл - не знаю.

Удачи!
С уважением, Анатолий.
Новочеркасск
Добрый день!

Благодарю за оперативный ответ.
Вы говорите: "…Дата сохраняется как число дней с 30 декабря 1899. К примеру 01.01.1900 имеет значение 2…". Вот именно, по этому я ожидаю увидеть в результате вычитания двух величин 01.01.1900 и 03.01.1900 число 2, но этого не вижу. Подскажите, как мне из результата вычитания вытащить число дней между двумя датами. Сейчас вот появились глобальные переменные, наверняка можно сделать еще проще. Да и не держусь я за свой вариант - это просто была проба сил. Если предложите свой работающий способ, с удовольствием буду использовать. Просто дополнительная математика меня заводит в такие дебри (как то: проверка на число дней в месяце, раскладывание значения на год-месяц-день-…,), что смотря на всё это безобразие, понимаешь нелепость всей этой конструкции, предназначенной всего лишь для отсчета одной секунды.

По поводу бекапов.
Безусловно дело важно и нужное.
И оно у нас выполняется, правда раз в неделю (до вчерашнего дня я считал, что этого вполне достаточно, но сегодня придется пересмотреть вопрос создания резервных копий).
Но! Вопрос в другом.
Допустим, обнаружил я поломку некоторого количества каналов спустя сутки.
Какие мои действия по восстановлению "потерянных" каналов.
Если я возьму бекап за вчерашний день, то я потеряю информацию за прошедшие сутки.
Единственный выход, который видится мне, это руками опять "прописать" каналы в конфигураторе каналов. Причем имя канала должно быть восстановлено с точностью до символа, поскольку имя канала может участвовать в скриптах, да и информация в базе данных "привязана" к точному имени канала, и окажется утраченной, если имя будет отличаться.
Как быстро и надежно восстановить список активных каналов?

А что случилось с этими двумя каналами, сейчас буду пытаться посмотреть - рабочий день начался. Два дня назад они точно были и здравствовали. Со временем я не экспериментировал в эти двое суток. Сложность в том, что это "экспериментальные" каналы - в базе не сохранялись и как определить момент их разрушения - ума не приложу.

Удачи!
С уважением, Анатолий.
Новочеркасск
Добрый день!

Спасибо за быстрый отклик. Но!
Не люблю приводить цитаты, но тут без цитаты никак не обойтись. Итак! :dry:

Спасибо за подробные вопросы)

Хотелось бы знать, как продвигаются работы по вопросу отсчета времени.
Элемента "таймер" на мнемосхеме не хватает просто катастрофически.
На презентации новой версии 4.3.2 я задавал вопрос про таймер, был ответ - всё работает.
Проверил на этой версии вычитание времени - все осталось по старому, как и два года назад.

попробуйте вот такой вариант:
SetTimeout(Enabled, Interval) - Выполнение скрипта приостанавливается, на время (Interval), после чего продолжает свою работу

1) Мой вопрос звучит: "неправильно работает вычитание двух переменных временного типа, в предыдущем посте двухлетней давности, я подробно это проиллюстрировал скриптом, а как дело обстоит с этим сейчас, в новой версии?".
И на свой вопрос я получаю ответ: "попробуйте вот такой вариант: SetTimeout(Enabled, Interval)".
:blink:

2) Хорошо! Допускаю, что вы ошиблись. И ваша реплика, очевидно, относящаяся к проблеме открытия одной мнемосхемы из другой мнемосхемы, просто заняла не свое место. Спрашиваю еще раз: "Как мне вычислить интервал времени более 24 часов? Поскольку вычитание двух каналов в формате дата+время, и с использованием функции Now(), приводит к плачевному результату".

3) Хорошо! Попробую-ка предложенный вами способ задержки с открытием мнемосхемы. SetTimeout так SetTimeout. Насколько помню - была, точнее есть, такая функция в javascript. Позволяла выполнить какую либо команду (функцию) с отсрочкой. В этой же функции на первом месте стоит, какая-то сердитая логика (Enabled), которая наверное разрешает мне выполнить-таки задержку на какой-то интервал времени. Ну что же, попробуем. Тем более, что мое решение с задержкой открытия мнемосхемы явно не блещет красотой. В свою защиту скажу лишь, что не найдя в документации на систему ни одной функции, хоть отдаленно напоминающей функцию по организации паузы, я взял первое попавшееся решение, использующееся многими поколениями кодеров. Но! Приступив к работе, вынужден был ее прервать, поскольку опять объявилась проблема, которая не часто, но сильно портит нервы.

4) Проблема в следующем - портятся каналы.
О чем идет речь. Показываю на конкретном примере. Открываю экспериментальную мнемосхему, на которой провожу исследования по работе со временем, организацией таймера и др. И вижу, что два элемента, в которых высвечивается у меня начало отсчета времени и показания таймера, ПУСТЫ. Всплывающая подсказка говорит о том, что "ссылка на канал не определена". Захожу в конфигуратор каналов - действительно два этих виртуальных канала (один имеет порядковый номер 8, а другой 12) не активны. То есть их нет в списке активных каналов. Переношу в список активных каналов - в канале с номером 12 остался в живых, имевшийся там скрипт. Но вся остальная информация разрушена (имя канала, тип канала, и др.)

Последний раз с это проблемой сталкивался пару недель назад, когда на сервере начал "сыпаться" диск. Тогда пропали не тестовые каналы, а самые настоящие 4 канала, получаемые посредством ОРС-сервера с электронного регистратора. Лихорадостно восстановил каналы, благо имена каналов совпадали с именами с переменными ОРС-сервера. Всё произошедшее было списано на больное оборудование.
Но! С тех пор, больной диск на сервере заменен, вставлены новые диски, система перенесена, вылизана, оптимизирована. Система SIMP Ligh предустановлена, поскольку как раз вышла исправленная версия. И вдруг рушатся два канала, которые жили в системе более 2-лет. Очень неприятно. А если завтра упадут еще несколько рабочих каналов, точных имен которых уже и не помнишь (число каналов сейчас уже 144, а ожидается втрое больше), а если скрипты каналов тоже разрушатся?

Вот тут прошу :unsure: вашего конкретного совета:
- как быстро восстановить пропавшие каналы?
- можно ли организовать электронную шпаргалку (какие активные каналы есть в системе, их имена и другие параметры) для того чтобы руками быстро восстановить статус кво? Или надежнее всё это записать в блокнот руками-ручками?

По поводу "размаха шкалы" для элемента Тренд.
Предлагаю сделать по аналогии с Просмотрщиком, т.е. дать возможность выставить любой диапазон. Наш максимальный горизонт - это четверо суток - 96 часов. Но может кому-то нужен и больший размах. :)

Удачи!
С уважением, Анатолий.
Новочеркасск.
Добрый день!

Хотелось бы знать, как продвигаются работы по вопросу отсчета времени.
Элемента "таймер" на мнемосхеме не хватает просто катастрофически.
На презентации новой версии 4.3.2 я задавал вопрос про таймер, был ответ - всё работает.
Проверил на этой версии вычитание времени - все осталось по старому, как и два года назад. :(

И ещё про время, на этот раз уже в элементе "тренд".
Нельзя ли позволить элементу иметь более продолжительную ось Х, так как максимальное значение, которое там можно выставить - 23 часа 59 минут 59 секунд.
А у нас есть процессы продолжительность по 45 - 60 часов.
Я прекрасно знаю, что есть "Просмотрщик графиков", где можно просмотреть информацию за любой интервал времени. Прекрасный модуль спору нет (именно через него вышел на вашу систему SIMP Light). Но! Он не для оперативной работы. Для анализа, отчетности - самое то, а для оператора-диспетчера нет.
В новой версии появился новый тренд - "тред ХY" (далее ТХУ). Задумался. Поизучал (кстати говоря, описание новых элементов в новой системе не нашел нигде - отстает обоз канцелярский от передовых частей разработчиков ;) ). Теоретически можно сделать на нем зависимость температуры от времени. Но! Не видит ТХУ каналов с временным типом данных. Хорошо! Слепим цифровой канал, куда будем складывать минуты. И построим зависимость температуры от этого цифрового канала. Но! Как объяснить оператору-диспечеру, что цифры по оси Х от 0 до 2700 означают период в 45 часов. Разговор плавно перейдет на идиоматические выражения, несущиеся мне в лицо.
Поэтому предлагаю в элемент ТХУ "вшить" временной канал. Т.е. для построения зависимости температуры от времени в ТХУ: по оси Y выбираю канал температуры, по оси X "вшитый" в элемент временной канал (а по сути тот же таймер, который включается по условию от канала выбранного по оси Y, и длится указное значение в минутах, которое указываем в параметрах). То есть, как только температура перешагнула указанный порог, ТХУ начинает рисовать график, который продолжатся на указанное значение времени вне зависимости от поведения температуры. И по истечении заданного времени ТХУ перестает рисовать, а просто отражает нарисованный график. И как только опять сработало условие канала по оси Y, то стирает весь график, и начинает рисовать новый.
Вот как-то так. Надеюсь я понятно объяснил свое пожелание. Если это, или что-то подобное, появится в вашей систем, то цены вам не будет :woohoo: .

И напоследок, но! уже не про время.
Столкнулся с проблемой, которая многим отравляет жизнь.
Начал переводить интерфейс нашей системы мониторинга на оконный режим, поскольку система начинала создаваться еще в те стародавние времена, когда в SIMP Light не было окон ;) .
И так как система отображается на различных мониторах (у диспетчера, у начальства, у технологов), то решил сделать сделать два окна с одной и той же информацией, на разного размера. То есть для маленьких мониторов - маленькая мнемосхемка, а для больших мониторов - большая мнемосхемища. И на каждой мнемосхеме есть кнопка перехода на другое окно. То есть, хочешь - смотри маленькую мнемосхемку, а если у тебя большуший монитор, то нажми кнопку "большая мнемосхема", и маленькая мнемосхемка закроется, а большая - откроется.
Это была присказка, а вот и сказка начинается.
Пока эти два окна были пустенькими (на них кроме кнопок перехода были лишь пара элементов), то все работало как часы - нажал кнопку и текущее окно закрывается, а другое открывается. Но! Как только мнемосхемки стали обрастать всё бОльшим количеством элементов, то после закрытия текущего окна стала появляться надпись "Ошибка открытия мнемосхемы". Причем через меню оба окна открываются ВСЕГДА хорошо. Причем слова "стала появляться" означает, что это было так не всегда - иногда процесс закрытия одного окна и открытия другого окна проходил нормально. Но! По мере наполнения окон новыми элементами, эта противная надпись стала появляться ВСЕГДА. И уже никаких исключений не было.
Проблема встала во весь свой рост. И ее требовалось решить. Многочисленные раздумья привели к мысли, что борьба за ресурсы компьютера не всегда заканчивается мирным путем. То есть новое окно не может открыться потому, что старое окно еще не освободило ресурсы.
Была решено организовать задержку с открытием нового окна. И теперь скрипт одного из окон выглядит так:
{
CloseMnemo("Общая схема 1900");

for(int y, i=0; i < 100000; i++) {y=0;}

OpenMnemo("Общая схема 1600");
}

И все стало снова работать как часы! :woohoo: И никаких больше окон с ошибками не всплывает!

Надеюсь - кому-то пригодится это маленькое наблюдение.

С уважением, Анатолий
Новочеркасск
1) Язык С++.

2) Галки стоят изначально на каналах.
Добрый день!

Спасибо за ответ!
Проверил всё еще раз. Всё совпадает с указанными Вами требованиями (…скрипт должен быть по событию, должно быть указанно точное имя мнемосхемы, кнопка записи значения должна быть "привязана" к нужному виртуальному каналу…). Но ничего не работает!

Имя виртуального канала - "Закрыть" (тип выходной переменной - Integer).
Содержание скрипта по событию записи - CloseMnemo("Ш").
Кнопка - "запись фиксированного значения" (записывается значение 0, привязана к каналу "Закрыть", пробовал ставить галочку "подтверждение записи").

Есть еще более насущный вопрос: в случае если обесточено оборудование на установке (то есть приборы OWEN, с которых снимается сигнал, выключены), то в программе монитор отображение информации с физических каналов либо показывается с соответствующим значком (сигнализирующим, что информация из канала не поступает), либо показывается совсем "левые значения" (например, сейчас вижу в трех текстовых индикаторах,на выключенной установке, одинаковые значения - 219 градусов). Хотя, если двойным щелчком вызвать окно графика, то это окно ничего не показывает, и это правильно, потому что информация никакая не поступает. Откуда появляются загадочные цифры 219 ума не приложу. Программу перезагружал. Компьютер перезагружал. Ничего не помогает. Вопрос заключается в следующем: как можно реализовать на мнемосхеме такую же возможность, которая есть у Вас в "Конфигураторе каналов" в "Тест ОРС-каналов", т.е. если есть информация из канала и она качественная (GetQuality), то показывается значение, в противном случае показывается надпись "нет данных".

Заранее благодарен, Анатолий.
Новочеркасск


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