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

Тема: В ФБ ST не компилируется цикл FOR

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    И чем чревата эта хотелка в CoDeSys ? Я в операторах CASE в качестве селектора всегда использую переменную типа BYTE или WORD.
    К сожалению, сам стандарт 61131 крайне странный.
    Технически, там BYTE-WORD-DWORD это не числа, а bit strings. Т.е. они предназначены только для работы с битами.
    При этом, сложение-вычитание этих самых BYTE в стандарте не предусмотрено.

    Но программисты (почему-то!) хотят писать код в духе dwordVar := 1; или dwordVar := dwordVar + 1;
    С точки зрения стандарта вообще непонятно как оно должно работать (и должно ли), но заставлять программистов указывать вручную что-то типа dwordVar := DINT_TO_DWORD(DWORD_TO_DINT(dwordVar) + 1); было бы совсем дико (а, может, и нет).

    CoDeSys пошли по пути автоматических неявных приведений типов (почти любых к любым). А, значит, будут случаи, когда "автоматика" сработает самым неожиданным образом.

    По какому пути пойдут разработчики MS -- интересно.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,574

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    По какому пути пойдут разработчики MS -- интересно.
    так ведь дает исключение, путь уже устоявшийся
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    так ведь дает исключение, путь уже устоявшийся
    Ну, там же вопрос не про один for, а про систему типов.
    У них any_bit будет поддерживать сложение?

    Например:
    dword_var: DWORD;
    sint_var: SINT;

    dword_var := -1 XOR -2;
    или
    dword_var := BYTE_TO_DWORD(-1 XOR 2);
    или
    dword_var := dword_var + 1;
    или
    dword_var := -1;
    или
    sint_var := -1;
    dword_var := sint_var;
    или
    dword_var := INT_TO_SINT(-1);

    и т.п.

    Про КДС было тут: http://www.owen.ru/forum/showthread....l=1#post232746

Похожие темы

  1. Цикл на языке ST
    от servo в разделе ПЛК1хх
    Ответов: 17
    Последнее сообщение: 06.06.2019, 16:00
  2. Главный цикл
    от fzr125 в разделе ПЛК1хх
    Ответов: 22
    Последнее сообщение: 16.06.2014, 05:44
  3. Oscat не компилируется
    от Safron в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 28.02.2011, 14:12
  4. Ответов: 6
    Последнее сообщение: 05.04.2010, 08:06
  5. Ответов: 3
    Последнее сообщение: 25.09.2008, 17:38

Ваши права

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