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

Тема: Связь с Modbus-Slave, но этот Modbus-Slave он сам контроллер

  1. #1

    Question Связь с Modbus-Slave, но этот Modbus-Slave он сам контроллер

    Добрый день!
    Заранее прошу прощения, если всё это уже есть где-то в FAQ-ах

    Есть контроллер Delta DVP. Он сам себе Modbus-хранилище данных
    К нему подключено панель Weintek
    Вот я объявляю в Weintek float32-переменную, говорю, что она сидит на регистрах D125-D126
    Вывожу переменную на мнемосхему. Теперь она читается с контроллера двумя регистрами и корректно отображается как float32. Если переменная изменяется изнутри на стороне контроллера - её значение обновляется на мнемосхеме. Т.е., чтение регистров D от Delta происходит ПОСТОЯННО
    Теперь я могу тыкнуть на неё прямо на мнемосхеме - и изменить ей значение. После этого Weintek отправит ОДИН запрос на контроллер для изменения значения.

    Теперь хотим вместо Weintek-а использовать ОВЕН. Так как быть?
    Можно создать канал для чтения этих двух регистров, результат двух WORD-ов преобразовать в Real, вывести всё это на мнемосхему.
    А как записывать? Создавать отдельный канал на запись двух регистров и писать их по биту, который выставлять при изменении значения с экрана?
    А если таких переменных сотня? Сто каналов? Сто разных битов?
    Как сделать красиво? Может, через структуры?

    P.S. В данном примере вместо Delta может выступать, например, другой контроллер ОВЕН, или даже ещё один другой Weintek, без разницы. Лишь бы было Modbus-пространство, где можно читать и писать по одним и тем же Modbus-адресам
    Спасибо за подсказки
    Последний раз редактировалось aaaSashaMGGU; 01.11.2025 в 22:02.

  2. #2

    По умолчанию

    Цитата Сообщение от aaaSashaMGGU Посмотреть сообщение
    А если таких переменных сотня? Сто каналов? Сто разных битов?
    Как сделать красиво? Может, через структуры?
    Я бы тогда взял бы библиотеку OCL и создал бы свой FB, который отслеживал бы изменения и решал - надо ли записать или нет.
    И закрутил это реально в массив FB в цикл. Ща, под ночь плохо поясняю, буду писать криво.

    1. Массив FB - чтобы окучивать их в цикле последовательно и, если FB нам говорит, что значение изменилось - то тогда его и писать в OCL.
    Пусть бы FB имел внутри Текущее и Предыдущее значения. Если они не равны - выдавал некий флаг.
    И на входе у него тоже был бы флаг типа Reset, который скидывал бы выходной флаг.
    Смысл в том, что Modbus - медленная хреновина. И если все FB сразу обновятся - он этого не отловит.
    Поэтому FB, как обновился, ставит какой-то флаг.
    А наш цикл идёт по каждому FB и выдаёт его в OCL для записи в Modbus и только потом этот флаг скидывает.

    2. Чтобы в коде красиво обращаться к массиву FB - забахать для его индексов константы. Чтобы было типа arrValues[PRESSURE_AIR_OUTDOOR].Value, а не arrValues[322].Value
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  3. #3

    По умолчанию

    А кастомизация Codesys 3.5 для Овен разве не имеет сетевых переменных, которые и в обмене с вышестоящей системой (например, панелью) участвуют и в алгоритме? Такие переменные есть у Owen Logic и у Codesys 2.3.
    Просто работаю с кастомизацией CDS 3.5 для другого производителя - имеется такая сущность "сетевые переменные". Хотя, возможно переменными обмениваться и по отдельности и групповыми запросами с дальнейшей постобработкой полученного массива.

  4. #4

    По умолчанию

    Затрудняюсь с организацией Modbus в CDS 3.5 для Овен ПЛК2хх, скажу за панели Weintek - они позволяют в простейшем случае описать все переменные и обмениваться с ПЛК в описанном Вами режиме - непрерывное чтение и запись по изменению в поле ввода. Для описания в Weintek я бы воспользовался экспортом переменных из ПЛК (настоящим или импровизированным), скриптом для преобразования файла в формат импорта в Weintek и, собственно, импортом переменных.

    А в более сложном случае, можно организовать чтение и запись по нужным адресам при помощи скриптов. Единственное ограничение - память для группового чтения сильно ограничена, т.е. невозможно одним скриптом считать 100+ переменных и обработать их.
    Мне даже попадались скрипты с настройкой адресов Modbus, которые вызывались при нажатии на элементы мнемосхем - кнопки, поля ввода и прочее.

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

    По умолчанию

    Вообще не ясен вопрос. Есть ПРОТОКОЛ. какая разница, какая панель или ПЛК? Если производителем заявлена работа с этим протоколом, смотрите документацию на панель или ПЛК по настройке.

    Если вам производитель пишет, что для сборки float, вы должны лечить зубы через ж... Там возникает другой вопрос. Об адекватности производителя. Или импортозамещение так прижало, что вы к проктологу зубы пошли лечить?

Похожие темы

  1. Ответов: 6
    Последнее сообщение: 21.12.2023, 21:13
  2. Связь по MODBUS СПК110 MASTER ПЛК160M SLAVE
    от alex_ku в разделе СПК210, СПК1xx [М01]
    Ответов: 4
    Последнее сообщение: 18.07.2022, 09:20
  3. Weintek eMT3070B (master) + ПР200(slave)+Контроллер ГА (slave) по RS-485
    от Gonofar в разделе Программируемые реле
    Ответов: 4
    Последнее сообщение: 08.08.2020, 21:40
  4. Ответов: 2
    Последнее сообщение: 04.06.2019, 16:55
  5. Ответов: 5
    Последнее сообщение: 14.10.2010, 13:42

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

Ваши права

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