- •Оглавление
- •Введение
- •1.Проверка на достоверность сигналов с усо
- •2.Структура алгоблока. Организация связи между алгоблоками
- •3.Программная реализация защиты по дискретному каналу
- •3.1.1 Таймер
- •3.1.2Триггер
- •3.1.3Программа защиты от «дребезга»
- •3.2.Программа защиты по дискретному каналу
- •3.3.Первая программа защиты по аналоговому каналу
- •3.3.1Конфигурационная таблица программы 1
- •3.4.Вторая программа защиты по аналоговому каналу
- •3.4.1Конфигурационная таблица программы 2
- •3.5.Оценка величины гистерезиса в нуль-органе
- •3.6.Алгоритм расчёта среднего значения в асутп
- •3.7.Защита от выброса или провала аналогового сигнала
- •3.8.Контрольные вопросы
- •4.Алгоритм простого блока мажоритарного выбора два из трёх
- •4.1.Программа простого блока мажоритарного выбора
- •5. Алгоритм мажоритарного выбора три из пяти
- •5.1.Программа
- •5.2.Конфигурационная таблица
- •6.Программа выбора исправного канала из двух каналов
- •6.1.Конфигурационная таблица
- •6.2.Контрольные вопросы
- •7.Управление по циклограмме
- •8.Алгоритм синтеза циклического управления
- •8.1.Циклограмма 1. Типовая циклограмма
- •8.2.Циклограмма 2. Управление в зависимости от параметра.
- •8.3.Циклограмма 3. Программа с повторяющимися ситуациями
- •8.4.Циклограмма 4. Задание числа циклов с лп контроллера
- •8.5.Циклограмма 5. Пуск циклограммы по команде оператора
- •8.6.Контрольные вопросы
- •9.Синтез дискретных систем управления
- •9.1.Классический алгоритм синтеза дискретного автомата
- •9.1.1Автомат с памятью и с защитой по каналам
- •9.2.Автомат с контролем последовательности ситуаций
- •9.3.Описание программы управления электрозадвижкой
- •9.4.Контрольные вопросы
- •10.Организация связи с верхним уровнем16
- •11.Управление задвижкой по циклограмме
- •12.Практические особенности реализации циклограмм
- •13.Перевод программы c языка fbd в dxf-формат
- •14.Порядок получения конфигурационной таблицы
- •15.Спецификация представленных в пособии программ
- •16.Варианты заданий
- •Литература
- •Приложение а
- •1.Элементарные функции алгебры логики
- •2.Свойства элементарных функций
- •3.Принцип двойственности
- •4. Разложение булевой функции по переменным
- •5. Полнота системы
- •5.1.Полином Жегалкина
- •5.2.Теорема Жегалкина
- •1.Минимизация булевых функций
- •1.1.Минимизация нормальных форм
- •1.2.Алгоритм Квайна построения сокращенной днф
- •1.3.Метод Блейка
- •1.4. Построение сокращенной днф с помощью кнф
- •1.5.Построение всех тупиковых днф.
- •Алгоритм минимизации функций в классе днф
- •Алгоритм минимизации функций в классе кнф
- •Алгоритм минимизации функций в классе нормальных форм
- •1.6.Минимизация частично определенных функций
- •1.7. Минимизация с использованием карт Карно
- •1.8.Код Грея
- •Приложение б Краткая биография Жегалкина и.И.
- •Приложение в Языки программирования промышленных контроллеров
- •Приложение г Имитаторы аналоговых и дискретных сигналов
- •Приложение д25 Программы для овен плк-150 и плк-154
- •Реализация дискретных систем управления на контроллерах
- •400131 Волгоград, пр. Ленина, 28, корп. 1.
- •400131, Г. Волгоград, пр. Ленина, 28, корп. 7.
1.8.Код Грея
Код Грея – система кодирования, в которой два соседних значения различаются только в одном разряде. Наиболее часто на практике применяется рефлексный двоичный код Грея, хотя в общем случае существует бесконечное множество кодов Грея для систем счисления с любым основанием. В большинстве случаев, под термином "код Грея" понимают именно рефлексивный бинарный код Грея.
Изначально предназначался для защиты от ложного срабатывания электромеханических переключателей. Сегодня коды Грея широко используются для упрощения выявления и исправления ошибок в системах связи, а также в формировании сигналов обратной связи в системах управления.
Код получил имя исследователя лабораторий Bell Labs Фрэнка Грея. Франк Грэй (Frank Gray) был физиком и исследователем в Bell Labs (бывшая американская корпорация, крупный исследовательский центр в области телекоммуникаций, электронных и компьютерных систем), который ввёл многочисленные инновации в телевидении при помощи кода Грея.
Кодом Грея порядка n называется любая циклическая последовательность всех наборов из нулей и единиц длины n, в которой два соседних набора отличаются ровно в одной компоненте.
Пример получения кода Грея:
Начнём с первых двух чисел, закодируем их нулём и единицей:
Ноль |
0 |
Один |
1 |
Заметим, что они отличаются только одним битом. Проблема в том, что нам нужно больше чем два числа. Зеркально отразим коды чисел и получим:
Ноль |
0 |
Один |
1 |
Один |
1 |
Ноль |
0 |
Кодов стало больше, и соседи отличаются друг от друга не более чем одним битом. Но есть повторы. Чтобы не было повторов, допишем спереди к первой половине кодов 0, а ко второй 1.
Ноль |
00 |
Один |
01 |
Два |
11 |
Три |
10 |
Точно так же мы можем отразить и получим:
Ноль |
00 |
Один |
01 |
Два |
11 |
Три |
10 |
Три |
10 |
Два |
11 |
Один |
01 |
Ноль |
00 |
И тоже добавим в первую половину 0, а во вторую – 1.
Ноль |
000 |
Один |
001 |
Два |
011 |
Три |
010 |
Четыре |
110 |
Пять |
111 |
Шесть |
101 |
Семь |
100 |
И так далее. Таким способом можно получить код Грея любого порядка. [http://www.rsdn.ru/article/alg/gray.xml].
Младший разряд в последовательности чисел в коде Грея принимает значения 0 и 1, затем следующий старший разряд становится единичным и младший разряд принимает свои значения уже в обратном порядке (1, 0). Этим и объясняется название кода - "отражённый". Соответственно, два младших разряда принимают значения 00, 01, 11, 10, а затем, при единичном следующем старшем разряде, те же значения в обратном порядке (10, 11, 01, 00).
Код Грея предпочтительнее обычного двоичного тем, что обладает свойством непрерывности бинарной комбинации: изменение кодируемого числа на единицу соответствует изменению кодовой комбинации только в одном разряде. Он строится на базе двоичного по следующему правилу: старший разряд остается без изменения; каждый последующий разряд инвертируется, если предыдущий разряд исходного двоичного кода равен единице. Этот алгоритм построения может быть формально представлен как результат сложения по модулю два исходной комбинации двоичного кода с такой же комбинацией, но сдвинутой на один разряд вправо. При этом крайний правый разряд сдвинутой комбинации отбрасывается.
Таким образом, Грей-код является так называемым одношаговым кодом, т.к. при переходе от одного числа к другому всегда меняется лишь какой-то один бит. Погрешность при считывании информации с механического кодового диска при переходе от одного числа к другому приведет лишь к тому, что переход от одного положения к другом будет лишь несколько смещен по времени, однако выдача совершенно неверного значения углового положения при переходе от одного положения к другому полностью исключается. Преимуществом Грей-кода является также его способность зеркального отображения информации.
Преобразование кода Грея в двоичный код и обратно
Коды Грея легко получаются из двоичных чисел путём побитовой операции «Исключающее ИЛИ» с тем же числом, сдвинутым вправо на один бит. Следовательно, i-й бит кода Грея Gi выражается через биты двоичного кода Bi следующим образом:
где
– операция «исключающее ИЛИ»; биты
нумеруются справа налево, начиная с
младшего.
Обратный алгоритм – преобразование кода Грея в двоичный код – можно выразить рекуррентной формулой:
Причём преобразование осуществляется побитно, начиная со старших разрядов, и значение Bi+1, используемое в формуле, вычисляется на предыдущем шаге алгоритма. Действительно, если подставить в эту формулу вышеприведённое выражение для i-го бита кода Грея, получим
Однако приведённый алгоритм, связанный с манипуляцией отдельными битами, неудобен для программной реализации, поэтому на практике используют видоизменённый алгоритм:
где N – число битов в коде Грея (для увеличения быстродействия алгоритма в качестве N можно взять номер старшего ненулевого бита кода Грея); знак означает суммирование при помощи операции «исключающее ИЛИ», то есть
Здесь предполагается, что бит, выходящий за рамки разрядной сетки (BN+1), равен нулю.
Ниже приведена функция на языке С, реализующая данный алгоритм. Она осуществляет последовательный сдвиг вправо и суммирование исходного двоичного числа, до тех пор, пока очередной сдвиг не обнулит слагаемое.
unsigned int graydecode(unsigned int gray)
{
unsigned int bin;
for (bin = 0; gray; gray >>= 1) {
bin ^= gray;
}
return bin;
}
Генерация кодов Грея
Рекурсивная функция построение кода Грея на языке C:
//n - требуемая длина кода,
//m - указатель на массив, способный хранить
// все коды Грея, длиной до n
// (должен быть выделен до вызова функции)
//depth - параметр рекурсии
int gray (int n, int* m, int depth)
{
int i, t = (1 << (depth - 1));
if (depth == 0)
m[0] = 0;
else {
//массив хранит десятичные записи двоичных слов
for (i = 0; i < t; i++)
m[t + i] = m[t - i - 1] + (1 << (depth - 1));
}
if (depth != n)
gray(n, m, depth + 1);
return 0;
}
