Цитата Сообщение от Cs-Cs Посмотреть сообщение
МихаилГл Я чот подумал, глядя на это.
Я без претензий.
А не получится это всё как-то хитро формализовать? Бахнуть какой-то массив, в него подсунуть данные из этого массива и все эти AND ещё и в цикле вычислять?
Я имею ввиду что-то типа внутреннго таблично-массивного скриптового языка, чтобы там можно было описать условия красиво табличкой =)
Так и сделано, просто это на визуализацию плк выводится.

А индекс я использую уже из массива:
Код:
	For_Ind_00X1:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFF80,           16#FFFFFF80,   16#FFFFFF80,   16#FFFFFF80, 16#FF80FF80, 16#FF80FF80,       16#FFFFFF80,       16#FFFFFF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
	For_Ind_00X2:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFF80,           16#FFFFFF80,   16#FFFFFF80,   16#FFFFFF80, 16#FF80FF80, 16#FF80FF80,       16#FFFFFF80,       16#FFFFFF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
	For_Ind_00X3:		ARRAY [0..16] OF WSTRING:= ["НЕ ОПРЕДЕЛЕНО", "НЕ В ГОТОВНОСТИ", "В ГОТОВНОСТИ", "ПРЕДПУСКОВАЯ СИГН-Я", "ПРЕДПУСКОВАЯ СИГН-Я", "ЗАПУСКАЕТСЯ", "ЗАПУСКАЕТСЯ",  "В РАБОТЕ",  "В РАБОТЕ", "ОСТАНАВЛИВАЕТСЯ", "ОСТАНАВЛИВАЕТСЯ",          "АВАРИЯ",    "АВАРИЯ",    "АВАРИЯ",          "АВАРИЯ",    "АВАРИЯ",    "АВАРИЯ"];
	For_Ind_00X4:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFF80,           16#FFFFFF80,   16#FFFFFF80,   16#FFFFFF80, 16#FF80FF80, 16#FF80FF80,       16#FFFFFF80,       16#FFFFFF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
	For_Ind_00X5:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFFFF,           16#FFFFFFFF,   16#FF80FF80,   16#FF80FF80, 16#FF80FF80, 16#FF80FF80,       16#FF80FF80,       16#FF80FF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
	For_Ind_00X6:		ARRAY [0..16] OF WSTRING:= ["НЕ ОПРЕДЕЛЕНО",                "",   "ОСТАНОВЛЕН",              "ВПЕРЕД",               "НАЗАД",      "ВПЕРЕД",       "НАЗАД",    "ВПЕРЕД",     "НАЗАД",          "ВПЕРЕД",           "НАЗАД", "НЕ В ГОТОВНОСТИ",    "ВПЕРЕД",     "НАЗАД", "НЕ В ГОТОВНОСТИ",    "ВПЕРЕД",     "НАЗАД"];
И далее общая программка, которая раньше была в 300 строк:
Код:
FOR Ind_01:= 1 TO Num_Of_Mec DO
	//----------1ый индикатор----------
	InfoX[1, Ind_01].Info_Color_A:= For_Ind_00X1[Ind_00X[Ind_01]];
	InfoX[1, Ind_01].Info_Color_B:= For_Ind_00X2[Ind_00X[Ind_01]];
	InfoX[1, Ind_01].Info_Text:= For_Ind_00X3[Ind_00X[Ind_01]];
	InfoX[1, Ind_01].Text_Color_X:= 16#FF000000 + 16#00FFFF00 * TO_UDINT(Ind_00Y[Ind_01]) * TO_UDINT(Info_Color_X);
	//----------2ой индикатор----------
	InfoX[2, Ind_01].Info_Color_A:= For_Ind_00X4[Ind_00X[Ind_01]];
	InfoX[2, Ind_01].Info_Color_B:= For_Ind_00X5[Ind_00X[Ind_01]];
	InfoX[2, Ind_01].Info_Text:= For_Ind_00X6[Ind_00X[Ind_01]];
	InfoX[2, Ind_01].Text_Color_X:= 16#FF000000 + 16#00FFFF00 * TO_UDINT(Ind_00Y[Ind_01]) * TO_UDINT(Info_Color_X);
END_FOR
Короче мне уже надоело оптимизировать, надо уже сдавать объект.

PS Можно в принципе и условия состояний в массив запихнуть, и вместо 17 строк одну... Но это уже не в этом проекте