Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » Сохранение переменных между вызовами в ST

   
Автор / Author Тема / Topic: Сохранение переменных между вызовами в ST
Гусев Александр Петрович
Active Forum Member / Активный участник форума
Участник № / Member № 2148


Icon 1 отправлено / posted      Профиль для / Profile for Гусев Александр Петрович           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
хотелось бы уточнить некоторые моменты относительно сохраняемости переменных в функциях, функциональных блоках, структурах и программах.

судя по тестам я вижу что во всех этих конструкциях внутренние переменные не сохраняются. каждый новый вызов они воссоздаются заново получая значения по умолчанию. это поведение кажется не совсем корректным.

дело в том что сохранение переменных для функций действительно не подразумевается самой струтурой языка ST, т. к. не существует экземпляра функции, но для функциональных блоков, структур и тем более программ сохранение внутернних переменных должно производиться (что и делается в других реализациях ST). во всяком случае мое понимание понятия функциональный блок и программа говорят именно о таком поведении. как иначе пользователь сможет написать алгоритм (или собственный блок вроде триггера или счетчика) сохраняющий свое состояние? использование для этой цели внешних переменных слишком накладно, крайне неудобно, а часто просто невозможно (когда превышено максимальное количество аргументов функции равное ~31 шт.)

ситуация выглядит еще более парадоксальной если вспомнить что в FBD-программах существуют блоки сохраняющие свое внутренее состояние (те же триггеры или счетчики). использование этих блоков в программе действительно добавляет требуемое поведение сохраняемости внутренних переменных - состояние триггера или счетчика сохраняется от вызова к вызову. учитывая что согласно документации FBD-программы транслируются в ST это означает что требуемое поведение может быть реализовано и в ST, но конструкций позволяющих сделать это я не вижу. может быть есть какой-то неизвестный мне способ или я делаю что-то не так?

служба поддержки ответила что нужно использовать для хранения состояния функциональных блоков внешние переменные. хотелось бы услышать еще мнения - кто как решает подобные вопросы. особое внимание хотелось бы обратить на тот момент что судя по существованию в FBD триггеров и счетчиков сохранение переменных между вызовами возможно.

Сообщения / Posts 84 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Для сохранения значений переменных используются аргументы и глобальные переменные программы.
Как Вы определили максимальное количество аргументов для функций программы?

Сообщения / Posts 17345 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Гусев Александр Петрович
Active Forum Member / Активный участник форума
Участник № / Member № 2148


Icon 1 отправлено / posted      Профиль для / Profile for Гусев Александр Петрович           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. очень сжатый ответ. я понимаю что если по другому никак то придется либо сохранять переменные в аргументах порождая нечитабельность и проблемы с сопровождением либо выносить свои настоящие блоки в DLL где переменные будут сохранятся как поля структур собранных в статический список а блоки будут идентифицировться по их id в этом списке. именно над этим вариантом и работаю сейчас. очнь жаль что ваша реализация ST урезала понятия "функциональный блок" и "программа" до понятия "функция". но меня прежде всего интересовало как всетаки реализована сохраняемость при использовании, например, триггера?
2. определил очень просто. письмо на эту тему было отослано в службу поддержки, но ответа я не получил. суть проблемы в следующем. если функция содержит более 31 аргумента (имеется ввиду общее число input/output/inout), то TM
-либо вообще отказывается выполнять программу выдавая сообщение в окно вывода "Нарушение доступа" (пологаю что это перехваченное TM "любимое" исключение всех программистов "Access violation") - это происходит если мы определили более 31 аргумента типа input
-либо выполняет программу - это происходит если аргументов типа input менее 31, но общее число аргументов более 31 - НО ПРИ ВЫПОЛНЕНИИ (!!!) как только мы в программе обращаемся к какому нибудь аргументу имеющему порядковый номер в списке аргументов более 31 TM аварийно завершает работу - падает с сообщением об ошибке и предложением отправить отчет корпорации майкрософт.
проверить можете сами. создайте функцию и добавте ей 31 аргумент. затем добавте либо один входной либо выходной. потом вставте эту функцию в FBD-программу в виде блока. увидете что происходит при отладке. учитывая что все функциональные блоки имеют "системный" аргумент RUN общее число аргументов функции как раз получается равным "магическому" числу 32. я полагаю что эта постоянная - размер массива в котором хранятся аргументы. т. о. осмелюсь покачать гловой и сказать "на списках надо было реализовывать работу с аргументами". извините если я не прав. жду разъяснений.

Сообщения / Posts 84 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вышел новый релиз ТМ 6.05. Данная ошибка исправлена.
Сообщения / Posts 17345 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Гусев Александр Петрович
Active Forum Member / Активный участник форума
Участник № / Member № 2148


Icon 1 отправлено / posted      Профиль для / Profile for Гусев Александр Петрович           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
-вы имеете ввиду ограничение на кол-во аргументов? при возможности проверю.
-а как быть с сохраняемостью? как триггеры всетаки сохраняются, а мой FB так и не может иметь сохраняемых полей?

Сообщения / Posts 84 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. Да, речь идёт о том, что исправлена ошибка с ограничением на количество аргументов.
2. Для сохранения значений переменных используются аргументы и глобальные переменные программы.

Сообщения / Posts 17345 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2