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

Тема: Помогите с синтаксисом ST!

  1. #11

    По умолчанию

    Выходит , что не способа автоматизировать этот процесс ???????

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

    По умолчанию

    Опишите свой случай.

  3. #13

    Unhappy

    случай, банальный
    система управления климатом в здании :
    два десятка различных аналоговых датчиков , десяток дискретных датчиков все они могут могут быть не исправны или сигнализировать какую либо неисправность + еще с десяток различных аварий из работы программы итого около 40 различных аварийных сигналов типа BOOL.
    все эти аварии должны фиксироваться и заносится в архив, и в последствии выводится на СП270 и т.д.
    блок программы который следит за изменением сигнала на 40 входах не удается автоматизировать: т.е. приходится писать для каждого входа
    IF in_1=true THEN arr[1]:= 1;
    IF in_2=true THEN arr[2]:= 2; и тд. 40 раз


    а потом еще для передачи в панель обратно
    out_1:=arr[1];......

    и никаким циклом автоматизировать этот процесс не удается(
    для лучшей диагностики планируется расширить список аварий до 100
    Не верится , что в CoDeSys эту простую имхо задачу нельзя решить!

  4. #14
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,257

    По умолчанию

    Цитата Сообщение от ANDREY2002 Посмотреть сообщение
    случай, банальный
    система управления климатом в здании :
    два десятка различных аналоговых датчиков , десяток дискретных датчиков все они могут могут быть не исправны или сигнализировать какую либо неисправность + еще с десяток различных аварий из работы программы итого около 40 различных аварийных сигналов типа BOOL.
    все эти аварии должны фиксироваться и заносится в архив, и в последствии выводится на СП270 и т.д.
    блок программы который следит за изменением сигнала на 40 входах не удается автоматизировать: т.е. приходится писать для каждого входа
    IF in_1=true THEN arr[1]:= 1;
    IF in_2=true THEN arr[2]:= 2; и тд. 40 раз


    а потом еще для передачи в панель обратно
    out_1:=arr[1];......

    и никаким циклом автоматизировать этот процесс не удается(
    для лучшей диагностики планируется расширить список аварий до 100
    Не верится , что в CoDeSys эту простую имхо задачу нельзя решить!
    а такой способ не поможет решить Вашу проблему автоматизации http://www.owen.ru/forum/attachment....3&d=1347859220

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

    По умолчанию

    Ну, если вы удостоверитесь, что булевые переменные идут одним куском без выравнивания либо сделайте поправку на него, то вот вам способ:
    Код:
    PROGRAM PLC_PRG
    VAR
    	p: POINTER TO ARRAY [0..5] OF BOOL;
    	in0, in1, in2, in3, in4, in5: BOOL;
    	i: INT;
    END_VAR
    
    p := ADR(in0);
    
    FOR i := 0 TO 5 DO
    	IF p^[i] THEN (* ... *) END_IF
    END_FOR
    И на будущее: избегайте тавтологий вроде «IF in_1=true THEN» — достаточно написать «IF in_1 THEN».

    --------->8---------
    Проверил для 41 переменной. Вроде работает:
    Код:
    PROGRAM PLC_PRG
    VAR
    	p: POINTER TO ARRAY [0..40] OF BOOL;
    	in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20,
    	in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40: BOOL;
    END_VAR
    
    p := ADR(in0);
    (* См. содержимое p^ при отладке *)
    Этим же способом и выводить можно:
    Код:
    p^[5] := TRUE; (* Делает in5 равным true *)
    Последний раз редактировалось Yegor; 28.09.2012 в 07:24.

  6. #16

    По умолчанию

    Спасибо огромное! Yegor и Сapzap.

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

Ваши права

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