Страница 1101 из 1187 ПерваяПервая ... 1016011001105110911099110011011102110311111151 ... ПоследняяПоследняя
Показано с 11,001 по 11,010 из 11862

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #11001
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,014

    По умолчанию

    Цитата Сообщение от Dmitry_KV Посмотреть сообщение
    Спасибо за идею без MOVE, но так проходит кратковременно авария при выключении xDO6_FUN, и в целом нет аварии при переходе TEST_FAN_ON из TRUE в FALSE при xDO6_FUN: TRUE
    Если Test_Fan_On - это нечто вроде реле перепада давления на вентиляторе, то поставьте задержку побольше
    Еще, так можно
    Безымянный.png
    Здесь задержка работает только при включении

  2. #11002
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,167

    По умолчанию

    Цитата Сообщение от Николай Суриков Посмотреть сообщение
    Где-то на форуме выкладывали функцию отличную, дайте ссылку, если кто-то помнит, что бы еще раз сказать спасибо автору.
    Код:
    TYPE Point_GR :
    STRUCT
    	X,Y: REAL;
    END_STRUCT
    END_TYPE
    Код:
    FUNCTION MyGraf_p : REAL
    VAR_INPUT
            IN: REAL;       (*Входной сигнал*)
            pt : POINTER TO ARRAY[0..99] OF Point_GR;       (*Массив точек графика, не более 100 пар точек X,Y*)
            size : UINT;
    END_VAR
    VAR
            a: INT; (*Начало интервала поиска*)
            b: INT; (*Конец интервала поиска*)
            N: INT; (*Число точек в графике*)
            i: INT;
    END_VAR
    Код:
    N:= SHR(size,3)-1;      (*Число точек в графике*)
    (*Начальные значения интнрвала поиска*)
    a:=0;
    b:=N-1;
    
    (*Обрезание графика для крайних точек*)
    IF IN<=pt^[0].X THEN
            MyGraf_p:=pt^[0].Y;
    ELSIF IN>=pt^[N-1].X THEN
            MyGraf_p:=pt^[N-1].Y;
    (*Теперь можно начать поиск*)
    ELSE
            WHILE (b-a) <> 1 DO (*В конце концов, входной сигнал ТОЧНО попадет между двумя соседними точками X(a) и Х(а+1)*)
            i:=(a+b)/2;     (*Делим интервал поиска пополам*)
            IF IN=pt^[i+1].X THEN   (*Может нам повезло, и мы сразу нашли точку? *)
            a:=i; b:=i+1;                   (*Бинго! прекращаем итераций, нечего в пустую молотить :) *)
            (*мимо :( ,тогда посмотрим в какую половину интервала попали*)
            ELSIF IN>pt^[i].X THEN  (*Если входной сигнал больше середины интервала поиска,*)
            a:=i;                                    (*то следующий поиск будем делать начиная от середины и до конца массива*)
            ELSE                                    (*А если входной сигнал меньше середины интервала поиска,*)
            b:=i;                                    (*то следующий поиск будем делать начиная от начала и до середины массива*)
            END_IF
    (*Таким образом на каждой итерации отбрасываем из поиска заведомо ненужную половину значений
    две соседние координаты X(a) и Х(а+1), меду которыми попадает входной сигнал найдем очень быстро
    для 8 точек графика нужно не более 3 итераций
    при 9..16 точек в графике нужно не более 4 итераций
    при 17..32 точек в графике нужно не более 5 итераций
    при 33..64 точек в графике нужно не более 6 итераций
    при 65..128 точек в графике нужно не более 7 итераций
    инфа точная - 100% ;) *)
    END_WHILE
    (*Теперь самое простое - сделать линейную аппроксимацию по двум точкам ;) *)
    MyGraf_p:=pt^[b].Y-(pt^[b].X-IN)*(pt^[b].Y-pt^[a].Y)/(pt^[b].X-pt^[a].X);
    END_IF
    Использование:
    Код:
    PROGRAM PLC_PRG
    VAR
    	GR: ARRAY [0..49] OF Point_GR:=
    	(X:=0, Y:=15),(X:=3, Y:=25),(X:=4, Y:=45),(X:=8, Y:=75),(X:=15, Y:=45),
    	(X:=16, Y:=45),(X:=20, Y:=65),(X:=22, Y:=75),(X:=40, Y:=95),(X:=50, Y:=105),
    
    	(X:=110, Y:=15),(X:=120, Y:=25),(X:=130, Y:=45),(X:=140, Y:=75),(X:=150, Y:=45),
    	(X:=160, Y:=45),(X:=200, Y:=65),(X:=220, Y:=75),(X:=240, Y:=95),(X:=250, Y:=305),
    
    	(X:=301, Y:=15),(X:=305, Y:=25),(X:=324, Y:=45),(X:=380, Y:=75),(X:=415, Y:=45),
    	(X:=416, Y:=45),(X:=420, Y:=65),(X:=422, Y:=75),(X:=440, Y:=495),(X:=450, Y:=505),
    
    	(X:=511, Y:=15),(X:=515, Y:=25),(X:=524, Y:=45),(X:=580, Y:=75),(X:=615, Y:=45),
    	(X:=416, Y:=45),(X:=420, Y:=65),(X:=422, Y:=75),(X:=440, Y:=495),(X:=450, Y:=505),
    
    	(X:=621, Y:=15),(X:=625, Y:=25),(X:=634, Y:=45),(X:=680, Y:=75),(X:=695, Y:=45),
    	(X:=676, Y:=45),(X:=680, Y:=65),(X:=692, Y:=75),(X:=740, Y:=495),(X:=750, Y:=505);
    
    	IN: REAL;
    	OUT: REAL;
    END_VAR
    Код:
    OUT:=MyGraf_p(IN, ADR(GR), SIZEOF(GR));*)
    А если хотите изучить, то код библиотеки Util открыт, открываете в CoDeSys и изучаете.
    Это был я, https://owen.ru/forum/showthread.php...l=1#post220263
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #11003

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Если Test_Fan_On - это нечто вроде реле перепада давления на вентиляторе, то поставьте задержку побольше
    Еще, так можно
    Безымянный.png
    Здесь задержка работает только при включении
    xDO6_FUN это изначальный сигнал включения - подает питание на реле вентилятора, его в этой блок схеме не надо включать, он включается в другом месте и отключается с задержкой. Необходимо контролировать, что вентилятор включился TEST_FAN_ON стал TRUE все время пока реле xDO6_FUN:TRUE.

    На самом деле я не уверен, пресостат на вентиляторе стоит или сухой контакт с его магнитного пускателя. Факт в том, что после включения xDO6_FUN проходит некоторое непродолжительное время (доли секунды) и появляется TEST_FAN_ON в TRUE. Но этого хватает чтобы на мгновение прошла авария, если не использовать таймер TOF в предложенной мной схеме.

    VAR51.jpg

    Выложенная мной схема работает так как мне надо, задача была избавиться от таймера TOF. Во всем проекте используется таймеров-7 шт. , один из которых исправляет зависание 2х таймеров при изменении их уставки на меньшее значение. На данный момент смирился с еще одним таймером.
    Всем спасибо!

    Появилась более интересная проблема, этот же контроллер ПЛК110-32 (М2) опрашивает счетчики по Modbus RTU (3 шт. по 25 регистров DINT), часть из них используется в работе ПЛК, но все 75 шт. передаются по Modbus TCP в SCADA. А проблема в том, что опрашивает он их по одному, не пакетно, и похоже после каждого регистра еще и таймаут выжидает, а счетчики итак на скорости 19200 работают. Где-то встречал на форуме такую проблему, но там писался свой блок опроса или сторонняя библиотека. Хотелось бы более оперативно видеть данные в SCADA.
    Последний раз редактировалось Dmitry_KV; 29.09.2024 в 22:29.

  4. #11004
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,167

    По умолчанию

    Цитата Сообщение от Dmitry_KV Посмотреть сообщение
    xDO6_FUN это изначальный сигнал включения - подает питание на реле вентилятора, его в этой блок схеме не надо включать, он включается в другом месте и отключается с задержкой. Необходимо контролировать, что вентилятор включился TEST_FAN_ON стал TRUE все время пока реле xDO6_FUN:TRUE.

    На самом деле я не уверен, пресостат на вентиляторе стоит или сухой контакт с его магнитного пускателя. Факт в том, что после включения xDO6_FUN проходит некоторое непродолжительное время (доли секунды) и появляется TEST_FAN_ON в TRUE. Но этого хватает чтобы на мгновение прошла авария, если не использовать таймер TOF в предложенной мной схеме.

    VAR51.jpg


    Появилась более интересная проблема, этот же контроллер ПЛК110-32 (М2) опрашивает счетчики по Modbus RTU (3 шт. по 25 регистров DINT), часть из них используется в работе ПЛК, но все 75 шт. передаются по Modbus TCP в SCADA. А проблема в том, что опрашивает он их по одному, не пакетно, и похоже после каждого регистра еще и таймаут выжидает, а счетчики итак на скорости 19200 работают. Где-то встречал на форуме такую проблему, но там писался свой блок опроса или сторонняя библиотека. Хотелось бы более оперативно видеть данные в SCADA.
    Для реализации группового опроса используйте модуль String в конфигурации мастера ПЛК
    Например
    https://owen.ru/forum/showthread.php...l=1#post333593
    https://owen.ru/forum/showthread.php...l=1#post244022
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #11005

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Для реализации группового опроса используйте модуль String в конфигурации мастера ПЛК
    Например
    https://owen.ru/forum/showthread.php...l=1#post333593
    https://owen.ru/forum/showthread.php...l=1#post244022
    Спасибо большое, буду разбираться)

    Попробовал работает, вроде даже быстрее. Но не правильное чередование байт - значение должно быть 231, а отображает 15138816.
    VAR6.jpg
    По настройкам вроде правильно выставил, если считывать отдельно требуемые параметры они отображаются корректно, тип данных DWORD.
    VAR7.jpg
    Последний раз редактировалось Dmitry_KV; 30.09.2024 в 08:41.

  6. #11006

    По умолчанию

    опрашивает счетчики по Modbus RTU (3 шт. по 25 регистров DINT), часть из них используется в работе ПЛК, но все 75 шт. передаются по Modbus TCP в SCADA. А проблема в том, что опрашивает он их по одному, не пакетно, и похоже после каждого регистра еще и таймаут выжидает, а счетчики итак на скорости 19200 работают.
    электросчётчики или что?
    самый главный вопрос - а нужно ли быстрее?

  7. #11007

    По умолчанию

    Цитата Сообщение от In_Da_Cher_A Посмотреть сообщение
    электросчётчики или что?
    самый главный вопрос - а нужно ли быстрее?
    Да электросчетчики Lovato DMK22, изначально опрашивались напрямую SCADA. Хотелось бы максимально сохранить скорость опроса, а то выделяются на фоне остальных. Возможно и не нужно быстрее, но 4-5 сек тоже не дело) Больше спортивный интерес.

  8. #11008

    По умолчанию

    Цитата Сообщение от Dmitry_KV Посмотреть сообщение
    Да электросчетчики Lovato DMK22, изначально опрашивались напрямую SCADA. Хотелось бы максимально сохранить скорость опроса, а то выделяются на фоне остальных. Возможно и не нужно быстрее, но 4-5 сек тоже не дело) Больше спортивный интерес.
    и как быстро меняются данные в электросчётчике? суточный объём, месячный объём, что там ещё активная, реактивная, ну токи допустим...и что в СКАДА системе за алгоритм, требующий более скоростного опроса и реакции на изменение допустим тока по фазе А?
    я к тому, что изменение "загрузки" пары тройки "микросхем" отвечающих за сетевой опрос в ПЛК с допустим условно 30% до 5% никак не скажется на ни на увеличении времени безотказной работы, на на перегреве, ни на что другое
    "ускорять" опрос или ещё как-то заморачиваться стоит только для того, имхо, если этого реально требует либо алгоритм, либо сетевые затыки. В большинстве случаев, все ускорения - это просто увеличение энтропии вселенной
    спортивный интерес
    ну чисто для трени - вай нот

  9. #11009

    По умолчанию

    Цитата Сообщение от In_Da_Cher_A Посмотреть сообщение
    и как быстро меняются данные в электросчётчике? суточный объём, месячный объём, что там ещё активная, реактивная, ну токи допустим...и что в СКАДА системе за алгоритм, требующий более скоростного опроса и реакции на изменение допустим тока по фазе А?
    я к тому, что изменение "загрузки" пары тройки "микросхем" отвечающих за сетевой опрос в ПЛК с допустим условно 30% до 5% никак не скажется на ни на увеличении времени безотказной работы, на на перегреве, ни на что другое
    "ускорять" опрос или ещё как-то заморачиваться стоит только для того, имхо, если этого реально требует либо алгоритм, либо сетевые затыки. В большинстве случаев, все ускорения - это просто увеличение энтропии вселенной
    ну чисто для трени - вай нот
    Заказчику нужно скорее для анализа кратковременных скачков мощности, которые можно вообще не увидеть при опросе в 4-5 сек. На работу ПЛК и его алгоритма это может повлиять если целевая уставка времени будет меньше 10 сек., на практике скорее меньше 20 сек не будет, если только больше. В принципе дальше на каждом потребителе уже нормальные мультиметры стоят по ним можно эти же скачки с точностью до десятых долей секунды видеть. Так что, хотелось бы сделать хорошо))

  10. #11010
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,096

    По умолчанию

    Цитата Сообщение от Dmitry_KV Посмотреть сообщение
    .. По настройкам вроде правильно выставил, если считывать отдельно требуемые параметры они отображаются корректно, тип данных DWORD..
    String это просто контейнер для абстрактных регистров и он всегда нативный относительно слейва (не путать с пакетом) и кладет на настройку порядка регистров, которая за каким-то по дефолту трасемоде, т. е. переставляет регистры для "розничного" обмена
    Т..к. в ваших слейвах порядок 3412, просто скопируйте из стринга исходную массив/структуру в нужное место и переставьте там слова в нужных двойных словах
    Последний раз редактировалось Валенок; 30.09.2024 в 09:36.

Страница 1101 из 1187 ПерваяПервая ... 1016011001105110911099110011011102110311111151 ... ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •