Почему компилятор выдает ошибку 4027?
Сделано все вроде правильно в ссответствии с руководством пользователя codesys 2.3 (пункт 10.12)
Почему компилятор выдает ошибку 4027?
Сделано все вроде правильно в ссответствии с руководством пользователя codesys 2.3 (пункт 10.12)
1) Побитно можно использовать только переменные типа битовых строк (BYTE, WORD, DWORD)
2) Номер бита может быть только константой.
VAR
aaa:WORD;
END_VAR
aaa.2 := TRUE; - OK
aaa.i := TRUE; - ошибка
Это не ошибка, просто i нужно объявитьaaa.i := TRUE; - ошибка
var global constant
i : byte := 2;
end var
Но настроить компилятор чтобы константы были в исполняемом коде.
а где настройки компилятора?
project | build
Replace constant
разрешает «вшивать» значения скалярных (все кроме массивов, строк и структур)
констант в машинный код. В режиме Online такие константы изображаются зеленым. Фиксация, запись
таких констант невозможна. При отключенной опции константы сохраняются в памяти данных кон-
троллера и с ними можно обращаться так же, как и с обычными переменными (код, естественно, будет
медленнее).
спасибо, я уже разобрался.
Кстати не надо никаких WORD,BYTE все работает как у меня в примере.
Да и BYTE мне не подходит т.к. мне это нужно для символьной нумерации входов/выходов МДВВ т.е. до 12. Все таки приятнее смотрится в программе (да и ошибок меньше) , например,
OUTMDVV.PUMP:=TRUE где PUMP:INT:=3;
И даже не в этом дело. При изменении элетрической схемы установки (что происходит сплошь и рядом во время разработки и отладки оборудования) достаточно изменить цифру, чем лазить по всей программе и искать этот насос. У меня в проекте 31 датчик и 26 клапанов, насосов и индикаторов, так что смысл понятен.
Еще раз спасибо всем за помощь
В CoDeSys V2.3 можно и INT, в нем просто нет контроля. По стандарту МЭК однозначно нужно WORD. Генерируемый машинный код при этом не меняется, но с точки зрения совместимости лучше использовать именно переменные типа битовых строк (по стандарту МЭК это типы ANY_BIT : BYTE, WODRD, DWORD и LWORD).
Согласен абсолютно. Но в любом случае номер бита указывается константой. Числовой или символьной не принципиально.
спасибо за разьяснение.
На самом деле у меня в программе WORD, т.к. я подключил МДВВ через Universal Modbus Device, а там как раз генерируются два WORD (для входов и выходов МДВВ) так что все получилось корректно. INT был только в примере.