согласовать не проблема ,делайте пока проект
Вид для печати
согласовать не проблема ,делайте пока проект
Интересно ,как на ST будет это выглядит ?(принт скрин)
объявление
тело ФБЦитата:
VAR_INPUT
IN : BOOL;
T1 : TIME;
T2 : TIME;
RST : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
init: BOOL;
last: TIME;
tx: TIME;
edge: BOOL;
END_VAR
из ОСКАТ-вской библиотеки oscat_building_100.libЦитата:
tx := DWORD_TO_TIME(T_PLC_MS());
IF NOT init THEN
init := TRUE;
last := tx;
ELSIF RST THEN
(* asynchronous reset *)
Q := FALSE;
ELSIF IN AND NOT edge AND NOT Q THEN
(* a rising edge on in will reversre the output status, if new pulse is startet the start time is stored in last *)
last := tx;
Q := TRUE;
ELSIF NOT IN AND edge AND ((tx - last) > T1) THEN
(* a falling edge on IN will clear the output if in was high for more then T1 *)
Q := FALSE;
ELSIF (tx - last) >= T2 THEN
(* timeout for long pulse if second click did not occur or in stays high *)
Q := FALSE;
END_IF;
edge := IN;
Скромненько ,но одним взглядом не обьять ,надо в каждую строку вникать
Не, в Писатели поздно переучиваться ,посижу в Художниках:) Хотя начинал с ассемблера .За долгие годы образ мышления сформировался под "картинки":) :rolleyes: а не текст ;)
вот и я думаю, и чего говорят ST для продвинутых.. так всё путанно ((( одно только преимущество это вычисления формулой
Ну значит мы еще не продвинуты ...путано ,потому как языка не знаем ,если написать на монгольском языке:D ... так мы то же синус рядами вычисляем на ПР;)
Да я то ещё и на ПР не многое могу, к своей последней задачей даже алгоритм не могу подобрать.. принцип понять как должно работать
чего там сложного, NOT init тупо инициализация при запуске программы, а так как цикл исчисляется в мс, то на него можно и не обращать внимание, второе условие RST, тут должно тоже быть понятно обычный сброс, и вот только далее начинаются условия интересующие, это IN AND NOT edge AND NOT Q - расшифровываю при переднем фронте входа и выключенном выходе, NOT IN AND edge AND ((tx - last) > T1) - сработал задний фронт входной переменной и время превысило Т1, далее (tx - last) >= T2 если наступило время большее или равное чем Т2, в телах условий идет присвоение значений выходу
Доктору видней:D ,надеюсь:)
Эх ,было бы время и стимул ,реализовал бы все библиотеки (возможные)ПЛК в макросах для ПР ,с учетом его специфики.Вот тогда бы пользователи ПЛк без проблем совместно использовали и ПР и ПЛК.Пользователи ПЛК обленились:) им готовые библиотеки подавай ,не хотят в мелочах копаться :D ;) .
Есть сигнал например 60 импульсов в час это расход 60 литров на час. Вес импульса 1литр/имп
Задумка есть реализовать на ПР счётчик. Причём чтобы зависил от времени.. Точнее показывал расход мгновенное значение. Где то видел макрос в этой теме. Но задача будет другая, сделать изменения например на вход поступает 60 импульсов в час, а на выходе напрммер на 10% процентов меньше.. тоесть 54 будет в час..
Как я вижу надо на входе постоянно следить за временем между сигналами и потом уже коректировать время между импульсами на выходе, причём увеличеное время на коректируемое значение (к примеру 10% получаеться если взять отрезок времени 5 минут на входе пришло 5 импульсов а на выходе только 4 прошло за такой же промежуток времени.. Получаеться уменьшение на 20%
Кстати, раз уж заинтересовались, вот над чем я бился так и не победил, из-за нехватки SEL-ов, MAX, MIN и LIMIT-ов
и телоЦитата:
VAR_INPUT
T_EXT : REAL;
T_INT : REAL;
OFFSET : REAL;
T_REQ : REAL;
END_VAR
VAR_INPUT CONSTANT
TY_MAX : REAL := 70.0;
TY_MIN : REAL := 25.0;
TY_CONFIG : REAL := 70.0;
T_INT_CONFIG : REAL := 20.0;
T_EXT_CONFIG : REAL := -15.0;
T_DIFF : REAL := 10.0;
C : REAL := 1.33;
H : REAL := 3.0;
END_VAR
VAR_OUTPUT
TY : REAL;
HEAT : BOOL;
END_VAR
VAR
tr : REAL;
tx: REAL;
END_VAR
вроде как погодозависимый график, а сделать терпения не хватило, размер холста маленький, вложений собственных функций не сделать, стандартных не хватает, :) беситЦитата:
tr := T_INT + OFFSET;
tx := (tr - T_EXT) / (T_INT_CONFIG - T_EXT_CONFIG);
IF T_EXT + H > tr THEN
TY := 0.0;
ELSE
TY := LIMIT(TY_MIN, tr + T_DIFF * 0.5 * tx + (TY_CONFIG - T_DIFF * 0.5 - tr) * EXPT(tx, 1.0 / C), TY_MAX);
END_IF;
TY := MAX(TY, T_REQ);
HEAT := TY > 0.0;
ооо я тоже хотел сделать погодозависимый график.. только по каждой точке температуры.. Меня остановило только то что у ПР не входа Термосопротивлений, завести можно через нормирующую головку а две головки это 2 тысячи рублей.. как бы получаеться что почти ПЛК 73 (((( только без индикации.. ТРМ двуканальный брать с выходами 4-20 мА.. тоже не вариант .. дотягивает до того же ПЛК
Вот нашел несколько макросов ,но есть еще ,надо искать
Да без вложений макросы в макросы серьезных применений не сделать
в предложеном коде для меня набор символов.. я надеюсь пока.. учусь как могу сам. График зависимости температуры он конечно в какой то части линейный.. но на своей практике я уже понял что не всегда, при тёплых температурах хвостик надо загибать чуть вверх.. а при высоких наооборот чуть вниз.. как бы переходит в горизонталь вправо
замеряйте время (период) между двумя импульсами ,в мили секундах (для точности).Потом это количество умножьте на проценты .Полученные значения запишите в свой блинк .....
так, смысл какой. Есть счётчик с весом импульса.. и есть регестрирующий прибор, если между ними уткнуть ПР, то потребление будет учтено меньше на определённое количество процентов.;)
Когда постоянный процес более менее понятен.. а вот например остановилися на входе импульсы, надо и на выходе прекратить... а на входе импульсы могут с дискретностью 1 минута быть как номинальное))):cool:
для этого есть зона чувствительности ,то есть если частота меньше определенной,а период больше ,то расход =0.Расходомер -это генератор ,а импульс и пауза составляют период частоты.Измеряя период ,мерите расход жидкости .Просто для высоких частот мерят количество импульсов за время .А для медленных сигналов мерят время между двумя соседними импульсами(так точнее и быстрее) .
Да График впринципе похож, а уравнение какое его построения? напишите как в матиматике Зависимость y от x
:D в екселе забацал свой график в котельной.. и указал расчитать формулу полиномиальную моего графика.. вот что выдал ексель
y = 2E-07x6 - 2E-05x5 + 0,001x4 - 0,019x3 + 0,159x2 + 1,507x + 40,59
после х это степени:rolleyes:
Сразу что бросилось в глаза замочек, впринципе я уже писал Анатолию, пример это хорошо.. но когда сам прорешаешь ту или инную задачу во первых учишься, а во вторых понимаешь как подладить под себя в случае чего ))) а не бежать на форум -"Пап пап.. а мне вот тут переделать бы надо" :D
Может это подойдет http://www.owen.ru/forum/showpost.ph...postcount=2437 лишнее можно убрать
как я понимаю видимая часть нужна только для эмуляции. А рабочий проект это один макрос. Температура наружного воздуха подаёться на вход Air
На выходе макроса температура задания.
В представленом макросе график линейный.. тоесть прямая
так я уже комментировал, концепция понятна, как найти максимум или минимум между двумя значениями, для лимита надо просто последовательно их проверить и прошедьшее значение будет входить в "ворота" либо равно одной из "штанг". Вот только реализация подводит, были бы такие функции стандартными,как те же EQ или GT, как легко было бы строить среднесерьезные проекты