Страница 69 из 130 ПерваяПервая ... 1959676869707179119 ... ПоследняяПоследняя
Показано с 681 по 690 из 1291

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

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

    По умолчанию

    Цитата Сообщение от jury_yamal Посмотреть сообщение
    Добрый день.
    Никак не могу разобраться с обменом по Modbus. Прочитал форум / примеры не могу понять как заставить работать обмен как мне надо (видать что-то упускаю из виду).
    Допустим есть некая переменная уставки iSpFlow:Int:=20 с начальным значением 20. Задача менять уставку из кода программы (по каким либо условиям), из веб визуализации (TCP)
    и по сети Modbus (485) в случаях больших расстояний (=>100 м).
    Вторая задача включать /отключать ,менять настройки аналогового входа в модулях МВ 210-101. Получается только если не завязывать на одну структуру чтение и запись входа.
    Допустим используя только одну структуру типа ANALOG_SENSOR_SETTING для чтения и записи.
    Пытаюсь все сделать на стандартных компонентах и с использованием шаблонов овен для модуля мв210-101 в SP16.
    И последний самый нубский вопрос. Во многих примерах используется булевая переменная для выполнения однократных действий (запись настроек/ чтение по переднему фронту) есть ли в CODESYS переменная типа BOOL с авто сбросом (на 1 цикл ПЛК) или как выглядит FB или код.
    Добрый день.

    1. Посмотрите этот пример (он для TCP, но для RTU принцип аналогичен):
    https://youtu.be/Q3hqQlqcESo?t=5501

    2. Так не получится - в любом случае потребуется как минимум два экземпляра структуры (отдельно для чтения и записи).

    3. Переменных с автосбросом нет - обычно используют блоки R_TRIG / F_TRIG (они генерируют единичный импульс по переднему / заднему фронту входной BOOL-переменной).

  2. #682

    По умолчанию

    Добрый вечер.
    По п.1 - смотрел еще в прошлый раз (сообщение#673). В том- то и дело что не могу понять зачем заводить 3 переменные для изменения одного значения (одну для чтения внутри плк rPLC, одну для записи по сети wPLC и еще одну булевую для записи значения из плк в слейв. Поэтому и написал что что-то не понимаю -упускаю из виду. Возможно это связанно с атомарностью данных? Почему допустим нельзя в программе просто записать значение в переменную привязанную к слейву. Если в данный момент слейв не менял переменную? Не понимаю.

    По п.2 - Спасибо принял к сведению.

    По п.3 Про триггеры знал. Я имел ввиду как у вас в примере- вы взводите переменную в TRUE где-то в конце кода , а потом проверяете (в следующем цикле )равна ли она true и если равна записываете в слейв и сбрасываете. То есть это в любом случае делать самому? И последнее в в веб визуализации есть переменные которые становятся в TRUE на один цикл? (нажатие кнопки? или обрабатывать в программе)
    С уважением Юрий.

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

    По умолчанию

    Почему допустим нельзя в программе просто записать значение в переменную привязанную к слейву.
    "Просто" - это как?
    В примере, действительно, 3 переменных:
    - фактическое значение в слэйве (wSlave)
    - значение, подготовленное для записи в слэйв со стороны ПЛК (wPlc)
    - команда записи

    Какая из них вам кажется излишней?


    То есть это в любом случае делать самому?
    Или так, или через триггеры.

    И последнее в в веб визуализации есть переменные которые становятся в TRUE на один цикл? (нажатие кнопки? или обрабатывать в программе)
    У кнопок есть параметр Нажатие - привязанная к нему переменная принимает TRUE на время зажатия кнопки.
    Обычно эту переменную в программе обрабатывают через R_TRIG / F_TRIG для генерации единичного импульса в момент нажатия / отжатия.

  4. #684

    По умолчанию

    Спасибо Евгений за ответы.
    Но по пункту один все равно недопонимание.
    Как я понимаю:
    пусть переменную в слейве мы считываем с неким периодом, если надо то пишем в нее . На данном этапе зачем нам флаг записи?
    то же самое из ПЛК.
    Единственно зачем по мне нужен флаг записи- это если мы начали читать допустим по сети и в этот момент изнутри кода в ПЛК мы пытаемся записать в эту переменную новое значение.
    Тогда при отсутствии блокировок или отложенной записи данные будут неоднозначные. Больше не могу придумать зачем 3 переменные.

    по п.3. Вопрос возник из за того что этот флаг записи надо постоянно взводить и сбрасывать для последующей записи (когда она понадобится).
    Последний раз редактировалось jury_yamal; 11.10.2021 в 07:27.

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

    По умолчанию

    пусть переменную в слейве мы считываем с неким периодом, если надо то пишем в нее . На данном этапе зачем нам флаг записи?
    А как вы определите, что в какой-то момент надо записать значение в слэйв, если у вас нет флага записи?
    Без флага возможна только циклическая запись - но тогда мастер по интерфейсу ничего не сможет записать в слэйв (так как слэйв будет перезаписывать значение мастера своим собственным).

  6. #686

    По умолчанию

    Я же говорю про недопонимание свое.
    Если мы записали в память по некому адресу переменную, зачем нам каждый цикл в нее что-то записывать (если данные не менялись)?
    Считывать в каждом цикле проблем нет.
    В программе для PC мы же не ставим флаги записи (в рамках одного потока). Отсюда и недопонимание.
    Последний раз редактировалось jury_yamal; 11.10.2021 в 15:39.

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

    По умолчанию

    Если мы записали в память по некому адресу переменную, зачем нам каждый цикл в нее что-то записывать (если данные не менялись)?
    Все правильно - записывать каждый цикл незачем. Разумно записать значение один раз в нужный момент времени.
    Как вы предлагает это сделать без флага записи в ПЛК, который ориентирован на циклическое исполнение своих задач?

    В программе для PC мы же не ставим флаги записи (в рамках одного потока).
    Не соглашусь - это зависит от конкретной программы.
    В некоторых точно так же используются флаги.

  8. #688

    По умолчанию

    Спасибо еще раз за ответы.
    Надо просто принять это как данность и двигаться дальше.

  9. #689

    По умолчанию

    Добрый вечер!

    Подскажите, плз. Создал Modbus TCP Slave на контролере ПЛК-210.
    owen.jpg

    Все сегменты переменных настроены с адреса 0x0000. Длина массива Holding 20 значений, Input 100 значений.

    Отправляю команду: \x00\x01\x00\x00\x00\x06\x01\x04\x00\x00\x00\x0A. Дешифровка:
    0001 Transaction identifier 0x0001 (1)
    0000 Protocol identifier 0 = MODBUS protocol
    0006 Length 0x0006 (6)
    01 Unit identifier 0x01 (1)
    04 Function code 0x04 (4) - Read Input Registers
    0000 Starting address Physical: 0x0000 (0) Logical: 0x0001 (1)
    000A Quantity 0x000A (10)

    Получаю ответ: 0001 0000 0003 0184 03 Дешифровка:
    0001 Transaction identifier 0x0001 (1)
    0000 Protocol identifier 0 = MODBUS protocol
    0003 Length 0x0003 (3)
    01 Unit identifier 0x01 (1)
    84 Error code 0x80 + 0x04 (4) - Read Input Registers
    03 Exception code [03] ILLEGAL DATA VALUE

    Я пробовал менять код функции (3 или 4), адрес (0, 1, 0x1000), пробовал менять число байт для чтения (0, 1, 2, 10, 20). Ничего не помогает.

    Еще я менял Slave ID в запросе (предполагая, что при отсутствии TCP Slave ID=2, 3 и так далее, ответ должен быть другой). Но ответ точно такой же. Вообще есть ощущение, что это не ответ слейва, а некий универсальный ответ ПЛК, который считает, что в системе не настроен ни один Slave.

    С чем может быть связана проблема?
    Последний раз редактировалось Stan_1; 23.10.2021 в 20:00.

  10. #690

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

Похожие темы

  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

Ваши права

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