INFORMATION EXCHANGE OVER INDUSTRIAL NETWORK WITH DISCRETE SIGNAL INPUT/OUTPUT MODULES ADAM-4055


Cite item

Full Text

Abstract

This work is concerned on problems of information exchange organization between the host computer and discrete signal remote and distributed input/output modules ADAM-4055 (Advantech Co., Ltd., Taiwan) over computer distributed control and data acquisition system. Here host computer and modules are joined by industrial network based on RS-485 interface by using ASCII or Modbus protocol. The problem of data input/output between host computer and ADAM-4000 modules based on industrial network is solved by command issuing by host and following receiving the response from addressable module. We considered command list used for operating with discrete signal input/output modules, analyzed their structure, and developed application providing any command input to ADAM-4055 module and response receiving and visualization.

Full Text

Введение Как правило, КРССДУ реализуются на основе промышленных сетей [1-8]. К числу таковых относится и промышленная сеть RS-485 - наиболее широко используемый в промышленности стандарт двунаправленной сбалансированной линии передачи двоичной информации. Она разработана для промышленных многоточечных систем с высокими требованиями, как к скорости передачи информации, так и к длине линии. Спецификация протокола RS-485 следующая: максимальная длина сегмента сети 1200 м (4000 футов), скорость передачи данных 10 MБод и выше, дифференциальная передача (сбалансированная линия) с высокой степенью защиты от шума, число узлов - максимум 32 на сегмент, двунаправленная связь между хостом (мастером) и рабочими модулями по двухпроводной витой линии связи, параллельное подсоединение узлов к многоточечной сети. Модули ADAM полностью электрически изолированы и подключены к сети параллельно, поэтому отсоединение какого-либо модуля не приводит к нарушению работы других модулей сети. Из-за высокого уровня шумов в условиях производства витая пара проводов еще и экранируется. Для обмена использован наиболее простой способ обмена информацией между хостом и рабочими модулями. Хост играет роль мастера (master), а рабочие модули - роль подчиненных узлов (slave). Работу всей сети определяет мастер. Он формирует и отправляет команду в модуль с нужным адресом. Адресуемый модуль, приняв команду от мастера, формирует и отправляет ответ. Все другие рабочие модули при этом в обмене не участвуют. Таким образом, при такой организации обмена информацией отсутствуют конфликты между узлами сети (коллизии). Это положительно сказывается на качестве передачи информации, в существенной мере повышает ее надежность и в значительной степени сокращает аппаратные затраты. Рис. 1. Подключение промышленной сети к компьютеру-хосту В качестве хоста может использоваться любой персональный компьютер или ноутбук, имеющий порт RS-232 или порт USB (см. рис. 1). Существует несколько способов организации промышленной сети на базе модулей ADAM-4000: - дейзи-цепочка (daisychain); - соединение звездой (star layout); - смешанное соединение (random). Полностью сеть может содержать до 256 адресуемых рабочих модулей. Преобразователи интерфейсов (converter), повторители (repeater) и хост не являются адресуемыми устройствами и, следовательно, не входят в число 256. В случае использования дейзи-цепочки вся сеть разбивается на ряд сегментов. Модули подключаются к линии передачи информации параллельно, образуя дейзи-цепочку. Сегмент может содержать до 32 рабочих модулей и заканчивается модулем-повторителем (repeater), который «открывает» новый сегмент (см. рис. 2). Рис. 2. Организация промышленной сети в виде дейзи-цепочки Для того, чтобы избежать конфликтов связи среди модулей ADAM-4000, пытающихся посылать в сеть данные одновременно, все их действия скоординированы главным компьютером-хостом. Хост использует протокол типа команда-ответ. Когда модули не передают информации, они находятся в режиме прослушивания сети. Хост выдает в сеть команду для модуля с определенным адресом и ждет от того ответа. Если ответа нет, то тайм-аут прерывает это ожидание и возвращает управление хосту. Тайм-аут - это временной интервал, который отводится под нормальное выполнение той или иной операции, например, ожидание ответа от модуля. Здесь и далее аппаратные средства модуля, связанные с вводом-выводом одного бита двоичного числа будем называть каналом. Объединение нескольких каналов будем называть портом. Например, 8-разрядный (битный) порт содержит 8 каналов, 12-разрядный порт содержит 12 каналов. Рассмотрим синтаксис команд модуля ADAM -4055. Команда представляет собой строковую константу, содержащую ряд составляющих - полей. Структура команды имеет вид: [символ разделителя] [адрес модуля] [код команды] [данные] [контрольная сумма] [символ перевода строки]. Символ разделителя. Каждая команда начинается с одного из символов: $ - знак доллара; # - знак фунта; % - знак процента; @ - «собачка». Адрес модуля - две цифры в шестнадцатеричном формате - определяет нужный модуль. Допустимые адреса: 00…FF. В записи команд текущий адрес модуля обозначается как АА. Данные. В ряде команд в командную строку должно быть включено поле данных. Контрольная сумма - два символа, которые могут быть добавлены в командную строку. Символ переводом строки - (cr) обязателен для каждой команды и имеет код 0Dh. Все команды должны быть выданы из хоста в сеть прописными символами (верхний регистр). Поля адреса и данных представляют собой набор цифр, представленных в шестнадцатеричном формате. При дальнейшем рассмотрении структуры команд поля символа разделителя ($, #, @, %), текущего адреса модуля (АА), и символа перевода строки (cr) комментироваться не будут. По всем остальным полям команды будут даны пояснения. В таблице 1 приведены все команды, используемые для работы с модулем ADAM-4055. Постановка задачи Разработка приложения, используя которое пользователь мог бы отправить в модули ADAM-4055, расположенные по любым адресам, необходимые команды. Рис. 3. Интерфейс, формируемый разрабатываемым приложением Интерфейс приложения Один из примеров внешнего вида интерфейса, реализованного таким приложением, может выглядеть так, как это показано на рис. 3. Здесь необходимо выполнить следующую последовательность действий: - в верхнее окно необходимо ввести номер COM-порта, к которому подключена сеть; - щелкнуть по кнопке «Ввод»; - набрать нужную команду в поле «Команда»; - щелкнуть по кнопке «Отправить»; - читать ответ от модуля в окне «Ответ»; - повторять действия, описанные в трех предыдущих пунктах, произвольное число раз; для выхода из программы необходимо щелкнуть по кнопке «Выход из программы». Таблица 1. Таблица команд модуля ADAM-4055 Синтаксис команды Имя команды Описание команды %AANNTTCCFF Конфигурирование модуля Задает адрес, скорость обмена в бодах, статус контрольной суммы и тип протокола в сети #AABB(data) Вывод данных в модуль Вывод данных в один канал или все каналы вывода модуля одновременно #** Синхронное запоминание состояния всех каналов в сети Сохраняет состояние каналов всех модулей сети в специальных регистрах модулей $AA2 Чтение параметров конфигурации модуля Возвращает параметры конфигурации выбранного модуля $AA4 Чтение синхронно запомненных данных Возвращает содержимое портов модуля, которое было записано в специальный регистр после выполнения команды #** $AA5 Чтение статуса сброса модуля Определяет, был ли восстановлен данный модуль после последнего выполнения этой команды $AA6 Ввод данных из портов модуля Возвращает информацию из портов ввода-вывода в адресуемом модуле $AAF Прочитать версию ПО модуля Возвращает номер версии программного обеспечения модуля $AAM Прочитать тип модуля Возвращает тип модуля $AAX0TTTTDDDD Установка статуса безопасности Устанавливает каналы вывода информации в заданное состояние $AAX1 Чтение статуса безопасности Чтение из каналов вывода информации, записанной туда в результате выполнения предыдущей команды установки статуса безопасности $AAX2 Чтение флага безопасности Запрашивает флаг безопасности адресуемого модуля $AAXnnnn Установка установки сторожевого таймера Установка времени цикла связи WDT в диапазоне 0000 .. 9999 с. (шаг 0,1 с.) Если величина равна 0000 то функция связи WDT будет отключена $AAY Чтение установки сторожевого таймера Чтение значения установленного предельного времени цикла связи Программный код приложения Программный код приложения приведен ниже. Он имеет необходимые комментарии. Как обычно, для настройки порта используются структуры DCB и CommTimeOuts. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) // компоненты // группирующий компонент Вывод команд в //модуль ADAM -4055 GroupBox4: TGroupBox; Button4: TButton; // кнопка Ввод //кнопка Выход из программы Button5: TButton; // группирующий компонент Команда - Ответ GroupBox1: TGroupBox; //текст Введите номер COM-порта Label1: TLabel; Edit2: TEdit; // окно ввода номера COM-порта Edit5: TEdit; // окно ввода кода команды Label2: TLabel; // текст Команда => Button1: TButton; // кнопка Отправить Label3: TLabel; // текст Ответ => Edit3: TEdit; // окно вывода ответа // процедуры, обслуживающие действия //пользователя procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure Edit5KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; CommHandle : hFile; DCB : TDCB; PortString: string; CommTimeOuts: TCOMMTIMEOUTS; BinBuf: array[0..10] of Char; Buf: string; NumberWritten : DWORD; implementation {$R *.dfm} // процедура, обслуживающая щелчок по кнопке // Ввод procedure TForm1.Button4Click(Sender: TObject); begin PortString := '\\.\COM'+Edit2.Text ; CommHandle := CreateFile(PChar(PortString), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); if (CommHandle = INVALID_HANDLE_VALUE) then begin MessageDlg(' Не могу открыть порт', mtError, [mbOK], 0); end else begin GetCommState(CommHandle, DCB); DCB.BaudRate := CBR_9600; DCB.Parity := NOPARITY; DCB.ByteSize := 8; DCB.StopBits := OneStopBit; CommTimeOuts.ReadIntervalTimeout:= 0; CommTimeOuts.ReadTotalTimeoutMultiplier:= 0; CommTimeOuts.ReadTotalTimeoutConstant:= 1000; CommTimeOuts.WriteTotalTimeoutMultiplier:= 0; CommTimeOuts.WriteTotalTimeoutConstant:= 1000; SetCommTimeouts(CommHandle, CommTimeOuts); SetCommState(CommHandle, DCB); end; end; // процедура, обслуживающая щелчок по кнопке // Выход из программы procedure TForm1.Button5Click(Sender: TObject); begin CloseHandle(CommHandle); Application.Terminate; end; // процедура, обслуживающая ввод номера // COM-порта procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin case key of '0'..'9',#8: // разрешенные символы else key:=#0; end; end; // процедура, обслуживающая щелчок по кнопке //Отправить procedure TForm1.Button1Click(Sender: TObject); begin Buf := Edit5.Text+#13+#10; // готовим команду WriteFile(CommHandle, PChar(Buf)^, Length(Buf), NumberWritten, nil); Sleep(20); ReadFile(CommHandle, BinBuf, 11, NumberWritten, nil); // выводим в окно вывода ответ Edit3.Text:=BinBuf; BinBuf:=''; end; процедура, обслуживающая ввод команды procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char); begin case key of '0'..'9','A'..'F','$','#','*','%','M','X','Y','!','O',#8: // раз//решенные символы else key:=#0; end; end; end. Описание процедур приложения Процедура TForm1.Button4Click обслуживает щелчок по кнопке «Ввод» и выполняет следующие действия: - в переменной PortString формируется полное имя COM-порта, например, COM5; - выполняется попытка открыть этот COM-порт; - проверяется дескриптор порта; - если дескриптор показывает, что порт не открылся, то выполняется выход из процедуры (но не из приложения) с выводом на экран сообщения «Не могу открыть порт»; - если порт открылся нормально, то подготавливаются DCB- и CommTimeOuts - структуры и порт настраивается под эти структуры. Процедура TForm1.Button5Click обслуживает щелчок по кнопке «Выход из программы» и выполняет следующие действия: - закрывает COM-порт; - закрывает приложение. Процедура TForm1.Button1Click обслуживает щелчок по кнопке «Отправить» и выполняет следующие действия: - в переменной Buf формируется тело отправляемой в сеть команды, причем сам код команды берется из окна ввода Edit5; - команда отправляется в сеть; - выжидается определенное время; - принимается ответ из сети и визуализируется в окне Edit3. Процедура TForm1.Edit5KeyPress обслуживает ввод символа с клавиатуры в окно ввода команды Edit5. Разрешенными являются символы, которые входят во все возможные команды модуля ADAM-4055. Человеко-машинный интерфейс На рис. 4 приведен внешний вид интерфейса, формируемого данным приложением, при отправке в модуль с сетевым адресом 13 команды конфигурирования модуля ADAM-4055. В пункте 1 диалогового окна необходимо, как обычно, ввести номер COM-порта, к которому подключается сеть. Затем, в пункте «Команда-ответ» в окно «Команда =>» необходимо ввести правильный код команды. Ответственность за правильность введенной команды лежит на пользователе. Щелчком по кнопке «Отправить» мы отправляем команду в сеть и через небольшой промежуток времени читаем ответ из модуля в окне «Ответ =>». Далее можно вводить следующую команду. Рис. 4. Отправка в сеть команды конфигурирования модуля ADAM-4055 Рис. 5. Отправка в сеть команды чтения портов ввода-вывода модуля ADAM-4055 Внешний вид команды: %1313400604. Сетевой адрес модуля не меняется, поскольку новый сетевой адрес совпадает со старым (13). Ответ показывает, что команда была выполнена успешно. Приложение завершает свою работу при щелчке по кнопке «Выход из программы». Действие команды чтения портов ввода и вывода модуля с адресом 13 показано на рис. 5. В порт ввода принят байт 42h = 0100 0010b. Работа приложения при выводе в модуль команды записи информации показана на рисунок 6. В порт вывода модуля выводится число 75h = 0111 0101b. Интересен ответ из модуля. Работа приложения при выводе в модуль команды синхронной записи со всех входов представлена на рис. 7. Эта команда не предполагает ответа, что хорошо видно на рис. 7. Более подробно работа этого приложения рассмотрена в [6; 8]. Рис. 6. Отправка в сеть команды вывода информации в порт модуля ADAM-4055 Рис. 7. Отправка в сеть команды синхронной записи информации со всех входов модуля ADAM -4055 Выводы Показано, что проблема обмена информацией между компьютером-хостом и модулем ввода-вывода ADAM-4055 КРССДУ на базе промышленной сети может быть решена средствами среды визуального программирования Delphi с использованием строкового представления команд модуля с последующим выводом строки в сеть. Разработан интерфейс пользователя для задачи вывода команд в модули ADAM-4055 по сети и визуализации принятой из них информации. Разработано приложение, позволяющее физически реализовать интерфейс пользователя для данной задачи.
×

About the authors

Vladimir Venediktovich Kangin

Plekhanov Russian University of Economics

Email: king202008@yandex.ru

Leonid Didimovich Lozhkin

Povolzhskiy State University of Telecommunication and Informatics

Email: leon.lozhkin@yandex.ru

References

  1. Кангин В.В., Ложкин Л.Д., Ямолдинов Д.Н. Обмен информацией в промышленной сети PlcNet // ИКТ. Т.8, №3, 2010. - С.49-54.
  2. Кангин В.В., Ложкин Л.Д., Ямолдинов Д.Н. Программная реализация межсетевого шлюза сетей ETHERNET и PLCNET// ИКТ. Т.9, №2, 2011. - С.36-41.
  3. Кангин В.В., Ложкин Л.Д. Организация обмена информацией в промышленной сети на базе модулей ADAM-4000 // ИКТ. Т.12, №3, 2014. - С.41-46.
  4. Кангин В.В. Промышленные контроллеры в системах автоматизации технологических процессов. Старый Оскол: Изд-во ТНТ, 2013. - 408 с.
  5. Кангин В.В., Козлов В.Н. Аппаратные и программные средства систем управления. Промышленные сети и контроллеры. М.: Изд-во БИНОМ. Лаборатория знаний, 2010. - 418 с.
  6. Кангин В.В. Средства автоматизации и управления. Аппаратные и программные решения. Старый Оскол: Изд-во ТНТ, 2014. - 520 с.
  7. Кангин В.В. Персональные компьютеры в системах автоматизации технологических процессов. М.: Книга по требованию, 2013. - 224 с.
  8. Кангин В.В. Компьютерные распределенные системы сбора данных и управления. М.: Книга по требованию, 2014. - 288 с.

Supplementary files

Supplementary Files
Action
1. JATS XML

Copyright (c) 2015 Kangin V.V., Lozhkin L.D.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

This website uses cookies

You consent to our cookies if you continue to use our website.

About Cookies