Как выделить написал выше, ничего не поломает при экспорте, импорте. Если объекты с одинаковыми именами, перед экспортом сразу переименовать.
Вид для печати
Кто Вас заставляет экспортировать ВСЕ объекты из проекта-донора?
Можете экспортировать всего ОДИН объект (новый объект ВНС) !
ЗЫ
https://owen.ru/forum/attachment.php...6&d=1648625239
Здравствуйте. Вопрос по переменным IN_OUT в FB.
Проблема такая. Я создаю блок с IN_OUT переменной. В документации написано, что передается адрес на переменную, нельзя константу, нельзя обратится напрямую через точку. В версии 3.5 все четко. Компилятор ругается на вышеописанные действия, блок работает правильно. А вот в версии 2.3 абсолютно такой же блок не работает. Причем я могу в переменную IN_OUT записать константу, обратится через точку и компилятор не выдает ошибку. Хотя если выбирать переменную в ниспадающем списке она отображается как IN_OUT. Если при вызове блока писать := то переменная работает как входная (т.е. переписывается внешним значением), а если => то как выходная (т.е. переписывает внешнюю переменную). А как IN_OUT не работает...
Я на 2.3 не писал раньше и не могу понять в чем дело.
Блок простейший:
FUNCTION_BLOCK Test_In_Out
VAR_IN_OUT
test: INT := 0;
END_VAR
IF test<32000 THEN
test:=test + 1;
ELSE
test:= 0;
END_IF
Вызов:
VAR
Test: Test_In_Out;
Test_var: INT:=0;
END_VAR
Test(test:=Test_var); Такой вариант работает на 3.5 и не работает на 2.3 (на 2.3 test работает как входная переменная)
единственный вариант заставить работать это после вызова блока дописать
Test_var:=Test.test; Но это противоречит сути этой переменной и компилятор в 3.5 выдает ошибку. а на 2.3 нормально запускается....
В чем может быть дело?
Добрый день.
Приведенный вами код не должен компилироваться в 2.3 из-за попытки инициализации VAR_IN_OUT переменной.
Вложение 60016
Если убрать начальное значение - то программа компилируется и корректно работает.
В версии V3.5 конкретно этот же код не вызовет ошибок, потому что там компилятор несколько более продвинутый - он видит, что вы пытаетесь инициализировать переменную нулем (а это дефолтное поведение), и вообще не генерирует никакого кода для этого случая. Но если бы вы заменили 0 на любое другое число - то ошибка бы проявилась и в V3.5.
Вложение 60017
Спасибо, но мой компилятор не выдает ошибку и блок не работает. Переменная не работает как IN_OUT! Работает нормально только если после вызова блока добавить Test_var:=Test.test; Но ведь компилятор должен ругаться на такое обращение к переменной IN_OUT?
PS: Может это связано с версией codesys? У меня какой-то кривой, видимо, codesys 2.3, я на нем программирую только chitic. Установил 2.3.9, а потом установщик chitic что-то изменил в нем, и теперь codesys запускается только ярлыком chitic.
Вот проект. Он сделан в среде, которая получилась установкой Версии 2.3.9 с вашего сайта, а потом запущен установщик от chitic, который устанавливает таргеты, но при этом он создает свой ярлык на codesys и codesys запускается только с этого ярлыка...
также во вложении установщик от chitic