forked from Serhioromano/vscode-st
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.iecst
125 lines (94 loc) · 3.02 KB
/
test.iecst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
VAR_GLOBAL
TEST_ARR: ARRAY[0..2] OF WORD;
END_VAR
FUNCTION_BLOCK FB_TEST
VAR
iNum: WORD;
END_VAR
TEST_ARR[iNum] := 10;
END_FUNCTION_BLOCK
PROGRAM PLC_PRG
VAR
iIndex : WORD;
fbTest: FB_TEST;
END_VAR
fbTest(iNum := 0); // Работает
fbTest(iNum := iIndex); // Не Работает
TEST_ARR[1] := 10; // Работает
TEST_ARR[iIndex] := 10; // Не Работает
D100 := 1;
TEST_ARR[D100] := 10; // Не Работает
END_PROGRAM
CONST
MY_TON_D := 2;
MY_TO_D := 2;
LIMIT := 7;
END_CONST
ORGANIZATION_BLOCK CYCLE
(* **********************************************************
CYCLE - название OB1, он вызывается циклически системой S7.
Часть 1 : Вызов функционального блока и передача входных величин
Часть 2 : Чтение выходных величин и вывод с переключением выходов
********************************************************** *)
VAR_TEMP
systemdata : ARRAY[0..20] OF BYTE; // Область для OB1
END_VAR
BEGIN
(* Part 1 : ************************************************** *)
ACQUIRE.ACQUIRE_DATA(
measval_in := WORD_TO_INT(input),
newval := "Input 0.0", // Входной ключ как идентификатор сигнала
resort := %PQW10.23,
funct_sel := Function_switch,
newsel := Coding_switch,
selection := Coding
);
(* Part 2 : ************************************************* *)
IF Output_switch THEN // Изменение выхода
Output := ACQUIRE_DATA.result_out; // Квадратный корень или квадрат
ELSE
Output := ACQUIRE_DATA.measval_out; // Измеряемая величина
END_IF;
END_ORGANIZATION_BLOCK
TYPE Direction (
DIR_CW, (* по часовой *)
DIR_CCW (* против часовой *)
)
END_TYPE
VAR
xA : BOOL; (* Фаза а *)
xB : BOOL; (* Фаза б *)
enDir : Direction; (* Направление движения *)
udiCount : DINT; (* Счетчик *)
fbRTA, fbRTB : R_TRIG;
fbFTA, fbFTB : F_TRIG;
END_VAR
fbRTA(CLK := xA);
fbFTA(CLK := xA);
fbRTB(CLK := xB);
fbFTB(CLK := xB);
IF (fbRTA.Q AND NOT xB) OR
(fbFTA.Q AND xB) OR
(fbRTB.Q AND xA) OR
(fbFTB.Q AND NOT xA )
THEN
enDir := Direction.DIR_CW;
udiCount := udiCount + 1;
ELSE
enDir := Direction.DIR_CCW;
udiCount := udiCount - 1;
END_IF;
PROGRAM PLC_PRG
VAR
xStart : BOOL := 'dfsfdfd'; // something
fbTON1 : TON; (* \. @WE := 'dfdf' *)
rValue : REAL; /* Конечное значение */
END_VAR
fbTON1(IN := xStart, PT => tDuration);
IF xStart <> TRUE THEN
rValue := easeLinear(fbTON1.ET, rFrom, rTo, tDuration);
END_IF;
(a = b)ANDc > 10;
c := (b / 3) * 12**;
a := CONCAT(a, ':= **'); // a := b
END_PROGRAM