Считываю заранее известный регистр (его значение =32767) и сравниваю в блоке сравнения с числом 32767. После подачи питания на ардуино и несовпадении RTU адреса, значение считываемого регистра =0 и счетчик начинает перебирать RTU адреса, как только нужный RTU адрес нашелся, то значение считываемого регистра изменилось на 32767 и компаратор изменил лог выход остановив счетчик. Все ОК!!! Но если взять и изменить RTU адрес в частотнике, то обмен пропадает, но в считываемом нами регистре значение 32767 сохраняется и счетчик задания RTU адреса не включается. Как обнулить считываемый регистр, но только во время пропажи связи, а то ноль запишется в регистр частотника..KSP писал(а): ↑14.02.2018{, 08:40}Попробуйте в каждом адресе считывать какой-то регистр, заранее известный и как только нужная информация считается значит стоп. Или пытаться записать и считать в каждый слейв в чистый адрес естественно рабочий, т.е. который в нем можно использовать без ущерба для слейва. Но проще пытаться считать можно даже заводской номер.
А каким образом мне извлечь из считывания адреса его полный ответ (ID,FN,DATA,CRC)? В проге FLProg когда я беру адрес одного из HoldingRegistr и подцепляю его к дисплею 16х2, то на дисплее я вижу лишь DATA полученного с этого адреса
А перезагрузить ардуинку что не позволяет. И начать сначала.
Но и без правки кода, а чисто в FLPog, тоже.
Попробовал отдельно изучить работу блока "Последняя ошибка", когда связи нет со слейвом из-за RTU адреса, то сигнал у меня с выхода блока "Последняя ошибка равна 254, а не 244. Но блок работает, когда связь есть, на выходе 0. Но стоит добавить блок "Задание Slave адреса" как при компиляции возникает ошибка:
Код: Выделить всё
if (reset) _modbusMasterAddressTable_3_reg_1[Ваш регистр ] = 0; // ( _reg_1 - это при конфигурировании слэйва указан адрес 1)
Я сделал по иному, в частотнике есть время, считываю регистр где отсчитываются секунды, записываю один момент времени в переменную 1, через 2 секунды записываю второй момент времени. То есть когда связь есть эти две переменные отличаются друг от друга. Когда связь пропадает, через две секунды эти две переменные сравниваются в компараторе, он выдает разрешение на отсчет адресов слейва, как только находит верный адрес, то эти две переменные опять отличаютсяSancho писал(а): ↑15.02.2018{, 09:26}Сделайте самописный блок, который будет сбрасывать в, например, ноль Ваш контрольный Input Reg.
Запускайте его периодически, например, через 3 сек, а так как опрос у Вас скорее всего 1 сек, он будет заново читаться.
Привяжите к этому регистру компаратор сравнения с 0, с него на TON, который сбросит "стоп" блоков смены адресов при нуле более 3 сек.Код: Выделить всё
if (reset) _modbusMasterAddressTable_3_reg_1[Ваш регистр ] = 0; // ( _reg_1 - это при конфигурировании слэйва указан адрес 1)