Показано с 1 по 10 из 29

Тема: Оператор MOVE в owen logic

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

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

    По умолчанию А если нужно оставлять "старое" значение, то есть ни одно новое не надо?

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Написать свой, всего 2 минуты надо, например 1 Выбор SELECT.jpg
    Код:
    function GetEquip: udint;    
        var_input 
           Enable  : bool ; 
           State   : udint;
           C00,C01,C02,C03,C04,C05  : udint;
        end_var
       if Enable  then
          case State of
            0:  GetEquip := 0;     //       
            1:  GetEquip := C01;
            2:  GetEquip := C02;
            3:  GetEquip := C03;
            4:  GetEquip := C04;
            5:  GetEquip := C05;     
            
              else GetEquip := 0;  //   
          end_case
        else GetEquip := 0;  
       end_if 
    end_function
    А если нужно оставлять "старое" значение, то есть ни одно новое не надо? Я знаю, что выход пере запишется последним активным, что например не даст возможность перезаписывать с "экрана" или из канала modbus. Так что это не аналог MOVE.

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

    По умолчанию

    Цитата Сообщение от pro100nik Посмотреть сообщение
    А если нужно оставлять "старое" значение, то есть ни одно новое не надо? Я знаю, что выход пере запишется последним активным, что например не даст возможность перезаписывать с "экрана" или из канала modbus. Так что это не аналог MOVE.
    вместо else GetEquip := 0; записать старое значение и будет выполнено Ваше пожелание
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    вместо else GetEquip := 0; записать старое значение и будет выполнено Ваше пожелание
    Я именно так и сделал.
    Но представьте, что эта-же переменная записывается не только в коде но и по модбасу. В этом случае как понять, что нужно обновить эту переменную? Ответ: то, что придёт по модбасу будет затёрто "записать старое значение(else GetEquip := 0)".
    Естественно уже сделан костыль - в модбасе появляется лишняя битовая переменная активная если нужно "принять данные" по модбасу. Но для это на "той" стороне пришлось делать целый цирк с этой лишней битовой переменной.
    А поскольку эта переменная является уставкой то её нужно менять не только из кода или по модбасу, но и необходимо иметь возможность устанавливать с экрана контроллера. То есть появляется уже третий источник изменения. И тут уже опять "цирковое жонглирование переменными" для синхронизации актуальности данных.
    Эти проблемы не возникают там, где есть MOVE/MEMSET и т.п..

  4. #4
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,766

    По умолчанию

    Цитата Сообщение от pro100nik Посмотреть сообщение
    Я именно так и сделал.
    Но представьте, что эта-же переменная записывается не только в коде но и по модбасу. В этом случае как понять, что нужно обновить эту переменную? Ответ: то, что придёт по модбасу будет затёрто "записать старое значение(else GetEquip := 0)".
    Естественно уже сделан костыль - в модбасе появляется лишняя битовая переменная активная если нужно "принять данные" по модбасу. Но для это на "той" стороне пришлось делать целый цирк с этой лишней битовой переменной.
    А поскольку эта переменная является уставкой то её нужно менять не только из кода или по модбасу, но и необходимо иметь возможность устанавливать с экрана контроллера. То есть появляется уже третий источник изменения. И тут уже опять "цирковое жонглирование переменными" для синхронизации актуальности данных.
    Эти проблемы не возникают там, где есть MOVE/MEMSET и т.п..
    Да уж, очень странно, в смысле, я здесь изменял значения из нескольких мест и никаких проблем не возникало:

    https://owen.ru/forum/showthread.php...l=1#post376273

    Можно добавить и изменение с экрана, никаких проблем не возникнет, короче, мне кажется у Вас талант, в смысле, можете Вы создать проблему на ровном месте, у меня так не получается!
    Да, чуть не забыл, всё само синхронизируется, само - собой.

    32 Т-триггера + управление из нескольких мест(по сети).PNG
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

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

    По умолчанию

    Цитата Сообщение от pro100nik Посмотреть сообщение
    Ответ: то, что придёт по модбасу будет затёрто "записать старое значение(else GetEquip := 0)".
    ..
    Я считал что Вы понимаете код, который Вам предложили, Enable это переменная что с какого то направления пришло изменение, далее через кейс присваивается изменённое значение, если изменений нет, то берется значение с предыдущей итерации, что не так?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  6. #6

    По умолчанию

    Цитата Сообщение от pro100nik Посмотреть сообщение
    Я именно так и сделал.
    Но представьте, что эта-же переменная записывается не только в коде но и по модбасу. В этом случае как понять, что нужно обновить эту переменную? Ответ: то, что придёт по модбасу будет затёрто "записать старое значение(else GetEquip := 0)".
    Естественно уже сделан костыль - в модбасе появляется лишняя битовая переменная активная если нужно "принять данные" по модбасу. Но для это на "той" стороне пришлось делать целый цирк с этой лишней битовой переменной.
    А поскольку эта переменная является уставкой то её нужно менять не только из кода или по модбасу, но и необходимо иметь возможность устанавливать с экрана контроллера. То есть появляется уже третий источник изменения. И тут уже опять "цирковое жонглирование переменными" для синхронизации актуальности данных.
    Эти проблемы не возникают там, где есть MOVE/MEMSET и т.п..
    Ввод уставки с местной панели и от вышестоящей системы (панели оператора, облака...) можно выполнять в одну и ту же сетевую переменную. Так незамысловато получится реализация "кто последний - тот и папа".

    Изменение той же уставки из алгоритма - кроме случая ограничения значения в корректном диапазоне или откат к предыдущему корректному значению - это некорректно, т.к. полностью дискредитирует весь смысл ввода параметра оператором. Зачем вводить, если алгоритм изменит на собственное значение?

    Поэтому, нужно сначала понять, что требуется реализовать.

Похожие темы

  1. Owen Logic 2.1 нет экспорта устройства в Owen Cloud.
    от Григори в разделе Среда программирования OWEN Logic
    Ответов: 4
    Последнее сообщение: 12.10.2022, 19:33
  2. Добавление аварийных ситуаций в Owen Logic на ПР200 для отображения в Owen Cloud.
    от Григори в разделе Среда программирования OWEN Logic
    Ответов: 6
    Последнее сообщение: 07.07.2022, 11:09
  3. ПО OWEN Logic !!!
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 11.10.2011, 15:33
  4. OWEN Logic 1.2.0.14b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 40
    Последнее сообщение: 21.02.2011, 14:16
  5. OWEN Logic 1.1.0.11b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 58
    Последнее сообщение: 12.10.2010, 20:55

Метки этой темы

Ваши права

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