Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Обработка входных сигналов

Модератор: специалисты по PLC


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Обработка входных сигналов

Сообщение leon78 » 03 янв 2011, 10:31

Чаще всего входные сигналы лучше предварительно обрабатывать, а не подавать непосредственно в алгоритмы сигналы из регистров модулей ввода-вывода.
Хранить обработанные сигналы лучше в массивах.
Например:
Дискретные сигналы
Массив DI[1....максимум] типа BYTE.
Для каждого дискретного параметра выделены 8 бит, они несут следующие значения (номера битов для этого могут быть любые):
1) Значение сигнала (0/1);
2) Достоверен/недостоверен;
3) Немаскирован/маскирован (маскирован - сигнал исключается из обработки)
4) Неимитирован/имитирован.
5..8) - резерв
Аналоговые сигналы
Массив значений AI[1....максимум] типа UINT.
Массив признаков AI_PR[1....максимум] типа BYTE.
Для каждого признака аналогового параметра выделены 8 бит, они несут следующие значения (номера битов для этого могут быть любые):
1) Достоверен/недостоверен;
2) Немаскирован/маскирован (маскирован - сигнал исключается из обработки)
3) Неимитирован/имитирован.
4..8) - номер сработавшей уставки.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Копирование сигнала из регистров входных модулей

Сообщение leon78 » 06 янв 2011, 16:50

Приведенное ниже описание подходит не для всех систем.
1. Создаем массив CARD_MODULES [1..количество корзин ввода-вывода в системе][1...количество модулей ввода-вывода в корзине]
2. В начальные значения элементов массива CARD_MODULES задаем номера регистров входных модулей.
3. Для дискретных (аналоговых) параметров делаем массив привязки к модулям:
DI_ADDRESS(AI_ADDRESS)[1....максимум] типа структура из полей Drop, Module, Channel
4. В программе обрабатываем сигналы в цикле по переменной i от 1 до максимума:

Код: Выделить всё

Адрес сигнала := CARD_MODULES [AI_ADDRESS[i].Drop][AI_ADDRESS[i].Module]+AI_ADDRESS[i].Channel-1;
AI[i] := ФУНКЦИЯ_ЗНАЧЕНИЕ_ПО_АДРЕСУ_РЕГИСТРА(Адрес сигнала);
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Пример программы для AI

Сообщение leon78 » 06 янв 2011, 21:56

Пример для Modicon TSX Quantum на Unity. Т.к. писал прямо в форуме, могут быть незначительные синтаксические ошибки

Код: Выделить всё

FOR i:= 1 TO Maximum_AI DO
 IF (AI_PR[i] AND btMaskImitirovan) = 0 THEN
  X := CARD_MODULES [AI_ADDRESS[i].Drop][AI_ADDRESS[i].Module]+AI_ADDRESS[i].Channel-1;
  AI[i] := %IW1[X-1];
 END_IF;
END_FOR;
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Пример программы для DI

Сообщение leon78 » 06 янв 2011, 22:05

Пример для Modicon TSX Quantum на Unity. Т.к. писал прямо в форуме, могут быть незначительные синтаксические ошибки

Код: Выделить всё

FOR i:= 1 TO Maximum_DI DO
 IF (DI[i] AND btMaskImitirovan) = 0 THEN
  X := CARD_MODULES [DI_ADDRESS[i].Drop][DI_ADDRESS[i].Module];
  IF DI_ADDRESS[i].Channel > 16 THEN
   X := X + 1;
  END_IF;
  wTemp := %IW1[X-1];
  wMask := RHL(16#0001,16-DI_ADDRESS[i].Channel);
  IF (wTemp AND wMask) <> 0 THEN
   DI[i] := DI[i] OR btMaskZnachenie;
  ELSE
   DI[i] := DI[i] AND NOT btMaskZnachenie;
  END_IF;
 END_IF;
END_FOR;
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Общие замечания

Сообщение leon78 » 06 янв 2011, 22:13

Приведенные примеры конечно упрощенные.
Тут не учтены:
1. Контроль исправности модуля, который должен влиять на достоверность.
2. Контроль выхода аналогового параметра за диапазон измерительного канала.
3. Необходимость в некоторых случаях делать дополнительную обработку аналогового сигнала - сглаживание и т.п.
4. И т.д. в зависимости от требований в каждом конкретном случае.
P.S. Заметили в обработке дискретных сигналов ошибку? Попозже напишу о ней.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Вернуться в «F.A.Q. по структуре программ»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей