СТА 2009-2

ОБ ЗОР / П РОМЫШЛ Е ННЫЕ С Е Т И 56 поскольку коды некоторых функций привязаны к конкретным диапазонам регистров. Первые по времени созда ния ПЛК имели дело, главным обра зом, с дискретными входными и диск ретными выходными сигналами. При этом каждый дискретный вход и диск ретный выход представлен в таблице распределения регистров 1 битом. Для ПЛК компании Modicon дискретные выходы начинаются с адреса (ячейки) 00001, а дискретные входы — с адреса 10001. Каждому из них требуется 1 бит памяти. Содержимое входных регист ров (в терминологии первых контрол леров они именовались contacts) мож но только читать, в то время как содер жимое выходных регистров (в терми нологии первых ПЛК они именовались coils) можно и читать, и записывать. По мере увеличения сложности ПЛК появились средства работы с ана логовыми входами выходами и сред ства выполнения вычислений. Регист ры аналоговых входов и выходов явля ются 16 разрядными. Их адреса начи наются с 30001 — это адрес первого аналогового входа (только чтение, например, для ввода сигналов от бара банных переключателей). С адреса 40001 начинается диапазон универ сальных регистров (чтение и запись), которые могут служить также и анало говыми выходами. В зависимости от фирмы изготовителя ПЛК эти регист ры могут быть внутренними регистра ми, аналоговыми входами, аналоговы ми выходами и даже дискретными вхо дами и выходами. Однако не все функ циональные коды работают с адресами этих регистров. К ОДЫ ФУНКЦИЙ Коды функций определены в доку ментации Modicon Modbus Reference Guide и Modbus Application Protocol Specification. Поскольку в этих доку ментах имеются разночтения по наи менованиям функций и количеству функциональных кодов, то рекоменду ется пользоваться вторым из них. Нес мотря на то что кодам функций отве дён диапазон от 1 до 127, в качестве предназначенных для общего пользо вания кодов определены примерно 20 кодов. В этот же диапазон входят коды, назначение которых определяет ся каждым отдельным пользователем. Следует иметь в виду, что многие Modbus устройства поддерживают только небольшие подмножества име ющихся кодов. Чтобы понять, как про исходит работа с входами выходами, мы рассмотрим только те функцио нальные коды, которые обеспечивают доступ к однобитовым и 16 битовым данным. Перечень рассматриваемых кодов приведён на рис. 6. Как видно из рис. 6, одноразрядные коды функций относятся к дискрет ным входам и выходам, а 16 разряд ные — к входным регистрам и регист рам хранения. При этом к входным ре гистрам применима только функция чтения, а к выходным — как чтения, так и записи. Заметим также, что име ется чёткая привязка каждого кода функции к определённому диапазону адресов входов выходов. Например, функциональный код 06 (запись одно го регистра) относится только к диапа зону адресов 40001 — 50000 и ни к ка кому другому. Следовательно, при опи сании сообщения можно указывать не абсолютный адрес входа или выхода, а задать величину смещения относитель но базового адреса. Таким образом, в данном случае вместо адреса 40001 мы указываем просто 0000. Здесь пора разъяснить один из наи более запутанных аспектов протокола Modbus, касающийся ссылок на адреса входов выходов. При разработке про токола компания Modicon приняла ре шение нумеровать физические коорди наты точек, входящих в тот или иной диапазон, начиная с 0, а не с 1. Диск ретный выход 1 адресуется в сообще нии как ячейка 0000, а не 00001. Диск ретный вход 1 адресуется как ячейка 0000, а не 10001. То же самое относится и к регистру хранения 1, которому пос тавлена в соответствие ячейка 40001, — его адрес записывается в виде 0000. Код функции всегда ассоциирован с конкретным диапазоном адресов вхо дов выходов, и поэтому для однознач ной идентификации координат точки достаточно указать величину её смеще ния относительно базового адреса. Смещение записывается в виде 16 раз рядного слова и при просмотре реаль ного Modbus сообщения отображается соответствующим шестнадцатеричным числом, а в таблице распределения ре гистров Modbus все адреса даются в ви де десятичных чисел. Поэтому регист ру 40016 соответствует чиcло 0х000F, которое является шестнадцатеричным представлением разности 40016 — 40001. На первый взгляд всё кажется запутанным, но на самом деле это важ но только для специалистов, которые занимаются написанием драйверов для систем с протоколом Modbus. ● Автор — президент компании Contemporary Controls СТА 2/2009 www.cta.ru Адреса регистров Описание 00001 – 10000 Дискретные выходы ( чтение/запись) 10001 – 20000 Дискретные входы ( чтение) 30001 – 40000 16 битовые аналоговые входы (чтение) 40001 – 50000 Регистры хранения ( чтение/запись) Рис. 5. Таблица распределения регистров Modbus Код 1 или 16 бит Описание Диапазон адресов входов выходов 1 1 Read coils Чтение текущего состояния (ON/OFF) дискретных выходов 00001 – 10000 2 1 Read contacts Чтение текущего состояния (ON/OFF) дискретных входов 10001 – 20000 5 1 Write a single coil Изменение состояния дискретного выхода в ON или OFF 00001 – 10000 15 1 Write multiple coils Изменение состояния (ON/OFF) нескольких дискретных выходов 00001 – 10000 3 16 Read holding registers Чтение регистров хранения 40001 – 50000 4 16 Read input registers Чтение входных регистров 30001 – 40000 6 16 Write single register Запись одного регистра 40001 – 50000 16 16 Write multiple registers Запись нескольких регистров 40001 – 50000 22 16 Mask write register Маскированная запись регистра 40001 – 50000 23 16 Read/write multiple registers Чтение/запись нескольких регистров 40001 – 50000 24 16 Read FIFO queue Чтение содержимого очереди FIFO 40001 – 50000 Рис. 6. Коды функций, обеспечивающие доступ к данным © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy