интересно, как вы собираетесь в ворд 32 бита записать?
Вид для печати
интересно, как вы собираетесь в ворд 32 бита записать?
я менял тип на UDINT материтса меня беспокоит как мне засунь все 160 маршрутов переменная fan даже с типом UDINT это 32 бита
как матерится? почему даже? переменная фан будет иметь в себе 32 бита только в 3х целочисленных случаях
теперь компилируется теперь нужно только заставить работать как надо
Код:FUNCTION_BLOCK set_cul_march_EL
VAR_INPUT
in: DWORD;
END_VAR
VAR_OUTPUT
Do1, Do2, Do3, Do4, Do5, Do6, Do7, Do8, Do9, Do10, Do11, Do12, Do13, Do14,
Do15, Do16, Do17, Do18, Do19, Do20, Do21, Do22, Do23, Do24, Do25, Do26,
Do27, Do28, Do29, Do30, Do31, Do32, Do33, Do34, Do35, Do36, Do37, Do38,
Do39, Do40, Do41, Do42, Do43, Do44, Do45, Do46, Do47, Do48, Do49, Do50,
Do51, Do52, Do53, Do54, Do55, Do56, Do57, Do58, Do59, Do60, Do61, Do62,
Do63, Do64: BOOL;
END_VAR
VAR
Stop1, Start1, Stop2, Start2, Stop3, Start3, Stop4, Start4, Stop5, Start5, Stop6, Start6,
Stop7, Start7, Stop8, Start8, Stop9, Start9, Stop10, Start10, Stop11, Start11, Stop12,
Start12, Stop13, Start13, Stop14, Start14, Stop15, Start15, Stop16, Start16, Stop17,
Start17, Stop18, Start18, Stop19, Start19, Stop20, Start20, Stop21, Start21, Stop22,
Start22, Stop23, Start23, Stop24, Start24, Stop25, Start25, Stop26, Start26, Stop27,
Start27, Stop28, Start28, Stop29, Start29, Stop30, Start30, Stop31, Start31, Stop32,
Start32, Stop33, Start33, Stop34, Start34, Stop35, Start35, Stop36, Start36, Stop37,
Start37, Stop38, Start38, Stop39, Start39, Stop40, Start40, Stop41, Start41, Stop42,
Start42, Stop43, Start43, Stop44, Start44, Stop45, Start45, Stop46, Start46, Stop47,
Start47, Stop48, Start48, Stop49, Start49, Stop50, Start50:TP:= ( PT := T#5s);
Stop51, Start51, Stop52, Start52, Stop53, Start53, Stop54, Start54, Stop55, Start55,
Stop56, Start56, Stop57, Start57, Stop58, Start58, Stop59, Start59, Stop60, Start60,
Stop61, Start61, Stop62, Start62, Stop63, Start63, Stop64, Start64, Stop65, Start65,
Stop66, Start66, Stop67, Start67, Stop68, Start68, Stop69, Start69, Stop70, Start70,
Stop71, Start71, Stop72, Start72, Stop73, Start73, Stop74, Start74, Stop75, Start75,
Stop76, Start76, Stop77, Start77, Stop78, Start78, Stop79, Start79, Stop80, Start80,
Stop81, Start81, Stop82, Start82, Stop83, Start83, Stop84, Start84, Stop85, Start85,
Stop86, Start86, Stop87, Start87, Stop88, Start88, Stop89, Start89, Stop90, Start90,
Stop91, Start91, Stop92, Start92, Stop93, Start93, Stop94, Start94, Stop95, Start95,
Stop96, Start96, Stop97:TP:= ( PT := T#5s);
Start97, Stop98, Start98, Stop99, Start99, Stop100, Start100, Stop101, Start101,
Stop102, Start102, Stop103, Start103, Stop104, Start104, Stop105, Start105, Stop106,
Start106, Stop107, Start107, Stop108, Start108, Stop109, Start109, Stop110, Start110,
Stop111, Start111, Stop112, Start112, Stop113, Start113, Stop114, Start114, Stop115,
Start115, Stop116, Start116, Stop117, Start117, Stop118, Start118, Stop119, Start119,
Stop120, Start120, Stop121, Start121, Stop122, Start122, Stop123, Start123, Stop124,
Start124, Stop125, Start125, Stop126, Start126, Stop127, Start127, Stop128, Start128
:TP:= ( PT := T#5s);
Stop129, Start129, Stop130, Start130, Stop131, Start131, Stop132, Start132, Stop133,
Start133, Stop134, Start134, Stop135, Start135, Stop136, Start136, Stop137, Start137,
Stop138, Start138, Stop139, Start139, Stop140, Start140, Stop141, Start141, Stop142,
Start142, Stop143, Start143, Stop144, Start144, Stop145, Start145, Stop146, Start146,
Stop147, Start147, Stop148, Start148, Stop149, Start149, Stop150, Start150, Stop151,
Start151, Stop152, Start152, Stop153, Start153, Stop154, Start154, Stop155, Start155,
Stop156, Start156, Stop157, Start157, Stop158, Start158, Stop159, Start159, Stop160,
Start160:TP:= ( PT := T#5s);
fan: DWORD;(*32 bita*)
i: DWORD;(*32 bita*)
mech : ARRAY[1..160] OF BOOL;
setmech : ARRAY[1..160] OF BYTE :=
(*В этом массиве хранитса состояние вентиляторов
для каждого из 160 маршрутов норий №1-4*)
(*16*)
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
остальные одинаковы непоказаны
(*160*)
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000;
END_VAR
(****************************************************)
fan:=0;
FOR i :=1 TO 160 DO
fan:=SEL( mech[i], fan, fan OR setmech[i] );
END_FOR
mech[1]:=in.0;
mech[2]:=in.1;
mech[3]:=in.2;
mech[4]:=in.3;
Start1(IN := fan.0 OR fan.2, Q =>Do1);
Stop1(IN := NOT fan.0 OR fan.2, Q => Do2);
Start2(IN := fan.1 OR fan.3, Q => Do3);
Stop2(IN := NOT fan.1 OR fan.3, Q => Do4);
так не компилируется Do1..Do64 : BOOL; пришлось по старинке писать
материтса на Fan:ARRAY[0..31] OF TFan:=(PT:=T#5s);
неверное начальное значение и неизвестный тип массива
ошибки 3760, 3740
Код:FUNCTION_BLOCK TFans32
VAR_INPUT
(*Если на вход можно массив пихнуть, то даже проще.*)
Di1, Di2, Di3, Di4, Di5, Di6, Di7, Di8, Di9, Di10, Di11, Di12, Di13, Di14,
Di15, Di16, Di17, Di18, Di19, Di20, Di21, Di22, Di23, Di24, Di25, Di26,
Di27, Di28, Di29, Di30, Di31, Di32, Di33, Di34, Di35, Di36, Di37, Di38,
Di39, Di40, Di41, Di42, Di43, Di44, Di45, Di46, Di47, Di48, Di49, Di50,
Di51, Di52, Di53, Di54, Di55, Di56, Di57, Di58, Di59, Di60, Di61, Di62,
Di63, Di64: BOOL;
Di65, Di66, Di67, Di68, Di69, Di70, Di71, Di72, Di73, Di74, Di75, Di76,
Di77, Di78, Di79, Di80, Di81, Di82, Di83, Di84, Di85, Di86, Di87, Di88,
Di89, Di90, Di91, Di92, Di93, Di94, Di95, Di96, Di97, Di98, Di99, Di100,
Di101, Di102, Di103, Di104, Di105, Di106, Di107, Di108, Di109, Di110,
Di111, Di112, Di113, Di114, Di115, Di116, Di117, Di118, Di119, Di120,
Di121, Di122, Di123, Di124, Di125, Di126, Di127, Di128: BOOL;
Di129, Di130, Di131, Di132, Di133, Di134, Di135, Di136, Di137, Di138,
Di139, Di140, Di141, Di142, Di143, Di144, Di145, Di146, Di147, Di148,
Di149, Di150, Di151, Di152, Di153, Di154, Di155, Di156, Di157, Di158,
Di159, Di160: BOOL;
END_VAR
VAR_OUTPUT
Do1, Do2, Do3, Do4, Do5, Do6, Do7, Do8, Do9, Do10, Do11, Do12, Do13, Do14,
Do15, Do16, Do17, Do18, Do19, Do20, Do21, Do22, Do23, Do24, Do25, Do26,
Do27, Do28, Do29, Do30, Do31, Do32, Do33, Do34, Do35, Do36, Do37, Do38,
Do39, Do40, Do41, Do42, Do43, Do44, Do45, Do46, Do47, Do48, Do49, Do50,
Do51, Do52, Do53, Do54, Do55, Do56, Do57, Do58, Do59, Do60, Do61, Do62,
Do63, Do64: BOOL;
END_VAR
VAR
Set:ARRAY[1..160] OF DWORD:=
(*В этом массиве хранитса состояние вентиляторов
для каждого из 160 маршрутов норий №1-4*)
(*16*)
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
(*32*)
..................................................
(*160*)
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
2#00000000000000000000000000000000;
Fan:ARRAY[0..31] OF TFan:=(PT:=T#5s);
i:INT;
State: DWORD;
PDi, PStart, PStop:POINTER TO BOOL;
END_VAR
(*******************************************)
State:=0;
PDi:=ADR(Di1);
FOR i:=1 TO 160 DO
State:= SEL(PDi^,State,State OR Set[i);
PDi:=PDi+1;
END_FOR
PStart:=ADR(Do1);
PStop:=ADR(Do2);
FOR i:=0 TO 31 DO
Fan[i](
State:=EXTRACT(State,i),
Start=> PStart^,
Stop=>PStop^
);
PStart:=PStart+2;
PStop:=PStop+2;
END_FOR
у меня тоже на это не матерится, может просто не сделали первый ФБ?Код:Fan: ARRAY[0..31] OF TFan := (PT := T#5s);
изменил строку на Fan:ARRAY[0..31] OF TFan; осталась только одна ошибка неизвестный тип массива. еще скобка квадратная на одном массиве отсутствовала добавил а как сунуть это немного не понял
Fan[i](
PT := T#?, //при вызове пихнете PT
..
);
Код:FUNCTION_BLOCK TFans32
VAR_INPUT
(*Если на вход можно массив пихнуть, то даже проще.*)
Di1, Di2, Di3, Di4, Di5, Di6, Di7, Di8, Di9, Di10, Di11, Di12, Di13, Di14,
Di15, Di16, Di17, Di18, Di19, Di20, Di21, Di22, Di23, Di24, Di25, Di26,
Di27, Di28, Di29, Di30, Di31, Di32, Di33, Di34, Di35, Di36, Di37, Di38,
Di39, Di40, Di41, Di42, Di43, Di44, Di45, Di46, Di47, Di48, Di49, Di50,
Di51, Di52, Di53, Di54, Di55, Di56, Di57, Di58, Di59, Di60, Di61, Di62,
Di63, Di64: BOOL;
Di65, Di66, Di67, Di68, Di69, Di70, Di71, Di72, Di73, Di74, Di75, Di76,
Di77, Di78, Di79, Di80, Di81, Di82, Di83, Di84, Di85, Di86, Di87, Di88,
Di89, Di90, Di91, Di92, Di93, Di94, Di95, Di96, Di97, Di98, Di99, Di100,
Di101, Di102, Di103, Di104, Di105, Di106, Di107, Di108, Di109, Di110,
Di111, Di112, Di113, Di114, Di115, Di116, Di117, Di118, Di119, Di120,
Di121, Di122, Di123, Di124, Di125, Di126, Di127, Di128: BOOL;
Di129, Di130, Di131, Di132, Di133, Di134, Di135, Di136, Di137, Di138,
Di139, Di140, Di141, Di142, Di143, Di144, Di145, Di146, Di147, Di148,
Di149, Di150, Di151, Di152, Di153, Di154, Di155, Di156, Di157, Di158,
Di159, Di160: BOOL;
END_VAR
VAR_OUTPUT
Do1, Do2, Do3, Do4, Do5, Do6, Do7, Do8, Do9, Do10, Do11, Do12, Do13, Do14,
Do15, Do16, Do17, Do18, Do19, Do20, Do21, Do22, Do23, Do24, Do25, Do26,
Do27, Do28, Do29, Do30, Do31, Do32, Do33, Do34, Do35, Do36, Do37, Do38,
Do39, Do40, Do41, Do42, Do43, Do44, Do45, Do46, Do47, Do48, Do49, Do50,
Do51, Do52, Do53, Do54, Do55, Do56, Do57, Do58, Do59, Do60, Do61, Do62,
Do63, Do64: BOOL;
END_VAR
VAR
Set:ARRAY[1..160] OF DWORD:=
(*В этом массиве хранитса состояние вентиляторов
для каждого из 160 маршрутов норий №1-4*)
(*16*)
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
..................................................................
2#00000000000000000000000000000000;
Fan:ARRAY[0..31] OF TFan;
i:INT;
State: DWORD;
PDi, PStart, PStop:POINTER TO BOOL;
END_VAR
(***********************************************)
State:=0;
PDi:=ADR(Di1);
FOR i:=1 TO 160 DO
State:= SEL(PDi^,State,State OR Set[i]);
PDi:=PDi+1;
END_FOR
PStart:=ADR(Do1);
PStop:=ADR(Do2);
FOR i:=0 TO 31 DO
Fan[i](
State:=EXTRACT(State,i),
Start=> PStart^,
Stop=>PStop^
);
PStart:=PStart+2;
PStop:=PStop+2;
END_FOR
вы создали ФБ TFan?
при вызове блока тфанс32 пропишете необходимое значение входа pt
да всё объявил вызвалЦитата:
вы создали ФБ TFan?
при вызове блока тфанс32 пропишете необходимое значение входа pt что то его невидно
Почему у этого массива Fan:ARRAY[0..31] OF TFan; вместо базового типа написано TFan возможно в этом ошибка? может надо так Fan:ARRAY[0..31] OF INT; ? тогда ругаетса на это
Fan[i](
State:=EXTRACT(State,i),
Start=> PStart^,
Stop=>PStop^
); вызывать можно только экземпляр функционального блока
Код:FUNCTION_BLOCK TFans32
VAR_INPUT
PT:TIME;
(*Если на вход можно массив пихнуть, то даже проще.*)
Di1, Di2, Di3, Di4, Di5, Di6, Di7, Di8, Di9, Di10, Di11, Di12, Di13, Di14,
Di15, Di16, Di17, Di18, Di19, Di20, Di21, Di22, Di23, Di24, Di25, Di26,
Di27, Di28, Di29, Di30, Di31, Di32, Di33, Di34, Di35, Di36, Di37, Di38,
Di39, Di40, Di41, Di42, Di43, Di44, Di45, Di46, Di47, Di48, Di49, Di50,
Di51, Di52, Di53, Di54, Di55, Di56, Di57, Di58, Di59, Di60, Di61, Di62,
Di63, Di64: BOOL;
Di65, Di66, Di67, Di68, Di69, Di70, Di71, Di72, Di73, Di74, Di75, Di76,
Di77, Di78, Di79, Di80, Di81, Di82, Di83, Di84, Di85, Di86, Di87, Di88,
Di89, Di90, Di91, Di92, Di93, Di94, Di95, Di96, Di97, Di98, Di99, Di100,
Di101, Di102, Di103, Di104, Di105, Di106, Di107, Di108, Di109, Di110,
Di111, Di112, Di113, Di114, Di115, Di116, Di117, Di118, Di119, Di120,
Di121, Di122, Di123, Di124, Di125, Di126, Di127, Di128: BOOL;
Di129, Di130, Di131, Di132, Di133, Di134, Di135, Di136, Di137, Di138,
Di139, Di140, Di141, Di142, Di143, Di144, Di145, Di146, Di147, Di148,
Di149, Di150, Di151, Di152, Di153, Di154, Di155, Di156, Di157, Di158,
Di159, Di160: BOOL;
END_VAR
VAR_OUTPUT
Do1, Do2, Do3, Do4, Do5, Do6, Do7, Do8, Do9, Do10, Do11, Do12, Do13, Do14,
Do15, Do16, Do17, Do18, Do19, Do20, Do21, Do22, Do23, Do24, Do25, Do26,
Do27, Do28, Do29, Do30, Do31, Do32, Do33, Do34, Do35, Do36, Do37, Do38,
Do39, Do40, Do41, Do42, Do43, Do44, Do45, Do46, Do47, Do48, Do49, Do50,
Do51, Do52, Do53, Do54, Do55, Do56, Do57, Do58, Do59, Do60, Do61, Do62,
Do63, Do64: BOOL;
END_VAR
VAR
Set:ARRAY[1..160] OF DWORD:=
(*В этом массиве хранитса состояние вентиляторов
для каждого из 160 маршрутов норий №1-4*)
(*16*)
2#00000000000000000000000000000000,
2#00000000000000000000000000000000,
.............................................................
2#00000000000000000000000000000000;
Fan:ARRAY[0..31] OF TFan;
i:INT;
State: DWORD;
PDi, PStart, PStop:POINTER TO BOOL;
tStart, tStop:TP;
END_VAR
(*******************************************)
State:=0;
PDi:=ADR(Di1);
FOR i:=1 TO 160 DO
State:= SEL(PDi^,State,State OR Set[i]);
PDi:=PDi+1;
END_FOR
PStart:=ADR(Do1);
PStop:=ADR(Do2);
FOR i:=0 TO 31 DO
Fan[i](
State:=EXTRACT(State,i),
Start=> PStart^,
Stop=>PStop^
);
PStart:=PStart+2;
PStop:=PStop+2;
END_FOR