Выходит , что не способа автоматизировать этот процесс ???????
Выходит , что не способа автоматизировать этот процесс ???????
случай, банальный
система управления климатом в здании :
два десятка различных аналоговых датчиков , десяток дискретных датчиков все они могут могут быть не исправны или сигнализировать какую либо неисправность + еще с десяток различных аварий из работы программы итого около 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
Ну, если вы удостоверитесь, что булевые переменные идут одним куском без выравнивания либо сделайте поправку на него, то вот вам способ:И на будущее: избегайте тавтологий вроде «IF in_1=true THEN» — достаточно написать «IF in_1 THEN».Код: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
--------->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.
Спасибо огромное! Yegor и Сapzap.