По всей видимости не более 10 переменных с опросом каждой в 100ms?
Правильнее вычитывать сразу несколько переменных (те же 10, но одним запросом)
И потом разбирать по переменным.
Вид для печати
А если это переменные типа real то как их одним запросом считать? Уменьшил опрос с 100 до 10 всё без толку.
Как известно, настроить запуск чтения/записи по RS-485 можно либо циклически, либо по логической переменной (речь идёт о настройках в разделе конфигуратора Modbus Slave, настройка каналов).
По поводу циклически вопросов не возникает.
А вот по триггерной переменной вопрос.
Мне нужно запустить однократно опрос некоторых регистров и лишь только после этого дальше что-то делать.
Пусть, к примеру, запустить опрос по нажатию на кнопку. Нажимаем кнопку - переменная переключилась в TRUE. И вопрос - через какое время система прочитает значение переменной и запустит чтение? Когда можно сбросить переменную в FALSE? Как настроить это время?
В хелпе что-то про частоту дискретизации планировщика задач написано, но ничего больше не сказано.
В данном случае лучше воспользоваться библиотекой ОВЕН Модбас и выполнять опрос вручную.
Понятно, это как вариант. Но тут уже именно интересно выяснить.
По "перепаду" логической переменной можно и задачи запускать.
Отвлечемся от RS, вопрос звучит так:
через какое время после "логического перепада" начнёт выполняться соответствующее событие? Каково минимальное время нахождения логической переменной в TRUE?
Хорошо, спасибо за предложенный вариант.
Если кто-то подскажет еще по нижеприведенному вопросу,то для меня на данном этапе всё станет прозрачно совершенно.
Вот в этой теме
http://www.owen.ru/forum/showthread.php?t=19404&page=3
уважаемый Осинский Алексей приводит код такой:
То есть по сути запускает запись параметров по RS-485 по изменению состояния логической переменной (переходу FALSE-TRUE).Код:PROGRAM PLC_PRG
VAR
xTrigger:BOOL:=FALSE; //Триггер для Rising Edge
END_VAR
IF xTrigger THEN //Если триггер установлен - сбросим его
xTrigger:=FALSE;
ELSIF
xTrigger:=TRUE; //подадим команду на запись
END_IF
Если ранее уже установлено состояние TRUE, то переменная сбрасывается в FALSE и следующей же командой - в TRUE.
Система успеет отследить, что был логический переход? От чего зависит, успеет или нет? Где хотя бы это смотреть, читать?
Вложение 18135
На примере 2а.
Для 8а длина - 48.
А в соотнесении уже выбираете какие данные нужны.
подскажите пожалуйста, ни как не могу поставить таймер на паузу, нужно именно остановить таймер, а потом запустить, чтобы отсчёт времени продолжился с места остановки, подмена уставки таймер на нулевую сбрасывает таймер, после отсчёт времени начинается с начала, и ещё при выводе времени работы таймер на визуализацию в спк выводится вместе с временем и знак Т#, как сделать так чтобы этот знак не выводился, а выводилось только значение времени
Функциональный блок принимает на вход 16-разрадное слово вида:
00..011..1 - то есть идет подряд сколько-то нулей и потом подряд несколько единиц. Нужно определить, сколько единиц в слове.
Как проще всего реализовать? Сам уже придумал два варианта, один с использованием цикла (нежелательно как я понял), другой с использованием логарифма по основанию 2 (такого стандартного оператора не нашел, переход к другому основанию - уж больно лютое решение). Подскажите как быть.
Воспользуйтесь функцией, как раз сегодня сделал. :)
использовать так:
a:=quantity_bits(b);
где a типа BYTE, b типа WORD.
А-а, вон оно как, каждый бит перевести в байт, и сложить эти байты. Сумма будет равна как раз числу единичных.
Спасибо:)
Доброго времени суток.
Проблема такая: есть СПК207 и модули МВ110-8А, МУ110-32Р, МВ110-32ДН, МЭ110-224.1М (каждого вида по несколько штук), обмен по Modbus RTU.
Связь со всеми устройствами налажена, а так же опрос всех, за исключением МЭ110-224.1М.
Необходимо считать значение тока (значение регистра по РЭ 0х0051, 0х0052). Опрос функцией 03 регистров к примеру 0х0010 происходит успешно.
Но как только задаешь в параметрах канала Modbus Slave код 03, регистр 0х0051, длина 2 при попытке запуска проекта прибор сразу же отваливается, пишет ошибка шины.
Сам МЭ110-224.1М настроен с помощью конфигуратора МХ110. Настройки аналогичны другим успешно опрашиваемым модулям с единственным отличаем "работа по Modbus RTU" (в других этого пункта просто нет). Так же установлена одна галочка "измерение тока". Версию прошивки МЭ110-224.1М не помню.
Нужна хоть какая-нибудь наводка на решение проблемы. Уже всю голову себе поломал. Сам я начинающий, так что истина может лежать где-то на поверхности.
Уточняю: МЭ110-224.1М версия программы 1.09
Добрый день, подскажите пожалуйста, необходимо каждые двадцать четыре часа, допустим в 12.00 ночи, получить сигнал TRUE и записать его в переменную, я так понимаю необходимо осуществить взаимодействие с внутренними часами СПК110, пишу программу в CFC.
Изучайте матчасть http://prolog-plc.ru/docs/TimeExperience.pdf
Здравствуйте. Подскажите как подключить виртуальный контроллер в Codesys 3.5 SP5 Patch5?
подскажите кто пользовался фб limitalarm ,нет сигнала с выхода il ,в место него выходы O и U становятся в true одновременно
скриншот !!!
спасибо заработало!
Доброе время суток, подскажите пожалуйста, как реализовать в визуализации обратный отсчёт времени.
Как вариант:
Вложение 18398
Вложение 18399
где 1000 - это время цикла задачи программы в мс.
Забыл сообщить, пишу программу в CFC, в программе таймер ТР, он отсчитывает время по уставке на входе РТ и выдаёт значение на выходе ЕТ, но когда это значение времени с выхода ЕТ вывожу на визуализацию %t[mm:ss], визуализация показывает отсчёт от 0 и до допустим 5 минут, а необходимо наоборот от 5 минут до 0. ST язык не знаю, если можно подсказку в CFC.
На CFC мой вариант выглядит так:
Вложение 18402
Еще раз обращаю внимание, 1000 - это время цикла задачи, к которой привязана программа в мс. Так сделано для упрощения, т.е. каждый цикл (каждую секунду) программа уменьшает значение переменной на одну секунду.
%t выводит системное время и никакого отношения к таймеру не имеет
Вот пожалуйста %tс привязанной переменнойВложение 18403
Выложите, ваш проект, пожалуйста.
У меня все работает согласно справке:
Вложение 18404
К сожалению ни чего не выходит, у меня работает таймер ТР, он отсчитывает время согласно установленному времени на входе РТ ( t_5min: Time := t#5m;) и выдаёт отсчёт на свой выход ЕТ в переменную (t1_1_5m: Time;), я снимаю отсчёт с переменной на выходе ЕТ и выставляю его в визуализации на СПК и визуализация показывает отсчёт от 0 минут до 5 минут, а нужно наоборот осуществить отсчёт в визуализации обратно от 5 минут до 0 минут. Заранее благодарен за ответ.
Спасибо большое всё получилось, я ещё пока новичок в этой теме, ещё заметил в работе таймера не равномерность отсчёта времени, секунды идут то быстрее, то медленнее, заметно даже на глаз, если можете подскажите пожалуйста из-за чего это может происходить, и как с этим бороться