This is topic Язык программирования ST in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Подскажите пожалуйста каким образом в теле программы на ST можно получить текущую дату и время в формате "Число секунд с 01.01.70" для присвоения Каналу_HEX32.
Posted by PMA (Участник № / Member № 1387) on :
Спасибо ! Отвечать не нужно. Уже разобрался.
Posted by PMA (Участник № / Member № 1387) on :
Добрый день ! В языке ST в любой программе есть переменные типа GLOBAL. Такое объявление предполагает видимость этих переменных из любой программы в пределах узла ? Или я ошибаюсь ?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Все, что относится к программе - имеет область видимости только данной программы! Поэтому переменные типа GLOBAL имеют область видимости в программе, а также в ее функциях, но не далее. Если необходимо обмениваться данными между программами - нужно использовать аргументы программы, они глобальны для всего проекта, и не только для узла (если между узлами планируется сетевой интерфейс).
Posted by PMA (Участник № / Member № 1387) on :
Добрый день ! Есть такая задача, канал HEX16 изменяет своё значение в диапозоне от 0 до 45. Необходимо для каждого значения канала выдать на экран текстовую строку (в одно и то же место). Это необходимо для индикации прохождения технологического цикла по циклограмме. Решить задачу штатными средствами Trace Mode не получается. То есть, пользовательский словарь всего 8 сообщений, объект типа TXT не динамизируется, для выбора строки из файла.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Не совсем понятно зачем для этого использовать словарь аварийных сообщений? Решения два: 1) В программе по значению канала в его любой текстовый атрибут, например - в Комментарий вводить соответствующую строку, а в графике выводить это значение на текстовой форме. 2) Сделать текстовый индикатор по диапазонам - задать для каждого диапазона строку текста и привязаться к значению канала.
Posted by PMA (Участник № / Member № 1387) on :
Добрый день ! - Первый вариант работает, но ограничение длины строки в 40 символов неприемлимо. - Второй вариант работает хорошо, но после ввода строки любая попытка её отредактировать стирает всю строку и приходится набивать её повторно. Попытался во втором варианте использовать ресурс- библиотеку текстовых строк. Индикация текста сразу прекратилась.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
По поводу пропадания строки при реактировании - уже исправлено в последнем релизе 6.02, а за ошибку с ресурсами для диапазонного индикатора спасибо, действительно имеет место быть. Будем править.
Posted by PMA (Участник № / Member № 1387) on :
Добрый день ! Канал CALL позволяет записывать и ситывать значение аргументов в (из) файл, используя атрибуты 128-READ_FILE, 129-WRITE_FILE. Возможно ли управление записью в файл из программы в реальном времени ?? Эксперимент показал что READ_FILE из программы проходит нормально, а вот WRITE_FILE почему то файл не создаёт. Правда при вводе значения в WRITE_FILE из графики файл создаётся.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Да - управлять можно в реальном времени. Эксперимент - это посылка из программы, раз в графике заработало? Может не так привязали, или программа не выдает значение в атрибут? Каналу все равно откуда это значение в него попадает и если работает из графики - значит функция работает.
Posted by PMA (Участник № / Member № 1387) on :
Добрый день! Посылаю тестовый проект,очень маленький, на адрес forum@adastra.ru Канал Smena, его тип менял на OUTPUT эффект тот же как отображено в файле Error.doc Хотелось бы понять в чём ошибка.
Posted by PMA (Участник № / Member № 1387) on :
Тест начал работать после того как был добавлен канал тип FLOAT, связанный с системной переменной t_Hours.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
У Вас следующие ошибки в конфигурировании проекта: 1) Повесив программу на Трансляцию канала - Вы тем самым "рвете" его пополам (смотрите рисунок в справке по данному каналу), ведь направление данных и обработка в канале HEX16 типа Input идет по схеме: (Источник)->Вход->(Инверсия)->Аппаратное->(Трансляция)->Реальное->Выход. А у Вас один вход программы был привязан к системной переменной "Текущий час", а выход на Вход канала - получается, что у Вас между Аппаратным и Реальным атрибутами получился разрыв. Надо было сделать так: а) Залинковать сам канал Smena на системную переменную. б) Вход программы Hh привязать к Аппаратному значению канала Smena. в) Выход Sm программы привязать к Реальному атрибуту канала Smena.
2) Другая ошибка в том, что аргумент экрана ARG_000 Вы залинковали в таблице аргументов самого Шаблона экрана, а не в его Вызове в узле, если Вы откроете таблицу аргументов вызова этого экрана в самом узле МРВ, то увидите, что его привязка отсутсвует. Таблица аргументов Шаблона и его Вызова - это не одно и то же. Вызов - всего лишь реплицирует список аргументов шаблона, но его привязки могут и не совпадать с привязками, которые Вы задали в самом шаблоне - ведь таких вызовов одного шаблона может быть сколь угодно много, но у каждого может быть собственная реализация привязок этого списка аргументов.
Posted by PMA (Участник № / Member № 1387) on :
Большое спасибо ! Разобрался.
Posted by PMA (Участник № / Member № 1387) on :
Добрый день! Можно ли использовать для хранения и отображения на экранах аргументы программ не привязанные к источникам. То есть использовать их как глобальные переменные. Если возможно то как это правильно сделать?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Сохранять данные в глобальных переменных программы, связывать их с аргументами программы, а последние - с аргументами экрана. При условии соблюдения корректности в задании типов аргументов такой механизм должен работать.
Posted by PMA (Участник № / Member № 1387) on :
Добрый день ! Что понимать под выражением связывать глобальные переменные программы с аргументами программы. Редактор привязок не имеет такой возможности, т.е. нет возможности связывать глобальные переменные с чем либо. Имеется в виду присвоение значения в теле программы ?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В данном контексте имелся в виду обычный оператор присвоения, например: GVAR_000=ARG_000;
Posted by PMA (Участник № / Member № 1387) on :
Добрый день ! 1. Есть необходимость использовать не задействованные атрибуты каналов для хранения значений в программах трансляции и любых других. То есть, имеем канал HEX32, если он не привязан к аппаратуре, то не используются атрибуты : L0 - UDINT I0 - UINT I1 - UINT I2 - UINT вот их и хотелось бы использовать при вычислениях для своих нужд. Хотелось бы получить развёрнутый комментарий по поводу использования атрибутов монитором, какие можно использовать в своих целях ? 2. Возращаясь к предыдущей теме от 17-06-2005 17:45 Описанный способ использования аргументов программы и каналов CALL не имеющих привязки, не работает. В аргументы не имеющие привязки можно послать значение из графики без проблем, можно использовать эти аргументы внутри программы для анализа значений, но присвоение значения такому аргументу внутри программы не работает точнее ведёт себя странным образом. Например значение такого аргумента зависит от положения которое он занимает в редакторе аргументов в начале списка или в конце. Мне кажется что нужно получить консультацию у программиста, который работал с этим кодом.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1) I0,I1 и I2 - есть одна переменная L0, поэтоум либо первые три используете, либо одну L0, сами I это C0-C5. То есть разбивка одной области данных на 6 байт на разные форматы. 2) Желательно проект нам для исследования данной особенности с Вашими коментариями как наблюдать эффект.
Posted by PMA (Участник № / Member № 1387) on :
Отправил тестовый проект на forum@adastra.ru Задача в этом проекте присвоить значение аргументу программы Test.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Так он у Вас зачем-то сам на себя привязан! Вы отвяжите его совсем, чтобы у него привязки не было, тогда с аргумента экрана, который на него привязан должно значение передаваться.
Posted by PMA (Участник № / Member № 1387) on :
Я удалил привязку сам на себя в редакторе привязок канала HEX32, результат тот же самый. Значение которое формируется в программе не отображается. При вводе с формы иногда вводимое значение появляется и тут же меняется на значение 1.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
С экрана Вы в этот аргумент ничего и не введете, он же у Вас уже привязан к источнику для отображения, в который программа постоянно шлет результат вычисления. На входе канала Канал#1 у Вас 0, по формуле программы на Трансляции на Реальное значение попадает результат=1 (кстати, Трансляция должна соединять не Вход с Реальным атрибутом, а Аппаратное с Реальным - смотрите обработку данных в канале класса HEX32). 1 - потому как у Вас все аргументы целочисленные, можете сами пересчитать с учетом преобразования типов. Так что - все верное работает, никаких ошибок в работе на обнаружено.
Posted by PMA (Участник № / Member № 1387) on :
Всё что вами сказано проверено многократно ! И тем не менее не работает. Буду благодарен, если вы пришлёте мне проект с тестом, по аналогии того что я посылал вам. В этом случае всё станет на свои места, возможно мы говорим о разных вещах.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Отправил Ваш же модифицированный проект.
Posted by PMA (Участник № / Member № 1387) on :
Проект получил, но он не работает. Переправил ещё один вариант в котором алгоритм работает, но очень странно. Аргументы программ, не привязанные к источникам, и связанные с трансляцией, по видимому использовать нельзя. Попробую для этой цели использовать канал CALL.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В том проекте, что Вы снова прислали - опять аргумент сам на себя залинкован!
Posted by PMA (Участник № / Member № 1387) on :
Это единственный вариант при котором проект работает, то есть изменяет значение аргумента программы Test и правильно отображает его на экране. Все другие варианты не работают, проверьте.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :