Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 35

Тема: Owen Logic ST язык программирования Structured Text

  1. #21

    По умолчанию

    Цитата Сообщение от sot Посмотреть сообщение
    Товарищ, я не понял.
    Прикол в том, что в симуляции оно работает и так и эдак.
    А вот на железе - совсем не так.
    см. видео в теме. я приложил и видео и проект для ИПП120.

    Или же я тебя не так понял.
    У вас ошибка в макросе ищите сами где, у меня в симуляции тоже 2 выдаёт, хотя вы пишите, что в симуляции всё работает.

    Зачем вам вообще строка newMode := cMode * 65536 + w;
    и SHR на выходе
    если вы можете прямо выход задать 1 или 0. Сами себя запутали.
    Макрос можно до 1 строки сократить. Без IF.. THEN вообще.

    Например так:

    Код:
      
    function newMode: bool;
        var_input
            prevMode : uDint; 
            Manual,
            Auto: bool;
        end_var
        
        newMode:= not Auto and manual;
    end_function
    А на выходе поставить преобразование в UDINT 1 Макрос Тест.jpg
    Последний раз редактировалось kondor3000; 27.12.2021 в 19:47.

  2. #22

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    У вас ошибка в макросе ищите сами где, у меня в симуляции тоже 2 выдаёт, хотя вы пишите, что в симуляции всё работает.

    Зачем вам вообще строка newMode := cMode * 65536 + w;
    и SHR на выходе
    если вы можете прямо выход задать 1 или 0. Сами себя запутали.
    Макрос можно до 1 строки сократить. Без IF.. THEN вообще.

    Например так:

    Код:
      
    function newMode: bool;
        var_input
            prevMode : uDint; 
            Manual,
            Auto: bool;
        end_var
        
        newMode:= not Auto and manual;
    end_function
    А на выходе поставить преобразование в UDINT 1 Макрос Тест.jpg
    Милый Кондор,
    если ты не понял зачем я умножаю на 65536 и потом смещаю на 16 бит, то поучись заново, ок?

    По сути.
    Мой алгоритм подразумевает цикличность программы исполнения, а не то говно, которое ты предоставил публике.

    Ещё раз, для тех кто в танке!

    ПОСМОТРИТЕ ВИДЕО и ПРОГРАММУ.
    если в программе изменить строку
    if not Manual then
    на
    if Manual=false then

    то всё работает на железе.

    АУ! РАЗРАБОТЧИКИ
    ПРОКОММЕНТИРУЙТЕ!


    case prevMode of
    0:
    if manual then
    cMode := 1;
    end_if;

    1:
    if not Manual then
    cMode := 2;
    end_if;

    2: cMode := 2; //приехали
    end_case;
    //SOt

  3. #23

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    У вас ошибка в макросе ищите сами где, у меня в симуляции тоже 2 выдаёт, хотя вы пишите, что в симуляции всё работает.

    Зачем вам вообще строка newMode := cMode * 65536 + w;
    и SHR на выходе
    если вы можете прямо выход задать 1 или 0. Сами себя запутали.
    Макрос можно до 1 строки сократить. Без IF.. THEN вообще.

    Например так:

    Код:
      
    function newMode: bool;
        var_input
            prevMode : uDint; 
            Manual,
            Auto: bool;
        end_var
        
        newMode:= not Auto and manual;
    end_function
    А на выходе поставить преобразование в UDINT 1 Макрос Тест.jpg
    Кондор,
    покажи как у тебя выдаёт 2 в симуляции на моей программе.
    иначе - ты врёшь.
    //SOt

  4. #24

    По умолчанию

    Цитата Сообщение от sot Посмотреть сообщение
    Кондор,
    покажи как у тебя выдаёт 2 в симуляции на моей программе.
    иначе - ты врёшь.
    Во первых, я вам не тыкал, во вторых, вы даже свою программу не можете проверить, а утверждаете, что NOT не работает. Сделайте простой пример с одним IF , а не видео где у вас что то не так работает.
    Как я проверял, подал на маску 4096, чтобы сработал выход isS_MANUAL, а потом подал 0, чтобы выход выключился,
    и переменная Mode из 1 переключается в 2. Смотри скрин. 1 Пример работы.jpg
    В третьих, общение в подобном тоне считаю недопустимым. Можете продолжать писать гадости самому себе.
    Вложения Вложения
    Последний раз редактировалось kondor3000; 28.12.2021 в 14:52.

  5. #25

    По умолчанию

    Цитата Сообщение от sot Посмотреть сообщение
    Кондор,
    покажи как у тебя выдаёт 2 в симуляции на моей программе.
    иначе - ты врёшь.
    Итак. Код у Вас специфический т.к. NOT - побитовая операция, а автоприведение типов в данном случае не работает.
    Рассмотрим поведение кода:

    В случае IF NOT MANUAL THEN
    Ни присваивания, ни приведения типов нет, т.е. идёт сравнение результата NOT MANUAL с нулём.
    Результат NOT MANUAL - число UDINT.
    Если MANUAL=0 - результат равен 0xFFFFFFFF
    Если MANUAL=1 - результат равен 0xFFFFFFFE
    если использовать (NOT MANUAL) в IF - всегда будет TRUE, т.к. FALSE =0, а TRUE - это любое значение, что не FALSE.

    Вот и происходит такое поведение.

    Что делать?
    IF (NOT MANUAL=false) then

    Ну Вы это и сами нашли.

    Нам тоже есть что поправить чтобы среда предупреждала или сама приводила типы.
    Тролль-наседка, добрый, нежный и ласковый

  6. #26
    Пользователь
    Регистрация
    14.07.2021
    Адрес
    Орел
    Сообщений
    89

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    если использовать (NOT MANUAL) в IF - всегда будет TRUE, т.к. FALSE =0, а TRUE - это любое значение, что не FALSE.
    Теоретики уже все объяснили. Я проверил на ПР и все действительно так. И разницы между NOT и not никакой.
    Самое досадное, как по мне, что эмуляция не то что не сообщает об ошибке, она все отрабатывает как нужно. А ПР нет. Вот этот код всегда выдает 2
    if manual then
    function3 := 1;
    end_if;
    if NOT manual then
    function3 := 2;
    end_if;
    Что очевидно из предыдущего поста. Но мы же привыкли писать !а в других языках. Так что многие попадут в эту ловушку NOT a, тем более, что симуляция отрабатывает все как надо. Хотя почему то не все привыкли, что функция в любом языке возвращает одно значение и требуют здесь возврата нескольких... Хотя можно вернуть массив и потом решить задачу его распаковки
    А вот это условие ведь тоже не имеет смысла и всегда равно false? верно я понимаю???
    IF (NOT MANUAL=false) then

  7. #27
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,135

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Результат NOT MANUAL - число UDINT.
    Разъясните, пожалуйста: Manual - тип bool, а логическое выражение not Manual - udint?

  8. #28
    Пользователь
    Регистрация
    14.07.2021
    Адрес
    Орел
    Сообщений
    89

    По умолчанию

    if (NOT manual) = udint_to_bool(1) then
    Вот так компилятор пропускает. При попытке сравнить с числом -пишет о несоответствии типов. Выходит чтo bool....

  9. #29
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,135

    По умолчанию

    Просто выражение A := not B в железе тоже ерунду выдает. Получается, что ПР воспринимает в ST тип bool как udint и соответственно обрабатывает, а лоджик обрабатывает bool как bool - вот и ерунда получается
    Последний раз редактировалось Dimensy; 28.12.2021 в 15:40.

  10. #30
    Пользователь
    Регистрация
    14.07.2021
    Адрес
    Орел
    Сообщений
    89

    По умолчанию

    Но ведь как писали выше not Bool - всегда равно истина. Я вообще не понимаю как и где можно тогда применять NOT. Походу его вообще лучше не применять пока. А условия от греха подальше всегда писать полные = false, да и = true, на всякий случай.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Язык программирования IL
    от Berlioz в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 25.06.2020, 10:25
  2. Новый раздел "Среда программирования OWEN Logic"
    от Евстигнеев Максим в разделе Программируемые реле
    Ответов: 68
    Последнее сообщение: 17.08.2016, 08:30
  3. Ответов: 10
    Последнее сообщение: 21.06.2014, 21:12
  4. Язык программирования CFC
    от Мага в разделе ПЛК1хх
    Ответов: 53
    Последнее сообщение: 21.02.2014, 16:19
  5. OWEN Logic 1.1.0.11b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 58
    Последнее сообщение: 12.10.2010, 21:55

Ваши права

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