Выражения

Типовые задачи  Предыдущий  Следующий

Определение

В  общем случае выражение — это построенная по принятым в информатике и математике правилам комбинация констант, каналов, алгоблоков, идентификаторов алгоблоков, возможно, с использованием круглых скобок, соединенных знаками операций.

Использование

Выражение в пользовательских подпрограммах заключаются в квадратные скобки и могут использоваться:

или как аргумент(ы) стандартных алгоблоков, например:

B20 = RESULT(AO1.1; [(AO2.1 + AO2.2) / 2]; 0)

или как отдельные строки кода, например:

B20 = [AI1.1 + AI1.2 + SQRT(AI1.3)]

Состав

В общем случае в выражениях могут присутствовать:

знаки математических операций (+,, *, /);

знаки сравнений (>, <, >=, <=, ==);

унарные операции: отрицание (!) и смена знака ();

знаки логических операций: И (&&) и ИЛИ (||);

константы (например, 0; 1; 45,2; 1e-5; 1e4); обеспечивается точность при значениях от ±1х10-5 до ±1х105;

каналы (например, AI1.1, DI3.8, AO1.1, DO2.5) или их пользовательские идентификаторы;

идентификаторы алгоблоков;

круглые скобки;

стандартные алгоблоки (см. следующий подраздел).

Алгоблоки, доступные для использования в выражениях

Перечень стандартных алгоблоков, доступных для использования в выражениях, приведен в таблице ниже.

Таблица. Стандартные алгоблоки, доступные для использования в выражениях

Наименование

Количество аргументов

Пример

ABS

1

B10 = [ABS(AI1.1 - 10) + ABS(B1)]

ALARM

2—4

B10 = [ALARM(0; B1; 5; AO1.1) || ALARM(1; B2; 7; AO1.2)]

AND

1—32

B10 = [AI1.1 * AND(DI1.1; B1; DO1.1; 1)]

ASK_LIM

2—3

B10 = [MAX(ASK_LIM(8; AI1.1); 0)]

BREAK

1—32

B10 = [BREAK(DI1.1; AI1.1; AO1.1) + BREAK(DO1.1)]

CALL

1—32

B10 = [CALL(MY_PROG1; 2) + CALL(MY_PROG2; AI1.1; AO1.1)]

CHANNEL_STATE

2

B10 = IF([CHANNEL_STATE(AI1.1; 1)]; AI1.1; 0)

COS

1

B10 =  [RESULT(AO1.2; 50 + 50 * COS(AO1.1))]

B20 =  RESULT(AO1.3; [50 + 50 * COS(AO1.1 + 1)]; 0)

DELAY

3

B10 = [DELAY(DELAY(DI1.1; 20; 1); 20; 0)]

B20 = DELAY([DELAY(DI1.2; 20; 1)]; 20; 0)

DIFF

2

B10 = IF([DIFF(AI1.1; 600) > 10]; 1; 0)

DOWN_HYSTER

2—3

B10 = IF([UP_HYSTER(AI1.1; AO1.1; 0,5) + DOWN_HYSTER(AI1.1; AO1.2; 0,5) >= 1]; 10; 5)

DSC_PACK

1—32

B10 = [DSC_PACK(OR(DI2.1; DI2.2; DU2.3); AND(DI3.1; DI3.2); DI1.1; DI1.2; DI1.3)]

EQ

2

B10 = [EQ(AO1.1; AO1.2) || (AO2.1 == AO2.2)]

EXP

1

B10 = [1 + EXP(AO1.1) / 2]

FORCE_OFF

2

B10 = IF([FORCE_OFF(DI1.1; 50)]; AO1.1; 0)

FRN

2

B10 = RESULT(AO1.1; [AO1.1 + MAX(FRN(DI1.1; 1); 0)]; 0)

FRQ

2—4

B10 = [FRQ(20; 20) * 50]

GET_FIRST

3—32

B10 = RESULT(AO1.1; [GET_FIRST(DI1.1; DI1.2; DI1.3; DI1.4; DO1.1)])

GET_INFO

2

B10 = RESULT(AO1.1; [GET_INFO(AI1.1; 1)])

B20 = RESULT(AO1.2; [GET_INFO(AI1.1; 2)])

GT

2

B10 = RESULT(DO1.1; [GT(AO1.1; AO1.2) || LT(AO2.1; AO2.2)])

GTE

2

B10 = RESULT(DO1.1; [GTE(AO1.1; AO1.2) && LTE(AO2.1; AO2.2)])

ID_STATE

2

B100 = IF([ID_STATE(B10; 1) && ID_STATE(B20; 1)]; 4; 8)

IDIV

2

B10 = RESULT(AO1.1; [IDIV(AI1.1; AO1.1)])

IF

2—3

B10 = RESULT(AO1.1; [IF(AO1.1 > 6,2815; 0; AO1.1 + 0,001)])

B20 = IF([FORCE_OFF(DI1.1; 50)]; AO2.1; 0)

B30 = IF([UP_HYSTER(AI1.1; AO3.1; 0,5) + DOWN_HYSTER(AI1.2; AO3.2; 0,5) >= 1]; 10; 5)

IMP

1

B10 = RESULT(AO1.1; [AO1.1 + MAX(IMP(AI1.1); 0) / 5000])

INT

1

B10 = [INT(AI1.1) + INT(AI1.2)]

IREM

2

B10 = IF([IREM(AI1.1; AO1.1)]; AO2.1; -1)

IS_BIT

2

B10 = RESULT(DO1.1; [IS_BIT(SYS_ERROR(); 1)])

LN

1

B10 = [(LN(AI1.1) + LN(AO1.1)) / 2]

LT

2

B10 = RESULT(DO1.1; [GT(AO1.1; AO1.2) || LT(AO2.1; AO2.2)])

LTE

2

B10 = RESULT(DO1.1; [GTE(AO1.1; AO1.2) && LTE(AO2.1; AO2.2)])

MAX

1—32

B10 = RESULT(AO1.1; [AO1.1 + MAX(FRN(DI1.1; 1); 0)]; 0)

MEAN_SEL

2—32

B10 = RESULT(AO1.1; [MEAN_SEL(AI1.1; AI2.1; AI3.1)])

MEDIAN_SEL

3—32

B10 = RESULT(AO1.1; [MEDIAN_SEL(AI1.1; AI2.1; AI3.1; AI4.1)])

MEMORY

3

B10 = RESULT(DO1.1; [MEMORY(OR(DI1.1; 0); 0; DO1.1)])

MIN

1—32

B10 = RESULT(AO1.1; [MIN(AI1.1; 100)])

MOD_STATE

1

B10 = [MOD_STATE(1) == 1 && MOD_STATE(2) == 1 && MOD_STATE(3) == 1 ]

NODE_STATE

1—2

B10 = [NODE_STATE(0) == 2 || [NODE_STATE(1) == 2 || [NODE_STATE(2) == 2 || [NODE_STATE(3) == 2]

OR

1—32

B10 = [OR(DI1.1; DI1.2; DI1.3) && OR(DI2.1; DI2.2)]

PRIO_SEL

2—32

B10 = RESULT(AO1.1; [PRIO_SEL(AI1.1; AI2.1; AI3.1)])

PWR

2

B10 = RESULT(AO2.1; [PWR(AO1.1; AO1.2) + 1])

RAW_VALUE

1

B10 = IF([RAW_VALUE(AI1.1) <= 4,05]; 0; AI1.1)

REG_GETPAR

2

B10 = IF([REG_GETPAR(REG1; 1)]; [REG_GETPAR(REG1; 2)]; [REG_GETPAR(REG1; 3)])

RESULT

2—3

B10 = RESULT(AO1.1; [IF(AO1.1 > 6,2815; 0; AO1.1 + 0,001)])

B20 =  [RESULT(AO1.2; 50 + 50 * COS(AO1.1))]

B30 =  RESULT(AO1.3; [50 + 50 * COS(AO1.1 + 1)]; 0)

B40 = RESULT(AO3.1; [AO3.1 + MAX(FRN(DI1.1; 1); 0)]; 0)

SIGN

1

B10 = [SIGN(AO1.1) + DI1.1]

SIN

1

B10 =  [RESULT(AO1.2; 50 + 50 * SIN(AO1.1))]

B20 =  RESULT(AO1.3; [50 + 50 * SIN(AO1.1 + 1)]; 0)

SQR

1

B10 = [SQRT(SQR(AO1.1) + SQR(AO1.2))]

SQRT

1

B10 = [SQRT(SQR(AO1.1) + SQR(AO1.2))]

STAGE_STATE

1

B10 = [FRN(STAGE_STATE(2) == 2; 1)]

SYS_ERROR

0

B10 = RESULT(DO1.1; [IS_BIT(SYS_ERROR(); 1)])

SYS_TIME

1

B10 = [FRN(SYS_TIME(3) == 16; 1)]

TBL_APPROX

2

B10 = [TBL_APPOX(TBL1; AO1.1) + TBL_APPOX(TBL2; AO1.1)]

TBL_SEL

2

B10 = [(TBL_SEL(TBL1; 0) + TBL_SEL(TBL1; 1)) / 2]

TIMER

1

B10 = RESULT(AO1.1; [TIMER(DI1.1) / 10])

TRC

1

B10 = RESULT(AO1.1; [(AO1.1 + 0,001) * (1 - TRC(AO1.1 / 6,2815))]; 0)

TRG

2—3

B10 = [TRG(DI1.1; DI2.1) || TRG(DI1.2; DI2.2)]

UP_HYSTER

2—3

B10 = IF([UP_HYSTER(AI1.1; AO1.1; 0,5) + DOWN_HYSTER(AI1.1; AO1.2; 0,5) >= 1]; 10; 5)

VALVE

4

B10 = RESULT(AO1.1; [VALVE(DO1.1; DI1.1; DI1.2; 30)])

Дополнительные примеры выражений

b10 = result(do1.1; [0,2 + 0,4])
b20 = [(3 > 2) || (2 < 3)]
b30 = [(3 >= 2) && (2 <= 3)]
b40 = [(2 == 2) || (2 == 3)]
b50 = add([b60 + b70 + b80]; 5; ~b10)
b60 = if([10 >= b60 + do1.1]; [10 + 20]; [trc(13 / 2) + 1])
b70 = if([10 < b60 + do1.1]; [10 + 20]; [trc(13 / 2) + 1])
b80 = [min(1; 2; 3) + max(1; 2; 3)]
b90 = [trg(di1.1; DI1.2)]
b100 = result(ao1.1; [if(ao1.1 > 6,2815; 0; ao1.1 + 0,001)])
b110 = result(ao1.2; [50 + 50 * sin(ao1.1)])
b120 = call(myProg; [b10 + 1]; [b20 / 100]; 0)
b130 = [-(!(0,05 + 0,04))]
b140 = [!(-5)]
b150 = [-(!0)]
b260 = [2 + 2 / 3 * 3 - 1]