Страница 35 из 37 ПерваяПервая ... 253334353637 ПоследняяПоследняя
Показано с 341 по 350 из 365

Тема: CoDeSys v2.3

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

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    А вот это уже не смешно (d1: DATE):

    Вложение 16141
    а попробуйте преобразовать один тип в другой через _TO_ ,компилятор будет ругаться, так почему же он должен корректно производить арифметические действия с несовместимыми типами?

    ЗЫ
    d1:=DATE#2015-01-13 - T#1h;
    d2:=DATE_TO_DWORD(DATE#2015-01-13);
    d3:=TIME_TO_DWORD(T#1h);
    d4:=DWORD_TO_DATE(d2-d3);
    Последний раз редактировалось capzap; 13.01.2015 в 17:36.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  2. #342
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    а попробуйте
    Это уже будет обход бага. Мы проверяем неявное, а не явное приведение типов.
    почему же он должен корректно производить арифметические действия с несовместимыми типами?
    Он должен вываливаться с ошибкой типизации примерно вот так:

    sshot.png

    Зависимость результата от порядка слагаемых в таком случае говорит о приведении по левому операнду. Значит, должно происходить неявное приведение правого операнда к совместимому налево типу, но этого явно не происходит. Это примерно как reinterpret_cast когда должно быть static_cast (C++). Представьте, что пытаясь сложить REAL#3.42 и DINT#5 в DINT вы получаете DINT#12000334 вместо ошибки (если сильная типизация) или DINT#8 с предупреждением о потере точности (если слабая типизация). Но именно такая хрень типа DINT#12000334 получается с комбинацией "DATE слева TIME справа". И по всем признакам (вроде необходимости делать REAL_TO_DINT) языки IEC61131 должны быть сильно типизированными.

    Даже ещё проще. Если возможно неявное приведение TIME к DATE в качестве одного из арифметических операндов, то должно быть возможно и приведение в качестве правого операнда присваивания, но ведь его нет:

    sshot.png

    Тупо баг компилятора, причём в третьей версии то же самое.
    Последний раз редактировалось Yegor; 13.01.2015 в 19:50.

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

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Если возможно неявное приведение TIME к DATE в качестве одного из арифметических операндов
    нет там никакого приведения, арифмитическая операция в процессоре идет не типами данных,а 32-разрядными словами, код я привел как получается ложная дата
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  4. #344
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    нет там никакого приведения
    Не будь приведения, была бы ошибка (см. скриншот 1 в посте №342).
    арифмитическая операция в процессоре идет не типами данных,а 32-разрядными словами
    Типы у процессора свои (32-разрядное целое — один из них).
    код я привел как получается ложная дата
    Не важно как и не важно ложная ли. Попытка сложить DATE и TIME с целью получить DATE должна считаться ошибкой в любом случае примерно как попытка сложить DINT и REAL в DINT (оба этих типа тоже можно интерпретировать как 32-разрядные целочисленные — см. на скриншоте как я заставляю это делать компилятор C++). У кодесиса факап ещё на этапе семантического анализа в части типобезопасности, а не на этапе кодогенерации или исполнения.
    Изображения Изображения
    Последний раз редактировалось Yegor; 14.01.2015 в 09:27.

  5. #345
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Картина маслом: симулятор смотрит на компилятор с недоумением и молчит

    inthashtrue.png

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

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Не будь приведения, была бы ошибка (см. скриншот 1 в посте №342).... ...я заставляю это делать компилятор C++).
    ошибка потому что из меньшего вычитается большее значения, компилятор начинает проверять можно ли такое находит что типы не совместимы и выыдает ругательство, а компилятор кодесисовский и какой то другой, да под разные процессоры совершенно разные, уж если на то пошло сравните как обращается с типами тот же Си и яваскрипт
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  7. #347

    По умолчанию

    Подскажите как в CoDeSys привязать визуализацию процесса к программе? Например, должно происходить наполнение бака жидкостью до определенного момента, после чего начинается опорожнение.

  8. #348

    По умолчанию

    Алгоритм описывается в программе. И только в программе.
    А визуализация привязывается просто к значениям переменной. В визуализации добавляете бар, и указываете в нем переменную, отвечающую за уровень бака. И БАР будет просто отображать значение этой переменной.

  9. #349

    По умолчанию

    Цитата Сообщение от Марат Перухин Посмотреть сообщение
    Подскажите как в CoDeSys привязать визуализацию процесса к программе? Например, должно происходить наполнение бака жидкостью до определенного момента, после чего начинается опорожнение.
    на ютубе видел примеры работы с барами по визуализации вот у этого человека в частности http://www.youtube.com/user/nhfdybr/videos

  10. #350

    По умолчанию

    подскажите пожалуйста нормальные методы загонять bit в word и нооборот
    вот тут я выложил пример http://www.owen.ru/forum/showthread....l=1#post172551 не уверен что действую правильно

Страница 35 из 37 ПерваяПервая ... 253334353637 ПоследняяПоследняя

Ваши права

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