Созданные ответы форума
-
АвторСообщения
-
EvgenУчастник
я добавил в формулы
public bool[] Flags = new bool[65535]; тут не выдало ошибки
и
public double CnlKN(int dependOnCnl)
{
Val(dependOnCnl) > 1 ? Cnl + 1: Cnl;
if (Flags[dependOnCnl] == true)
{
Val(dependOnCnl) = 0;
Flags[dependOnCnl] = false;
}
}
пытался так
public double CnlKN(int dependOnCnl)
{
Val(dependOnCnl) > 1 ? Cnl + 1: Cnl;
if (Flags[dependOnCnl] == true)
{
Val(dependOnCnl) = 0;
return Flags[dependOnCnl] false;
}
}
тут выдает ошибку.
и еще кучу вариантов перепробовал! подскажите пожалуйста!EvgenУчастникТ. Е. необходимо так
в формулах добавить 2 строкиpublic bool[] Flags[1] = new bool[1];
……………………………………..
public bool[] Flags[65535] = new bool[65535];и
public double CnlKN(int dependOnCnl)
{
IF Flags[dependOnCnl] = 0 ? 0 : Val(dependOnCnl) > 1 ? Cnl + 1: Cnl:}
EvgenУчастникЗдравствуйте!
прошу уточнить для сброса по команде.(я правильно понял или нет)
я создал для каждого эл. привода учет времени работы за сутки и месяц (для каждого создал отдельные каналы в администраторе). (Огромная благодарность Вам за все подсказки).
Теперь необходимо сделать отдельно сброс по команде.
Как я думаю.
Необходимо создать каналы подсчета времени Val(291)>1?Cnl+1:Cnl , но добавить условие если канал управления изменился с FALSE на TRUE то обнулить канал
Необходимо добавить каналы управления для каждого электропривода.public double CnlKN(int dependOnCnl)
{
IF N1 == 0 ? 0 : Val(dependOnCnl) > 1 ? Cnl + 1: Cnl:
N1=0;
}где N1 это канал управления, так же необходимо учесть следующее, мы N1 присвоили значение TRUE(1) необходимо его сбросить обратно на FALSE(0).
для этого добавить (как я думаю) N1=0
Я все верно понял?EvgenУчастникспасибо, это полезно будет!
EvgenУчастникКак правильно умножить
EvgenУчастникЧасовой ТС заменил на Часовой ТИ
я записывал форму такими способами:
Val(291)>1?Cnl+1:Cnl*DayBeg()
Val(291)>1?(Cnl+1:Cnl)*DayBeg(721) (скрин выше)
Val(291)>1?DayBeg(Cnl+1:Cnl)
Val(291)>1?Cnl+1:Cnl?Cnl*DayBeg()
Val(291)>1?Cnl+1:Cnl?Val(721)*DayBeg()
и еще разные варианты рассматривал, каждый раз сервер выдавал следующее
2016-01-27 11:58:39 <PROMETEY><СИСТЕМА><ERR> Нормальная работа программы невозможна.EvgenУчастникЗдравствуйте!
Есть каналы связи, по ним отслеживаем данные по тону с насосов, двигателей, и др. эл. приборов.
я создал в администраторе каналы «Часовой ТС» эти каналы считают время работы эл. оборудования.
необходимо некоторые каналы «Часовой ТС» обнулять раз в месяц, а некоторые раз в месяц и некоторые необходимо обнулять по команде. Как это задать автоматически?
https://yadi.sk/i/iiHVX7POnmSP2EvgenУчастник«В каком направлении нужно вести поиск? Правильно ли я понял, что «глобальные переменные» доступны через IP по UDP? Как проверить это предположение?»
Если все аналогично CoDeSys то необходимо настроить OPC-server.
К примеру в OPC CoDeSys 2.5 необходимо настроить OPC Config(здесь задается плк и данные из CoDeSys Getewey). и CoDeSys Getewey(необходимо ввести адрес ПЛК Шлюз Порт, Скорость)
в OPC CoDeSys 3.5 и выше все настраивается в OPC Config.
А ПЛК какой фирмы Вы используете?EvgenУчастника есть подробное описание использования формул?
EvgenУчастник1 как правильно создавать каналы для подсчета времени? он должен быть «до расчетный» или можно и телеизмерения?
поскольку мы с канала берем значения тока. и анализируем их если двигатель вышел из строя. Когда я изменил c «Телеизмерение» на «До расчетный ТИ» у меня перестали обновляться данные с каналов.Основная идея модуля — у Вас срабатывают триггеры, которые Вы создаёте в конфигурации модуля, а в качестве реакции на сработку триггера вызываются любые команды, которые Вы укажете.
Для учета времени работы двигателя на месяц необходимо сложить все время его работы за период. Как вычислить время работы в каждом цикле пуска? и как сложить временные циклы?
Триггер срабатывает по переднему фронту изменения канала? или есть возможность измерять по какому фронту выбирать (передний/задний)
Если так то время работы в цикле посчитать можно по след формуле:
«Триггер ПрФ»>X «секундомер старт» Триггер ЗДФ» =<X «секундомер стоп»
а потом просто сложить время за месяц. суткиEvgenУчастникЗдравствуйте!
простая формула не подходит, поскольку двигатель за одни сутки влк/выкл от 10 до 20 раз! а необходимо почитать сколько он наработал за месяц!
формула подсчета проста.Как я понял в администраторе необходимо создать минутный или часовой ТС(в зависимости от того что считаем). Но как сделать что бы время суммировалось и запускался счетчик времени при значении с канала больше «1»?
Грубо говоря как записать:
Если «Ток»>1 тогда «Время»=»старт».
«Время1″=»Время1″+»Время».
Формула приведенная выше я запустил и буду тестировать, после обеда посмотрю что покажет!EvgenУчастникдвигатель включают несколько раз в 2 часа.
Для ПЛК программа выглядит примерно так:
VAR
I: REAL;
R_TRIG_1: R_TRIG;
Start: TIME;
F_TRIG_1: F_TRIG;
Tim_work: TIME;
END_VARR_TRIG_1(CLK:= I>0, Q=> );
IF R_TRIG_1.Q THEN
Start:=TIME();
END_IF
F_TRIG_1(CLK:=I>0 , Q=> );
IF F_TRIG_1.Q THEN
Tim_work:=TIME()-Start;
END_IF
VAR
VAR
I: REAL;
R_TRIG_1: R_TRIG;
Start: TIME;
F_TRIG_1: F_TRIG;
Tim_Cycle: TIME; (*Время работы двигателя от последнего пуска*)
END_VAR
VAR RETAIN
Time_Sum: UDINT; (*Время работы двигателя, ИТОГО*)
Cycle: UDINT; (*Число пусков двигателя*)
END_VARR_TRIG_1(CLK:= I>0, Q=> );
IF R_TRIG_1.Q THEN
Start:=TIME();
Cycle:=Cycle+1;
END_IF
F_TRIG_1(CLK:=I>0 , Q=> );
IF F_TRIG_1.Q THEN
Tim_Cycle:=TIME()-Start;
Time_Sum:=Time_Sum + TIME_TO_UDINT(Tim_Cycle)/1000;
END_IF
Программу еще не подгоняли для реальных условий. -
АвторСообщения