а это не повлияет на корректную работу программы?
Вид для печати
галочка не выход, а прятание головы в песок.
просто установите среду разработки 2.3.8.1 - там эта проблема решена
Создал я, значит, функциональный блок, который описывает одно устройство. В программе создается вектор MyVector таких функциональный блоков, длина которого равна количеству устройств. В состав блока входят AT-переменные привязанные к входам и выходам ПЛК. Когда я пытаюсь обратиться из какой-либо точки программы к такой переменной, например MyVector[1].MyOutput, выдается ошибка 4020.
Выход MyOutput описан в разделе Variable_Configuration: PLC_PRG.MyVector[1].MyOutput AT %QX1.0: BOOL;.
Вот, собственно, вопрос: как правильно обратиться к такой переменной?
Описание ошибки:
<
4020
"Variable with write access or direct address required for 'ST', 'STN', 'S', 'R'"
Замените первый операнд переменной, имеющей доступ на запись.
>
Видимо где -то в программе есть присвоение значения этой переменной.
Скорее всего компилятор берет выражение PLC_PRG.MyVector[1].MyOutput AT %QX1.0 не как декларацию а как обращение.
Видимо нужно объявить массив указателей на ФБ. Потом объявить экземпляры ФБ например fb_1:myFB;...fb_n:myFB
Привязывать как fb_1.MyOutput AT %QX1.0: BOOL
и проинициализировать массив указателей на fb.
Игорь Викторович, возможно есть не такой корявый метод?
Объявляем в ФБ
VAR
MyOutput: AT %Q*: BOOL;
END_VAR
А Variable_Configuration определяем
VAR_CONFIG
PLC_PRG.MyVector[1].MyOutput AT %QX1.0 : BOOL;
END_VAR
и поидее все работает, правда на ОВЕН непробовал но поидее должно быть также.
всё, получилось! через указатели нормально работает! вот еще вопрос один появился. планируется использовать в связке с плк-150 модуль мдвв. самого модуля пока нет. где бы почитать, как работать с его входами/выходами? и можно ли как-нибудь сэмулировать присутствие модуля?