Тут не только x>=x0 нужно проверить, а вычислить значение Y.
Так должно заработать:
(X:=-100500, Y:=Y1),
(X:=X1, Y:=Y1),
(X:=X0, Y:=Y0),
(X:=X2, Y:=Y2),
(X:=100500, Y:=Y2)
Вид для печати
Проще сделать совсем другую функцию
Вложение 26412 Вложение 26413Код:FUNCTION EDWARD : REAL
VAR_INPUT
X0: REAL;
Y0: REAL;
X1: REAL;
Y1: REAL;
X2: REAL;
Y2: REAL;
x: REAL;
END_VAR
VAR
a: REAL;
b: REAL;
c: REAL;
d: REAL;
END_VAR
IF x < X1 THEN EDWARD:= Y1;
ELSIF x > X2 THEN EDWARD:= Y2;
ELSE
a:= X1;
b:=X0;
c:=Y1;
d:=Y0;
IF x >= X0 THEN
a:= X0;
b:=X2;
c:=Y0;
d:=Y2;
END_IF
EDWARD:=d - (b - x) * (d - c) / (b - a);
END_IF
ЗЫ.
Если использовать функцию с таблицей, то достаточно задать только три точки
(X:=X1, Y:=Y1),
(X:=X0, Y:=Y0),
(X:=X2, Y:=Y2),
Потому, что в самой функции уже есть в самом начале:
Код:(*Обрезание графика для крайних точек*)
IF IN<=pt^[0].X THEN
MyGraf_p:=pt^[0].Y;
ELSIF IN>=pt^[N-1].X THEN
MyGraf_p:=pt^[N-1].Y;
Функцию для Эдуарда можно даже упростить,
учитывая, что это ФУНКЦИЯ, а не ФБ выбросил промежуточные переменные
Код:FUNCTION EDWARD : REAL
VAR_INPUT
X0: REAL;
Y0: REAL;
X1: REAL;
Y1: REAL;
X2: REAL;
Y2: REAL;
x: REAL;
END_VAR
VAR
END_VAR
IF x < X1 THEN EDWARD:= Y1;
ELSIF x > X2 THEN EDWARD:= Y2;
ELSE
IF x >= X0 THEN
X1:= X0;
X0:= X2;
Y1:= Y0;
Y0:= Y2;
END_IF
EDWARD:=Y0 - (X0 - x) * (Y0 - Y1) / (X0 - X1);
END_IF
Спасибо, очень интересно. Будем изучать.:)
Какой по умолчанию интервал у PLC_PRG? ПЛК110
Здравствуйте.
Помогите, пожалуйста.
Codesys 3.5.7.4.
Необходимо ввести уставку в окне проекта.
Создаю элемент.>Конфигурация ввода>OnMouseClick>Конфигурация>Записать переменную>>
Открывается окошко "Записать переменную".
Только нет полей для задания переменной, поле "тип ввода" - урезанное, есть поля "мин", "макс", "заголовок диалога".
Не могу понять где косяк.
В примерах с сайта Овена в созданных элементах - все работает, при попытке создания нового элемента - такая же петрушка.
Помогите разобраться или посоветуйте, как по другому вводить Real с панели.
Спасибо
Вот эти две настройки проверьте:
Вложение 26540
Вложение 26541
Вложение 26547
Вложение 26548
А у меня вот так.
Голову сломал.
Или я дурак или лыжи не едут
Ответили из поддержки.
Да, косяк.
Надо сменить язык и перезагрузить codesys.
Проверил.
Может кому пригодится.
Вложение 26550
Вопрос по таймерам и переключателям в ПЛК 100 и Codesys. Ранее все программы писал для Сименс ЛОГО, сейчас начал осваивать codesys и вот возникают огромное множество вопросов например как сделать таймер который по поступлению сигнала ожидал бы 5 секунд и после этого включал свой выход, причем входной сигнал не статичен, а пришел только импульсом (ну т.е. без фиксации)? Таймеры TP, TON, TOF мне не подходят, т.к. им на входе постоянно нужно наличие сигнала, чтоб не сброситься.
Василий Кашуба тольуо вот TP не дает предварительной задержки перед включением выхода.
Автовазов, посмотрите в макросах для Лождика были таймеры из oscat, может что из них подойдет, либо писать самому.
После ТР поставить TON как вариант?
Товарищи нужна помощь , проблема такова мне нужно подобие мото часов. часы должны включаться и останавливаться по кнопке старт стоп конечное время 1 год.
Скажите как перестать считать время а то чет хз.
Заблокируйте "старт" и будет вам "стоп".
Уважаемая техподдежка.
Расскажите пожалуйста, как полностью деинсталировать CoDeSys v23 с компьютера.
Раньше была установлена система для WAGO (тоже на базе CoDeSys), ее удалил стандартными средствами, начал устанавливать
CoDeSys v23 и видно, что все перемешалось, остались старые настройки путей, редакторов и т.д.
Доброго времени, уважаемые.
Может быть я плохо искал, но не нашел ответ на следующие вопросы:
1). Возможно ли в Codesys 3.5 конвертирование языков в LD, к примеру из CFC?
2). Как организовать связь по RS-485 СПК207 и ПЧВ на языке LD? (работа с командным словом, словом состояния, пересчетом значений мощности, напряжения, частоты, тока, уставками задания).
И если можно, то ткните носом на доступную для понимания литературу или примеры рабочих проектов работы на LD в Codesys 3.5.
Данную среду начал изучать недавно, поэтому прошу не пинать, ну или хотя бы не сильно ;)
Здравствуйте.
Матерится компилятор на несоответствие типов. А хочу число REAL отправить по модбасу создав элемент "FLOAT". Адрес его кстати не как у контроллера %QR x.x.x:REAL, а %QD x.x.x:REAL - почему? Для эксперимента создал 4байта и 2байта, и получил по честному %QD x.x.x: DWORD и %QW x.x.x:WORD.
В чем ошибка? И как исправить?
Благодарю
Вложение 26991
Здравствуйте , можете помочь в настройке пид регулятора. 1 датчик температуры уставка 20. на выходе аналоговый выход на 04 20 ма типа word хочу подставить в пид но там в реале выход как мне выход промаштобировать в реал. если не библиотекой lin_trafo.Вложение 26992
В ModBus по стандарту нет Float, но 4 байта послать никто не запрещал. Поэтому QD. Для того, чтобы компилятор не ругался не нужно работать с адресами памяти напрямую. Или в PLC Configuration нарямую сопоставляем Ain_dlta. Или в GLOBAL_VARS пишем сточку Ain_dlta AT QD10.1.0: REAL; Из SCADA_Map все убираем, асе должно работать.
Господа, как подать сигнал сброса из главного POU в вызываемый POU, к примеру на счетчик CTU.
Пока на ум приходит только:
CTU1(reset:=1);
CTU1(reset:=0);
Помогите пожалуйста не понимаю программа запускается но работает не так как написано!
SRinst(SET1 := Pusk, RESET := Sbros); ** нажали кнопку пуск включили насос**
Nasos := SRinst.Q1;
IF P>5 THEN Sbros:=TRUE; END_IF; ** когда давление больше 5 насос выключается через ресет **
FTRIGinst (CLK:=Nasos); ** когда насос выключился включается таймер через переменную Т **
T:= FTRIGinst.Q;
TPinst(IN:=T, PT:= T#10s); ** когда прошло 10 секунд насос включился снова **
Nasos := TPinst.Q;
Здравствуйте, коллеги!
Я создал на youtube сообщество, видео уроки на котором отвечают на вопросы новичка возникающие в codesys. Если данная информация будет полезна, то я буду только рад.
https://www.youtube.com/channel/UCxT...3YvQzVy_zElTrw
С уважением, Александр.
Вложение 27313
Добрый день!
Очень нужна помощь.
Я новичек в Codesys и с ПЛК ОВЕН (в данном случае ПЛК160), до этого работал с ПЛК siemens, так что какие то элементарные знания и навыки работы с плк есть (но это вступление).
Для вопросов я подготовил картинку, ссылаюсь на нее в вопросах.
Итак, вопросы:
1) Нигде не нашел примера того можно ли обращаться к входам выходам по адресам (не по именам переменных, типо а b с как в примере)?
если можно, то примерчик обращения, а лучше несколько;
2)у меня есть два энкодера, согласно руководству я могу их подлкючить на "быстрые входы", делаю так
1й энкодер вперед на f1, назад на f2 \ 2й энкодер вперед f3, назад f4 (см. на рис под цифрой 1)
нужно ли мне что то еще настраивать в среде, чтобы считывать их значения типо (см. на рис под цифрой 3), если можно пример обработки или ссылку где можно посмотреть;
3)И наконец, если я использую быстрые входа (4 входа), то у меня еще 12 входов контроллера но (см.2) я вижу 16 входов по ветке Discrete input, я предполагаю что из них какие то четыре не используются.
подскажите пожалуйста какие не используются (a b с d e f... и тд) или поправте меня если я не прав.