Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Алгоритм работы 3-х насосов на ST

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    ..
    Ну тут без всяких массивов, структур и прочего.
    Что могу сказать? Плохо))

  2. #12
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,062

    По умолчанию

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

  3. #13

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Валенок да там сам принцип на смещении бит . Еще вот AI! делал классный макрос на 8-мь насосов (ну или оборудования любого), там несложной обвязкой можно было задавать количество, добавить аварии, сделать выбор какие должны быть в работе и т.д. Но блин макрос я перенести в CodeSys не смог. Из-за обратной связи в одном месте, на CDS она не хочет работать так, как предполагает макрос. Вот его бы адаптировать, он кучу подобных задач решает.
    Если адаптировать практически "в лоб" - то вот:

    Код:
    FUNCTION_BLOCK Rotation
    VAR_INPUT
        dwAvailable : DWORD;
        byNumDev: BYTE := 8;
        byNeedWork : BYTE;
        bRotate : BOOL;
    
    
    END_VAR
    VAR_OUTPUT
        dwOut : DWORD;
        byInWork : BYTE;
        byNextStop : BYTE;
        byNextStart : BYTE;
    END_VAR
    VAR
        tx: TIME;
        tn: TIME;
    
    
        dwSelected : DWORD;
        dwTempSelected : DWORD;
        dwNextSel : DWORD;
    
    
        ardwMoto : ARRAY [0..31] OF DWORD;
    
    
        dwMaxMoto : DWORD;
        dwMinMoto : DWORD;
        dwTmpMoto : DWORD;
    
    
        i : BYTE;
    
    
        Q : BOOL;
        init: BOOL;
        bMemRotate : BOOL;
        bSelected : BOOL;
    END_VAR
    VAR CONSTANT
        uiMIN: DWORD := 2147483648;
        uiMAX: DWORD := 2147483647;
    END_VAR
    
    
    
    
    tx := TIME();
    IF NOT init THEN init := TRUE; tn := tx; END_IF;
    IF tx - tn >= SEL(Q, t#1s, t#0s) THEN
        tn := tn + SEL(Q, t#1s, t#0s);
        Q := NOT Q;
    END_IF;
    
    
    dwTempSelected := dwSelected := dwNextSel AND dwAvailable;
    
    
    byInWork := 0;
    dwMaxMoto := 0;
    dwMinMoto := uiMIN;
    byNextStop := 0;
    byNextStart := 0;
    dwOut := 0;
    
    
    IF byNumDev <= 0 THEN byNumDev := 1; END_IF;
    IF byNumDev > 32 THEN byNumDev := 32; END_IF;
    
    
    FOR i := 0 TO byNumDev - 1 DO
        bSelected := dwTempSelected.0;
        ardwMoto[i] := ardwMoto[i] + BOOL_TO_BYTE(Q AND bSelected);
        byInWork := byInWork + BOOL_TO_BYTE(bSelected);
    
    
        IF dwAvailable.0 THEN
            IF bSelected THEN dwTmpMoto := uiMIN;
            ELSE dwTmpMoto := 0;
            END_IF;
        ELSE
            dwTmpMoto := uiMAX;
        END_IF;
        dwTmpMoto := dwTmpMoto OR ardwMoto[i];
    
    
        IF dwTmpMoto > dwMaxMoto THEN
            dwMaxMoto := dwTmpMoto;
            byNextStop := i;
        END_IF;
    
    
        IF dwTmpMoto < dwMinMoto THEN
            dwMinMoto := dwTmpMoto;
            byNextStart := i;
        END_IF;
    
    
        dwTempSelected := SHR(dwTempSelected,1);
        dwAvailable := SHR(dwAvailable,1);
    END_FOR;
    
    
    
    
    IF byNeedWork > byInWork OR (bRotate AND NOT bMemRotate) THEN dwNextSel := SHL(DWORD#1, byNextStart); END_IF;
    bMemRotate := bRotate;
    
    
    IF byInWork > byNeedWork THEN dwSelected := dwSelected AND (NOT SHL(DWORD#1, byNextStop)); END_IF;
    
    
    dwOut := dwSelected;
    dwNextSel := dwNextSel OR dwOut;

  4. #14

    По умолчанию

    Этих примеров море и даже без битовой маски https://owen.ru/forum/showthread.php...l=1#post448127

  5. #15
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,062

    По умолчанию

    1exan это вы макрос AI! адаптировали?

  6. #16

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    1exan это вы макрос AI! адаптировали?
    Если я правильно понял - про этот макрос разговор

  7. #17
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,062

    По умолчанию

    1exan да, про этот. Он там вычислял время работы каждого насоса и запуск идет в очередь того, кто меньше всего наработал. В рамках например ротации кондиционеров не так существенно, типа не надо поддерживать давление или еще что-то из быстро меняющихся параметров. Но сам по себе макрос уникален. Вопрос только в обвязке для работы макроса. Уже ей надо делать то или иное.
    Как-то делал пример обвязки, может где скрин сохранился, но сам пример похоже потерял со смертью винта.

  8. #18

    По умолчанию

    всё это типа ТЗ можно спокойно упростить
    чисто по мне - вся эта заумь с усложнённой ротацией - это тупой откровенный бред, никакой технологической необходимости в таком изврате нет ни грамма,
    ротация по времени - такая же шняга, актуально более менее только на насосах с баббитовым подшипником скольжения, современные шарики спокойно ходят годами, и параноидальное выравнивание с точностью до секунды наработки - никому ненужное, кроме программиста хехе , усложнение программы

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. ПР100 для смены очередности работы насосов
    от poligon в разделе Программируемые реле
    Ответов: 26
    Последнее сообщение: 23.01.2025, 14:16
  2. Ответов: 22
    Последнее сообщение: 29.11.2020, 16:23
  3. алгоритм работы вентиляции
    от Keldish в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 10.02.2016, 10:57
  4. САУ-МП алгоритм 20: логика работы
    от Roman62rus в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 09.08.2013, 10:58
  5. алгоритм работы трм-12а + задвижка
    от leonid1953 в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 02.06.2010, 17:07

Ваши права

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