PDA

Просмотр полной версии : [ПЛК] Наличие связи по Modbus



Frayl
15.10.2012, 15:26
ПЛК выступает в роли SLAVE. Второе устройство - мастер.
Есть какое-нибудь стандартное средство, чтобы быстро увидеть появилась\пропала ли связь?

kgsh82
15.10.2012, 18:38
Только мастер сети может определить потерю связи (это если стандартно). Ну а так....запустить таймер, время срабатывания - заведомо больше интервала между опросами мастера. При запросе - сбрасывать и заново запускать. Запрос не пришел - таймер сработал. Как-то так

capzap
15.10.2012, 19:05
ПЛК выступает в роли SLAVE. Второе устройство - мастер.
Есть какое-нибудь стандартное средство, чтобы быстро увидеть появилась\пропала ли связь?
если к стандартным отнести постоянное изменение определенного бита, к примеру мастер всегда устанавливает единицу, а слейв всегда ноль, то тогда средство имеется. Просто слейв перед тем как установить ноль должен проверять находится ли единица по этому адресу, если да то связь есть, а если остался ноль с предыдущего цикла опроса то связи нет

Yegor
16.10.2012, 06:48
мастер всегда устанавливает единицу, а слейв всегда нольНет гарантии, что слейв успеет за мастером.

Беспредметный разговор — надо знать, что за мастер.

capzap
16.10.2012, 07:08
Нет гарантии, что слейв успеет за мастером.


это не теория, это работает. Что произойдет если слейв раньше опросит и обнаружит "свои следы" а не мастера, только то что примет решение об отсутствии связи, а насколько далеко это от истины? ПЛК либо со следущего цикла опровергнет свое решение либо связь действительно пропала. Я не расматриваю варианты, когда программист ставит период опроса у масетра в 1s, а в слейве делает подобную проверку каждые 50ms

JIexa21
16.10.2012, 08:11
Ну на основе одного неправильного опроса не стоит делать вывод что мастер не сделал запрос и не стоит это дело привязывать к простому периоду опроса - лучше сделать счетчик ошибок.
И я бы сделал так, что слейв ставит случайный байт по какому-то адресу, а по другому адресу его считывает и в случае несовпадения крутит счетчик и, например, на 10-й неверный опрос считает, что мастер умер.

Frayl
16.10.2012, 16:07
да я сначала тоже так сделал - мастер ставит 1 а слейв 0. Дело в том что там по условию реле которое включается если подключен мастер(ПК в данном случае) и реле начинает щелкать

capzap
16.10.2012, 16:28
да я сначала тоже так сделал - мастер ставит 1 а слейв 0. Дело в том что там по условию реле которое включается если подключен мастер(ПК в данном случае) и реле начинает щелкать

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

Frayl
16.10.2012, 16:54
link_tr(CLK:=(pclink=1));
timerlink(in:=link_tr.q,pt:=t#5s);

вот так решил проблему. ПК пишет раз в 100мс то "1" то "0". ПЛК воспринимает фронт "1" и пересбрасывает таймер timerlink типа TOF.