AVMOD IO44D, IO44DU
Назначение
Модули разработаны для дискретного управления входами с различной нагрузкой и типами запросов через интерфейс RS485 или USB. Маркировка устройства IO44D и IO44DU означает, что данное цифровое устройство ввода/вывода имеет по 4 входа и выхода, а при наличии в названии типа устройства буквы U - имеет USB интерфейс с соответствующей функциональностью.
Функциональные возможности
- 4 группы контактов (реле) и 4 дискретных входа;
- Максимальные коммутируемые токи и напряжения 5А, 240В;
- Гальванически развязанные интерфейсы RS485 и USB 2.0;
- Возможность использования в качестве преобразователя интерфейсов USB-RS485;
- Возможность подключения нескольких устройств к одной шине;
- Управление по стандартному промышленному протоколу ModBus;
- Средства асинхронной регистрации событий входов;
- Возможность переключения реле на заданный временной интервал одной командой;
- Доступ через виртуальный COM-порт при подключении к ПК по USB;
- Гальванически развязанные входы с внутренними подтягивающими резисторами либо независимые входы по напряжению;
- Надежный и удобный корпус с возможностью установки на DIN-рейку;
- Настройка и тестирование модуля с помощью ПО поставляемого в комплекте.
Технические характеристики
Параметры контактных пар
Количество контактных пар | 4 |
Максимальное коммутируемое напряжение | 240В |
Максимальный коммутируемый ток | 5А |
Гальваническая развязка от остальных узлов схемы | >1000В |
Механическая надежность контактов | 10 000 000 срабатываний |
Электрическая прочность контактов | 10 000 срабатываний |
Варианты исполнения контактных пар | н. замк./н. раз. |
Параметры дискретных входов
Количество входов | 4 |
Варианты исполнения входов | |
Коммутация на общую землю: | |
Внутренние подтягивающие резисторы | 2.2кОм |
Напряжение внутреннего источника | +4В |
Гальванически независимые входы управляемые напряжением | |
Напряжение | +5/+12/+24В |
Защита от перенапряжений | <2Uном. |
Гальваническая развязка от остальных узлов схемы | >1000В |
Параметры интерфейса RS485
Поддерживаемые скорости, Бод | 4800, 9600, 14400, 57600, 19200, 38400, 115200 |
Режимы проверки четности | EVEN, ODD, NO |
Гальваническая развязка от остальных узлов схемы | 1000В |
Защита от электростатических разрядов | 20кВ |
Параметры интерфейса USB
Спецификация | 2.0 |
Защита от электростатических разрядов | 20кВ |
Гальваническая развязка от остальных узлов схемы | >1000В |
Параметры питания
Напряжение питания | 10…30В |
Максимальный потребляемый ток | 150мА |
Защита от переполюсовки питания | есть |
Подключение внешних цепей
Схема подключения внешних разъемов модуля IO44D/ IO44DU имеет следующий вид (см. рис. AVMOD IO44D, IO44DU.Схема подключения внешних разъемов модуля IO44D/ IO44DU):
Разъем | Описание | Контакты | ||||
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
X1 | Реле 1,2 | Реле 1 | Реле 1 | Реле 2 | Реле 2 | - |
X2 | Реле 3,4 | Реле 3 | Реле 3 | Реле 4 | Реле 4 | - |
X3 | Входы 1,2 | Вход 2 | Вход 2 общ. | Вход 1 общ. | Вход 1 | - |
X4 | Входы 3,4 | Вход 4 | Вход 4 общ. | Вход 3 общ. | Вход 3 | - |
X5 | RS485, питание | RS485 A | RS485 B | RS485 C (общ.) | +Uпит | -Uпит |
X6* | USB гнездо тип B | - |
SA1 – переключатель терминирующего резистора и защитного смещения
*Только для модуля IO44DU
Интерфейс RS485
IO44DU
Внутренняя логическая организация модуля IO44DU имеет следующий вид (см. рис. AVMOD IO44D, IO44DU.Внутренняя логическая организация модуля IO44DU):
Модуль имеет внутреннюю шину RS485, к которой подключен контроллер управления реле и дискретных входов. Доступ к шине RS485 можно получить двумя способами: непосредственно подключившись к её линиям, выведенным на внешний разъем устройства, либо через встроенный преобразователь интерфейсов RS485-USB (см. раздел «Интерфейс USB»).
При подключении устройства через переходник RS485-RS232 номер порта определяется физическим номером COM порта, к которому подключен переходник.
IO44D
Внутренняя логическая организация модуля IO44D имеет следующий вид (см. рис. AVMOD IO44D, IO44DU.Внутренняя логическая организация модуля IO44D):
Управления модулем может осуществляться только с помощью дополнительного преобразователя интерфейсов или модуля IO44DU, подключенного к общей шине RS485.
Внимание!
Если к шине RS485 подключено несколько модулей IO44D(U), то на двух из них, топологически расположенных на концах шины, необходимо включить переключатель SA1 в положение “1” для подключения терминирующего резистора и резисторов защитного смещения.
К шине RS485 может быть подключено несколько модулей IO44D, при условии наличия уникального адреса у каждого из них.
Контакты реле
Модули AVMOD IO44DU и IO44D содержат четыре гальванически независимые друг от друга группы контактов реле, выведенные на внешние клемники. Типовая схема управления внешними нагрузками имеет вид (см. рис. AVMOD IO44D, IO44DU.Типовая схема управления внешними нагрузками):
Дискретные входы
Модули IO44DU/IO44D могут иметь два различных типа дискретных входов. Первый тип - гальванически развязанные входы управляемые напряжением. Для подачи логической единицы на вход, необходимо подключить его к внешнему источнику напряжения. Номиналы внутренних ограничивающих резисторов зависят от входного напряжения, на которое был рассчитан данный модуль (+5, +12 или +24В). В данном исполнении все входы гальванически не связанны друг от другом и с остальными узлами схемы (см. рис. AVMOD IO44D, IO44DU.Гальванически развязанные входы управляемые напряжением).
Второй вариант входов – входы с коммутацией на общую землю. Для подачи логической единицы необходимо замкнуть клеммы соответствующего входа. В данном варианте исполнения, входы гальванически отвязаны от остальных узлов схемы, но имеют общую землю. Данный вариант исполнения входов используется при соединении внешних ключей по схеме «сухой контакт» (см. рис. AVMOD IO44D, IO44DU.Входы с коммутацией на общую землю).
Интерфейс USB (IO44DU)
Блок USB фактически является встроенным преобразователем интерфейсов RS485-USB, дающим возможность получить доступ к внутренней шине RS485 устройства. При подключении к порту USB, устройство определяется системой как виртуальный COM порт. Номер, присвоенный порту можно определить следующим образом:
- открыть Пуск -> Панель управления -> Система -> Оборудование -> Диспетчер устройств -> Порты COM и LPT;
- в списке портов найти порт с названием Silicon Labs CP2103 USB to UART Bridge. Номер этого порта и будет искомым.
Питание
Модуль может работать в диапазоне питающих напряжений от +10 до +30В. Рекомендуемый рабочий диапазон 12 - 24В. Максимальный ток, потребляемый модулем, составляет 150мА при четырех включенных реле и напряжении питания 10В. Предусмотрена защита от переполюсовки питания.
Утилита конфигурации AVMOD
Утилита предназначена для конфигурации и проверки работоспособности различных устройств серии AVMOD. С её помощью можно осуществлять поиск устройств, подключенных к последовательным портам ПК (в том числе виртуальным).
Выбор порта
Для начала работы с утилитой необходимо выбрать последовательный порт, к которому подключено устройство (см. раделы «Интерфейс USB» и «Интерфейс RS485»). Порт выбирается из выпадающего списка «Порт», в котором перечислены доступные последовательные порты.
Поиск по адресам
Данный тип поиска следует использовать в случае, если к шине подключен один или несколько модулей, имеющих одинаковую и известную скорость обмена и тип проверки четности, но различные адреса. Для поиска следует установить переключатели «по скоростям» и «по адресам» в выключенное и включенное состояния соответственно. Также необходимо задать начальный (текущий) и конечный адреса, скорость и четность, на которых будет осуществляться поиск. При поиске по адресам скорость и четность остаются неизменными. Поиск может осуществляться до первого найденного устройства, или по всем адресам диапазона.
Поиск по скоростям
Данный тип поиска следует использовать в случае, если адрес устройства известен, но неизвестны его скорость обмена и тип проверки четности. Для поиска следует установить переключатели «по скоростям» и «по адресам» во включенное и выключенное состояния соответственно. Также необходимо задать текущий адрес, на котором будет осуществляться поиск. При поиске по скоростям, текущий адрес остается неизменными. Поиск может осуществляться до первого найденного устройства, или по всем возможным комбинациям скоростей и четностей.
Внимание!
В случае подключения к одной шине устройств, имеющих одинаковые адреса, скорости и четности, или одинаковые скорости и адреса, но различные четности, может возникнуть конфликт, приводящий к неверному определению устройств.
Поиск по скоростям и адресам
Следует использовать в случае, если адреса, скорости и четности устройств, подключенных к шине, заранее неизвестны. Данный тип поиска является наиболее медленным, поскольку предполагает последовательную проверку всех возможных комбинаций скоростей и четностей для всех адресов. Для поиска следует установить переключатели «по скоростям» и «по адресам» во включенное состояние. Также необходимо задать начальный (текущий) и конечный адреса диапазона, в котором будет осуществляться поиск. Поиск может осуществляться до первого найденного устройства или по всем адресам диапазона для каждой возможной комбинации скорости и типа проверки четности.
Конфигурирование устройств
Конфигурирование найденных устройств производится непосредственно в окне списка устройств. Для изменения скорости обмена устройства или типа проверки четности необходимо кликнуть на соответствующей ячейке и из выпадающего списка выбрать требуемые значения. Для изменения адреса устройства необходимо в ячейку адреса ввести требуемое значение.
Режим управления модулями IO44D и IO44DU
Для перехода к режиму управления следует на вкладке «Поиск» выбрать устройство из списка устройств, при этом появится вкладка «Управление…». На ней будут размещены элементы управления, соответствующие выбранному типу устройства. Для данных модулей доступны следующие элементы управления:
- Переключатели состояния реле.
- Переключатели реле на заданный временной интервал.
- Флажки состояний входов и кнопка их обновления(« <- »);
- Флажки регистрации переходов из 1 в 0 и кнопки их обновления и сброса (« <- » и «0» );
- Флажки регистрации переходов из 0 в 1 и кнопки их обновления и сброса (« <- » и «0» );
- Флажки регистрации любых переходов и кнопки их обновления и сброса (« <- » и «0» ).
Режим отображения терминала
Терминал позволяет контролировать процесс обмена пакетами между программным обеспечением и модулями. Для включения режима отображения терминала следует в пункте меню Вид выбрать Показать терминал. Для скрытия терминала следует выбрать Скрыть терминал.
Программная модель IO44D и IO44DU
Описание протокола связи
Обмен данными с устройством происходит посредством пакетов. Каждый пакет состоит из одного байта адреса, байта функционального кода, последовательности байтов данных и двух байтов контрольной суммы. Функциональный код и байты данных формируют элементарный пакет протокола (PDU).
Адрес на шине | Функциональный код | Данные | CRC16 |
Адрес устройства определяет, какому устройству на шине предназначен данный пакет или от какого устройства он получен (в случае ответной посылки). Адрес может находится в диапазоне 1…255 (рекомендованные в спецификации протокола ModBus адреса – 1...247). Адрес 0 – широковещательный: при обращении по нему все устройства подключенные к шине выполняют соответствующую инструкцию, не отправляя при этом ответной посылки. Посылки, адрес которых не соответствует адресу устройства или не равен нулю, данным устройством игнорируются. Функциональный код определяет предназначение данных, которые за ним следуют. Контрольная сумма вычисляется на основе стандартного полинома ModBus При несовпадении контрольной суммы устройство игнорирует посылку.
Доступ к ресурсам модуля AVMOD IO44D(U) в соответствии с протоколом ModBus осуществляется битовым или регистровым способом, то есть обращение к различным ресурсам, таким как реле или входы, в большинстве случаев может происходить как посредством чтения-записи двоичных (битовых) переменных, так и через разряды соответствующих регистров.
Функциональные коды
Устройство AVMOD IO44DU поддерживает следующие функциональные коды:
Функциональный код | Описание |
---|---|
0х01 | чтение битовых переменных |
0х02 | чтение дискретных входов |
0х03 | чтение регистров |
0х05 | запись одной битовой переменной |
0х06 | запись одного регистра |
0х0F | запись битовых переменных |
0х10 | запись регистров |
0х01 (1) – Позволяет считать значения нескольких битовых переменных. В запросе указывается адрес первой переменной, с которой начинается чтение и количество переменных, которые необходимо считать. В ответной посылке значения переменных представляются побитно, т.е. первой переменной соответствует первый (младший) бит младшего байта, второй – второй бит и т.д. Количество байт данных n в ответной посылке равно количеству переменных деленному на 8 и округленному до ближайшего большего целого числа.
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х01 |
Стартовый адрес | 2 | 0x0000 - 0x000F |
Количество переменных | 2 | 0х0001 - 0х000F |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х01 |
Количество байт | 1 | 0x01 - 0x02 |
Значения переменных | n | - |
Пример: считать состояния четырех дискретных переменных, начиная с адреса 0х0000 (переменные с адресами 0 и 2 - лог. 1, 1 и 3 – лог. 0)
Запрос: 01 01 00 00 00 04 3D CD
Ответ: 01 01 01 05 91 8B
0х02 (2) – Позволяет считать значения нескольких дискретных входов. В запросе указывается адрес входа, с которого начинается чтение, и количество входов, которые необходимо считать. В ответной посылке значения входов представляются побитно, т.е. первому входу соответствует первый (младший) бит младшего байта, второму – второй бит и т.д. Количество байт данных n в ответной посылке равно количеству входов деленному на 8 и округленному до ближайшего большего целого числа.
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х02 |
Стартовый адрес | 2 | 0x0000 - 0x000F |
Количество переменных | 2 | 0х0001 - 0х0010 |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х01 |
Количество байт | 1 | 0x01 - 0x02 |
Значения переменных | n | - |
Пример: считать состояния четырех дискретных входов начиная с адреса 0х0004 (вход 4 – лог.1)
Запрос: 01 02 00 04 00 04 38 08
Ответ: 01 02 01 08 A0 4E
0х03 (3) – Позволяет считать значения нескольких регистров. В запросе указывается адрес первого регистра, с которого начинается чтение, и количество регистров, которые необходимо считать. В ответной посылке каждому регистру соответствует 2 байта данных.
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х03 |
Стартовый адрес | 2 | 0x0000 - 0x000C |
Количество переменных | 2 | 0х0001 - 0х000D |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х03 |
Количество байт | 2 | 0x0001 - 0x000D |
Значения переменных | n | - |
Пример: Считать содержимое двух регистров начиная с адреса 0х0000 (содержимое 0х0001 и 0х0222)
Запрос: 01 03 00 00 00 02 C4 0B
Ответ: 01 03 04 02 22 00 01 9А 41
0х05 (5) – Позволяет изменить состояние одной битовой переменной по заданному адресу. Переменная устанавливается в лог. 1, если переданное значение равно 0хFF00, или в лог. 0, если 0х0000. Все остальные значения приводят к генерации кода ошибки.
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х05 |
Стартовый адрес | 2 | 0x0000 - 0x000F |
Количество переменных | 2 | 0х0000 или 0хFF00 |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х05 |
Количество байт | 2 | 0x0000 - 0x000F |
Значения переменных | 2 | 0х0000 или 0хFF00 |
Пример: Записать в переменную с адресом 0х0000 лог. 1.
Запрос: 01 05 00 00 FF 00 8C 3A
Ответ: 01 05 00 00 FF 00 8C 3A
0х06 (6) – Позволяет изменить значение одного регистра по заданному адресу.
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х06 |
Стартовый адрес | 2 | 0x0002 - 0x000C |
Количество переменных | 2 | 0х0000 - 0хFFFF |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х06 |
Количество байт | 2 | 0x0002 - 0x000 |
Значения переменных | 2 | 0х0000 - 0хFFFF |
Пример: Записать в регистр с адресом 0х0009 значение 0х0010
Запрос: 01 06 00 09 00 10 58 04
Ответ: 01 06 00 09 00 10 58 04
0x0F (15) - Позволяет изменить состояние нескольких битовых переменных. В посылке указывается адрес первой переменной и количество переменных, которые необходимо записать. Значения переменных задаются соответствующими разрядами байтов данных, т.е. первой переменной соответствует первый (младший) бит младшего байта, второй – второй бит и т.д. Количество байтов данных n должно быть равно количеству переменных деленному на 8 и округленному до ближайшего большего целого числа.
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х0F |
Стартовый адрес | 2 | 0x0000 - 0x000F |
Количество переменных | 2 | 0х0001 - 0х0010 |
Количество байт | 1 | n |
Значение | n | - |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х0F |
Стартовый адрес | 2 | 0x0000 - 0x000F |
Количество переменных | 2 | 0х0001 - 0х0010 |
Пример: записать четыре битовых переменных начиная с адреса 0х0000 (0 и 2 – лог. 1)
Запрос: 01 0F 00 00 00 04 01 05 FE 95
Ответ: 01 0F 00 00 00 04 54 08
0x10 (16) - Позволяет изменить значения нескольких регистров. В посылке указывается адрес первого регистра и количество регистров, которые необходимо записать. Количество байт данных n должно быть равно количеству регистров умноженному на 2
Запрос:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х10 |
Стартовый адрес | 2 | 0x0002 - 0x000C |
Количество переменных | 2 | 0х0001 - 0х000A |
Количество байт | 1 | n |
Значение | n | - |
Ответ:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | 0х10 |
Стартовый адрес | 2 | 0x0002 - 0x000C |
Количество переменных | 2 | 0х0001 - 0х000A |
Пример: Записать в четыре регистра, начиная с адреса 0х0009 значение 0х0010
Запрос: 01 10 00 09 00 04 08 00 10 00 10 00 10 00 10 7A 6D
Ответ: 01 10 00 09 00 04 11 C8
Коды ошибок
В случае возникновения ошибки при попытке получить доступ к ресурсам устройства, ответный пакет будет содержать функциональный код ошибки и код исключения. Код ошибки формируется путем сложения функционального кода запроса с константой 0х80.
Ошибка:
Описание | Байт | Диапазон значений |
---|---|---|
Функциональный код | 1 | Функциональный код запроса + 0х80 |
Исключение | 1 | 0х01 или 0х02 или 0х03 или 0х04 |
- Коды исключения указывают на тип ошибки:
- 0х01 – неверный функциональный код;
- 0х02 – неверный адрес данных;
- 0х03 – неверное значение данных;
- 0х04 – ошибка при попытке выполнить функцию.
Описание регистров
Доступ к регистрам осуществляется при обращении с функциональными кодами 0х03, 0х06 и 0х10.
Адрес регистра | Описание |
---|---|
0x00 | Старшие два байта серийного номера |
0x01 | Младшие два байта серийного номера |
0x02 | Адрес устройства |
0x03 | Скорость/четность |
0x04 | Реле (младшая тетрада) |
0x05 | Входы (младшая тетрада) |
0x06 | Переходы из высокого в низкий (младшая тетрада) |
0x07 | Переходы из низкого в высокий (младшая тетрада) |
0x08 | Любые переходы (младшая тетрада) |
0x09 | Переключение реле 1 на заданное количество десятых секунды |
0x0A | Переключение реле 2 на заданное количество десятых секунды |
0x0B | Переключение реле 3 на заданное количество десятых секунды |
0x0C | Переключение реле 4 на заданное количество десятых секунды |
0x0D | Cвязь между входами и выходами |
0x00, 0x01 (только чтение) – регистры, содержащие тип устройства и серийный номер.
0x02 – регистр адреса устройства на шине ModBus.
0x03 – регистр установки скорости обмена и проверки четности на линии RS485.
Младший байт регистра определяет скорость обмена:
Младший байт регистра 0x03 |
Скорость, бод |
---|---|
0 | 4800 |
1 | 9600 |
2 | 14400 |
3 | 19200* |
4 | 38400 |
5 | 57600 |
6 | 115200 |
Старший байт определяет тип или наличие бита четности в посылке:
Старший байт регистра 0x03 |
Четность |
---|---|
0 | EVEN* |
1 | ODD |
2 | NO |
*Заводские значения скорости и четности (0x0003).
0x04 – регистр управления реле. Биты младшей тетрады данного регистра определяют состояние реле: в случае, если контакты нормально разомкнуты, при записи единицы в соответствующий бит контакты замыкаются, в противном случае – размыкаются.
0x05 – регистр дискретных входов. Биты младшей тетрады данного регистра соответствуют дискретным входам: в случае наличия подтягивающих резисторов при замыкании входа на землю в соответствующем разряде регистра будет установлена единица. Если же входы не имеют подтягивающих резисторов, единица будет установлена при подаче на вход напряжения, превышающего пороговое.
0х06 – регистр-защелка, соответствующие биты которого (младшая тетрада) устанавливаются в 1, если на одном или нескольких входах произошел переход из высокого уровня в низкий. Биты можно сбросить в изначальное состояние только программной записью 0.
0х07 – регистр-защелка, соответствующие биты которого (младшая тетрада) устанавливаются в 1, если на одном или нескольких входах произошел переход из низкого уровня в высокий. Биты можно сбросить в изначальное состояние только программной записью 0.
0х08 – регистр-защелка, соответствующие биты которого (младшая тетрада) устанавливаются в 1, если на одном или нескольких входах произошло любое изменение состояния. Биты можно сбросить в изначальное состояние только программной записью 0.
0х09, 0х0A, 0x0B, 0x0C – 2-х байтные регистры, отвечающие за переключение соответствующих реле (0х09 соответствует реле 1 и т.д.) на заданный временной интервал. При записи в регистр числа N, отличного от 0 происходит переключение реле в состояние, противоположное текущему на временной интервал, определяемый записанным числом. Число имеет размерность десятых секунды, т.е. временную задержку T в секундах можно определить по формуле T=N*10. После истечения заданного временного интервала, реле переключается в исходное состояние.
0x0D – регистр связи дискретных входов и реле. При установке битов младшей тетрады данного регистра в 1 устанавливается связь между соответствующими входами и выходами.
Битовые переменные и входы
Доступ к битовым переменным осуществляется при обращении по функциональным кодам 0x01, 0x05, 0x0F; к дискретным входам – 0x02.
Адрес | Описание | |
---|---|---|
Битовые переменные | Входы | |
0x00 | Реле 1 | Вход 1 |
0x01 | Реле 2 | Вход 2 |
0x02 | Реле 3 | Вход 3 |
0x03 | Реле 4 | Вход 4 |
0x04 | Переход В-Н вход 1 | Переход В-Н вход 1 |
0x05 | Переход В-Н вход 2 | Переход В-Н вход 2 |
0x06 | Переход В-Н вход 3 | Переход В-Н вход 3 |
0x07 | Переход В-Н вход 4 | Переход В-Н вход 4 |
0x08 | Переход Н-В вход 1 | Переход Н-В вход 1 |
0x09 | Переход Н-В вход 2 | Переход Н-В вход 2 |
0x0A | Переход Н-В вход 3 | Переход Н-В вход 3 |
0x0B | Переход Н-В вход 4 | Переход Н-В вход 4 |
0x0C | Любой переход вход 1 | Любой переход вход 1 |
0x0D | Любой переход вход 2 | Любой переход вход 2 |
0x0E | Любой переход вход 3 | Любой переход вход 3 |
0x0F | Любой переход вход 4 | Любой переход вход 4 |
0x10 | Связь входа 1 с реле 1 | Связь входа 1 с реле 1 |
0x11 | Связь входа 2 с реле 2 | Связь входа 2 с реле 2 |
0x12 | Связь входа 3 с реле 3 | Связь входа 3 с реле 3 |
0x13 | Связь входа 4 с реле 4 | Связь входа 4 с реле 4 |
0x00, 0х01, 0x02, 0x03 – дискретные переменные реле или входов. При обращении с функциональными кодами 0x01, 0x05, 0x0F соответствуют битам первой тетрады регистра 0х04 (реле). При обращении с кодом 0х02 позволяют считывать состояния соответствующих входов.
0x04, 0х05, 0x06, 0x07 – соответствуют первым четырем битам регистра-защелки переходов из высокого уровня в низкий (0х06). Доступны по функциональным кодам 0x01, 0x02, 0x05, 0x0F.
0x08, 0х09, 0x0A, 0x0B – соответствуют первым четырем битам регистра-защелки переходов из низкого уровня в высокий (0х07). Доступны по функциональным кодам 0x01, 0x02, 0x05, 0x0F.
0x0C, 0х0D, 0x0E, 0x0F – соответствуют первым четырем битам регистра-защелки переходов из высокого уровня в низкий (0х08). Доступны по функциональным кодам 0x01, 0x02, 0x05, 0x0F.
0x10, 0х11, 0x12, 0x13 – соответствуют первым четырем битам регистра связи входов с реле (0х0D). Доступны по функциональным кодам 0x01, 0x02, 0x05, 0x0F.
Пример подпрограммы расчета контрольной суммы на языке C
unsigned char auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40
} ;
unsigned char auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
0x40
};
unsigned short CRC16 ( unsigned char *puchMsg, unsigned short usDataLen)
{
unsigned char uchCRCHi = 0xFF ;
unsigned char uchCRCLo = 0xFF ;
unsigned uIndex ;
while (usDataLen--) {
uIndex = uchCRCLo ^ *puchMsg++ ;
uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex] ;
uchCRCHi = auchCRCLo[uIndex] ;
}
return (uchCRCHi << 8 | uchCRCLo) ;
}
Пример подпрограммы расчета контрольной суммы на языке Pascal
const
CRChi : array[0..255] of byte =
(
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
$00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 );
CRClo : array[0..255] of byte =
(
$00,$C0,$C1,$01,$C3,$03,$02,$C2,$C6,$06,$07,$C7,$05,$C5,$C4,$04,
$CC,$0C,$0D,$CD,$0F,$CF,$CE,$0E,$0A,$CA,$CB,$0B,$C9,$09,$08,$C8,
$D8,$18,$19,$D9,$1B,$DB,$DA,$1A,$1E,$DE,$DF,$1F,$DD,$1D,$1C,$DC,
$14,$D4,$D5,$15,$D7,$17,$16,$D6,$D2,$12,$13,$D3,$11,$D1,$D0,$10,
$F0,$30,$31,$F1,$33,$F3,$F2,$32,$36,$F6,$F7,$37,$F5,$35,$34,$F4,
$3C,$FC,$FD,$3D,$FF,$3F,$3E,$FE,$FA,$3A,$3B,$FB,$39,$F9,$F8,$38,
$28,$E8,$E9,$29,$EB,$2B,$2A,$EA,$EE,$2E,$2F,$EF,$2D,$ED,$EC,$2C,
$E4,$24,$25,$E5,$27,$E7,$E6,$26,$22,$E2,$E3,$23,$E1,$21,$20,$E0,
$A0,$60,$61,$A1,$63,$A3,$A2,$62,$66,$A6,$A7,$67,$A5,$65,$64,$A4,
$6C,$AC,$AD,$6D,$AF,$6F,$6E,$AE,$AA,$6A,$6B,$AB,$69,$A9,$A8,$68,
$78,$B8,$B9,$79,$BB,$7B,$7A,$BA,$BE,$7E,$7F,$BF,$7D,$BD,$BC,$7C,
$B4,$74,$75,$B5,$77,$B7,$B6,$76,$72,$B2,$B3,$73,$B1,$71,$70,$B0,
$50,$90,$91,$51,$93,$53,$52,$92,$96,$56,$57,$97,$55,$95,$94,$54,
$9C,$5C,$5D,$9D,$5F,$9F,$9E,$5E,$5A,$9A,$9B,$5B,$99,$59,$58,$98,
$88,$48,$49,$89,$4B,$8B,$8A,$4A,$4E,$8E,$8F,$4F,$8D,$4D,$4C,$8C,
$44,$84,$85,$45,$87,$47,$46,$86,$82,$42,$43,$83,$41,$81,$80,$40 );
procedure CRC16(Data: array of byte; len : word; var Hi : byte; var Lo : byte);
var Index : word;
i : word;
begin
Hi:=$FF;
Lo:=$FF;
i:=0;
While (i<Len) do
begin
Index:=Hi xor Data[i];
Hi:=Lo xor CRCHi[Index];
Lo:=CRCLo[Index];
i:=i+1;
end;
end;