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