Просмотр полной версии : битовая адресация через глобальные константы
allexandr
18.04.2008, 10:27
Почему компилятор выдает ошибку 4027?
Сделано все вроде правильно в ссответствии с руководством пользователя codesys 2.3 (пункт 10.12)
Игорь Петров
18.04.2008, 11:50
1) Побитно можно использовать только переменные типа битовых строк (BYTE, WORD, DWORD)
2) Номер бита может быть только константой.
VAR
aaa:WORD;
END_VAR
aaa.2 := TRUE; - OK
aaa.i := TRUE; - ошибка
Сергей71
18.04.2008, 12:24
aaa.i := TRUE; - ошибка
Это не ошибка, просто i нужно объявить
var global constant
i : byte := 2;
end var
Но настроить компилятор чтобы константы были в исполняемом коде.
allexandr
18.04.2008, 12:57
а где настройки компилятора?
Сергей71
18.04.2008, 13:24
project | build
Replace constant
разрешает «вшивать» значения скалярных (все кроме массивов, строк и структур)
констант в машинный код. В режиме Online такие константы изображаются зеленым. Фиксация, запись
таких констант невозможна. При отключенной опции константы сохраняются в памяти данных кон-
троллера и с ними можно обращаться так же, как и с обычными переменными (код, естественно, будет
медленнее).
allexandr
18.04.2008, 13:51
спасибо, я уже разобрался.
Кстати не надо никаких WORD,BYTE все работает как у меня в примере.
Да и BYTE мне не подходит т.к. мне это нужно для символьной нумерации входов/выходов МДВВ т.е. до 12. Все таки приятнее смотрится в программе (да и ошибок меньше) , например,
OUTMDVV.PUMP:=TRUE где PUMP:INT:=3;
И даже не в этом дело. При изменении элетрической схемы установки (что происходит сплошь и рядом во время разработки и отладки оборудования) достаточно изменить цифру, чем лазить по всей программе и искать этот насос. У меня в проекте 31 датчик и 26 клапанов, насосов и индикаторов, так что смысл понятен.
Еще раз спасибо всем за помощь
Игорь Петров
18.04.2008, 15:48
Кстати не надо никаких WORD,BYTE все работает как у меня в примере.
В CoDeSys V2.3 можно и INT, в нем просто нет контроля. По стандарту МЭК однозначно нужно WORD. Генерируемый машинный код при этом не меняется, но с точки зрения совместимости лучше использовать именно переменные типа битовых строк (по стандарту МЭК это типы ANY_BIT : BYTE, WODRD, DWORD и LWORD).
Все таки приятнее смотрится в программе (да и ошибок меньше) , например,
OUTMDVV.PUMP:=TRUE где PUMP:INT:=3;
И даже не в этом дело. При изменении элетрической схемы установки (что происходит сплошь и рядом во время разработки и отладки оборудования) достаточно изменить цифру, чем лазить по всей программе и искать этот насос…
Согласен абсолютно. Но в любом случае номер бита указывается константой. Числовой или символьной не принципиально.
allexandr
21.04.2008, 07:33
спасибо за разьяснение.
На самом деле у меня в программе WORD, т.к. я подключил МДВВ через Universal Modbus Device, а там как раз генерируются два WORD (для входов и выходов МДВВ) так что все получилось корректно. INT был только в примере.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot