Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 35

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

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

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

    По умолчанию

    Что вы тут базар развели, я уже всё протестировал давно. NOT надо писать (большими буквами), а не not. Всё работает, даже пример выкладывал.

    UprZam :=(Kn AND Dv AND NOT UF AND NOT Zam) ;

    После уже автомат состояний написал на IF ... THEN, тоже работает.
    Вложения Вложения
    Последний раз редактировалось kondor3000; 27.12.2021 в 16:47.

  2. #2

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Что вы тут базар развели, я уже всё протестировал давно. NOT надо писать (большими буквами), а не not. Всё работает, даже пример выкладывал.
    Как все просто.

  3. #3

    По умолчанию

    Давайте ещё одну тему.

    Использование имён переменных.

    Каким-то образом внутренние переменные функций попадают в общий стэк переменных и им вредят,

    простая проверка - создать вход на рабочем поле с именем "А", и создать функцию, где на входе будет переменная именем "а"

    после этого в проэкте начинается трэш.
    Переменные все косячатся.

    КУ?
    //SOt

  4. #4

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Что вы тут базар развели, я уже всё протестировал давно. NOT надо писать (большими буквами), а не not. Всё работает, даже пример выкладывал.

    UprZam :=(Kn AND Dv AND NOT UF AND NOT Zam) ;

    После уже автомат состояний написал на IF ... THEN, тоже работает.
    Кондор, респект!
    (не могу проверить, заказ уже ушел)

    Есть кто на форуме, кто подтвердит, что конструкции not Var и NOT Var - отличаются в исполнении ???
    ПЛИЗ
    //SOt

  5. #5

    По умолчанию

    Цитата Сообщение от sot Посмотреть сообщение
    Кондор, респект!
    (не могу проверить, заказ уже ушел)

    Есть кто на форуме, кто подтвердит, что конструкции not Var и NOT Var - отличаются в исполнении ???
    ПЛИЗ
    Проверил и not в симуляции, работает тоже в IF ... THEN

  6. #6

    По умолчанию

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

    Или же я тебя не так понял.
    //SOt

  7. #7

    По умолчанию

    Цитата Сообщение от 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.

  8. #8

    По умолчанию

    Цитата Сообщение от 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

  9. #9

    По умолчанию

    Цитата Сообщение от 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

  10. #10

    По умолчанию

    Цитата Сообщение от 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

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

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

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

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

Ваши права

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