Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Добрый день
Возникли трудности при работе со СПАД, сделал вроде все как в Быстром старте, но что-то не так.
Когда выхожу из режима исполнения, то профайлер виснет. Ждал около минуты, потом вырубал через диспетчер. Соответственно никак не могу получить в канале значение из прошлого сеанса.
Делал так. 1. В узле написал имя файла для архива СПАД1, поставил True. Файл создается. 2. Во флагах канала, который хочу сохранить поставил флаг "загрузить", пробовал как для группы, так и для канала отдельно. 3. В канале выбрал архив СПАД = 1
что-то еще нужно? Пытаюсь реализовать счетчик времени работы проекта. Типа счетчик моточасов только для МРВ. На всякий случай прилагаю сам проект. Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
Постановка задачи из проекта не понятна.
Но можно обратить внимание на следующее.
1. Любая нештатная выгрузка узла чревата возможным повреждением архива. До штатного завершения всех потоков выгружать МРВ нельзя. Завершение потоков осуществляется с участием ОС. Время завершения определяется ОС. Иногда ОС затягивает этот прицесс. Приходится ждать.
2. Видимо, нештатная выгрузка МРВ повредила Ваш архив СПАД. Теперь с ним работать нельзя. Придется его уничтожать.
3. У Вас в проекте нет ни одного средства чтения и отображения архивных данных. Не ясно, как Вы собирались "получить в канале значение из прошлого сеанса".
4. В архив у Вас назначен канал, который ничего не регистрирует. Тот канал, который регистрирует время работы МРВ, в архив не пишется.
5. У Вас в проекте есть системная переменная "@t_Operation_Time - Значение данной переменной типа INPUT равно времени работы монитора (в секундах). Время работы вычисляется как разность <текущее время>–<время старта>." Т.е., продолжительность текущего сеанса не надо вычислять специальной программой. Но Вы почему-то не используете готовую штатную функцию. Свяжите канал TIME#3 с этой системной переменной и задайте ему "Формат представления" - "Только время, формат ОС".
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Спасибо )) Просто я изучал все возможности ТМ и это тестовый проект. Рабочий проект слишком громоздкий.
По пункту 3. А что включают в себя средства отображения и чтения архивных данных? Если это ГЭ "Дата и время", то его я связал с каналом (в проекте TIME#4). Его то мне и нужно архивировать.
А нужно мне получить в итоге не время работы МРВ, а вообще суммарное время всех сеансов МРВ. Т.е. время существования проекта. Еще возникли такие вопросы. 1. Как часто архивируется значение канала. В настройках узла Архивы - Спад1 - Кэш период сохранения 300. Я так понял это и есть время сохранения, но 300 чего? мсек, сек, кг ? 2. Происходит ли запись значений каналов в архив перед выходом из МРВ (когда по человечку жмешь)? Впрочем если запись раз в 300 мс, то этот вопрос не имеет значения.
5. Переменной @t_Operation_Time обязательно воспользуюсь.
Еще хотелось бы переменную @t_time и @t_date, чтобы получить текущее время в канал Но мечты...мечты...
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Прочитал, что значение канала записывается в архив по изменению. а Кэш видимо записывается на диск с периодом 300 секунд. Тогда вопрос выше переформулирую следующим образом. Можно ли сделать архивацию канала периодами, а не по изменению?
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Для получения полного времени "наработки" узла нужно не архивировать, а сохранять наработанный ресурс в файл сохранения системы (DUMP). При загрузке узла в канале будет восстанавливаться из DUMP ранее накопленный ресурс, а затем счетчик будет наращиваться и сохраняться в DUMP. К считанному при загрузке ресурсу надо непрерывно программно прибавлять ресурс текущего сеанса.
2. Запись в DUMP осуществляется при штатной выгрузке узла и периодически при работе (период задается в настройках узла).
3. Запись в СПАД осуществляется только по изменению РЕАЛЬНОГО значения канала. Если Вы будете работать с быстро меняющимся АППАРАТНЫМ значением, а РЕАЛЬНОЕ значение с помощью процедуры ТРАНСЛЯЦИИ будете менятьс существенно большим периодом, то запись в архив будет осуществляться реже.
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Спасибо, Оказывается мне нужен ДАМП. СПАД видимо используется для трендов, записывая N значений канала.
4. Т.е. если переменную @t_Set_Date назначить как вход, то она будет показывать реальное время. Хмм... не подумал даже об этом, ее название сбило с толку
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Еще один вопрос. У меня на экране есть "стикеры". Это ГЭ "текст" привязанные через аргумент типа STRING к каналу типа HEX16(Output) к атрибуту 80 - комментарий. Нужно чтобы они записывались в дамп. Т.е. атрибут комментарий У меня что-то не получается их то ли записать, то ли считать. Флаги поставил "Дамп" "Загрузить" "Атрибуты" у каналов и у объединяющей их группы.
отправлено / posted
В ДАМП записываются только некоторые числовые атрибуты числовых каналов и числовые аргументы каналов CALL.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Я в печали... Возможно ли как-то реализовать сохранение текста в файл, дамп, спад... может быть базу данных?
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Уважаемая поддержка. Воспользовался каналом CALL.STRING Сделал, все как в справке, т.е.
quote:Длинные (до 64 байт) строки могут быть записаны в аргументы каналов CALL.STRING, Аргументы не должны иметь привязок и иметь тип данных STRING.
Для канала CALL.STRING:
для отображения значения аргумента с помощью ГЭ Текст нужно к аргументу экрана (тип данных должен быть STRING) привязать атрибут 1,A канала и задать формат По умолчанию (см. Динамизация атрибута ГЭ ). ГЭ отображает значение аргумента с номером CALL.STRING.R. Если R больше или равно числу аргументов, отображается комментарий канала (атрибут 80,CMNT);
на ГЭ текст отображается только то, что я ввожу(через окошко "компоненты") в атрибут 0,R. Может быть в тексте опечатка и нужно привязывать аргумент экрана не к "аппаратному значению", а чему-то другому? Или, если возможно пришлите проект, где реализована данная процедура. Мне нужно с помощью ГЭ "Текст" ввести текст, отображать его в том же ГЭ, т.е. поясните механизм записи/чтения строк в аргументы канала CALL.STRING через ГЭ текст
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Спасибо. Чтение аргументов работает. Теперь осталось научится записывать их в реальном времени. А то получается только в редакторе задавать "значение по умолчанию". Причем тип "String" задать нельзя.
Странно, конечно. В канале Call.String можно записать в аргументы что угодно, кроме строки типа String (в редакторе). В чем здесь смысл - для меня загадка...
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Ура, получилось Спасибо. 63 символа максимум.64 видимо терминатор строки Возникло только пара несущественных замечаний. 1. Строка записанная в аргументы канала CALL.STRING в редакторе в поле "значения по умолчанию" и одиночных кавычках на экране в режиме исполнения показывается вместе с кавычками и всего 4 символа, один из которых открывающая кавычка. 2. Если у кнопки по нажатию(mousePressed) задать событие "ввести и передать", а в сбросе(MouseReleased) задать просто "передать", то второе событие по сбросу не выполняется. Хотел сделать, чтобы можно было сначала что-то записать в один из аргументов CALL.STRING, а затем в реальное значение записать номер этого аргумента. 3. Когда пытаешься соединить аргументы CALL.STRING и аргументы шаблона экрана, с помощью переноса(drag'n'drop), то место привязки создаются новые аргументы. Если связывать аргументы CALL.STRING и аргументы CALL.SCREEN, то получается нормально. 4. Ну и старое ))) Нет переноса по строкам. Впрочем для этого нужны большие переделки. Так что на этот бонус надежды никакой.
[ 21.03.2016, 18:02: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
1. 4 символа сохраняются по умолчанию. Для того, чтобы увеличить это значение и был создан механизм подчитки из файла. По поводу кавычки будем разбираться.
2. Вы отжимаете кнопку мышку до того, как ввели значение. По другому у Вас и не получится.
3. Функция привязки аргументов канала к аргументам шаблона с помощью механизма drag'n'drop не предусмотрена.
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
2. Логически вы правильно говорите. При вызове модального окошка, основной поток приостанавливается и не обрабатывает события. Но ИМХО целесообразно ввести фичу, которая после закрытия окошка "ввести и передать" обрабатывала бы событие. Ну например нужно запустить программу, которая будет использовать введенные данные
4. Если строка формата Ascii, то по любому может содержать символ 0Ah - перенос строки, в Си '\n'. Вопрос лишь в обработке и способе ввода символа.
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
2. Вам виднее
4. а) Способов много. Но тут надо смотреть уже коды ТМ, чтобы посоветовать что-то стоящее. Один из способов сочетание клавиш Ctrl+Enter.
б) Изначально была идея мини-блокнотика, куда оператор мог бы делать пометки. И чтобы записи в нем сохранялись при перезапуске. И еще права доступа к блокнотику были. А то они все с журналами бедняги сидят
[ 21.03.2016, 18:02: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Баранов Вячеслав
Junior Member / Новичок
Участник № / Member № 6904
отправлено / posted
Здравствуйте, можно ли где-нибудь найти пример реализации работы таймера? В конечном итоге хочу создать счетчик моточасов, который будет считать суммарное время работы насоса за длительный период. Для начала хотел создать таймер, который будет запускаться по нажатию одной клавиши и останавливаться по нажатию другой.
Сообщения / Posts 24 | Из / From: РФ
| IP / IP: IP адрес / IP address |