Страница 72 из 130 ПерваяПервая ... 2262707172737482122 ... ПоследняяПоследняя
Показано с 711 по 720 из 1291

Тема: CODESYS V3.5. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.)

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

    По умолчанию

    keysansa вы не поняли, стандарт прозрачен, путаницу вносят производители, указывая то физический адрес, то логический как первый в карте регистров своих устройств.

  2. #712
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от ASo Посмотреть сообщение
    Читайте внимательно стандарт, там все описано.
    Регистры нумеруются с 1, адреса с 0. Зачем так сделано? Не знаю.
    Я прочитал и не раз. Поэтому и пишу, что не прозрачно.

  3. #713
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    keysansa вы не поняли, стандарт прозрачен, путаницу вносят производители, указывая то физический адрес, то логический как первый в карте регистров своих устройств.
    Я согласен, что производители вносят путаницу смещением. Но мне не понятно, что в части Modbus является физическим, а что логическим адресом, которые отличатся 1,2,3,4. Я так понимаю, что физический адрес переменной - это адрес памяти устройства, где хранится переменная, доступная обмену по Modbus по ее логическому адресу в таблицах. Но тогда у их смещения могут быть более одной страницы памяти, а никак не +1..4...
    Последний раз редактировалось keysansa; 13.11.2021 в 19:27.

  4. #714
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Коллеги, если кто-то хочет продолжить дискуссию чисто о Modbus (не применительно к конкретной ситуации с ПЛК, программируемыми в CODESYS V3.5) - создайте отдельную тему в курилке, пожалуйста.

    P.S. - про нюансы адресации с конкретными примерами можно почитать здесь (п. 1.1).

  5. #715

    По умолчанию

    Добрый день.
    Честно пытался найти на форуме ответ, но по "запросу" передний фронт (rising edge) ничего подходящего не нашел.

    В проект подлкючено несколько slave устройст. Естественно они орашиваются значительно дольше, чем идет цикл программы.
    Я хочу записывать значение в регистр слева, только если оно было изменено и по триггру "передний фронт".

    Вопрос:

    Если у меня цикле программы будет такая конструкция:

    IF A<>B THEN
    wNewValue:=B; //переменная привязанная к каналу
    xWriteValue:=TRUE; // триггерная переменная
    xWriteValue:=FALSE;
    END_IF;

    слейв заметит этот "передний фронт"?
    или надо держать триггер в TRUE и ждать когда значение регистра изменится и только потом сбразывать в FALSE?


    наверное есть какое то более надженое решение?

  6. #716
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    слейв заметит этот "передний фронт"?
    Нет, не заметит.

    или надо держать триггер в TRUE и ждать когда значение регистра изменится и только потом сбразывать в FALSE?
    При подобном подходе в некоторых конкретных ситуациях могут возникнуть проблемы: например, записываемое в слэйв значение выходит за допустимый диапазон.
    В результате слэйв не будет его обрабатывать, значение в регистре останется прежним и триггер навсегда зависнет в TRUE.

    наверное есть какое то более надженое решение?
    Есть типовое решение - использовать ФБ R_TRIG из библиотеки Standard для генерации переднего фронта команды записи.
    Чтобы говорить про "надежность" - для начала нужно определить ее критерии.

  7. #717

    По умолчанию

    Есть типовое решение - использовать ФБ R_TRIG из библиотеки Standard для генерации переднего фронта команды записи.
    ага. спасибо.

    я правильно понял, что после того как R_TRIG отработает, можно будет сразу скинуть тригерную переменную?

    Код:
    IF A<>B THEN
         wNewValue:=B; //переменная привязанная к каналу
    
         RTRIGInst(CLK:= TRUE);
         xWriteValue := RTRIGInst.Q;
         xWriteValue:=FALSE;
    
    END_IF;

  8. #718
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Нет, вы поняли неправильно.

    Код:
    IF A <> B THEN
         wNewValue := B; //переменная привязанная к каналу
    END_IF
    
    RTRIGInst(CLK:= (A <> B), Q => xWriteValue);
    Пояснение - передача значений переменных, привязанных к каналам, в коммуникационный драйвер происходит после выполнения цикла задачи, к которой привязана программа.
    "Промежуточные" значения (которые переменная принимает до окончания цикла) не учитываются.
    В обоих ваших примерах, которые выложены выше, переменная xWriteValue к концу цикла будет иметь значение FALSE - и коммуникационный драйвер "увидит" только его.

  9. #719

    По умолчанию

    Спасибо!

    а может посоветуете учебные материалы для изучения этого вопроса?
    или примеры использования откуда можно идеи списать)

  10. #720
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Цитата Сообщение от M.Juanito Посмотреть сообщение
    Спасибо!

    а может посоветуете учебные материалы для изучения этого вопроса?
    или примеры использования откуда можно идеи списать)
    Для изучения какого именно вопроса?

Страница 72 из 130 ПерваяПервая ... 2262707172737482122 ... ПоследняяПоследняя

Похожие темы

  1. Настройка ПР200, управление 3-мя устройствами через RS-485
    от Orbes в разделе Среда программирования OWEN Logic
    Ответов: 20
    Последнее сообщение: 15.05.2017, 16:45
  2. СП3ХХ Пример настройка обмена с ПЛК на CODESYS 2.3
    от Denis_Kay в разделе Панели оператора (HMI)
    Ответов: 6
    Последнее сообщение: 02.03.2017, 15:12
  3. Ответов: 43
    Последнее сообщение: 13.04.2015, 14:05
  4. Универсальная функция для обмена с устройствами OwenIO и всеми любимый LabView.
    от Алексей Крагель в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 30.05.2014, 14:38

Ваши права

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