-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathFb2oo3.SCL
More file actions
275 lines (251 loc) · 13.7 KB
/
Copy pathFb2oo3.SCL
File metadata and controls
275 lines (251 loc) · 13.7 KB
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
FUNCTION_BLOCK "Fb2oo3"
TITLE = 'Ðåçåðâèðîâàíèå äàò÷èêîâ ìåòîäîì ãîëîñîâàíèÿ.'
{ S7_read_back := 'true' ;
S7_blockview := 'big' }
AUTHOR : VA
FAMILY : LIB_PLC
VERSION : '2.0'
VAR_INPUT // Âõîäíûå ïåðåìåííûå, ñîõðàíÿåìûå.
In1 :REAL := 0.0 ; // Äàò÷èê 1.
In2 :REAL := 0.0 ; // Äàò÷èê 2.
In3 :REAL := 0.0 ; // Äàò÷èê 3.
ErIn1 :BOOL := FALSE; // Äàò÷èê 1 îøèáêà.
ErIn2 :BOOL := FALSE; // Äàò÷èê 2 îøèáêà.
ErIn3 :BOOL := FALSE; // Äàò÷èê 3 îøèáêà.
DifMax :REAL := 5.0 ; // Ìàêñèìàëüíîå ðàññîãëàñîâàíèÿ âõîäîâ.
LimMax :REAL := 99.9 ; // Ìàêñèìàëüíîå çíà÷åíèå âõîäîâ.
LimMin :REAL := 0.1 ; // Ìèíèìàëüíîå çíà÷åíèå âõîäîâ.
ValEr :REAL := 0.0 ; // Çíà÷åíèå âûõîäà åñëè âñå äàò÷èêè íåèñïðàâíû.
END_VAR
VAR_OUTPUT // Âûõîäíûå ïåðåìåííûå, ñîõðàíÿåìûå.
Out :REAL := 0.0 ; // Âûõîä.
ErOut :BOOL := FALSE; // Îøèáêà âñå äàò÷èêè íåèñïðàâíû.
Er1 :BOOL := FALSE; // Îøèáêà äàò÷èêà 1.
Er2 :BOOL := FALSE; // Îøèáêà äàò÷èêà 2.
Er3 :BOOL := FALSE; // Îøèáêà äàò÷èêà 3.
END_VAR
VAR // Âíóòðåííèå ïåðåìåííûå, ñîõðàíÿåìûå.
State :INT := 0 ; // Ðåæèì ðàáîòû 0=2oo3 1,2,4=1îî2 3,5,6=1îî1 7=ERROR
Er1Max :BOOL := FALSE; // Îøèáêà äàò÷èêà 1 ïî ìàêñèìàëüíîìó çíà÷åíèþ.
Er2Max :BOOL := FALSE; // Îøèáêà äàò÷èêà 2 ïî ìàêñèìàëüíîìó çíà÷åíèþ.
Er3Max :BOOL := FALSE; // Îøèáêà äàò÷èêà 3 ïî ìàêñèìàëüíîìó çíà÷åíèþ.
Er1Min :BOOL := FALSE; // Îøèáêà äàò÷èêà 1 ïî ìèíèìàëüíîìó çíà÷åíèþ.
Er2Min :BOOL := FALSE; // Îøèáêà äàò÷èêà 2 ïî ìèíèìàëüíîìó çíà÷åíèþ.
Er3Min :BOOL := FALSE; // Îøèáêà äàò÷èêà 3 ïî ìèíèìàëüíîìó çíà÷åíèþ.
Er1Dif :BOOL := FALSE; // Îøèáêà äàò÷èêà 1 ïî ðàññîãëàñîâàíèþ âõîäîâ.
Er2Dif :BOOL := FALSE; // Îøèáêà äàò÷èêà 2 ïî ðàññîãëàñîâàíèþ âõîäîâ.
Er3Dif :BOOL := FALSE; // Îøèáêà äàò÷èêà 3 ïî ðàññîãëàñîâàíèþ âõîäîâ.
END_VAR
CONST // Êîíñòàíòû.
STATE0_2oo3 := 0;
STATE1_1oo2 := 1;
STATE2_1oo2 := 2;
STATE3_1oo1 := 3;
STATE4_1oo2 := 4;
STATE5_1oo1 := 5;
STATE6_1oo1 := 6;
STATE7_0_ER := 7;
END_CONST
BEGIN
// Ðåçåðâèðîâàíèå äàò÷èêîâ ìåòîäîì ãîëîñîâàíèÿ.
// Db2oo3
// +----------------+
// | Fb2oo3 |
// ->-|In1 Out|->-
// ->-|In2 ErOut|-
// ->-|In3 Er1|-
// -|ErIn1 Er2|-
// -|ErIn2 Er3|-
// -|ErIn3 |
// -|DifMax |
// -|LimMax |
// -|LimMin |
// -|ValEr |
// +----------------+
// Îøèáêà äàò÷èêà ïî ìàêñèìàëüíîìó çíà÷åíèþ.
Er1Max := (In1 >= LimMax);
Er2Max := (In2 >= LimMax);
Er3Max := (In3 >= LimMax);
// Îøèáêà äàò÷èêà ïî ìèíèìàëüíîìó çíà÷åíèþ.
Er1Min := (In1 <= LimMin);
Er2Min := (In2 <= LimMin);
Er3Min := (In3 <= LimMin);
// Îøèáêà äàò÷èêà ïî ðàññîãëàñîâàíèþ âõîäîâ.
// Ðàññîãëàñîâàíèå åñòü ñìûñë ïðîâåðÿòü òîëüêî åñëè âñå òðè äàò÷èêà èñïðàâíû.
// Èíà÷å ìîãóò âîçíèêíóòü ïðîáëåìû êîãäà ðàáîòàåì ñ íåèñïðàâíûìè äàò÷èêàìè.
// Äàííîå óñëîâèå ïîçâîëèò ïðîäîëæèòü ðàáîòó íà äâóõ äàò÷èêàõ ïðè áîëüøîé ðàçíîñòè ïîêàçàíèé ìåæäó íèìè.
//  äàííîì ñëó÷àå ìû íå çíàåì êîìó äîâåðÿòü è äëÿ ñèñòåìû ðåãóëèðîâàíèÿ âàæíåå ïðîäîëæèòü ðàáîòó.
// Åñëè áû ýòî áûëà ñèñòåìà ïðîòèâîàâàðèéíîé çàùèòû òî ëó÷øå áûëî óéòè â îøèáêó.
IF (ErIn1=0 ) AND (ErIn2=0 ) AND (ErIn3=0 ) AND
(Er1Max=0) AND (Er2Max=0) AND (Er3Max=0) AND
(Er1Min=0) AND (Er2Min=0) AND (Er3Min=0) THEN
Er1Dif := (ABS(In1 - In2) >= DifMax) AND (ABS(In1 - In3) >= DifMax);
Er2Dif := (ABS(In2 - In1) >= DifMax) AND (ABS(In2 - In3) >= DifMax);
Er3Dif := (ABS(In3 - In1) >= DifMax) AND (ABS(In3 - In2) >= DifMax);
END_IF;
// Îøèáêà äàò÷èêà.
// Äàííûå ôëàãè äëÿ ñèãíàëèçàöèè íåèñïðàâíîñòè.
Er1 := ErIn1 OR Er1Max OR Er1Min OR Er1Dif;
Er2 := ErIn2 OR Er2Max OR Er2Min OR Er2Dif;
Er3 := ErIn3 OR Er3Max OR Er3Min OR Er3Dif;
// Çíà÷åíèå âûõîäà åñëè âñå äàò÷èêè íåèñïðàâíû.
// Äàííûé ôëàã äëÿ ïåðåâîäà èç àâòîìàòè÷åñêîãî ðåæèìà ðàáîòû â ðó÷íîé.
ErOut := Er1 AND Er2 AND Er3;
IF (0=Er1) AND (0=Er2) AND (0=Er3) THEN State := 0; END_IF;
IF (0=Er1) AND (0=Er2) AND (1=Er3) THEN State := 1; END_IF;
IF (0=Er1) AND (1=Er2) AND (0=Er3) THEN State := 2; END_IF;
IF (0=Er1) AND (1=Er2) AND (1=Er3) THEN State := 3; END_IF;
IF (1=Er1) AND (0=Er2) AND (0=Er3) THEN State := 4; END_IF;
IF (1=Er1) AND (0=Er2) AND (1=Er3) THEN State := 5; END_IF;
IF (1=Er1) AND (1=Er2) AND (0=Er3) THEN State := 6; END_IF;
IF (1=Er1) AND (1=Er2) AND (1=Er3) THEN State := 7; END_IF;
// Ìîæíî âñå ðåàëèçîâàòü áåç îïåðàòîðà CASE.
// Ñ îïåðàòîðîì CASE ïîëó÷èëîñü áîëåå íàãëÿäíî.
// +-----+-----+-----+----------+
// | Er1 | Er2 | Er3 | State |
// +-----+-----+-----+----------+
// | 0 | 0 | 0 | 0 - 2oo3 |
// | 0 | 0 | 1 | 1 - 1îî2 |
// | 0 | 1 | 0 | 2 - 1îî2 |
// | 0 | 1 | 1 | 3 - 1oo1 |
// | 1 | 0 | 0 | 4 - 1îî2 |
// | 1 | 0 | 1 | 5 - 1oo1 |
// | 1 | 1 | 0 | 6 - 1oo1 |
// | 1 | 1 | 1 | 7 - 0 |
// +-----+-----+-----+----------+
CASE State OF
STATE0_2oo3:
// State=0 2oo3 Ñàìûé ëó÷øèé ñëó÷àé êîãäà òðè äàò÷èêà èñïðàâíû.
//  ýòîì ñëó÷àå âûõîä ýòî ìåäèàííîå çíà÷åíèå èç òðåõ âîçìîæíûõ âõîäîâ.
// Íà äàííûé ó÷àñòîê êîäà ñìîòðåòü êàê íà ñîðòèðîâêó âõîäîâ ïî âîçðàñòàíèþ.
// Ïðè ýòîì âûõîä ýòî ñåðåäèíà.
// Ëîãèêà àíàëîãè÷íà ìåäèàííîìó ôèëüòðó FbFilterM òîëüêî ñ ôèêñèðîâàííîé ðàçìåðíîñòüþ ìàññèâà.
// Er1=0 Er2=0 Er3=0
IF (In1>=In2 AND In1<=In3) OR (In1>=In3 AND In1<=In2) THEN Out:=In1; END_IF;
IF (In2>=In3 AND In2<=In1) OR (In2>=In1 AND In2<=In3) THEN Out:=In2; END_IF;
IF (In3>=In2 AND In3<=In1) OR (In3>=In1 AND In3<=In2) THEN Out:=In3; END_IF;
STATE1_1oo2:
// State=1 1îî2 Îäèí äàò÷èê íåèñïðàâåí, äâà äàò÷èêà èñïðàâíû.
//  ýòîì ñëó÷àå âûõîä ýòî âõîä ñ ìëàäøèì íîìåðîì.
// Er1=0 Er2=0 Er3=1
Out := In1;
STATE2_1oo2:
// State=2 1îî2 Îäèí äàò÷èê íåèñïðàâåí, äâà äàò÷èêà èñïðàâíû.
//  ýòîì ñëó÷àå âûõîä ýòî âõîä ñ ìëàäøèì íîìåðîì.
// Er1=0 Er2=1 Er3=0
Out := In1;
STATE3_1oo1:
// State=3 1îî1 Äâà äàò÷èêà íåèñïðàâåíû, îäèí äàò÷èê èñïðàâåí.
//  ýòîì ñëó÷àå âûõîä ýòî âõîä èñïðàâíîãî äàò÷èêà.
// Er1=0 Er2=1 Er3=1
Out := In1;
STATE4_1oo2:
// State=4 1îî2 Îäèí äàò÷èê íåèñïðàâåí, äâà äàò÷èêà èñïðàâíû.
//  ýòîì ñëó÷àå âûõîä ýòî âõîä ñ ìëàäøèì íîìåðîì.
// Er1=1 Er2=0 Er3=0
Out := In2;
STATE5_1oo1:
// State=5 1îî1 Äâà äàò÷èêà íåèñïðàâåíû, îäèí äàò÷èê èñïðàâåí.
//  ýòîì ñëó÷àå âûõîä ýòî âõîä èñïðàâíîãî äàò÷èêà.
// Er1=1 Er2=0 Er3=1
Out := In2;
STATE6_1oo1:
// State=6 1îî1 Äâà äàò÷èêà íåèñïðàâåíû, îäèí äàò÷èê èñïðàâåí.
//  ýòîì ñëó÷àå âûõîä ýòî âõîä èñïðàâíîãî äàò÷èêà.
// Er1=1 Er2=1 Er3=0
Out := In3;
STATE7_0_ER:
// State=7 "0" Âñå äàò÷èêè íåèñïðàâíû.
//  çàâèñèìîñòè îò òåõíîëîãèè óõîä íà çàðàíåå çàäàííîå çíà÷åíèå, íàïðèìåð 0.
// Äëÿ ïåðåõîäà íà ïîñëåäíåå êîððåêòíîå çíà÷åíèå ïåðåä ñáîåì
// ïðè âíåøíåì âûçîâå Fb2oo3 âõîä Db2oo3.ValEr ïðèñîåäèíèòü ê âûõîäó Db2oo3.Out.
// Er1=1 Er2=1 Er3=1
Out := ValEr;
ELSE // Ïðè íåîïðåäåëåííîì ñîñòîÿíèè.
State := STATE7_0_ER;
END_CASE;
(*
VA 23-08-2025
https://www.reallab.ru/bookasutp/8-apparatnoe-rezervirovanie/8-2-rezervirovanie-plk/
Ñèñòåìû ñ ãîëîñîâàíèåì.
Îñíîâíûì îòëè÷èòåëüíûì ïðèçíàêîì ñèñòåì ðåçåðâèðîâàíèÿ ñ ãîëîñîâàíèåì ÿâëÿåòñÿ íåâîçìîæíîñòü âûäåëåíèÿ â ñèñòåìå îñíîâíûõ ýëåìåíòîâ è ðåçåðâíûõ,
ïîñêîëüêó âñå îíè ðàâíîïðàâíû, ðàáîòàþò îäíîâðåìåííî è âûïîëíÿþò îäíó è òó æå ôóíêöèþ.
Âûáîð îäíîãî ñèãíàëà èç íåñêîëüêèõ îñóùåñòâëÿåòñÿ ñõåìîé ãîëîñîâàíèÿ, êîòîðàÿ â ÷àñòíîì ñëó÷àå íå÷åòíîãî ÷èñëà ãîëîñîâ íàçûâàåòñÿ ìàæîðèòàðíîé ñõåìîé.
Ñèñòåìû ñ ãîëîñîâàíèåì íå òðåáóþò êîíòðîëÿ ðàáîòîñïîñîáíîñòè ýëåìåíòîâ äëÿ ñâîåãî ôóíêöèîíèðîâàíèÿ,
íî èñïîëüçóþò ïîäñèñòåìó äèàãíîñòèêè äëÿ ñîêðàùåíèÿ âðåìåíè âîññòàíîâëåíèÿ îòêàçàâøèõ ýëåìåíòîâ.
Íàëè÷èå ñèñòåìû äèàãíîñòèêè ñíèæàåò òàêæå âåðîÿòíîñòü íàêîïëåíèÿ ñêðûòûõ íåèñïðàâíîñòåé, êîòîðûå ñî âðåìåíåì ìîãóò ÿâèòüñÿ ïðè÷èíîé îòêàçà.
Ïðèíöèï ðàáîòû ñõåìû ãîëîñîâàíèÿ ðàññìîòðèì íà ïðèìåðå ðåçåðâèðîâàíèÿ äàò÷èêîâ.
 òàêîé ñèñòåìå âìåñòî îäíîãî äàò÷èêà èñïîëüçóþòñÿ òðè (íàïðèìåð, òðè òåðìîïàðû), êîòîðûå ïîäñîåäèíåíû ê îäíîìó ìîäóëþ ââîäà.
 ñõåìó ãîëîñîâàíèÿ ïîñòóïàþò, ñîîòâåòñòâåííî, òðè çíà÷åíèÿ èçìåðÿåìîé âåëè÷èíû (íàïðèìåð, òðè çíà÷åíèÿ òåìïåðàòóðû ),
èç êîòîðûõ íåîáõîäèìî âûáðàòü îäíî.
Çíà÷åíèÿ òåìïåðàòóðû ðàñïîëàãàþòñÿ â ïîðÿäêå âîçðàñòàíèÿ: , à íà âûõîä ñõåìû ãîëîñîâàíèÿ ïîñòóïàåò çíà÷åíèå,
ðàñïîëîæåííîå ìåæäó äâóìÿ êðàéíèìè (íî íå ñðåäíåå àðèôìåòè÷åñêîå!).
Íàïðèìåð, åñëè â ðåçóëüòàòå èçìåðåíèÿ ïîëó÷åíû çíà÷åíèÿ (0,12; 39,5; 39,4)°Ñ, òî èñïîëüçóåòñÿ òîëüêî çíà÷åíèå 39,4, îñòàëüíûå èãíîðèðóþòñÿ.
Ðåçåðâèðîâàíèå ýëåìåíòîâ ñ äèñêðåòíûìè ñèãíàëàìè âûïîëíÿåòñÿ àíàëîãè÷íî ðàññìîòðåííîìó âûøå.
Ïîñêîëüêó çíà÷åíèÿìè äèñêðåòíûõ ñèãíàëîâ ÿâëÿþòñÿ ëîãè÷åñêèå "0" èëè "1", òî â ðåçóëüòàòå ìàæîðèòàðíîãî ãîëîñîâàíèÿ âûáèðàåòñÿ òî çíà÷åíèå,
êîòîðîå ïðèíèìàþò áîëüøèíñòâî ñèãíàëîâ. Íàïðèìåð, ïðè ëîãè÷åñêèõ ñèãíàëàõ À="1", B="1", C="0" ðåçóëüòàòîì ãîëîñîâàíèÿ áóäåò çíà÷åíèå Y="1".
Áëîê ìàæîðèòàðíîãî ãîëîñîâàíèÿ ðåàëèçóåò ëîãè÷åñêóþ ôóíêöèþ Y = AB + BC + CA.
Î÷åâèäíî, ÷òî äëÿ ðàáîòû ìàæîðèòàðíîé ñõåìû ÷èñëî "ãîëîñîâ" äîëæíî áûòü íå÷åòíûì.
Îäíàêî â ñèñòåìàõ áåçîïàñíîñòè âîçìîæíî ïðèìåíåíèå ëþáîãî ÷èñëà "ãîëîñîâ".
Âìåñòî íåäîñòàþùåãî ãîëîñà èñïîëüçóåòñÿ óñëîâèå, ÷òî ñèñòåìà ñ÷èòàåòñÿ ðàáîòîñïîñîáíîé, åñëè îòêàç ÿâëÿåòñÿ áåçîïàñíûì.
Ýòî ïîçâîëÿåò èñïîëüçîâàòü ñèñòåìû, â êîòîðûõ âûáèðàåòñÿ îäèí ãîëîñ èç äâóõ è òàêèå ñèñòåìû ïî ñòàíäàðòó ÌÝÊ 61508 [ÌÝÊ] îáîçíà÷àþòñÿ êàê 1oo2 (1 Out Of 2).
Èñïîëüçóþòñÿ òàêæå ñèñòåìû 2îî2 - (äâà ãîëîñà èç äâóõ), 2îî3 (äâà ãîëîñà èç òðåõ), 2îî4 (äâà ãîëîñà èç ÷åòûðåõ), 3 oo4 (òðè ãîëîñà èç ÷åòûðåõ).
Íåðåçåðâèðîâàííûå ñèñòåìû îáîçíà÷àþòñÿ êàê 1îî1.
Åñëè â ðåçåðâèðîâàííîé ñèñòåìå èìååòñÿ ðàçâèòàÿ ïîäñèñòåìà äèàãíîñòèêè íåèñïðàâíîñòåé, òî ê îáîçíà÷åíèþ äîáàâëÿåòñÿ áóêâà "D", íàïðèìåð, 1oo2D.
Ïðèìåðîì ñèñòåìû ñ ãîëîñîâàíèåì âèäà 1oo2 ìîæåò ñëóæèòü ñèñòåìà îõðàííîé ñèãíàëèçàöèè äâåðè,
â êîòîðîé èñïîëüçóþòñÿ äâà äàò÷èêà À è  ñ öåëüþ âçàèìíîãî ðåçåðâèðîâàíèÿ (ðèñ. 8.1, á).
Ïðè îòêàçå îäíîãî èç äàò÷èêîâ (íàïðèìåð, äàò÷èêà B, êîãäà âìåñòî À=1, Â=1 ïîëó÷àåì À=1, Â=0) ñèñòåìà,
ïîëüçóÿñü ïðàâèëîì áîëüøèíñòâà ãîëîñîâ, íå ìîæåò ïðèíÿòü ðåøåíèå.
Îäíàêî, åñëè ó÷åñòü, ÷òî ëîæíîå ñðàáàòûâàíèå îõðàííîé ñèñòåìû íå ïðèâîäèò ê îïàñíîé ñèòóàöèè,
à íåñðàáàòûâàíèå ñèñòåìû ïðè íàëè÷èè íàðóøèòåëÿ ÿâëÿåòñÿ îïàñíûì îòêàçîì, î÷åâèäíî, ñõåìà ãîëîñîâàíèÿ äîëæíà ñ÷èòàòü,
÷òî äîñòàòî÷íî îäíîãî ãîëîñà èç äâóõ, ÷òîáû ïðèíÿòü ðåøåíèå î ïîäà÷å àâàðèéíîãî ñèãíàëà.
Åñëè ñèãíàëîì ñðàáàòûâàíèÿ ñèãíàëèçàöèè ÿâëÿåòñÿ ëîãè÷åñêîå çíà÷åíèå "1",
à ñèãíàëîì îòñóòñòâèÿ íàðóøèòåëÿ ÿâëÿåòñÿ çíà÷åíèå "0", òî áëîê ãîëîñîâàíèÿ ðåàëèçóåò ëîãè÷åñêóþ ôóíêöèþ Y = A + B.
Åñëè âõîäíûìè äàííûìè äëÿ ãîëîñîâàíèÿ ÿâëÿþòñÿ äâà àíàëîãîâûõ ñèãíàëà,
òî ïîëüçîâàòåëü ïðè ïðîãðàììèðîâàíèè äîëæåí óñòàíîâèòü, êàêîé ñèãíàë èç äâóõ äîëæåí áûòü âûáðàí ñèñòåìîé â ñëó÷àå èõ íåñîâïàäåíèÿ.
Òàêîé ïîäõîä âîçìîæåí òîëüêî â ñèñòåìàõ áåçîïàñíîñòè.
Ïðîòèâîïîëîæíàÿ ñèòóàöèÿ èñïîëüçóåòñÿ ïðè ãîëîñîâàíèè âèäà 2oo2.
Ïðèìåðîì ìîæåò áûòü ñèñòåìà êîíòðîëÿ ãåðìåòè÷íîñòè ëþêà ïðè ïîãðóæåíèè ïîäâîäíîé ëîäêè.
Åñëè ëþê èìååò äâà äàò÷èêà, òî ñèãíàë ãîòîâíîñòè ê ïîãðóæåíèþ ìîæåò ïîÿâèòüñÿ
òîëüêî ïðè íàëè÷èè ïîäòâåðæäåíèÿ ( A="1", B="1") îò îáîèõ äàò÷èêîâ îäíîâðåìåííî (äâóõ èç äâóõ).
Âûõîä èç ñòðîÿ îäíîãî äàò÷èêà íå äîëæåí ïîçâîëèòü ñèñòåìå âûðàáîòàòü ñèãíàë ãîòîâíîñòè ê ïîãðóæåíèþ,
÷òîáû îïàñíàÿ ñèòóàöèÿ íå âîçíèêëà. Òàêîé áëîê ðåàëèçóåò ëîãè÷åñêóþ ôóíêöèþ Y = AB.
Íåñìîòðÿ íà âûñîêóþ ýôôåêòèâíîñòü ñõåì ãîëîñîâàíèÿ ñ ÷åòíûì ÷èñëîì ãîëîñîâ, îíè èìåþò íåäîñòàòîê,
ñîñòîÿùèé â âîçìîæíîñòè ëîæíîãî ñðàáàòûâàíèÿ.
Õîòÿ ýòîò òèï îòêàçîâ è íå ÿâëÿåòñÿ îïàñíûì, â íåêîòîðûõ ñëó÷àÿõ îí ïðèâîäèò ê çíà÷èòåëüíîìó ìàòåðèàëüíîìó óùåðáó.
Äëÿ èñêëþ÷åíèÿ ëîæíîãî ñðàáàòûâàíèÿ ìîæíî èñïîëüçîâàòü áîëåå äîðîãèå ñèñòåìû ñ íå÷åòíûì êîëè÷åñòâîì ãîëîñîâ,
êîòîðûå ñíèæàþò âåðîÿòíîñòü îòêàçîâ îáîèõ òèïîâ.
Âûáîð íàèëó÷øåé ñèñòåìû îñóùåñòâëÿåòñÿ íà îñíîâàíèè ðåçóëüòàòîâ ýêîíîìè÷åñêèõ ðàñ÷åòîâ.
Ïðè îòêàçå îäíîãî èç ýëåìåíòîâ ðåçåðâèðîâàííîé ñèñòåìû áåçîïàñíîñòè 2oo3 åå óðîâåíü áåçîïàñíîñòè ïîíèæàåòñÿ
è îíà ìîæåò íà÷àòü ôóíêöèîíèðîâàòü êàê ñèñòåìà 1îî2.
Åñëè çàìåíà íåèñïðàâíîãî ýëåìåíòà íå ïðîèçâåäåíà è ïðîèçîøåë âòîðîé îòêàç,
òî ñèñòåìà ïåðåõîäèò â ðåæèì áåç ðåçåðâèðîâàíèÿ 1oo1, îäíàêî â ýòîì ðåæèìå ñèñòåìà íå ìîæåò íàõîäèòüñÿ äîëãî ïî òðåáîâàíèÿì áåçîïàñíîñòè.
Î÷åðåäíîñòü ïåðåõîäà îò îäíîé ñõåìû ðåçåðâèðîâàíèÿ ê äðóãîé íàçûâàåòñÿ ñõåìîé äåãðàäàöèè.
Ñèñòåìà áåçîïàñíîñòè 2îî3 ìîæåò èìåòü âòîðîé âàðèàíò ñõåìû äåãðàäàöèè:
2oo3 - 2oo2 - 1oo1 - 0.
Çäåñü "0" îáîçíà÷àåò ñîñòîÿíèå, êîãäà ñèñòåìà ïåðåñòàåò ôóíêöèîíèðîâàòü (îñòàíàâëèâàåòñÿ).
Ïåðåä îñòàíîâêîé ñèñòåìà äîëæíà ïåðåâåñòè âñå ñâîè âûõîäû â áåçîïàñíûå ñîñòîÿíèÿ.
Ïîíÿòèå áåçîïàñíîãî ñîñòîÿíèÿ äëÿ êàæäîé ñèñòåìû îïðåäåëÿåòñÿ ïðè åå ïðîåêòèðîâàíèè.
Íàïðèìåð, äëÿ ñèñòåì àâàðèéíîãî îòêëþ÷åíèÿ áåçîïàñíûìè ÿâëÿþòñÿ îáåñòî÷åííûå ñîñòîÿíèÿ èñïîëíèòåëüíûõ ìåõàíèçìîâ,
à äëÿ ñèñòåì àâòîìàòè÷åñêîãî ïîæàðîòóøåíèÿ èëè àâàðèéíîé âåíòèëÿöèè - íàîáîðîò, ñîñòîÿíèÿ, ïðè êîòîðûõ íà èñïîëíèòåëüíûå óñòðîéñòâà ïîäàíà ýíåðãèÿ.
Ñõåìû ãîëîñîâàíèÿ øèðîêî èñïîëüçóþòñÿ â ñèñòåìàõ ïðîòèâîàâàðèéíîé çàùèòû è ñèãíàëèçàöèè,
ãäå îíè èìåþò áîëüøîå ðàçíîîáðàçèå.
 ñèñòåìàõ æå, íå ñâÿçàííûõ ñ áåçîïàñíîñòüþ, îáû÷íî íåëüçÿ ïðèìåíèòü èíûå ñõåìû ãîëîñîâàíèÿ,
êðîìå 2oo3, êîòîðûå ÿâëÿþòñÿ äîñòàòî÷íî äîðîãèìè.
Îäíàêî èõ óíèêàëüíûì ñâîéñòâîì ÿâëÿåòñÿ íåïðåðûâíîñòü ôóíêöèîíèðîâàíèÿ âî âðåìÿ ïåðåõîäà íà ðåçåðâ
è ýòî ñâîéñòâî ÿâëÿåòñÿ îïðåäåëÿþùèì ïðè ïðèíÿòèè ðåøåíèÿ î âûáîðå ìåòîäà ðåçåðâèðîâàíèÿ.
*)
// @COPYLEFT ALL WRONGS RESERVED :)
// Author: VA
// Contacts: DIY.PLC.314@gmail.com
// Date start LIB_PLC: 2014
// License: GNU GPL-2.0-or-later
// https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
// https://www.youtube.com/watch?v=n1F_MfLRlX0
// https://www.youtube.com/@DIY_PLC
// https://github.com/DIYPLC/LIB_PLC
// https://oshwlab.com/diy.plc.314/PLC_HW1_SW1
// https://3dtoday.ru/3d-models/mechanical-parts/body/korpus-na-din-reiku
// https://t.me/DIY_PLC
// https://drive.google.com/drive/folders/16GDX0i07rwDrl_oPzL-lQAqMiAz3ouJV?usp=sharing
END_FUNCTION_BLOCK