kondor3000 мы думаем про один и тот же BCD ? в BCD каждая тетрада не может быть больше 9
Вид для печати
kondor3000 мы думаем про один и тот же BCD ? в BCD каждая тетрада не может быть больше 9
Имхо, перепутаны названия. То что здесь названо DEC_HEX, это не "из Десятичной в Шестадцатиричную", а наоборот.
И вторая аналогично))
Да , названия перепутал, исправил названия и скрин))
Это BCD, который применяют в панелях, в ИП320 и СП31хх, там нет букв, как в шестнадцатиричной системе, только числа.
На СП310 например число 89, это 59 секунд, но там всё по отдельности, год, месяц, число и т. д., поэтому ФБ универсальный, для любой панели.
kondor3000 странное BCD, обычно число 89 в HEX выглядит так же 0х89 или наоборот. И букв там действительно нет. только цифры в тетрадах байта.
Или вы ошиблись с первым числом, написав его как 89 вместо 59 ????
Вот скрин работы ПЛК слейва с панелью ИП320 мастер , то же число 8968 Вложение 69718
и число больше 9 не может быть, то есть 10 - это в шеснадцатиричной системе как раз А,
а число 89 - HEX, как раз 59 - DEC, это я прошёл ещё несколько лет назад, работая с СП310.
kondor3000 извиняюсь, забыл что ОЛ не показывает в HEX переменные а только в виде десятичный значений
а 8968 это и есть HEX 2308, туплю... :)Цитата:
На скрине 2308 (год 23, месяц 08) принимается как 8968
Извиняюсь, что не совсем в тему!
Вопрос, собственно в универсальном счетчике, а именно: его выход, как я понял, 16ти битный. Как можно решить вопрос, если мне 65535 недостаточно? Есть ли простое решение?
ЭдМахалыч если вы про ОЛ, то там все переменные 32-х битные. Просто нужно сделать свой счетчик, а не использовать штатный. Их вроде было много...
Простое решение ADD +-1 после R-Trig. Используя SEL например для аккумулирования. А, надо плюсовать или отнимать, так как переменные целочисленные беззнаковые.
Для передачи по сети, надо разделять значение счетчика на два регистра.
Спасибо. Мне для обработки инкрементного энкодера, но не суть. Нашел такой вариант http://ftp-ow.owen.ru/softupdate/OWE...nter/CTN32.pdf
Нафик искать то? Нажимаете создать ФБ, добавляете 1 вход D и меняете копипастом, код на этот https://owen.ru/forum/showthread.php?t=38239&page=4#36
Получаете 32 битный счётчик CTUD на ST. Вложение 69722
Для работы с энкодером скорости(быстродействия) обычных дискретных входов не хватит, короче, для этой цели придумали специальные быстрые входы, имеются у ПР103(205), короче там уже всё придумано, в смысле привязываешь переменную к счётчику энкодера и всё! И нередко 16-битные счётчики используются, в смысле, счётчик при достижении крайних значений не останавливается, а гоняет по кругу, короче для подсчёта это не будет иметь разницы какой там счётчик, в смысле, 16-битный или 32-битный!
А так 32 битный счётчик можно здесь найти в посте#6462: https://owen.ru/forum/showthread.php?t=9398&page=647
И, вроде, в менеджере компонентов был аналогичный.
Сергей, спасибо! Уже решил как привычней - накатал ST-блок.
А скорость импульса у меня маленькая - 85Гц в потолке (~12мс/имп), но это 1,5м винт ШВП (шаг 4мм) на пиле и 500 имп/об...
Короче написать блок на ST для меня быстрей (12 лет практики на STM32:)
Просто стало интересно - в стандарте нет 32-битных блоков?
Ещё вопрос к знатокам OL:
Возможно ли штатными средствами настроить состояние slave-устройства по умолчанию при отсутствии связи?
Т.е. защита от потери связи (по некоему таймауту запросов от мастера) или при включении (мастер дольше грузится).
Сейчас вопрос актуален для ПР102.
Заранее спасибо!
Слейву вообще по барабану, если его опрашивают, он отвечает, если нет то молчит. Защиты тут не бывает, есть статус опроса, при условии работы мастера.
Вот в мастере и сделайте переменную статуса опроса.
Можно сделать раз в секунду, установку в слейве единичного бита, мастер должен его сбрасывать по получении,
если не сбросил например 5-7 сек, значит мастер отвалился.
ЭдМахалыч тут вообще непонятно желание... Если программа внутри ПР крутится и обновляет данные, когда мастер подключится и прочет то, что на данный момент сформировала программа ПР.
Или вы хотите фиксировать некоторые данные, если было пропадание связи и потом вычитывать?
kondor и melky, все просто:
Мастер (СПК107) задает (по ModBus) включение какого то мощного и опасного устройства (допустим привод перемещения) через slave-устройство (ПР102), мастер его и отключает.
Теперь вопрос - как остановить двигатель, если мастер заглючил (сгорел, взорвался и т.п.) или "Вася" кабель перебил.
Вот это и есть "защита от потери связи. По OL я понял - штатного средства нет, будем делать по контрольному регистру.
Так что, ув. kondor слейву не по барабану, если через него управляют опасными исполнителями...
to 1exan. Это я уже понял, к сожалению. Но всё равно спасибо!
Вот в соседней теме подобный вопрос обсуждали: https://owen.ru/forum/showthread.php?t=38286&page=2
Сергей, Спасибо, именно так и поступил.
Спасибо!!!
А как на данный момент решается вопрос с таймерами для ST ? Пока ничего лучше внешнего генератора, входа для тактовых импульсов и программных счетчиков с флагами внутри блока не придумал.
Добрый день, а есть у вас на сайте список примеров, как эти ФБ правильно реализовывать?
Списка нет, а мой пример есть https://owen.ru/forum/showthread.php...39&page=11#105
3 пример с ФБ и вложенными блоками.
В блоках fbTimer и fbIndik вложены несколько самописных блоков ФБ (TON, R_trig, SR_trig, F_trig) и функции SEL и fMOD.
Правда TON уже переписан на T_zikl, да и остальные тоже переписаны, а fMOD уже не нужен, есть MOD .
Добрый день
пытаемся использовать новый функционал с блоками на ST
проблема такая - создали переменные булевые в которые записывается состояние входов, создали свой простенький блок на ST - и переменная не меняется при активации входа. Если эту переменную не использовать никак с блоком ST - все работает нормально.
Если одну и ту же переменную импользовать и в блоке ST и с обычным блоком(например тригером) - на блок тригера приходит состояние переменной и входа соотв, а на блок ST - ничего не приходит и переменная не подсвечивается даже..
Это мы что-то не так делаем или баг в программе ?
Вложение 70196
Спасибо, заработало.
Немного неочевидно, и ошибок он никаких не выдавал.
Добрый день
Есть ли код таймера TON на ST ? Или как организовать выдержку времени в FB на ST?
Это называется, если по простому: за что боролись, на то и напоролись!
Вот таймеры TON, один работает от системных секунд, второй от времени цикла ПР.Вложение 70249 Блок T_zikl выдаёт время цикла ПР.
TON от времени цикла намного точнее отсчитывает время. Их можно вставить в ФБ на ST.
Пример вставки таймера в ФБ
Код:var //объявление переменных
TON1:TON_; //объявление экземпляра TON1 таймера TON_
end_var
TON1(In:=In, T_z:=T_zikl, PT:=PT, ET=>ET); // вызов экземпляра таймера TON1
В платформах типа ПР103 есть отдельный параметр "Время цикла", к которому можно привязать переменную и использовать её (сам не пробовал, но должно работать)
Вопрос по синтаксису st. Вызов функционального блока из функционального блока.
это не есть вызов ФБ, а только обращение к его переменным ?Код:FB.varIn := value;
out := FB.varOut;