Показано с 1 по 8 из 8

Тема: битовая адресация через глобальные константы

  1. #1

    По умолчанию битовая адресация через глобальные константы

    Почему компилятор выдает ошибку 4027?
    Сделано все вроде правильно в ссответствии с руководством пользователя codesys 2.3 (пункт 10.12)
    Вложения Вложения

  2. #2

    По умолчанию

    1) Побитно можно использовать только переменные типа битовых строк (BYTE, WORD, DWORD)
    2) Номер бита может быть только константой.

    VAR
    aaa:WORD;
    END_VAR

    aaa.2 := TRUE; - OK
    aaa.i := TRUE; - ошибка

  3. #3
    Пользователь
    Регистрация
    18.03.2007
    Адрес
    г. Краснодар
    Сообщений
    233

    По умолчанию

    aaa.i := TRUE; - ошибка
    Это не ошибка, просто i нужно объявить
    var global constant
    i : byte := 2;
    end var

    Но настроить компилятор чтобы константы были в исполняемом коде.

  4. #4

    По умолчанию

    а где настройки компилятора?

  5. #5
    Пользователь
    Регистрация
    18.03.2007
    Адрес
    г. Краснодар
    Сообщений
    233

    По умолчанию

    project | build
    Replace constant
    разрешает «вшивать» значения скалярных (все кроме массивов, строк и структур)
    констант в машинный код. В режиме Online такие константы изображаются зеленым. Фиксация, запись
    таких констант невозможна. При отключенной опции константы сохраняются в памяти данных кон-
    троллера и с ними можно обращаться так же, как и с обычными переменными (код, естественно, будет
    медленнее).

  6. #6

    По умолчанию

    спасибо, я уже разобрался.
    Кстати не надо никаких WORD,BYTE все работает как у меня в примере.
    Да и BYTE мне не подходит т.к. мне это нужно для символьной нумерации входов/выходов МДВВ т.е. до 12. Все таки приятнее смотрится в программе (да и ошибок меньше) , например,
    OUTMDVV.PUMP:=TRUE где PUMP:INT:=3;
    И даже не в этом дело. При изменении элетрической схемы установки (что происходит сплошь и рядом во время разработки и отладки оборудования) достаточно изменить цифру, чем лазить по всей программе и искать этот насос. У меня в проекте 31 датчик и 26 клапанов, насосов и индикаторов, так что смысл понятен.
    Еще раз спасибо всем за помощь

  7. #7

    По умолчанию

    Цитата Сообщение от allexandr Посмотреть сообщение
    Кстати не надо никаких WORD,BYTE все работает как у меня в примере.
    В CoDeSys V2.3 можно и INT, в нем просто нет контроля. По стандарту МЭК однозначно нужно WORD. Генерируемый машинный код при этом не меняется, но с точки зрения совместимости лучше использовать именно переменные типа битовых строк (по стандарту МЭК это типы ANY_BIT : BYTE, WODRD, DWORD и LWORD).

    Цитата Сообщение от allexandr Посмотреть сообщение
    Все таки приятнее смотрится в программе (да и ошибок меньше) , например,
    OUTMDVV.PUMP:=TRUE где PUMP:INT:=3;
    И даже не в этом дело. При изменении элетрической схемы установки (что происходит сплошь и рядом во время разработки и отладки оборудования) достаточно изменить цифру, чем лазить по всей программе и искать этот насос…
    Согласен абсолютно. Но в любом случае номер бита указывается константой. Числовой или символьной не принципиально.

  8. #8

    По умолчанию

    спасибо за разьяснение.
    На самом деле у меня в программе WORD, т.к. я подключил МДВВ через Universal Modbus Device, а там как раз генерируются два WORD (для входов и выходов МДВВ) так что все получилось корректно. INT был только в примере.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •