Контроллер Z401 не связывается с контроллером Z400

Автор Danial, 14 июня 2017, 18:00:56

« назад - далее »

Danial

Здравствуйте. Я столкнулся с такой проблемой, что контроллер Z400, показанный на схеме в приложении, не может обратиться к переменным контроллера Z401 (блоками R(slave), W(slave)). Эти блоки выдают ошибку 16 (нет ответа от устройства в течение установленного таймаута).
Если перевести контроллер Z400 в режим моста и попробовать обновить контроллер Z401, то он выдаёт ошибку "Несовпадение контрольной суммы". Хотя если на шину порта СОМ1, контроллера Z400, посадить пульт Z033 - они работают нормально.
Если же подключить адаптер с контроллеру  Z401 напрямую, то обновляется и программируется он нормально. Через утилиту Modbus Poll к нему так же можно обратиться.
Подскажите, может на контроллерах какие-то дип-переключатели нужно включить? Или я что-то в настройках мог не учесть?

mike

А какая программа загружена в контроллеры?
Можно посмотреть проект?

Danial

Да. Проект с шаблонами в приложении.

serov

Если честно я не разбирался с блоком "Запись по Modbus" и делал всегда так.
К тому же в описании однозначно написано:
Запись по Modbus - этот блок позволяет, в режиме подчиненного устройства Modbus, обработать команду записи, полученную от главного. На выходе «val» появляется (на время одного цикла) значение, полученное в команде записи, а на выходе «rdy» - признак получения команды записи. При отсутствии команды на этих выходах всегда присутствует 0.

VoronovMaksim88


mike

#5
Добрый день!
Посмотрел вашу программу.
Можно дать несколько советов?
Я не разбирался детально в коде, потому что он не очень удобно написан.
Пожалуйста, как бы вы не спешили, создавайте "красивую" программу, - в ней будет проще самому разобраться через 2-3 года. Это касается любого дела, которое ты делаешь в жизни, даже когда это не касается программ)).

Давайте я кратко пробегусь по узлам:

1. "Буря в стакане воды"
Посмотрите сколько преобразований!
Так конечно же можно сделать, но смысл?

Гораздо проще все привести к одному масштабу.
Блок ABS не нужен, достаточно в свойствах блока преобразователя типа данных поставить свойство "установить граничное значение"

mike

2. Если вам не нужна детекция действий от главного, то зачем вы сменили тип переменной? Достаточно сделать так:

mike

Так же, у вас не заблокированы переменные в карте подчиненного, это может быть большой проблемой.
Надо сделать блокировку адресов:

mike

Ну и большое упущение, что вы не пользуетесь симулятором. Он вас бы ускорил в 200 раз.

Для вашего проекта можно создать вот такую структуру:

mike

Что изображено на этой картине?
Порт VCOM0 используется как виртуальная среда передачи данных от мастера к подчиненным.
Причем, если "Порт 5" настроить на реальный порт компьютера, то к нему можно будет подключить реальную панель и она будет опрашиваться.
Если  "Порт 1" настроить на другой реальный порт компьютера, то из вне можно запрашивать основной контроллер.
То есть у вас получится симуляция 2х контроллеров в виртуальном пространстве, которое может взаимодействовать с реальным миром.
Не забудьте поставить эту галочку в свойствах всех виртуальных портов.

mike

Смотрим результат (мне панель лень было к компу цеплять, но взаимодействие 2х контроллеров можно увидеть на скриншоте)

То, что помечено цифрой 1 - это мастер, цифрой 2 - подчиненный.

Проект прикрепил.

Danial

mike, спасибо конечно за то, что вы показали как делать симуляцию 2-х контроллеров, и за замечания, но судя по последним скриншотам вы делали отладку только в виртуальной среде, потому как на входах Ain1-Ain3 контроллера Z401 нули. На реальном контроллере при разомкнутом аналоговом выходе там было бы 1023.
Вы не пробовали подключать реальные контроллеры  Z400 и Z401? Они у вас нормально взаимодействуют?


mike

Нули, потому что я в симуляторе указал ноль на вход.

mike

Цитата: Danial от 15 июня 2017, 10:52:58
mike, спасибо конечно за то, что вы показали как делать симуляцию 2-х контроллеров, и за замечания, но судя по последним скриншотам вы делали отладку только в виртуальной среде, потому как на входах Ain1-Ain3 контроллера Z401 нули. На реальном контроллере при разомкнутом аналоговом выходе там было бы 1023.
Вы не пробовали подключать реальные контроллеры  Z400 и Z401? Они у вас нормально взаимодействуют?

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

Danial

Цитата: mike от 15 июня 2017, 10:57:56
В реальной жизни контроллеры будут вести себя подобным образом, за исключением помех в линии.
Я показал принцип отладки обмена по сети.

В общем разобрался я, что с ним было не так. Дело в том, что изначально контроллера были расключены так, как показано на схеме 1 в приложении. И по всей видимости, то ли через клапан, то ли через "общий" трансформатор, получалась какая-то гальваническая завязка. Я правда не знаю, что там китайцы понамутили в этом железе, и каким образом и почему, эта завязка влияет на СОМ-порт, но она влияет на СОМ-порт совершенно точно, потому как после того, как я поставил контроллеру Z401 отдельный трансформатор на 12В, связь между контроллерами нормализовалась.

Ещё одна неприятная штука случилась, после того, как я попробовал замкнуть входы GND контроллеров Z400 и Z401 (ещё тогда, когда оба контроллера сидели на одном трансформаторе, как на схеме 1). Мне казалось, что я ничего страшного не делаю, но в итоге контроллер Z401 пыхнул у меня на глазах (результат смотрите на фото 2 в приложении). Но сгорел там, судя по всему, только диод (что выделен в красную рамку) и  дорожка, которую видно невооруженным взглядом. Я эти вещи заменил и контроллер вроде как возобновил нормальную работу...