PDA

Просмотр полной версии : Переменные в Codesys



Дмитрий Артюховский
27.03.2008, 11:17
Все кто здесь тусует, так или иначе программируют.... В детском саду учат что прежде чем использовать переменную - ее нужно описать! Это логично и понятно.... Идем далее, если переменную удалить из описания, что будет? Правильно - программа не транслируется - нет переменной, убита...... А вот Codesys идет своей дорогой!!! Один раз описанная переменная живет вечно! Введите имя в глобальных переменных, используйте ее в проекте, проверьте проект.... а теперь сотрите ее описание.... проект транслируется, как-то работает... а неописанная переменная живет своей жизнью.... в каждом блоке она принимает какие-то свои значения, подозреваю что дефалтные, и описания ее нету нигде:D , и присваивая ей какое-либо значение, не стоит ожидать что в последующем блоке значение будет такое-же!!! Такой подставы я не ожидал от в общем-то не нулевой версии среды разработки! Следите за переменными! И упаси боже решить переименовать хоть одну из них, потребуется ручками перетрясти весь проект, поскольку среда не покажет ошибки!

Малышев Олег
27.03.2008, 12:00
Кажется понял... С Вами злую шутку сыграло авто декларирование. Когда вы используете первый раз переменную среда предлагает автоматически декларировать ее в текущем POU. Соотвественно даже если переменные уже декларированы как глобальные обращение идет к локальным.
Попробовал - сделать как Вы описали - ничего не получилось. Использую CoDeSys 2.3.8.1. Либо опишите последовательность действий.

Аркадий
27.03.2008, 13:20
добрый день.
вставлю свой вопросик немного офф, но все же по переменным.

обнаружил, что при отладке в отладчике не показываются локальные переменный функций. вместо значений - вопросики. значения параметров функций при этом видны.
все это относиться к работе на таргете овена. с таргетом PLCWinNT отладчик работает ок.
подскажите что сделать, чтобы нормально отлаживаться.

Игорь Петров
27.03.2008, 14:43
Вопросики отображаются в функциональных блоках, если не выбран экземпляр. Так и должно быть.

Если удалить объявление переменной в CoDeSys, то сразу выдается сообщение: 'Ошибка 4001: Идентификатор … не определен.' Если этого нет, то аналогичные переменные где-то объявлены (как предполагает Олег) либо поврежден файл проекта. Стоит дать команды 'Проект' –'Очистить все' – 'Компилировать все'. Либо в глобальных переменных (см. свойства списка) включен экспорт объявлений из файла (описания переменных подгружаются из созданного ранее файла) .

Аркадий
27.03.2008, 15:06
Вопросики отображаются в функциональных блоках, если не выбран экземпляр. Так и должно быть.

Если удалить объявление переменной в CoDeSys, то сразу выдается сообщение: 'Ошибка 4001: Идентификатор … не определен.' Если этого нет, то аналогичные переменные где-то объявлены (как предполагает Олег) либо поврежден файл проекта. Стоит дать команды 'Проект' –'Очистить все' – 'Компилировать все'. Либо в глобальных переменных (см. свойства списка) включен экспорт объявлений из файла (описания переменных подгружаются из созданного ранее файла) .

Я полагаю первый ответ - на мой вопрос, а второй - для создателя темы?

Но я спрашивал про функции а не про фб! Причем в функциях недоступны значения именно на таргете овен. Значения параметров видны только в составе структуры, которая передается по указателю.

Прикреплены два проекта и два скриншота на которых все видно.
Первый проект сделан под таргет овена. Потом сохранен под именем второго, таргет в нем сменен на PLCWinNt, конфигурация сброшена на стандартную.
Прошу Ваших пояснений.

Филоненко Владислав
27.03.2008, 16:32
Видимо дело в следующем.
Значения переменных считываются из ПЛК по каналу связи. Число переменных, к-е может быть скачано за раз ограничено (канал связи не резиновый), в рез-те если у Вас много переменных - часть видна не будет.
Для PLCWinNt, т.к. канала связи, как такового, нет (и среда разработки и PLCWinNt на одном компе), ограничение на число отображаемых переменных не накладывается (либо больше, чем на удал. ПЛК) и все переменные видны.
Рекомендую закрыть окна, к-е не используются.

Аркадий
27.03.2008, 17:29
Видимо дело в следующем.
Значения переменных считываются из ПЛК по каналу связи. Число переменных, к-е может быть скачано за раз ограничено (канал связи не резиновый), в рез-те если у Вас много переменных - часть видна не будет.
Для PLCWinNt, т.к. канала связи, как такового, нет (и среда разработки и PLCWinNt на одном компе), ограничение на число отображаемых переменных не накладывается (либо больше, чем на удал. ПЛК) и все переменные видны.
Рекомендую закрыть окна, к-е не используются.

Я извиняюсь, Вы смотрели проект приложенный к моему сообщению, или хотя бы скриншот?
Во всем проекте два ПОУ, в одном две переменых, в другом две локальные и один параметр... итого всего 5 в проекте. Это много??? Открыты только два окна ПОУ.

Что значит нет канала связи для PLCWinNt? связь осуществляется также через TCP/IP. Причем по IP, а не локальный хост.

Дмитрий Артюховский
27.03.2008, 17:47
Проект написан с использованием SFC, модули написаны на ST, переменные описаны в блоках Global_Variables и PLC_PRG. Проблемная переменная была глобальной и в переменных PLC_PRG ее нет, проверено. Такое ощущение что для каждого action- модуля, который теоретически можно рассматривать как отдельный POU, заводиться свой список переменных, который не синхронизируется автоматически с глобальными.... но где посмотреть этот список?

Аркадий
28.03.2008, 13:55
Уважаемые разработчики, есть какие нибудь предложения по моему вопросу?