Написал программу типа FB, но при тестировании создается впечатление, что не работают операторы перехода (условные и безусловные). Помогите пожалуйста разобраться. Ниже приведен текст програмки (так, как он есть):
F0 = I0 F1 = I1 F2 = I2
F3 = I3 F4 = I4
F5 = F0 F5 - F2 ABS F51 F5
F6 = 0
F51 <= 0.1 JMPC M30
IF F51 < 0 THEN
IF F3 < 0 THEN
IF F4 < 0 THEN JMP M10 ELSE JMP M30 END_IF
ELSE F6 = F0 F6 - F2 F1 + F6 JMP M20 END_IF
ELSE
IF F3 < 0 THEN
F6 = F1 F6 - F2 F1 + F6 JMP M30
ELSE
IF F4 < 0 THEN JMP M10 ELSE F1 = F0 JMP M30 END_IF
END_IF
END_IF
10: F7 = F3 F7 ** 2 F7 / 2 F7 / F4
F8 = F2 F8 + F7 F6 = F0 F6 + F8 F1 + F6
20: IF F1 < F0 THEN F1 = F0 END_IF
30: Q0 = 1 Q1 = F0 Q2 = F2
EXIT
Выходы Q1 и Q2 введены для проверки. Т.к. даже при выполнения условия F51 <= 0.1; JMPC M30 они остаются нулевыми. Зарание спасибо. С уважением, Евгений Ахунов.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Уважаемый Евгений! У Вас в коде 2 принципиальных ошибки. Метки, согласно описанию языка, должны содержкать символ M, т.е. обозначаться как "M0:", "M1:" и т.д. Количество меток в FB не должно превышать 5, т.е. максимальный номер метки - 4. К сожалению, ошибка первого типа при трансляции в явном виде не обозначается. Но все метки в Вашем коде имеют номер "0". Это можно увидеть, если просмотреть результат компиляции командой ПРАВКА/ДАМП. После указанной коррекции Вашего кода, по крайней мере, в предложенном Вами алгоритме проверки блок функционирует правильно. В версии Трейс Моуд 6 языковая диагностика будет более полной.
Posted by Евгений Ахунов (Участник № / Member № 467) on :