PDA

Просмотр полной версии : Проблемы с СПК107 и ПР200.



viktor1980
18.06.2020, 14:34
Добрый день.
Есть следующая задача: Каждые 10 минут нужно последовательно измерять напряжение 18 АКБ. Для этого используем СПК107 + ПР200. Программу коммутации для ПР200 реализовал и с ней проблем нет (вручную с панели реле все работает). А вот при управлении ПР200 с сенсорной панели возникают проблемы. На втором реле коммутация "затыкается". Код опроса привожу ниже. Помогите разобраться. Второй день мучаюсь.

// 1-й АКБ
IF bStatusIzmBat = FALSE AND bStatusBat1 = FALSE THEN
//IF iPermissionRead = 0 THEN
fbTimer5s1(IN := TRUE, PT := T#10S);
iPermission := 1;
iBatNumber := 1;
IF fbTimer5s1.Q = FALSE THEN
rBat1 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat1 := TRUE;
iUBat := 0;
END_IF
//END_IF

// 2-й АКБ
IF bStatusBat1 = TRUE AND bStatusBat2 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s2(IN := TRUE, PT := T#10S);
iBatNumber := 2;
IF fbTimer5s2.Q = FALSE THEN
rBat2 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat2 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 3-й АКБ
IF bStatusBat2 = TRUE AND bStatusBat3 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s3(IN := TRUE, PT := T#10S);
iBatNumber := 3;
IF fbTimer5s3.Q = FALSE THEN
rBat3 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat3 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 4-й АКБ
IF bStatusBat3 = TRUE AND bStatusBat4 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s4(IN := TRUE, PT := T#10S);
iBatNumber := 4;
IF fbTimer5s4.Q = FALSE THEN
rBat4 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat4 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 5-й АКБ
IF bStatusBat4 =TRUE AND bStatusBat5 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s5(IN := TRUE, PT := T#10S);
iBatNumber := 5;
IF fbTimer5s5.Q = FALSE THEN
rBat5 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat5 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 6-й АКБ
IF bStatusBat5 = TRUE AND bStatusBat6 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s6(IN := TRUE, PT := T#10S);
iBatNumber := 6;
IF fbTimer5s6.Q = FALSE THEN
rBat6 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat6 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 7-й АКБ
IF bStatusBat6 = TRUE AND bStatusBat7 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s7(IN := TRUE, PT := T#10S);
iBatNumber := 7;
IF fbTimer5s7.Q = FALSE THEN
rBat7 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat7 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 8-й АКБ
IF bStatusBat7 = TRUE AND bStatusBat8 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s8(IN := TRUE, PT := T#10S);
iBatNumber := 8;
IF fbTimer5s8.Q = FALSE THEN
rBat8 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat8 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 9-й АКБ
IF bStatusBat8 = TRUE AND bStatusBat9 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s9(IN := TRUE, PT := T#10S);
iBatNumber := 9;
IF fbTimer5s9.Q = FALSE THEN
rBat9 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat9 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 10-й АКБ
IF bStatusBat9 = TRUE AND bStatusBat10 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s10(IN := TRUE, PT := T#10S);
iBatNumber1 := 10;
IF fbTimer5s10.Q = FALSE THEN
rBat10 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat10 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 11-й АКБ
IF bStatusBat10 = TRUE AND bStatusBat11 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s11(IN := TRUE, PT := T#10S);
iBatNumber1 := 11;
IF fbTimer5s11.Q = FALSE THEN
rBat11 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat11 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 12-й АКБ
IF bStatusBat11 = TRUE AND bStatusBat12 = FALSE THEN
//IF iPermissionRead = 1 THEN
fbTimer5s12(IN := TRUE, PT := T#10S);
iBatNumber := 12;
IF fbTimer5s12.Q = FALSE THEN
rBat12 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat12 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 13-й АКБ
IF bStatusBat12 = TRUE AND bStatusBat13 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s13(IN := TRUE, PT := T#10S);
iBatNumber1 := 13;
IF fbTimer5s13.Q = FALSE THEN
rBat13 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat13 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 14-й АКБ
IF bStatusBat13 = TRUE AND bStatusBat14 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s14(IN := TRUE, PT := T#10S);
iBatNumber1 := 14;
IF fbTimer5s14.Q = FALSE THEN
rBat14 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat14 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 15-й АКБ
IF bStatusBat14 = TRUE AND bStatusBat15 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s15(IN := TRUE, PT := T#10S);
iBatNumber1 := 15;
IF fbTimer5s15.Q = FALSE THEN
rBat15 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat15 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 16-й АКБ
IF bStatusBat15 = TRUE AND bStatusBat16 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s16(IN := TRUE, PT := T#10S);
iBatNumber1 := 16;
IF fbTimer5s16.Q = FALSE THEN
rBat16 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat16 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 17-й АКБ
IF bStatusBat16 = TRUE AND bStatusBat17 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s17(IN := TRUE, PT := T#10S);
iBatNumber1 := 17;
IF fbTimer5s17.Q = FALSE THEN
rBat17 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat17 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF

// 18-й АКБ
IF bStatusBat17 = TRUE AND bStatusBat18 = FALSE THEN
//IF iPermissionRead1 = 1 THEN
fbTimer5s18(IN := TRUE, PT := T#10S);
iBatNumber1 := 18;
IF fbTimer5s18.Q = FALSE THEN
rBat18 := INT_TO_REAL(iUBat) / 100;
ELSE
bStatusBat18 := TRUE;
iUBat := 0;
END_IF
//END_IF
END_IF
END_IF

IF bStatusBat1 AND bStatusBat2 AND bStatusBat3 AND bStatusBat4 AND bStatusBat5 AND bStatusBat6 AND bStatusBat7 AND
bStatusBat8 AND bStatusBat9 AND bStatusBat10 AND bStatusBat11 AND bStatusBat12 AND bStatusBat13 AND
bStatusBat14 AND bStatusBat15 AND bStatusBat6 AND bStatusBat17 AND bStatusBat18
THEN
bStatusIzmBat := TRUE;
//iPermission := 0;
fbTimer10m(IN := TRUE, PT := T#10M);
iBatNumber := 0;
iBatNumber1 := 0;
IF fbTimer10m.Q THEN
bStatusIzmBat := FALSE;
bStatusBat1 := FALSE;
bStatusBat2 := FALSE;
bStatusBat3 := FALSE;
bStatusBat4 := FALSE;
bStatusBat5 := FALSE;
bStatusBat6 := FALSE;
bStatusBat7 := FALSE;
bStatusBat8 := FALSE;
bStatusBat9 := FALSE;
bStatusBat10 := FALSE;
bStatusBat11 := FALSE;
bStatusBat12 := FALSE;
bStatusBat13 := FALSE;
bStatusBat14 := FALSE;
bStatusBat15 := FALSE;
bStatusBat16 := FALSE;
bStatusBat17 := FALSE;
bStatusBat18 := FALSE;
//iPermission := 1;
END_IF
END_IF

GoodLuck
18.06.2020, 16:57
// 1-й АКБ
IF bStatusIzmBat = FALSE AND bStatusBat1 = FALSE THEN
fbTimer5s1(IN := TRUE, PT := T#10S);
iPermission := 1;
iBatNumber := 1;
IF fbTimer5s1.Q = FALSE AND fbTimer5s1.ET=fbTimer5s1.PT THEN
rBat1 := INT_TO_REAL(iUBat) / 100;
bStatusBat1 := TRUE;
fbTimer5s1(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 2-й АКБ
IF bStatusBat1 = TRUE AND bStatusBat2 = FALSE THEN
fbTimer5s2(IN := TRUE, PT := T#10S);
iBatNumber := 2;
IF fbTimer5s2.Q = FALSE AND fbTimer5s2.ET=fbTimer5s2.PT THEN
rBat2 := INT_TO_REAL(iUBat) / 100;
bStatusBat2 := TRUE;
fbTimer5s2(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 3-й АКБ
IF bStatusBat2 = TRUE AND bStatusBat3 = FALSE THEN
fbTimer5s3(IN := TRUE, PT := T#10S);
iBatNumber := 3;
IF fbTimer5s3.Q = FALSE AND fbTimer5s3.ET=fbTimer5s3.PT THEN
rBat3 := INT_TO_REAL(iUBat) / 100;
bStatusBat3 := TRUE;
fbTimer5s3(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 4-й АКБ
IF bStatusBat3 = TRUE AND bStatusBat4 = FALSE THEN
fbTimer5s4(IN := TRUE, PT := T#10S);
iBatNumber := 4;
IF fbTimer5s4.Q = FALSE AND fbTimer5s4.ET=fbTimer5s4.PT THEN
rBat4 := INT_TO_REAL(iUBat) / 100;
bStatusBat4 := TRUE;
fbTimer5s4(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 5-й АКБ
IF bStatusBat4 =TRUE AND bStatusBat5 = FALSE THEN
fbTimer5s5(IN := TRUE, PT := T#10S);
iBatNumber := 5;
IF fbTimer5s5.Q = FALSE AND fbTimer5s5.ET=fbTimer5s5.PT THEN
rBat5 := INT_TO_REAL(iUBat) / 100;
bStatusBat5 := TRUE;
fbTimer5s5(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 6-й АКБ
IF bStatusBat5 = TRUE AND bStatusBat6 = FALSE THEN
fbTimer5s6(IN := TRUE, PT := T#10S);
iBatNumber := 6;
IF fbTimer5s6.Q = FALSE AND fbTimer5s6.ET=fbTimer5s6.PT THEN
rBat6 := INT_TO_REAL(iUBat) / 100;
bStatusBat6 := TRUE;
fbTimer5s6(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 7-й АКБ
IF bStatusBat6 = TRUE AND bStatusBat7 = FALSE THEN
fbTimer5s7(IN := TRUE, PT := T#10S);
iBatNumber := 7;
IF fbTimer5s7.Q = FALSE AND fbTimer5s7.ET=fbTimer5s7.PT THEN
rBat7 := INT_TO_REAL(iUBat) / 100;
bStatusBat7 := TRUE;
fbTimer5s7(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 8-й АКБ
IF bStatusBat7 = TRUE AND bStatusBat8 = FALSE THEN
fbTimer5s8(IN := TRUE, PT := T#10S);
iBatNumber := 8;
IF fbTimer5s8.Q = FALSE AND fbTimer5s8.ET=fbTimer5s8.PT THEN
rBat8 := INT_TO_REAL(iUBat) / 100;
bStatusBat8 := TRUE;
fbTimer5s8(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 9-й АКБ
IF bStatusBat8 = TRUE AND bStatusBat9 = FALSE THEN
fbTimer5s9(IN := TRUE, PT := T#10S);
iBatNumber := 9;
IF fbTimer5s9.Q = FALSE AND fbTimer5s9.ET=fbTimer5s9.PT THEN
rBat9 := INT_TO_REAL(iUBat) / 100;
bStatusBat9 := TRUE;
fbTimer5s9(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 10-й АКБ
IF bStatusBat9 = TRUE AND bStatusBat10 = FALSE THEN
fbTimer5s10(IN := TRUE, PT := T#10S);
iBatNumber1 := 10;
IF fbTimer5s10.Q = FALSE AND fbTimer5s10.ET=fbTimer5s10.PT THEN
rBat10 := INT_TO_REAL(iUBat) / 100;
bStatusBat10 := TRUE;
fbTimer5s10(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 11-й АКБ
IF bStatusBat10 = TRUE AND bStatusBat11 = FALSE THEN
fbTimer5s11(IN := TRUE, PT := T#10S);
iBatNumber1 := 11;
IF fbTimer5s11.Q = FALSE AND fbTimer5s11.ET=fbTimer5s11.PT THEN
rBat11 := INT_TO_REAL(iUBat) / 100;
bStatusBat11 := TRUE;
fbTimer5s11(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 12-й АКБ
IF bStatusBat11 = TRUE AND bStatusBat12 = FALSE THEN
fbTimer5s12(IN := TRUE, PT := T#10S);
iBatNumber := 12;
IF fbTimer5s12.Q = FALSE AND fbTimer5s12.ET=fbTimer5s12.PT THEN
rBat12 := INT_TO_REAL(iUBat) / 100;
bStatusBat12 := TRUE;
fbTimer5s12(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 13-й АКБ
IF bStatusBat12 = TRUE AND bStatusBat13 = FALSE THEN
fbTimer5s13(IN := TRUE, PT := T#10S);
iBatNumber1 := 13;
IF fbTimer5s13.Q = FALSE AND fbTimer5s13.ET=fbTimer5s13.PT THEN
rBat13 := INT_TO_REAL(iUBat) / 100;
bStatusBat13 := TRUE;
fbTimer5s13(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 14-й АКБ
IF bStatusBat13 = TRUE AND bStatusBat14 = FALSE THEN
fbTimer5s14(IN := TRUE, PT := T#10S);
iBatNumber1 := 14;
IF fbTimer5s14.Q = FALSE AND fbTimer5s14.ET=fbTimer5s14.PT THEN
rBat14 := INT_TO_REAL(iUBat) / 100;
bStatusBat14 := TRUE;
fbTimer5s14(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 15-й АКБ
IF bStatusBat14 = TRUE AND bStatusBat15 = FALSE THEN
fbTimer5s15(IN := TRUE, PT := T#10S);
iBatNumber1 := 15;
IF fbTimer5s15.Q = FALSE AND fbTimer5s15.ET=fbTimer5s15.PT THEN
rBat15 := INT_TO_REAL(iUBat) / 100;
bStatusBat15 := TRUE;
fbTimer5s15(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 16-й АКБ
IF bStatusBat15 = TRUE AND bStatusBat16 = FALSE THEN
fbTimer5s16(IN := TRUE, PT := T#10S);
iBatNumber1 := 16;
IF fbTimer5s16.Q = FALSE AND fbTimer5s16.ET=fbTimer5s16.PT THEN
rBat16 := INT_TO_REAL(iUBat) / 100;
bStatusBat16 := TRUE;
fbTimer5s16(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 17-й АКБ
IF bStatusBat16 = TRUE AND bStatusBat17 = FALSE THEN
fbTimer5s17(IN := TRUE, PT := T#10S);
iBatNumber1 := 17;
IF fbTimer5s17.Q = FALSE AND fbTimer5s17.ET=fbTimer5s17.PT THEN
rBat17 := INT_TO_REAL(iUBat) / 100;
bStatusBat17 := TRUE;
fbTimer5s17(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 18-й АКБ
IF bStatusBat17 = TRUE AND bStatusBat18 = FALSE THEN
fbTimer5s18(IN := TRUE, PT := T#10S);
iBatNumber1 := 18;
IF fbTimer5s18.Q = FALSE AND fbTimer5s18.ET=fbTimer5s18.PT THEN
rBat18 := INT_TO_REAL(iUBat) / 100;
bStatusBat18 := TRUE;
fbTimer5s18(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

IF bStatusBat1 AND bStatusBat2 AND bStatusBat3 AND bStatusBat4 AND bStatusBat5 AND bStatusBat6 AND bStatusBat7 AND
bStatusBat8 AND bStatusBat9 AND bStatusBat10 AND bStatusBat11 AND bStatusBat12 AND bStatusBat13 AND
bStatusBat14 AND bStatusBat15 AND bStatusBat6 AND bStatusBat17 AND bStatusBat18
THEN
bStatusIzmBat := TRUE;
//iPermission := 0;
fbTimer10m(IN := TRUE, PT := T#10M);
iBatNumber := 0;
iBatNumber1 := 0;
IF fbTimer10m.Q THEN
bStatusIzmBat := FALSE;
bStatusBat1 := FALSE;
bStatusBat2 := FALSE;
bStatusBat3 := FALSE;
bStatusBat4 := FALSE;
bStatusBat5 := FALSE;
bStatusBat6 := FALSE;
bStatusBat7 := FALSE;
bStatusBat8 := FALSE;
bStatusBat9 := FALSE;
bStatusBat10 := FALSE;
bStatusBat11 := FALSE;
bStatusBat12 := FALSE;
bStatusBat13 := FALSE;
bStatusBat14 := FALSE;
bStatusBat15 := FALSE;
bStatusBat16 := FALSE;
bStatusBat17 := FALSE;
bStatusBat18 := FALSE;
fbTimer10m(IN := FALSE, PT := T#0S);
END_IF
END_IF

Вообще, для подобного рода задач, лучше использовать CASE.

viktor1980
19.06.2020, 08:37
// 1-й АКБ
IF bStatusIzmBat = FALSE AND bStatusBat1 = FALSE THEN
fbTimer5s1(IN := TRUE, PT := T#10S);
iPermission := 1;
iBatNumber := 1;
IF fbTimer5s1.Q = FALSE AND fbTimer5s1.ET=fbTimer5s1.PT THEN
rBat1 := INT_TO_REAL(iUBat) / 100;
bStatusBat1 := TRUE;
fbTimer5s1(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 2-й АКБ
IF bStatusBat1 = TRUE AND bStatusBat2 = FALSE THEN
fbTimer5s2(IN := TRUE, PT := T#10S);
iBatNumber := 2;
IF fbTimer5s2.Q = FALSE AND fbTimer5s2.ET=fbTimer5s2.PT THEN
rBat2 := INT_TO_REAL(iUBat) / 100;
bStatusBat2 := TRUE;
fbTimer5s2(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 3-й АКБ
IF bStatusBat2 = TRUE AND bStatusBat3 = FALSE THEN
fbTimer5s3(IN := TRUE, PT := T#10S);
iBatNumber := 3;
IF fbTimer5s3.Q = FALSE AND fbTimer5s3.ET=fbTimer5s3.PT THEN
rBat3 := INT_TO_REAL(iUBat) / 100;
bStatusBat3 := TRUE;
fbTimer5s3(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 4-й АКБ
IF bStatusBat3 = TRUE AND bStatusBat4 = FALSE THEN
fbTimer5s4(IN := TRUE, PT := T#10S);
iBatNumber := 4;
IF fbTimer5s4.Q = FALSE AND fbTimer5s4.ET=fbTimer5s4.PT THEN
rBat4 := INT_TO_REAL(iUBat) / 100;
bStatusBat4 := TRUE;
fbTimer5s4(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 5-й АКБ
IF bStatusBat4 =TRUE AND bStatusBat5 = FALSE THEN
fbTimer5s5(IN := TRUE, PT := T#10S);
iBatNumber := 5;
IF fbTimer5s5.Q = FALSE AND fbTimer5s5.ET=fbTimer5s5.PT THEN
rBat5 := INT_TO_REAL(iUBat) / 100;
bStatusBat5 := TRUE;
fbTimer5s5(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 6-й АКБ
IF bStatusBat5 = TRUE AND bStatusBat6 = FALSE THEN
fbTimer5s6(IN := TRUE, PT := T#10S);
iBatNumber := 6;
IF fbTimer5s6.Q = FALSE AND fbTimer5s6.ET=fbTimer5s6.PT THEN
rBat6 := INT_TO_REAL(iUBat) / 100;
bStatusBat6 := TRUE;
fbTimer5s6(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 7-й АКБ
IF bStatusBat6 = TRUE AND bStatusBat7 = FALSE THEN
fbTimer5s7(IN := TRUE, PT := T#10S);
iBatNumber := 7;
IF fbTimer5s7.Q = FALSE AND fbTimer5s7.ET=fbTimer5s7.PT THEN
rBat7 := INT_TO_REAL(iUBat) / 100;
bStatusBat7 := TRUE;
fbTimer5s7(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 8-й АКБ
IF bStatusBat7 = TRUE AND bStatusBat8 = FALSE THEN
fbTimer5s8(IN := TRUE, PT := T#10S);
iBatNumber := 8;
IF fbTimer5s8.Q = FALSE AND fbTimer5s8.ET=fbTimer5s8.PT THEN
rBat8 := INT_TO_REAL(iUBat) / 100;
bStatusBat8 := TRUE;
fbTimer5s8(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 9-й АКБ
IF bStatusBat8 = TRUE AND bStatusBat9 = FALSE THEN
fbTimer5s9(IN := TRUE, PT := T#10S);
iBatNumber := 9;
IF fbTimer5s9.Q = FALSE AND fbTimer5s9.ET=fbTimer5s9.PT THEN
rBat9 := INT_TO_REAL(iUBat) / 100;
bStatusBat9 := TRUE;
fbTimer5s9(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 10-й АКБ
IF bStatusBat9 = TRUE AND bStatusBat10 = FALSE THEN
fbTimer5s10(IN := TRUE, PT := T#10S);
iBatNumber1 := 10;
IF fbTimer5s10.Q = FALSE AND fbTimer5s10.ET=fbTimer5s10.PT THEN
rBat10 := INT_TO_REAL(iUBat) / 100;
bStatusBat10 := TRUE;
fbTimer5s10(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 11-й АКБ
IF bStatusBat10 = TRUE AND bStatusBat11 = FALSE THEN
fbTimer5s11(IN := TRUE, PT := T#10S);
iBatNumber1 := 11;
IF fbTimer5s11.Q = FALSE AND fbTimer5s11.ET=fbTimer5s11.PT THEN
rBat11 := INT_TO_REAL(iUBat) / 100;
bStatusBat11 := TRUE;
fbTimer5s11(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 12-й АКБ
IF bStatusBat11 = TRUE AND bStatusBat12 = FALSE THEN
fbTimer5s12(IN := TRUE, PT := T#10S);
iBatNumber := 12;
IF fbTimer5s12.Q = FALSE AND fbTimer5s12.ET=fbTimer5s12.PT THEN
rBat12 := INT_TO_REAL(iUBat) / 100;
bStatusBat12 := TRUE;
fbTimer5s12(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 13-й АКБ
IF bStatusBat12 = TRUE AND bStatusBat13 = FALSE THEN
fbTimer5s13(IN := TRUE, PT := T#10S);
iBatNumber1 := 13;
IF fbTimer5s13.Q = FALSE AND fbTimer5s13.ET=fbTimer5s13.PT THEN
rBat13 := INT_TO_REAL(iUBat) / 100;
bStatusBat13 := TRUE;
fbTimer5s13(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 14-й АКБ
IF bStatusBat13 = TRUE AND bStatusBat14 = FALSE THEN
fbTimer5s14(IN := TRUE, PT := T#10S);
iBatNumber1 := 14;
IF fbTimer5s14.Q = FALSE AND fbTimer5s14.ET=fbTimer5s14.PT THEN
rBat14 := INT_TO_REAL(iUBat) / 100;
bStatusBat14 := TRUE;
fbTimer5s14(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 15-й АКБ
IF bStatusBat14 = TRUE AND bStatusBat15 = FALSE THEN
fbTimer5s15(IN := TRUE, PT := T#10S);
iBatNumber1 := 15;
IF fbTimer5s15.Q = FALSE AND fbTimer5s15.ET=fbTimer5s15.PT THEN
rBat15 := INT_TO_REAL(iUBat) / 100;
bStatusBat15 := TRUE;
fbTimer5s15(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 16-й АКБ
IF bStatusBat15 = TRUE AND bStatusBat16 = FALSE THEN
fbTimer5s16(IN := TRUE, PT := T#10S);
iBatNumber1 := 16;
IF fbTimer5s16.Q = FALSE AND fbTimer5s16.ET=fbTimer5s16.PT THEN
rBat16 := INT_TO_REAL(iUBat) / 100;
bStatusBat16 := TRUE;
fbTimer5s16(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 17-й АКБ
IF bStatusBat16 = TRUE AND bStatusBat17 = FALSE THEN
fbTimer5s17(IN := TRUE, PT := T#10S);
iBatNumber1 := 17;
IF fbTimer5s17.Q = FALSE AND fbTimer5s17.ET=fbTimer5s17.PT THEN
rBat17 := INT_TO_REAL(iUBat) / 100;
bStatusBat17 := TRUE;
fbTimer5s17(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

// 18-й АКБ
IF bStatusBat17 = TRUE AND bStatusBat18 = FALSE THEN
fbTimer5s18(IN := TRUE, PT := T#10S);
iBatNumber1 := 18;
IF fbTimer5s18.Q = FALSE AND fbTimer5s18.ET=fbTimer5s18.PT THEN
rBat18 := INT_TO_REAL(iUBat) / 100;
bStatusBat18 := TRUE;
fbTimer5s18(IN := FALSE, PT := T#0S);
ELSE
iUBat := 0;
END_IF
END_IF

IF bStatusBat1 AND bStatusBat2 AND bStatusBat3 AND bStatusBat4 AND bStatusBat5 AND bStatusBat6 AND bStatusBat7 AND
bStatusBat8 AND bStatusBat9 AND bStatusBat10 AND bStatusBat11 AND bStatusBat12 AND bStatusBat13 AND
bStatusBat14 AND bStatusBat15 AND bStatusBat6 AND bStatusBat17 AND bStatusBat18
THEN
bStatusIzmBat := TRUE;
//iPermission := 0;
fbTimer10m(IN := TRUE, PT := T#10M);
iBatNumber := 0;
iBatNumber1 := 0;
IF fbTimer10m.Q THEN
bStatusIzmBat := FALSE;
bStatusBat1 := FALSE;
bStatusBat2 := FALSE;
bStatusBat3 := FALSE;
bStatusBat4 := FALSE;
bStatusBat5 := FALSE;
bStatusBat6 := FALSE;
bStatusBat7 := FALSE;
bStatusBat8 := FALSE;
bStatusBat9 := FALSE;
bStatusBat10 := FALSE;
bStatusBat11 := FALSE;
bStatusBat12 := FALSE;
bStatusBat13 := FALSE;
bStatusBat14 := FALSE;
bStatusBat15 := FALSE;
bStatusBat16 := FALSE;
bStatusBat17 := FALSE;
bStatusBat18 := FALSE;
fbTimer10m(IN := FALSE, PT := T#0S);
END_IF
END_IF

Вообще, для подобного рода задач, лучше использовать CASE.

При измерении второй АКБ, программа "затыкается", также как и моем варианте. Буду ковырять дальше, но реально пока мыслей здравых нет.

GoodLuck
19.06.2020, 09:11
Таймеры fbTimer5s1 определены как TP?
Если TON, то конечно, опрашивает только 1-ю АКБ.

viktor1980
19.06.2020, 09:57
Таймеры fbTimer5s1 определены как TP?
Если TON, то конечно, опрашивает только 1-ю АКБ.

А ларец действительно легко открывался. Действительно по ошибке объявил их как TON. Был уверен, что в объявлении все правильно и ни разу не перепроверил. А копался только в коде.
Огромное спасибо за помощь!