Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Beckhoff BC9000. Ищу специалиста по настройке
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
MerryKaze
Здравствуйте,
имеется контроллер Beckhoff BC 9000, который управляет простой автоматизацией дома: свет, управление термоголовками. Программа работает автономно, без связи с внешним миром.
Попробовал подключить какую-нибудь внешнюю систему (Home Assuistant, Node Red, n8n, Modbus Poll) для управления извне, но так и не смог заставит записывать данные даже в предназначенные вроде как области для записи у контроллера. Считывать получалось.

Ищу человека, который за вознаграждение сможет настроить или подсказать, что нужно сделать, какие настройки или код использовать, чтобы я мог нормально обмениваться с контроллером данными. Желательно, чтобы еще и быстро это происходило, например 100 мс.
По промышленной автоматизации я не специалист, прошу прошения за дилетантский подход.
ktulu
доброго!

"Попробовал подключить какую-нибудь внешнюю систему (Home Assuistant, Node Red, n8n, Modbus Poll) для управления извне.."
..т.е. по IP адресу по ModBUS TCP чтение регистров есть?

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

"Ищу человека, который за вознаграждение сможет настроить или подсказать, что нужно сделать, какие настройки или код использовать,"
..для этого нужен будет исходный проект под TWinCAT 2 *.pro или *.prx(емнип), и *.tsm желательно

"Желательно, чтобы еще и быстро это происходило, например 100 мс."
..какими и с чем вам надо обменивацца? так то ModBUS TCP на борту есть
MerryKaze
Спасибо за ответ!

Ваше сообщение сподвигло в очередной раз пройтись по всем пунктам и протестировать подключение. Выяснилось следующее: всё-таки записать данные в определенную область получилось. Не знаю, получалось ли раньше, но сейчас по адресам с 0х800 - 2048+ записалось, НО все программы выдавали при этом ошибку: Modbus Poll, Node Red, n8n.
Записывает только функцией 6. Пятая выдает ошибку неверного адреса.
При этом данные записываются в область - Local Output Image. Как из этой области прочитать значение в программе контроллера так и не нашел sad.gif
Node Red сообщает ошибку так: "Modbus exception 4: Slave device failure (device reports internal error)"
Modbus Poll: "Write Error" или "Slave Device Failure"
Возможно надо указать Slave ID? Сейчас 1.
Данные при этом сохраняются в Output Image, что видно в программе конфигурации KS2000. Но по адресам из документации при исполнении программы - значения объявленных по этим адресам переменных - по нулям. В документации указано, что Output Image используется доя отправки данных в вышестоящий контроллер, почему пишется туда - мне непонятно.



Цитата(ktulu @ 24.11.2025, 15:20) *
доброго!

"Попробовал подключить какую-нибудь внешнюю систему (Home Assuistant, Node Red, n8n, Modbus Poll) для управления извне.."
..т.е. по IP адресу по ModBUS TCP чтение регистров есть?

Да, переменные, объявленные по адресам %QB128... через модбус читаются нормально.


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

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

Цитата
"Ищу человека, который за вознаграждение сможет настроить или подсказать, что нужно сделать, какие настройки или код использовать,"
..для этого нужен будет исходный проект под TWinCAT 2 *.pro или *.prx(емнип), и *.tsm желательно

Там сейчас тестовый код, можно менять как угодно. Могу дать удаленный доступ к машине. Сейчас вот такое
Код
PROGRAM MAIN
VAR
    mbval: INT;
    OUT0      AT %QB0:   BYTE := 0;
    tmr: TON;
    aaa AT %QB128: BYTE := 181;
    bbb AT %QB130: BYTE := 33;
    ccc AT %IB132:BYTE;
    iii AT %IB136: BYTE;

MySuperInt   AT %MW0: INT:=24;

--

MySuperInt := ccc;
tmr(IN := TRUE, PT := T#500MS);
IF tmr.Q THEN
    OUT0 := OUT0+1;
    tmr(IN := FALSE);
END_IF;

IF OUT0 >= 254 THEN
    OUT0 := 0;
END_IF

mbval := 17;

Мне в общем, достаточно будет правильной конфигурации контроллера и пару строк тестового кода, чтобы я понял, как с этим работать.

Цитата
"Желательно, чтобы еще и быстро это происходило, например 100 мс."
..какими и с чем вам надо обменивацца? так то ModBUS TCP на борту есть

У меня будет только один сервер, с которого идет обращение к одному котроллеру.

Вопрос вот с чем связан: BC9000 через modbus нельзя напрямую управлять DO, поэтому пока план такой: написать обработку на ST, которая читала бы команду, например [тип устройства]-[ид устройсва]-[команда] -- [свет]-[5]-[включить] -- [1]-[5]-[1]. Сервер в таком виде складывает сообщения контроллеру, контроллер их читает, выполняет, стирает. Чувствую, что это костыль, но лучше не придумал )
MerryKaze
Вот, что у меня считается по модбас (слева), и то, что записывается (справа). Но правую не могу найти в коде.
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
manjey73
Цитата
BC9000 через modbus нельзя напрямую управлять DO
вообще-то ни у кого нельзя, ибо DO привязываются к программе, только через промежуточные переменные. Ибо это ПЛК, а не модуль вывода.
ktulu
..что то у вас все перепутано, зачем вы к %IB* %QB* пытаетесь напрямую с ModBUS ломицца, не понятно
ведь для ModBUS TCP под BC отдельная либа есть, она поднимает master/slave без ограничений
потом если надо проецируешь %IB* на %MB, и так же %MB на %QB, если напрямую адресовать,
хотя лучше все %IB и %QB привязать к переменным программным
ktulu


Трёх суток правила почитать хватит?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.