Просмотр полной версии : Подключение плк и нескольких устройств на занятый 485
Добрый день. Прошу прощения, если не там разместил тему, надеюсь модераторы это исправят.
Имеется СП307 (мастер), плк150ИМ (слейв), пчв (слейв). Необходимо подключится к расходомеру Взлет Профи Эм.
Что будет, если интерфейс rs485 на нем уже будет занят? Есть ли возможность все таки подключиться по модбас, переведя все устройства в слейв и из программы производить опрос своих устройств?
Или как лучше организовать связь?
Прошу пнуть в нужном направлении.
есть
Вау! Потрясающе... Спасибо, Валенок.
Снова прошу помощи.
На данный момент существует: СП307 (мастер), ПЛК150 (слейв), модуль вывода МУ110-8Р (слейв). Приборы перечислены в порядке подключения.
ПЛК с панелью общаются через конфигурацию ПЛК, где прописан Модбас (слейв). При этом, если пробую писать в модуль из плк с помощью библиотеки Модбас.либ отваливается связь панели с ПЛК, что в принципе логично, вроде.
Не логично то, что она не восстанавливается после.
IF port_opened=0 THEN
Settings.Port:=com_num; (*номер COM-порта*)
Settings.dwBaudRate:=115200; (*скорость*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK);
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
END_IF
IF port_opened=2 THEN (*Удачно проинициализировали*)
Buffer[1] := 16#E8;
Buffer[0] := 3;
send2_modbus(
Enable:= enabl, (* разрешение работы блока *)
Mode:=MB_ASCII , (*режим передачи*)
DevAddr:=16 , (*адрес*)
FirstAddr:= 1, (*номер регистра*)
Quantity:= 1, (*количество записываемых регистров*)
ComHandle:=Settings.Port ,(*номер сом-порта*)
TimeOut:=TimeOut , (*таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
RegCnt=> DataSize); (*кол-во считанных байтов *)
(*если установлен признак завершения операции, то *)
END_IF
IF cmpl AND port_opened=2 THEN
enabl := FALSE;
port_opened:=3;
COM_SERVICE1(Task:=CLOSE_TSK);
END_IF
IF err <> 0 THEN
enabl := FALSE;
END_IF
Предполагал, что вызов COM_SERVICE1(Task:=CLOSE_TSK) должен приводить к закрытию экземпляра устройства и связь между ПЛК и панелью должна восстановиться.
Странно, что закрытие компорта происходит вот так SysComClose(Settings.Port), когда функции должен передаваться открытый хендл, а не порт. Исправил это, но результата нет.
По сути вопрос тот же, что и в заголовке темы и в первом посте. Есть устройство мастер, есть два устройства слейв. Слейвы хочу коммутировать с помощью библиотеки, но отваливается связь с мастером. Что я делаю не так? Как правильно?
PS. Сейчас попробую перекинуть ПЛК в конец цепочки подключения (если предположить, что во время опроса модуля он является мастером, то на данный момент он подключен звездой), сообщу о результате, но не думаю что поможет.
с какого перепуга у вас 2 мастера сети ?
У меня нет двух мастеров в сети. Мастером у меня является панель. ПЛК является слейвом, но из него я пытаюсь писать в модуль с помощью библиотеки.
После переподключения ПЛК в конец цепочки вообще все перестало работать.
У меня нет двух мастеров в сети. Мастером у меня является панель.
Потрясающее заявление.
А как же это
ПЛК является слейвом, но из него я пытаюсь писать в модуль с помощью библиотеки.
Хоть с помощью библиотеки, хоть через конфигурацию но в этот момент ПЛК становится мастером, вторым!
Потрясающее заявление.
А как же это
Хоть с помощью библиотеки, хоть через конфигурацию но в этот момент ПЛК становится мастером, вторым!
Тогда я не понимаю ответа, касающегося подключения к занятому порту и работы с ним.
есть
Подключиться по модбас, переведя все устройства в слейв. Из программы производить опрос своих устройств
В существующей сети, наверняка есть мастер, таким образом получается, что несмотря на то, что все дополнительно подключенные устройства будут слейвами, все равно не получится работать с ними через библиотеку, т.к. на этот момент будет отваливаться мастер существующей сети?
Дополнительные вопросы.
Как мне перестать быть мастером сети?
Почему этого не происходит при вызове COM_SERVICE1(Task:=CLOSE_TSK)?
Почему закрытие компорта не приводит к установке в FALSE значений .Ready, .Opened, .Enable?
Почему в библиотеке закрытие порта происходит (не происходит) через параметр порта, а не хендла?
Тогда я не понимаю ответа, касающегося подключения к занятому порту и работы с ним.
В существующей сети, наверняка есть мастер, таким образом получается, что несмотря на то, что все дополнительно подключенные устройства будут слейвами, все равно не получится работать с ними через библиотеку, т.к. на этот момент будет отваливаться мастер существующей сети?
Дополнительные вопросы.
Как мне перестать быть мастером сети?
Почему этого не происходит при вызове COM_SERVICE1(Task:=CLOSE_TSK)?
Почему закрытие компорта не приводит к установке в FALSE значений .Ready, .Opened, .Enable?
Почему в библиотеке закрытие порта происходит (не происходит) через параметр порта, а не хендла?
Перестаньте изобретать велосипед.
Есть несколько вариантов
1. Панель (мастер) подключить к порту RS232 ПЛК и сделать в нем слейв для обмена с панелью. RS485 оставить для связи ПЛК с модулем, в ПЛК сделать мастер для порта RS485. Если нужно с панели управлять выходами модуля, то в программе ПЛК просто копировать переменные из слейва в соответствующие переменные мастера
2. Если панель с буквой -Р, то можно подключать панель(мастер) по Ethernet, соответственно слейв в ПЛК делать для порта Ethernet.
3. Сделать ПЛК мастером, а панель сделать слейвом.
Спасибо, petera! Конечно же, все Ваши варианты решают проблему, но все дело в том, что эта проблема была создана искуственно для проверки возможности подключить к своей сети прибор (Взлет Профи Эм) уже подключенный по rs485 к чужой сети, после того, как я услышал от Валенка положительный ответ.
Теперь, получается, что это сделать невозможно без изменения конфигурации остальных приборов в чужой сети.
Ну и вопросы по работе с библиотекой модбас.либ остаются в силе...
со своим уставом в чужой монастырь :) (это про чужую сеть)... тут только из чужой сети отдавать данные вашему слейву, если это
возможно...
С учетом выше сказанного у вас даже 3 мастера сети получилось.
СПК, ПЛК и мастер чужой сети. Со своими можно разрулить как написал Petera, с чужим только договариваться с разработчиками.
Вдруг например там опрос через OPC сервер и к нему можно прицеппиться или как выше написал вам настроят переброс параметров для вашего слейва...
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot