Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 31

Тема: Упрощение функции...

  1. #11
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,552

    По умолчанию

    Цитата Сообщение от feLoNy Посмотреть сообщение
    Это уже существует. Велосипед построен и не вариант уже играть с другими мощностями на выход. Пока в таком виде работает, но кучу всего ещё надо додумывать...
    out1-out4 - 4 "шага" по 100 кВт... Суммарная мощность 500 кВт!
    out4-out8 - 4 вентилятора которые включаются в зависимости от включенных выходов
    melky
    Да на выходе ТЭНы.
    как отключать выходы out4-out8 с задержкой (для охлаждения после выключения ТЭНов) пока не могу вкурить... Честно я как студент это сейчас все это делаю, начал с нуля изучать и рад что так хоть получилось. Проект реальный, так сказать нехилый калорифер на 500 кВт разделенный на 4 секции.
    Ну вообщем спасибо ребята что отозвались теперь хоть есть над чем подумать.
    Задача в другом, хочется оптимизировать данный кусок кода что бы он не был таким громоздким.
    в pw1 = 1 включаются все вентиляторы это временно для испытания. так же предоставлен кусок кода с мощностями до 100 кВт. остальное аналогично, просто добавляются выходы по 100 кВт, в итоге как писал выше суммарная мощность 500 кВт.
    Для задержки выключения выхода используйте TOF.

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

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    ... petera вызывает злых духов. mrout5 можно ещё упростить, наверное, лишь бы вселенная обратно в сингулярность не схлопнулась.
    Ну тогда без бубна
    В вашем варианте
    Код:
    VAR
        mrbits: BYTE;
        pw1: REAL;
        mrout1: BOOL;
        mrout2: BOOL;
        mrout3: BOOL;
        mrout4: BOOL;
        mrout5: BOOL;
        mrout6: BOOL;
        mrout7: BOOL;
        mrout8: BOOL;
    END_VAR
    VAR CONSTANT
        MRlo: ARRAY[0..9] OF BYTE :=
                2#00000000, 2#00000001, 2#00000010, 2#00000011, 2#00000110,
                2#00001000, 2#00001001, 2#00001010, 2#00001011, 2#00001110;
        MRhi:ARRAY[0..9] OF BYTE :=
                2#00000000, 2#00010000, 2#01000000, 2#01010000, 2#01110000,
                2#10000000, 2#10010000, 2#11000000, 2#11010000, 2#11110000;
    END_VAR
    mrbits := MRlo[TRUNC(pw1) MOD 10] + MRhi[(TRUNC(pw1) MOD 100)/10];
    mrout1 := mrbits.0;
    mrout2 := mrbits.1;
    mrout3 := mrbits.2;
    mrout4 := mrbits.3;
    mrout5 := mrbits.4;
    mrout6 := mrbits.5;
    mrout7 := mrbits.6;
    mrout8 := mrbits.7;
    Не 100 значений набивать, а всего 20. Вероятность ошибиться меньше, да и модифицировать константы проще, если "десятки" или "единицы" другие будут.
    Последний раз редактировалось petera; 27.03.2015 в 14:03.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Цитата Сообщение от feLoNy Посмотреть сообщение
    Это уже существует. Велосипед построен и не вариант уже играть с другими мощностями на выход. Пока в таком виде работает, но кучу всего ещё надо додумывать...
    out1-out4 - 4 "шага" по 100 кВт... Суммарная мощность 500 кВт!
    out4-out8 - 4 вентилятора которые включаются в зависимости от включенных выходов
    petera, чуть позже возьму бубен и буду стараться вызвать духов с тобой вместе :-D
    В любом варианте хоть с бубном, хоть без для "out1-out4 - 4 "шага" по 100 кВт... Суммарная мощность 500 кВт!"
    нужно добавить такой фрагмент
    Код:
    out1:=(TRUNC(pw1)/100)>=1;
    out2:=(TRUNC(pw1)/100)>=2;
    out3:=(TRUNC(pw1)/100)>=3;
    out4:=(TRUNC(pw1)/100)>=4;
    Последний раз редактировалось petera; 27.03.2015 в 14:30.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #14
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Да, так чистенько. Только комментарии добавить типа (* маска на единицы кВт *), (* маска на десятки кВт *) и + на OR заменить, чтобы при вероятной попытке что-то поменять две единицы на одной позиции бадабум какой-нибудь не устроили.

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

    По умолчанию

    Имхо, все предложенные решения не очень:
    -Нет минимизации кол-ва щелчков контакторами при переходе с одной нагрузки на другую
    -Не учитывается наработка каждого контактора (по щелчкам)
    -Нет возможности исключения из набора конкретных выходов/контакторов (поломка например)
    ..

  6. #16

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Имхо, все предложенные решения не очень:
    -Нет минимизации кол-ва щелчков контакторами при переходе с одной нагрузки на другую
    -Не учитывается наработка каждого контактора (по щелчкам)
    -Нет возможности исключения из набора конкретных выходов/контакторов (поломка например)
    ..
    Всё это хорошо бы, но...

    petera, спасибо огромное за помощь... был один косяк, пока из варов pw1: REAL; не убрал не хотело работать, у меня эта переменная из меню редактируется...

  7. #17

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Жесткач ваще.
    Код:
    IF pw1=0.0
    REALы нельзя сравнивать через = и <>.
    А как сравнивать байты?... Например нужно включить выход out5 при PWlo от 1 до 9 а при нуле выключить с задержкой через TOF
    Цитата Сообщение от petera
    Код:
    out1:=(TRUNC(pw1)/100)>=1;
    out2:=(TRUNC(pw1)/100)>=2;
    out3:=(TRUNC(pw1)/100)>=3;
    out4:=(TRUNC(pw1)/100)>=4;
    выдает ошибку - несоответсвие типов невозможно преобразовать BOOL в REAL. че-то я не догоняю как исправить...
    или задать константу
    Код:
    MRxhi: ARRAY[0..9] OF BYTE :=
                2#1000, 2#1100, 2#1110, 2#1111, 2#1111;
    прокатит???
    Последний раз редактировалось feLoNy; 23.04.2015 в 12:44.

  8. #18

    По умолчанию

    Цитата Сообщение от feLoNy Посмотреть сообщение
    выдает ошибку - несоответсвие типов невозможно преобразовать BOOL в REAL. че-то я не догоняю как исправить...
    или задать константу
    Код:
    MRxhi: ARRAY[0..9] OF BYTE :=
                2#1000, 2#1100, 2#1110, 2#1111, 2#1111;
    прокатит???
    в итоге в array от 0..5 как я понял (догодался)
    код следующий
    Код:
    plcoutbits := MRxhi [TRUNC(pw1) MOD 1000/10];
    out1 := plcoutbits.0;
    out2 := plcoutbits.1;
    out3 := plcoutbits.2;
    out4 := plcoutbits.3;
    но ошибка та же
    как быть???
    Последний раз редактировалось feLoNy; 23.04.2015 в 12:44.

  9. #19

    По умолчанию

    Цитата Сообщение от feLoNy Посмотреть сообщение
    в итоге в array от 0..5 как я понял (догодался)
    код следующий
    Код:
    plcoutbits := MRxhi [TRUNC(pw1) MOD 1000/10];
    out1 := plcoutbits.0;
    out2 := plcoutbits.1;
    out3 := plcoutbits.2;
    out4 := plcoutbits.3;
    но ошибка та же
    как быть???
    Пока все молчат... Мысль следующая (не молчите, хочу мнения специалистов)
    Код:
    VAR
    	plcoutbits: BYTE;
    	plcout1: BOOL;
    	plcout2: BOOL;
    	plcout3: BOOL;
    	plcout4: BOOL;
    END_VAR
    VAR CONSTANT
    	MRxhi: ARRAY[0..5] OF BYTE :=
                2#1000, 2#1100, 2#1110, 2#1111, 2#1111;
    END_VAR
    plcoutbits := MRxhi [TRUNC(pw1) MOD 1000/10];
    IF plcoutbits.0 THEN
    out1:=1.0;
    ELSE
    out1:=0.0;
    END_IF
    
    IF plcoutbits.1 THEN
    out2:=1.0;
    ELSE
    out2:=0.0;
    END_IF
    
    IF plcoutbits.2 THEN
    out3:=1.0;
    ELSE
    out3:=0.0;
    END_IF
    
    IF plcoutbits.3 THEN
    out4:=1.0;
    ELSE
    out4:=0.0;
    END_IF
    Будет ли работать в реальности??? Или что то где то я ошибся??? Нет пока возможности проверить на живом ПЛК
    и вопрос:
    А как сравнивать байты?... Например нужно включить выход out5 при PWlo от 1 до 9 а при нуле выключить с задержкой через TOF
    актуален как никогда

  10. #20
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,552

    По умолчанию

    Цитата Сообщение от feLoNy Посмотреть сообщение
    ...Будет ли работать в реальности??? Или что то где то я ошибся??? Нет пока возможности проверить на живом ПЛК
    и вопрос:
    А как сравнивать байты?... Например нужно включить выход out5 при PWlo от 1 до 9 а при нуле выключить с задержкой через TOF
    актуален как никогда
    Через ФБ ">" 0, включаете нужный выход через ФБ TOF и когда условие выполнятся не будет, он выключится.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Пользовательские функции modbus
    от dnsss в разделе ПЛК3xx (архив)
    Ответов: 0
    Последнее сообщение: 29.01.2015, 19:57
  2. Функции.
    от Jonikk в разделе Программируемые реле
    Ответов: 11
    Последнее сообщение: 13.09.2011, 17:57
  3. Функции
    от mettled в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 13.02.2008, 10:16

Ваши права

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