Просмотр полной версии : ПР205 - события аналоговых входов
Всем привет. Не сочтите меня бездарным, но вот я в поисках истины, а именно:
1. Как или с помощью чего можно получить аварийные события аналогового входа при обрыве датчика, КЗ и тд. в ПР205, если в свойствах входа выбран один из датчиков?
2. Как реализовать в ПР205 вывода на экран большого массива аварийных событий? (Есть пример на сайте производителя, но там на 4 события)
Состояние входа
88048
В менеджере компонентов есть такой макрос
88049
Рогов Алексей
12.02.2026, 07:55
Потребуется два массива - один для времени, другой для номера ошибки
Строб - флаг ошибки от устройств
FUNCTION_BLOCK FB_Array16U1
VAR_INPUT
inValue: UDINT; (* Входное значение (целое) *)
reset: BOOL; (* Сигнал сброса массива *)
strobe: BOOL; (* Стробирующий импульс: запись при фронте TRUE *)
END_VAR
VAR_OUTPUT
out1: UDINT; (* Выход 1 — самое старое значение *)
out2: UDINT;
out3: UDINT;
out4: UDINT;
out5: UDINT;
out6: UDINT;
out7: UDINT;
out8: UDINT;
out9: UDINT;
out10: UDINT;
out11: UDINT;
out12: UDINT;
out13: UDINT;
out14: UDINT;
out15: UDINT;
out16: UDINT; (* Выход 16 — самое новое значение *)
END_VAR
VAR
arr: ARRAY [1..16] OF UDINT; (* Массив на 16 элементов *)
idx: UDINT := 1; (* Текущий индекс записи *)
lastStrobe: BOOL := FALSE; (* Для детектирования фронта строба *)
END_VAR
(* Сброс массива и состояния при входе reset *)
IF reset THEN
FOR idx := 1 TO 16 DO
arr[idx] := 0;
END_FOR
idx := 1;
lastStrobe := FALSE;
ELSIF strobe AND NOT lastStrobe THEN
(* Запись нового значения по фронту строба *)
arr[idx] := inValue;
(* Циклическое обновление индекса: 1..16, затем снова 1 *)
idx := idx + 1;
IF idx > 16 THEN
idx := 1;
END_IF
END_IF
(* Сохранение состояния строба для следующего цикла *)
lastStrobe := strobe;
(* Вывод значений массива на выходы *)
out1 := arr[1];
out2 := arr[2];
out3 := arr[3];
out4 := arr[4];
out5 := arr[5];
out6 := arr[6];
out7 := arr[7];
out8 := arr[8];
out9 := arr[9];
out10 := arr[10];
out11 := arr[11];
out12 := arr[12];
out13 := arr[13];
out14 := arr[14];
out15 := arr[15];
out16 := arr[16];
END_FUNCTION_BLOCK
Состояние входа
88048
В менеджере компонентов есть такой макрос
88049
Ё-ма-ё, смотрю в книгу вижу вижу фигу.... :rolleyes:
Потребуется два массива - один для времени, другой для номера ошибки
Строб - флаг ошибки от устройств
FUNCTION_BLOCK FB_Array16U1
VAR_INPUT
inValue: UDINT; (* Входное значение (целое) *)
reset: BOOL; (* Сигнал сброса массива *)
strobe: BOOL; (* Стробирующий импульс: запись при фронте TRUE *)
END_VAR
VAR_OUTPUT
out1: UDINT; (* Выход 1 — самое старое значение *)
out2: UDINT;
out3: UDINT;
out4: UDINT;
out5: UDINT;
out6: UDINT;
out7: UDINT;
out8: UDINT;
out9: UDINT;
out10: UDINT;
out11: UDINT;
out12: UDINT;
out13: UDINT;
out14: UDINT;
out15: UDINT;
out16: UDINT; (* Выход 16 — самое новое значение *)
END_VAR
VAR
arr: ARRAY [1..16] OF UDINT; (* Массив на 16 элементов *)
idx: UDINT := 1; (* Текущий индекс записи *)
lastStrobe: BOOL := FALSE; (* Для детектирования фронта строба *)
END_VAR
(* Сброс массива и состояния при входе reset *)
IF reset THEN
FOR idx := 1 TO 16 DO
arr[idx] := 0;
END_FOR
idx := 1;
lastStrobe := FALSE;
ELSIF strobe AND NOT lastStrobe THEN
(* Запись нового значения по фронту строба *)
arr[idx] := inValue;
(* Циклическое обновление индекса: 1..16, затем снова 1 *)
idx := idx + 1;
IF idx > 16 THEN
idx := 1;
END_IF
END_IF
(* Сохранение состояния строба для следующего цикла *)
lastStrobe := strobe;
(* Вывод значений массива на выходы *)
out1 := arr[1];
out2 := arr[2];
out3 := arr[3];
out4 := arr[4];
out5 := arr[5];
out6 := arr[6];
out7 := arr[7];
out8 := arr[8];
out9 := arr[9];
out10 := arr[10];
out11 := arr[11];
out12 := arr[12];
out13 := arr[13];
out14 := arr[14];
out15 := arr[15];
out16 := arr[16];
END_FUNCTION_BLOCK
Я так понимаю, что это функциональный блок на ST. Вот только есть малая проблемка, я не особо в структурном тексте разбираюсь... (не повкусу пришелся)
Я так понимаю, что это функциональный блок на ST. Вот только есть малая проблемка, я не особо в структурном тексте разбираюсь... (не повкусу пришелся)
Смотрю вы не гурман. Текстовый язык - это самая вкусная вещь. ;) В свое время шла битва за его появление в OL.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot