Там вроде код 81 выскакивает когда слейв не отвечает.
Вид для печати
Там вроде код 81 выскакивает когда слейв не отвечает.
petera, вы просто мой спаситель! И там помогли, и тут. Спасибо.
Можно привязаться к адресу (Last address). Устройства ведь по очереди опрашиваются и в этой переменной как раз адрес и находится.
На ST пишешь?
Самому стало интересно, вечером проверю и отпишусь что получилось.
Вот предварительно набросал:
Вложение 24724
Вложение 24725
Сейчас попробую.
Работает, но фиг отличишь обрыв от ошибок при таком помаргивании. Попробовал оторвать один слейв, потом занизил таймаут(пошли ошибки но связь есть). Картина получилась очень похожая. Вот ести бы побитно по шине каждый слейв видеть?
Скорость обмена какая?
Так error1 это первый слейв, а error2 второй. Вот тебе и побитно.
Там неправильно сделано: при опросе очередного слейва ошибки на всех остальных сбрасываются. Надо как-то так:
http://www.owen.ru/forum/attachment....id=24729&stc=1
Проверить не на чем пока.
То же самое получиться.
Скорость 19200. Я понимаю что "error1 это первый слейв, а error2 второй", я говорю о том, что ошибки от обрыва отличаются тем, что обрыв весит постоянно, а ошибки промаргивают периодически. А пример Yegor то-же самое, только вид сбоку :). Ясное дело, что можно залачить ошибку через RS. Как отличить обрыв от ошибки?
Нет, не получится. У вас ошибки актуальны только на момент опроса слейва. У меня - всегда.
Никак, потому что обрыв это частный случай ошибки.Цитата:
Как отличить обрыв от ошибки?
Считать все ошибки обрывами.
Кстати умеренно ленивый программист оформит это в ФБ, чтобы общая схема не мельтешила:
http://www.owen.ru/forum/attachment....id=24730&stc=1
Можно поставить таймер и счётчик. И по значению счётчика условно выделять ошибку связи и обрыв.
Комрады!
Подскажите простой способ сохранения уставок.
А суть вопроса такова, есть управляемое по modbus slave устройство с сохраненными в нем уставками, которые можно изменять.
Но, codesys при каждой перезагрузке норовит обнулить все эти уставки. Почему это происходит я понимаю, я не понимаю как с этим бороться
без танцев с бубном, как заставить codesys считать из устройства уставки не не сбрасывая их в ноль.
Счетчик ИМХО лишнее, просто таймер задержки аварии связи. Если ошибка проскочила то следующий удачный обмен пройдет быстрее таймера. А если таймер успел отсчитать то это уже тенденция - следовательно авария связи.Цитата:
Сообщение от sergeykrylov Посмотреть сообщение
Можно поставить таймер и счётчик. И по значению счётчика условно выделять ошибку связи и обрыв.
Всем привет!
В программе на CFC есть счетчик отправленных СМС и нужно его сбрасывать каждый месяц, а кроме таймера в моём новичковом мозгу на эту тему пока ничего не обнаруживается ;-)
Подскажите пожалуйста: как зафиксировать наступление первого числа месяца?
PSКод:var
std,z : systemtimedate; //syslibtime
st64 : systime64; //...
get : curtimeex; //...
var retain //ретайн желательно если критична из-за вероятность передергивания питания за сутки
вот_и_первое_число : r_trig;
------------
std := z;
get(systemtime := st64, timedate:=std);
вот_и_первое_число(clk := std.day = 1);
if вот_и_первое_число.q then
//..................
end_if
Движок форума чудит, блин
По новой записывать уставки? Я в первом вопросе спрашивал, можно ли, чтобы контроллер не трогал без команды уставки в слейвах, которые сами являются контроллерами. Я задавал вопрос есть ли простой способ это сделать, без согласования данных в мастере и слейвах при первом скане! Если такого способа нет, значит буду мудрить.
Это выглядит круто и наверняка сработает, огромное спасибо за помощь! :)
Только вот чтобы это применить, ну совсем для новичков подскажите пожалуйста:
код видимо нужно в ФБ вставить, или это функция? И на каком это языке?
А то я пока только в CFC умею диаграммки рисовать. :confused:
100 пудов
Язык ST (настоятельно рекомендую изучать, как самый мощный в рамках КДС. Порно в виде IL - даже не смотрите)
Вставлять куда угодно кроме функции т.к. она по определению не имеет памяти, которая нужна для r_trig (работа с глобалами - не кошерна)
Можно в фб - но тут тоже нюанс, весь блок будет в ретайне (но на это обычно покласть - ресурсов море, и никому они ненужны кроме вас)
Если это нужно 1 раз, проще всего сделать программ (когда потребуется размножение - переделка ф.б как 2 пальца..)
Код:program вот_и_первое_число
var_output
Q : bool;
end_var
var
std,z : systemtimedate;
st64 : systime64;
get : curtimeex;
end_var
var retain
opanki : r_trig;
end_var
-----------------------
std := z;
get(systemtime := st64, timedate:=std);
opanki(clk := std.day = 1, q => Q);
--------------------------
Вызов где-то в CFC
|вот_и_первое_число Q|-----> |EN чета_там_делать|
Комрады вопрос! Нифига не найду как в проекте к start-stop подключится и динамику. А поисковик форуме кучу ненужной информации выдает.
Что никто не знает как из проекта контролировать старт стоп контроллера(или хотя-бы сигнализацию к ним прицепить). Как кнопку отвязать я разобрался, только вот она после этого начинает работать как вход дискретный. В конфигурации задач есть системные события с интерфейсами событий, но как ими пользоваться я не пойму.
Я уже не новичок, но страсть как не люблю читать. Так что до сих пор не могу ответить на такой вот простой вопрос:
А если в программе все-все POU, которьіе не возвращают значение, обозвать ФБ (не использовать, грубо говоря, функции)? Что плохого программе будет?
Что хорошего будет, я придумал: во время отладки я вижу значения локальньіх переменньіх ФБ, а вот переменньіе функции не видньі. Так что, вроде бьі, ФБ удобнее.
Все на борьбу с воробьями, то бишь, с функциями!
Из первого, что приходит на ум -- с ФБ быстрее упрётесь в ограничение на количество POU.
ФБ всегда занимает 2 POU (сам блок и его инициализатор), а функция занимает только 1 POU (инициализаторов не бывает).
Общее ограничение не помню, но меньше 256.
На форуме есть те, кто упирался в количество POU в одном проекте.