Спасибо, Сергей, за наводку. Посмотрю, постараюсь вникнуть, подумаю. Пока такой костыль приладил))
Вид для печати
Спасибо, Сергей, за наводку. Посмотрю, постараюсь вникнуть, подумаю. Пока такой костыль приладил))
Непонятно, что Вы хотите придумать, если макрос гистерезиса, то он уже есть в менеджере компонентов и, кстати, в моём проекте, короче, боюсь, Вам ничего не надо выдумывать, всё уже выдумали до Вас! И Вам можно разбить ваши тэны на 3-и ступени, 1кВт, 2кВт и 3кВт - одновременно включены 1-ая и 2-ая ступени!
Сергей, я понял. Пока уткнулся в то, что макрос под флоат. Я же планировал целочисленные использовать. Ищу to FLOAT где взять)) Не все сразу...
Вы случайно не Вий, поднимите мне веки!
В ОЛ есть справка, можно там посмотреть:
Вложение 54948
Ну не ругайтесь пожалуйста)) Искал значит но не там. Не ожидал что оно под носом.
Есть чайниковый вопрос. При работе с битами в OЛ младший бит нулевой или первый? Вообще, понимаю, стандартно должнн быть нулевой. Но в руководстве ОЛ в описании функций чтения и записи битов в примерах по-разному посчитано. Пример чтения бита - отсчет битов начат с единицы, пример записи бита - отсчет с нуля??
Спасибо. Доступа к ОЛ сейчас нет, поэтому и уточняю,в руководстве ошибки.. Время свободное пока есть, дома делаю кое какие наброски, чтобы на работе меньше времени тратить.
Доброго времени! Есть ли возможность сравнивать переменную float с её же значением секунду или 3 секунды назад? С помощью макроса fSave можно сохранить величину и через секунду сравнить с текущей, но это дискретно можно делать; а так чтобы постоянно мониторить? Поиском пользовался, но что искать - тоже не знаю (
не вижу сложностей
Триггер спецом оставил висеть, хотя можно и без него было
Вложение 55717
Можно в стек глубиной два писать с периодом равным 3 секунды, тогда можно сравнивать значения:
Вложение 55718
Такой алгоритм запишет переменную 1 раз в 3 секунды и потом все 3 секунды можно сравнивать эту записанную величину с текущей, т.е. переменную саму с собой 3 секунды назад можно сравнить один раз в 3 секунды, остальное время выполнения программы она будет сравниваться с самой собой, но не 3 секунды назад, а 0,1с, 0,2с ... 2,8с, 2,9 с назад.
Для того, чтобы сравнивать переменную саму с собой 3 с назад каждые 0,1 с нужно построить 30 таких цепочек. Это я и называю дискретно, так я могу сделать...
А можно ли сделать сравнение с самой собой 3 секунды назад каждые 0,1 с не делая 30 цепочек, в он-лайн режиме?
Не знаю как иными словами это описать, первый раз пробую работать с программируемым реле....
Спасибо за ответы!
Непонятно, как хотите сделать? Короче, делаете стек глубиной 30, запись с периодом 100 миллисекунд и сравнивайте любые значения за последние 3 секунды, всё!
Могу предложить стек для целочисленных переменных, вам придётся округлить вещественную переменную до n знаков после запятой и умножить на 10 в степени n, для сохранения в этом стеке, короче, Вам хватит этого стека(при написанных хотелках):
Вложение 55725
Стек на 32 ячейки(разряда), но значение со входа сразу пишется в выбранную ячейку(разряд) для записи, подавая импульсы на входа сдвиг вправо(влево) происходит сдвиг на одну ячейку(разряд) вправо(влево). Каждый импульс сдвигает данные на один разряд(ячейку)! Номера ячеек(разрядов) 0-31, в основном всё!
Примерно как-то так:
Вложение 55726
Вложение 55727
Даже так:
Вложение 55728
Вложение 55729
Для отрицательных значений(если они присутствуют) есть макросы преобразования в INT(DINT) и функции обратного преобразования!
Не совсем понимаю понятие дискретность тут... Если сделать скользящее окно как для входящего сигнала, так и для запомненного 3 минуты назад. Получится всегда сравнивать сигнал 3 минуты назад в любой момент времени.
Сергей0308 да я не подглядывал. Понял, последняя и первая ячейка стека и есть всегда то, что есть и 3 секунды назад... :)
Только было бы прикольно, если бы из макроса было два выхода - последний, первый. Для простоты
Согласен, будет намного удобнее в подобных случаях, у меня имеется матрица памяти с двумя независимыми выходами, можно и в этот макрос добавить второй независимый выход, макрос без пароля, каждый может это сделать! И выходы не жёстко привязаны к какому-то разряду, а имеется выбор какой разряд стека выводить на каждый из выходов!
Вложение 55730
Снова напишу в этой теме: вопрос по журналу... С упаковкой в целочисленную переменную нескольких значений я разобрался, но как записывать эти самые значения? Я записываю их в энергонезависимые переменные, но чтобы сделать журнал на 100 записей нужно создать 100 переменных, сделать 100 блоков для их записи и 100 блоков для обработки этих записей (для вывода на экран).
Вложение 55915
Я на правильном пути или что-то пропустил и формировать журнал можно как-то иначе, элегантнее?
Там речь шла об определении роста/падения величины; здесь - о сохранении результатов работы.
Для прошлой задачи Ваш проект слишком "прожорливый", мне такая частота сравнений не нужна, сделал всё проще.
Для текущей задачи... Я правильно понимаю, то стек хранит одну сохраняемую переменную в одном и том же бите 32 запомненных переменных? А если нужно больше 32 значений, передавать переменную из 31х битов во второй такой же стек?
Я вроде уже писал и в этой теме, что стек имеет 32 разряда(ячейки), со входа данных значение сразу пишется в выбранную ячейку, при использовании макроса в качестве матрицы памяти!
Ранее в других темах описывал работу этого макроса, если что непонятно могу ответить! Вроде уже должно быть ясно, как белый день и проект есть, где можно посмотреть и проверить, если что непонятно!
И большой разницы не вижу, там сохранение со сдвигом, Вы наверно хотите без сдвига, я уже написал, что макрос и так может работать, что здесь может быть непонятным?
Например со входа данных значение сразу пишется допустим в "0" ячейку(диапазон ячеек: 0-31), теперь меняем ячейку для записи на любую другую, при этом в "0" ячейке запоминается значение на входе данных на момент смены ячейки для записи и т. д., всё!
Спасибо, буду пробовать.
Извините за глупые вопросы...
Методический вопрос по блоку BLINK:
если поставить T_low= 0,25c, а T_high=0, то можно ли считать эту конструкцию как генератор одиночных импульсов с частотой 0,25с?
или же нужно делать 0,125/0,125 (не важно, суть чтобы было длиннее цикла программы), а потом ставить блок TP?
Можно после блинка с равными временами поставить R-TRIG, и на его выходе будет импульс на один цикл.
И что Вам непонятно, что уставка таймера не может быть менее времени цикла программы?
Теперь, надеюсь, понятно?
Цитата:
совершенно не ответили по существу моего вопроса.
Блинк с параметрами 0,125/0,125 + R-TRIG и есть генератор одиночных импульсов с частотой 0,25с. Время жизни импульса один цикл ПР.Цитата:
можно ли считать эту конструкцию как генератор одиночных импульсов с частотой 0,25с?
Нулевое время в блинке - в симуляторе работает. Как будет в железе - вопрос.
Мне не понятно следующее: если задержка в таймере установлена меньше времени цикла (конкретно = 0), то будет ли гарантирован одиночный импульс (вполне допускаю что это - стандартная фича, и именно поэтому спрашиваю). Попробовал на небольшом тесте - всё работает как нужно, вопрос можно ли так и делать? понятно что можно и двумя блоками обойтись, но зачем перегружать программу лишними операциями?!
т.е. уставка 0 означает фактически время одного цикла и этим гарантирует одиночный импульс, так?
кстати интересное дело с блоком TP: там (в описании) допустимо ставить длительность импульса = 0, в симуляторе (втч в пошаговом режиме) 1 на выходе не появляется никогда (как и на входе последующего блока), но при этом всё работает как нужно :) это вот точно бага!
Dron/9K на счет ТР выполните в симуляции работу по шагам, можете удивиться одному импульсу.
Вообще программно можно обрывать работу таймеров, меняя PT на 0, только в некоторых случаях еще необходимо ставить AND на выход таймера и этим нулем (int_to_bool) так же заводить на AND
я же в сообщении выше написал - в пошаговом режиме!
смотрите на ТР2 - там на выходе всегда ноль, но при этом присоединённый SEL вполне себе увеличивает счётчик :)
Вложение 56826
Подскажите, плиз: у меня на ПР200 установлены два порта 485. Первый - мастер, он опрашивает устройства в сетевые переменные. Второй - слейв. Как можно использовать эти сетевые переменные вторым портом, назначенные для первого порта? Или сторонний мастер их сам сможет считать по номеру регистра, невзирая, что они прописаны в первом RS485?