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

Тема: Двухсторонне связывание переменных в Codesys V2. Как?

  1. #1

    По умолчанию Двухсторонне связывание переменных в Codesys V2. Как?

    Столкнулся на днях с довольно простой на вид задачей (удивительно, что только сейчас):
    Необходимо сделать двухстороннее связывание внутренней переменной FB с переменной Modbus (для реализации read/write).
    Испорченный высокоуровневым программированием мозг начал сразу рисовать в голове всякие observable, onValueChanged и т.д.

    Но ведь есть же какое-то более простое решение, не такое дорогое (время, память), чем городить описанное выше.
    Поделитесь, пожалуйста, примерами/идеями.

  2. #2
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    771

    По умолчанию

    In_out переменные просто в FB делаешь. И напрямую переменную с модбас запихиваешь. Она ещё и retain будет если модбас слейвом.
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

  3. #3

    По умолчанию

    Цитата Сообщение от murdemon Посмотреть сообщение
    In_out переменные просто в FB делаешь. И напрямую переменную с модбас запихиваешь. Она ещё и retain будет если модбас слейвом.

    А если между переменной структуры (user data type), объявленной в global variables и переменной Modbus в PLC Configuration?


    UPD:
    Экземпляр FB ниже съедает 13 байт.
    Может какое-нибудь встроенное решение у Codesys есть?

    Скрытый текст:
    Код:
    FUNCTION_BLOCK TwoWayBinding
    
    VAR_IN_OUT
    	plcVar: INT;
    	modVar: INT;
    END_VAR
    
    VAR
    	init: BOOL;
    	_lastPlcVar: INT;
    	_lastModVar: INT;
    END_VAR
    
    IF init THEN
    
    	IF plcVar <> _lastPlcVar THEN
    		modVar := plcVar;
    	ELSIF modVar <> _lastModVar THEN
    
    		(* TODO: Тестовая валидация *)
    		IF modVar > 100 THEN
    			modVar := 100;
    		END_IF;
    
    		plcVar := modVar;
    
    	END_IF;
    
    END_IF;
    
    init := TRUE;
    
    _lastModVar := modVar;
    _lastPlcVar := plcVar;
    Последний раз редактировалось vapik; 14.07.2018 в 13:07.

  4. #4
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    771

    По умолчанию

    Можно в FB работать с указателем на структуру. И передавать просто адрес первой переменной модбас. Ну это изврат.
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

Похожие темы

  1. Мониторинг переменных тип INT(real) B codesys
    от славаолд в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 16.06.2016, 06:54
  2. Объявление глобальных переменных в LD CODESYS 2.3
    от славаолд в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 09.05.2016, 15:52
  3. Ответов: 6
    Последнее сообщение: 09.09.2015, 21:26
  4. Проблема связывание WinCC с ТРМ202
    от Пак в разделе Другие SCADA системы
    Ответов: 1
    Последнее сообщение: 12.08.2009, 11:27
  5. Проблема связывание WinCC с ТРМ202
    от Пак в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 12.08.2009, 11:27

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

Ваши права

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