ПЛК выступает в роли SLAVE. Второе устройство - мастер.
Есть какое-нибудь стандартное средство, чтобы быстро увидеть появилась\пропала ли связь?
ПЛК выступает в роли SLAVE. Второе устройство - мастер.
Есть какое-нибудь стандартное средство, чтобы быстро увидеть появилась\пропала ли связь?
Только мастер сети может определить потерю связи (это если стандартно). Ну а так....запустить таймер, время срабатывания - заведомо больше интервала между опросами мастера. При запросе - сбрасывать и заново запускать. Запрос не пришел - таймер сработал. Как-то так
если к стандартным отнести постоянное изменение определенного бита, к примеру мастер всегда устанавливает единицу, а слейв всегда ноль, то тогда средство имеется. Просто слейв перед тем как установить ноль должен проверять находится ли единица по этому адресу, если да то связь есть, а если остался ноль с предыдущего цикла опроса то связи нет
Нет гарантии, что слейв успеет за мастером.мастер всегда устанавливает единицу, а слейв всегда ноль
Беспредметный разговор — надо знать, что за мастер.
это не теория, это работает. Что произойдет если слейв раньше опросит и обнаружит "свои следы" а не мастера, только то что примет решение об отсутствии связи, а насколько далеко это от истины? ПЛК либо со следущего цикла опровергнет свое решение либо связь действительно пропала. Я не расматриваю варианты, когда программист ставит период опроса у масетра в 1s, а в слейве делает подобную проверку каждые 50ms
Ну на основе одного неправильного опроса не стоит делать вывод что мастер не сделал запрос и не стоит это дело привязывать к простому периоду опроса - лучше сделать счетчик ошибок.
И я бы сделал так, что слейв ставит случайный байт по какому-то адресу, а по другому адресу его считывает и в случае несовпадения крутит счетчик и, например, на 10-й неверный опрос считает, что мастер умер.
да я сначала тоже так сделал - мастер ставит 1 а слейв 0. Дело в том что там по условию реле которое включается если подключен мастер(ПК в данном случае) и реле начинает щелкать
link_tr(CLK:=(pclink=1));
timerlink(in:=link_tr.q,pt:=t#5s);
вот так решил проблему. ПК пишет раз в 100мс то "1" то "0". ПЛК воспринимает фронт "1" и пересбрасывает таймер timerlink типа TOF.