Evgen

Созданные ответы форума

Просмотр 12 сообщений - с 166 по 177 (из 177 всего)
  • Автор
    Сообщения
  • 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/iiHVX7POnmSP2

    в ответ на: CoDeSys #1449
    Evgen
    Участник

    «В каком направлении нужно вести поиск? Правильно ли я понял, что «глобальные переменные» доступны через 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_VAR

    R_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_VAR

    R_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
    Программу еще не подгоняли для реальных условий.

Просмотр 12 сообщений - с 166 по 177 (из 177 всего)