интересно, как вы собираетесь в ворд 32 бита записать?
интересно, как вы собираетесь в ворд 32 бита записать?
я менял тип на UDINT материтса меня беспокоит как мне засунь все 160 маршрутов переменная fan даже с типом UDINT это 32 бита
Последний раз редактировалось alexval2006; 13.09.2011 в 14:49.
как матерится? почему даже? переменная фан будет иметь в себе 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
Последний раз редактировалось alexval2006; 14.09.2011 в 09:00.
у меня тоже на это не матерится, может просто не сделали первый ФБ?Код: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
Последний раз редактировалось alexval2006; 14.09.2011 в 14:05.