Спасибо за ответ!
Ваше сообщение сподвигло в очередной раз пройтись по всем пунктам и протестировать подключение. Выяснилось следующее: всё-таки записать данные в определенную область получилось. Не знаю, получалось ли раньше, но сейчас по адресам с 0х800 - 2048+ записалось, НО все программы выдавали при этом ошибку: Modbus Poll, Node Red, n8n.
Записывает только функцией 6. Пятая выдает ошибку неверного адреса.
При этом данные записываются в область - Local Output Image. Как из этой области прочитать значение в программе контроллера так и не нашел

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]. Сервер в таком виде складывает сообщения контроллеру, контроллер их читает, выполняет, стирает. Чувствую, что это костыль, но лучше не придумал )