Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Modubs через Ethernet; Входы МДВВ

  1. #1
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию Modubs через Ethernet; Входы МДВВ

    Приветствую всех!
    Снова появилась пара вопросов. На этот раз они касаются связи 2-х и более контроллеров по сети Ethernet, а также чтения дискретных входов на модуле МДВВ.
    1. Есть 2 контроллера ПЛК-150. Контроллеры соединены через свитч. Контроллер №1 имеет адрес 10.0.0.10, контроллер №2 - адрес 10.0.6.12. Также с свитчу подключается ноутбук с CoDeSys.
    К контроллеру №1 по интерфейсу RS-485 с использованием протокола Modbus подключены несколько устройств, работой которых он, собственно, и управляет.
    Контроллер №2 должен считывать некоторые данные с контроллера №1 (для выполнения последующих операций), а также передавать некоторые значения контроллеру №1. Наиболее удачный вариант для этого, по моему мнению - это использование сетевых переменных. Т.е. часть переменных изменяет первый контроллер, а читае их второй. Другую часть изменяет второй контроллер, а читает первый.
    Данные решили передавать по протоколу Modbus. Вроде бы всё верно настраивал, по документации. Список сетевых переменных одинаковый. Но ситуация получается такая.Если в онлайне смотреть переменные первого контроллера, пронициализированы должным образом только его переменные. У второго контроллера ситуация аналогичная. А по идее в списке любого контроллера должно быть, так сказать, объединение проинициализированных переменных обоих контроллеров.
    Может быть нет связи между контроллерами? как ее проверить?
    Контроллер №2 является Modbus Master, режим работы - TCP. У него создан Universal Modbus device, у которого указан IP-адрес контроллера №1. У контроллера №1 создан Modbus Slave c режимом работы по TCP.

    2. К контроллера подключен модуль МДВВ по RS-485 Modbus. В конфигураторе ПЛК добавлен модуль OWEN_MDVV. Связь устанавливается. Возник вопрос по считыванию значений на входах модуля. Понятно, что он хранится в регистре Bit Mask for input.Если текущее значение этого регистра перевести в двоичку, то получим статус входов (с 12 до 1). А есть ли какой-нибудь реализованный смеханизм, чтобы без лишних вычислений узнать, скажем, состояние входа №4?

  2. #2
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    Ворос 2, думаю, можно снять. В библиотеке Util.lib нашел нужную мне функцию.

  3. #3

    По умолчанию

    1. Проекты обоих контроллеров в студию
    2. Самый простой способ - наложить маску и сравнить с нулем.

  4. #4
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    Вот пример проектов.
    Projects.rar

  5. #5

    По умолчанию

    гм... Как бы сказать-то.
    1. Или Вы используете сетевые переменные или ModBus TCP.
    2. Если ModBus TCP - то вставьте хотя-бы по одной переменной в мастер и slave.
    3. Если же сетевые переменные - то на контроллере №1 надо создать список переменных, к-е будут передаваться, а на №2 - читаться те же.
    Прилагаю пример.
    Вложения Вложения

  6. #6
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

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

  7. #7
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    У меня еще пара вопросов.
    1. Можно ли каким-либо образом в программе, написанной на языке ST, задать бесконечный цикл типа
    WHILE (TRUE) DO
    (*здесь ведется опрос входов и выполняются какие-либо действия*)
    END_WHILE.
    При попытку запустить такую программу на контроллере, вылетает ошибка о бесконечном цикле.

    2. Есть функциональный блок, который хочу использовать в различных участках своей программы. Блок написан на SFC. Основная программа тоже. Как вызвать блок - в общем-то понятно. Но куда должен указывть переход в конце выполнения ФБ?

  8. #8

    По умолчанию

    По вопросу 1: такие поползновения обычно бывают у людей переходящих с С на ST. В ПЛК такой цикл невозможен да и не нужен. Программа сама по себе работает по схеме: опрос входов-"какие-либо действия"-запись выходов, т.е. цикл реализован как бы поумолчанию.

  9. #9

    По умолчанию

    Цитата Сообщение от xScar2003 Посмотреть сообщение
    У меня еще пара вопросов.
    1. Можно ли каким-либо образом в программе, написанной на языке ST, задать бесконечный цикл типа
    WHILE (TRUE) DO
    (*здесь ведется опрос входов и выполняются какие-либо действия*)
    END_WHILE.
    При попытку запустить такую программу на контроллере, вылетает ошибка о бесконечном цикле.

    2. Есть функциональный блок, который хочу использовать в различных участках своей программы. Блок написан на SFC. Основная программа тоже. Как вызвать блок - в общем-то понятно. Но куда должен указывть переход в конце выполнения ФБ?

    1. бесконечный цикл уже реализован, все инструкции в PLC_PRG выполняются с начала в конец. Доп. бесконечные циклы нельзя создавать, сработает Watchdog.
    2. Просто return, контроллер сам разберется откуда вызвали экземпляр ФБ и передаст управление на сл. строку после вызова.

  10. #10
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    Если в ФБ, написанном на SFC, конечный переход указываю как RETURN, компилятор выдает ошибку 4356 "Jump without valid Step Name: 'RETURN' ". Как быть?

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

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