Последний раз редактировалось petera; 30.03.2022 в 10:28.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
https://www.youtube.com/@%D0%9F%D0%B...BA%D0%BE%D0%B2
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Здравствуйте. Вопрос по переменным 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 переменной.
2022-03-31_6-24-19.png
Если убрать начальное значение - то программа компилируется и корректно работает.
В версии V3.5 конкретно этот же код не вызовет ошибок, потому что там компилятор несколько более продвинутый - он видит, что вы пытаетесь инициализировать переменную нулем (а это дефолтное поведение), и вообще не генерирует никакого кода для этого случая. Но если бы вы заменили 0 на любое другое число - то ошибка бы проявилась и в V3.5.
2022-03-31_6-27-26.png
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Спасибо, но мой компилятор не выдает ошибку и блок не работает. Переменная не работает как IN_OUT! Работает нормально только если после вызова блока добавить Test_var:=Test.test; Но ведь компилятор должен ругаться на такое обращение к переменной IN_OUT?
PS: Может это связано с версией codesys? У меня какой-то кривой, видимо, codesys 2.3, я на нем программирую только chitic. Установил 2.3.9, а потом установщик chitic что-то изменил в нем, и теперь codesys запускается только ярлыком chitic.
Последний раз редактировалось hermano; 31.03.2022 в 08:54.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Вот проект. Он сделан в среде, которая получилась установкой Версии 2.3.9 с вашего сайта, а потом запущен установщик от chitic, который устанавливает таргеты, но при этом он создает свой ярлык на codesys и codesys запускается только с этого ярлыка...
также во вложении установщик от chitic