Автоматизация физического эксперимента» доц

лекции по курсу
«Автоматизация
физического эксперимента»
Лекция 6. Промышленные сети.
Интерфейсы для управления экспериментальными
установками.
доц. Певцов Е.Ф.,
каф. ФКС МИРЭА
IX семестр 2014 г.
Литература (дополнительная по интерфейсам):
1.
2.
3.
4.
5.
Бессонов А.С. Технологии программирования
последовательных интерфейсов семейства RS-232 в
измерительных системах: Ученое пособие / МГТУ МИРЭА
– М.: МГТУ МИРЭА – 2011 – 144 с.
Ресурсы Internet…
Гук М. Аппаратные интерфейсы ПК. Энциклопедия. –
СПб.: Питер, 2003. – 528 с.
Ан П. Сопряжение ПК с внешними устройствами: Пер. с
англ. – М.: ДМК Пресс, 2003. – 320 с.
ГОСТ 26.003-80 Система интерфейса для измерительных
устройств с байт-последовательным и бит-параллельным
обменом информацией.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
2
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
3
Особенности промышленных сетей:
• специальное конструкторское исполнение (защита от внешних
воздействий);
• широкий диапазон рабочих т-р (обычно -40…+70°C);
• повышенная прочность кабеля, изоляции, разъемов…;
• возможность резервирования для повышения надежности;
• определенность времени доставки сообщений;
• возможность работы в реальном времени;
• длинные линии связи.
Примеры:
• ModBus;
• CANopen;
• InterBus;
• ProfBus;
• Ethernet;
• … более 50 типов;
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
4
Основные определения:
• промышленная сеть – комплекс оборудования и ПО, к-рые
обеспечивают обмен информацией (коммуникацию) между устройствами;
• сетевой интерфейс – набор электронных узлов, конструктивных
элементов и ПО для присоединения устройства к сети;
• протокол обмена – набор правил, которые управляют обменом
информацией, определяющий синтаксис и семантику сообщений, порядок
операций, синхронизацию и состояния при коммуникации.
М.б. реализован аппаратно, программно и программно-аппаратно.
• ведущий-ведомый: устройство, которое управляет работой сети наз.
ведущим (главным, «мастером» (master)). На запросы «мастера»
отвечает устройство, называемое ведомым (подчиненный, слейв (slave)).
• канал связи – линия связи, приемник и передатчик.
Взаимодействие устройств осуществляется по модели клиент
(запрашивает обслуживание) -сервер (поставляет сервис, т.е. выполняет
некоторые действия по запросу клиента).
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
5
3 формы связи:
– симплексная (A передает, B только принимает);
– дуплексная (двунаправленная: A и B передают и принимают
одновременно);
– полудуплексная (A передает и B принимает или наоборот).
Процедура квитирования: обмен сигналами для установления связи.
Например:
Чтобы информировать приемник о наличии данных для передачи
передатчик выставляет на специальной линии сигнал «запрос
передатчика».
Этот сигнал фиксируется приемником, который заканчивает текущую
операцию и отвечает передатчику сигналом «сброс
передатчика», указывающим передатчику, что приемник готов
принимать данные.
Передатчик не передает данных, пока не получит сигнал «сброс
передатчика».
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
6
5 типов данных в каналах связи:
• сигналы – результаты измерений от датчиков и
измерительных преобразователей;
• команды – сообщения, которые инициируют определенные
действия;
• состояние – показывает текущее или следующее состояние
системы (в которое она должна перейти);
• событие – достижение состояния или сигнала
определенного значения, требующего обработки;
• запрос – команда, требующая ответа.
Фрейм (кадр, дейтограмма, сегмент)
– набор данных, передаваемых по сети и имеющий строго
определенную структуру
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
7
Интерфейс: унификация программного обеспечения, электрических
сигналов и конструкции
Примеры:
параллельная передача данных:
• системная шина IBM PC (PC/AT) – шина ISA и EISA (устарели);
• шина PCI (Peripheral Component Interconnect Bus);
• GBIP (General Purpose Interface Bus), IEEE-488, стандарт
ANSI/IEEE-488.1-1987, КОП;
•…
последовательная передача данных:
RS-232, RS-423, RS-422, RS-485 стандарт ANSI/TIA-488.1-1987;
• SPI (Serial Peripheral Interface)
• приборная шина USB (Universal Serial Bus);
• I2C (Inter Integrated Circuit),
• IEEE1394 (Fire Wire);
• SMBus
•…
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
9
Последовательный интерфейс
2 режима передачи данных:
– асинхронный любому набору данных предшествует стартовый бит, а в
конце передаются биты остановки;
– синхронный приемник синхронизируется тактовым сигналом (по
отдельной линии или в начале передачи)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
10
Реализация интерфейса RS-232 на примере Сom-порта ПК (9/25 контактов):
3=>
2=>
7=>
8=>
6=>
5=>
1=>
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
11
Основные линии интерфейса RS-232:
N конт.
Сигнал
Выполняемая функция
1
DCD
Data Carrier Detected – вход сигнала обнаружения несущей
удаленного модема
2
RD
Receive Data – последовательные данные, вход приемника
3
TD
Transmit Data - последовательные данные, выход передатчика
4
DTR
Data Terminal Ready – выход сигнала готовности терминала к обмену
данными. Состояние «включено» поддерживает канал соединенным.
5
SG
Signal Ground – сигнальная «земля», уровень отсчета потенциалов
6
DSR
Data Set Ready - вход сигнала готовности от аппаратуры передачи
данных
7
RTS
Request To Send – выход запроса передачи данных
8
CTS
Clear To Send – вход разрешения терминалу передавать данные
9
RI
Ring Indicator – индикатор вызова
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
12
4=>
9=>
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
13
Рассмотрим асинхронный режим на примере RS-232 (1969 г.):
Передача данных осуществляется по одному символу (т.е. 8 или 7 бит).
Каждый бит передается по тактам, т.е. с определенной частотой. Скорость
передачи измеряется в битах в сек или в бодах (количество символов в сек).
В режиме ожидания на линии устанавливается уровень логической 1 (сигнал
«маркера», MARK). Аппаратно удобнее, чтобы это был сигнал низкого уровня.
Начало передачи обозначается передачей на вход приемника специального
бита (логический 0), называемого стартовым (сигнал «пробела», SPACE).
После обнаружения стартового бита приемник считывает данные через
интервал времени, равный ½ от длительности одного бита и проверяет еще
раз стартовый бит, если он опять равен лог.1, то считается, что пришла
помеха, если – логический нуль, то начинается прием данных.
Первым передается младший значащий бит (разряд LSB).
Для повышения надежности передачи данных в сообщение может быть
добавлен бит четности так, чтобы сумма всех битов включая бит четности
была четной (прямая четность) или нечетной (обратная четность).
Передача заканчивается стоп-битом с уровнем логической 1 («отметка»,
«маркер»). Стоповых битов может быть 1, 1.5 (продолжительность) или 2.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
14
Уровни сигналов задаются как потенциалы на линиях
(используется обратная логика):
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
15
Т.к. уровни не соответствуют ТТЛ, то необходимо применение специальной
микросхемы – преобразователя уровня (например, ADM202 или ADM203)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
16
Структура посылки:
Временная диаграмма передачи байта $E5 (11100101b) c непрямой
четностью (без проверки на четность, no parity) и стоп-битом (формат 8n1).
Уровни сигнала приведены в виде логических состояний. Физически им
соответствуют инвертированные значения уровней напряжений (см. ниже)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
17
Способ управления потоком данных:
1) отсутствует
2) аппаратный: сигнал CTS позволяет остановить передачу, если приемник не
готов к приему данных.
3) программный: если устройство, принимающее данные, не может
принимать, то оно по обратному последовательному каналу передает байтсимвол XOFF (13h), приняв его передающее устройство приостанавливает
передачу до момента прихода сигнала XON (11h), после чего прием
возобновляется (обязательно наличие двунаправленного канала)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
18
Таким образом, для правильного обмена по RS-232 следует заранее
назначить как передающей, так и принимающей стороне:
1. Скорость передачи из стандартного набора, например 9600 бит/с
(следует синхронизовать тактовые частоты передатчика и
приемника, так чтобы за время между 2 стартовыми битами
расхождение центров последних бит не превышало 3-5%).
2. Разрядность сообщения (7 или 8 бит).
3. Способ контроля четности: нечетная (odd), четная (even) или
отсутствует (no parity).
4. Число стоповых битов (1, 1.5 или 2).
5. Способ управления потоком данных (отсутствует, или программный
или аппаратный).
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
19
Замечание:
Интерфейсные кабели бывают двух исполнений:
нуль-модемный и прямой.
Следует обеспечить правильную коммутацию сигналов в зависимости от
типа подключаемого к ПК устройства.
В соответствии со стандартом на аппаратуре АПД (в том числе и на COMпортах ПК) устанавливают вилки (male) DB-25P или DB-9P. Разъемы с
девятью контактами не предусматривают дополнительных сигналов для
синхронного обмена. Кабель должен быть с перекрестными соединениями
контактов (нуль-модемный кабель).
На аппаратуре АКД (модемах) устанавливают розетки (female) DB-25S или
DB-9S. Если на каком-либо устройстве установлена розетка – это почти
100%-ый признак того, что оно должно подключаться прямым кабелем.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
20
Нуль-модемные кабели: минимальный и полный
Прямой кабель
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
21
Функциональное тестирование: заглушка для проверки COM-портов
(LoopBack)
Вывести небольшой файл на COM-порт: COPY C:\autoexec.bat COM1
Наблюдать: 1) потенциалы на выходах RTS и DTR (д.б. отрицательные),
2) на TD наблюдать пачку двуполярных импульсов амплитудой более 5В
если потенциалы DTR и RTS не изменились – неисправны буферные
преобразователи
если RTS отрицательный, но команда COPY завершается ошибкой – вышел
из строя приемник линии CTS или неисправен кабель
если на TD нет импульсов, - неисправен буферный передатчик линии TD
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
22
Аппаратно операции последовательной передачи осуществляются
специальной микросхемой индивидуально для каждого порта (UART 16450):
ИС универсального асинхронного приемопередатчика – УАПП, (Universal
Asynchronous Receiver Transmitter, UART). Обычно это встроенный в МК узел.
Договоренности:
- Параметры связи (настройки):
1. Скорость
2. Разрядность.
3. Способ контроля четности: (odd, even, no parity).
4. Число стоповых битов (1, 1.5 или 2).
-
Способ управления потоком данных (отсутствует, или программный
или аппаратный)
- Процедура восстановления связи
- …
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
23
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
24
После настройки (см. выше пп.1-5) УАПП может выделять символы из
потока данных и осуществлять их преобразование в 8-ми разрядный
параллельный формат, и передавать в МП и наоборот, принимать из МП 8
разрядов в параллельном коде и преобразовывать их в
последовательность бит, добавляя стартовый бит, биты четности и
стоповые. Кроме того, по настройке может выдавать и принимать сигналы
квитирования.
Микросхемы UART для программиста представляют собой набор 10-и
однобайтных регистров, доступ к которым определяется адресом
(смещением относительно базового адреса порта, всего 8 адресов).
Назначение регистров и значений их битов – см. описание на UART или
МК.
ПК может иметь до 4-х com-портов. Внешние разъемы (вилки с 25 или 9
контактами) выведены на заднюю панель ПК.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
25
Программирование:
Управление посл. портом:
1. Конфигурирование аппаратных средств:
•
назначение базового адреса = 3F8h, 2F8h, 3E8h(3E0h,338h) или
2E8h(2E0h,238h) BIOS проверяет эти адреса и присваивает обнаруженным
портам логические имена COM1…COM4;
•
линия запроса прерывания = IRQ4 или IRQ11 для COM1 и COM2
= IRQ3 или IRQ10 для COM3 и COM4
•
установка режима (по умолчанию 2400 бит/c, 7e1) команда MODECOMx
2. Текущее управление:
Поддерживаются сервисом INT 14h который обеспечивает функции:
•
00h – инициализация;
•
01h – вывод символа;
•
02h – ввод символа;
•
03h – опрос состояния модема.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
26
Программирование:
1) Напрямую через ресурсы ОС MS-DOS (актуально для PC-промышленных
контроллеров)
- прямое обращение к регистрам или функции обработки прерывания 14h
BIOS (процессор занят опросом портов)
- функции обработки аппаратного прерывания 21h BIOS
2) Через функции ОС Windows Win API (Application Programming Interface) и
библиотеки классов, компонентов и др. программных объектов,
позволяющих создавать приложения (Rapid Application Development, RAD)
3) На основе инструментов LabVIEW (Laboratory Virtual Instrumentation
Engineering Workbench ):
- используя DLL (Dynamic Link Library), и подключения их к LabVIEW
- используя специальные функции и библиотеки, всторенные в LabVIEW
На основе функций Win API:
(аналог функций работы с файловой системой)
см., например: Агуров П.В. Последовательные интерфейсы ПК. Практика
программирования. – СПб.:БВХ-Петербург, 2004. – 496 с.
Основные операции работы с последовательным портом:
- открытие порта;
- установка его параметров (настройка, инициализация);
- чтение и запись данных;
- закрытие порта.
Каждой операции соответствует одна или несколько функций API.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
28
Настройка режима работы сом-порта осуществляется с помощью
структур данных, которые представляют из себя набор переменных
разного типа.
Структуры загружаются и читаются с помощью Win API функций
(синтаксис - ::функция):
Для использования порта необходимо:
1. Получить дескриптор порта (его идентификатор):
используются функции ::CreatFile и CloseHandle
HANDLE hCom = ::CreateFile (
argv[1], // имя порта
GENERIC_READ | GENERIC_WRITE, // способ доступа – чтение и запись
NULL, // означает, что общий доступ запрещен
NULL, // атрибуты защиты не устанавливаются
OPEN_EXISTING, // параметр создания файла – открыть порт, если он
// существует или вернуть код ошибки
FILE_ATTRIBUTE_NORMAL, // атрибуты порта - синхронный режим доступа
NULL); // обязательный NULL
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
29
Для использования порта необходимо:
2. Настроить параметры порта:
Заполнить поля структур DCB и COMMTIMEOUTS
и вызвать API функций настройки SetCommState и SetCommTimeout
Структура DCB определяет основные настройки СОМ порта.
В ней содержится реальная информация из регистров UART.
typedef struct _DCB {
DWORD DCBlength;
// длина структуры (DCB)
DWORD BaudRate;
// скорость в бит/сек
DWORD fBinary:1;
// бинарный режим
DWORD fParity:1;
// разрешение контроля четности
DWORD fOutxCtsFlow:1;
// слежение за CTS
DWORD fOutxDsrFlow:1;
// слежение за DSR
DWORD fDtrControl:2;
// режим работы сигнала DTR
DWORD fDsrSensitivity:1; // чувствительность к DSR
DWORD fTXContinueOnXoff:1; // продолжение передачи при XOFF
DWORD fOutX:1;
// программное управление потоком при
//передачи (XON/XOFF)
DWORD fInX:1;
// программное управление потоком при приеме
// (XON/XOFF)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
30
С помощью этой структуры есть возможность получать
информацию из порта и передавать ее в порт.
Подробно Win API по шагам:
http://www.firststeps.ru/mfc/winapi/
winapi2.html
Красным цветом отмечено получение информации, зеленым ее передача. Передача
информации идет через HANDLE, который ассоциирован с портом. Структура DСB
является сложенной для структуры COMMCONFIG, в которой есть дополнительная
информация чтобы просто поменять скорость или проверку четности используется DCB
структура. Общая идея такая:
1. Получить текущую информацию в структуру DCB (функции GET)
2. Изменить нужные нам параметры в структуре DCB.
3. Установить параметры порта (функции SET)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
31
// поля DСB (продолжение)
DWORD fErrorChar:1;
DWORD fNull:1;
DWORD fRtsControl:2;
// замена ошибочных символов
// действия при приёме нулевого символа
// Задает режим управления потоком для
// сигнала RTS
DWORD fAbortOnError:1;
// игнорирование запись/чтение при ошибке
DWORD fDummy2:17;
// зарезервировано
WORD wReserved;
// не используется, равно 0
WORD XonLim;
// мин. количество символов для посылки XON
WORD XoffLim;
// макс. кол-во символов для посылки XOFF
BYTE ByteSize;
// количество бит в символе
BYTE Parity;
// режим паритета 0-4=no,odd,even,mark,space
BYTE StopBits;
// длина стопового бита 0,1,2 = 1, 1.5, 2
char XonChar;
// символ для XON
char XoffChar;
// символ для XOFF
char ErrorChar;
// символ для замены ошибок
char EofChar;
// символ конца данных
char EvtChar;
// символ события
WORD wReserved1;
// резервный
} DCB;
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
32
// поля DСB (продолжение)
Для работы с DCB структурой используют API функции из библиотеки
kernel32.:
BuildCommDCB- заполняет указанную структуру DCB значениями,
заданными в строке управления устройством. Строка управления
устройством использует синтаксис команды mode MS-DOS.
SetCommState- конфигурирует коммуникационное устройство согласно
данным указанным в структуре DCB. Функция повторно инициализирует все
аппаратные и управляющие настройки, но не опорожняет очереди вывода
или ввода данных.
GetCommState- читает текущие настройки порта, согласно данным,
записанным в DCB структуру.
*/
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
33
Пример: программа на С для управления прибором PSP603:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
// пп инициализации порта:
void initializeComm(HANDLE hCom) // установка регистра статуса dcb и проверки:
{
DCB dcb;
::GetCommState(hCom, &dcb); // Получение данных о текущих
// установках СОМ... и заполнение структуры dcb
dcb.BaudRate = CBR_2400;
// Установка новых параметров для
// СОМ.., скорость 2400
dcb.Parity = NOPARITY;
// нет контроля четности
dcb.ByteSize = 8;
// 8-ми битный обмен
::SetCommState(hCom, &dcb);
// Установка новых параметров для
// СОМ…
::PurgeComm(hCom, PURGE_RXCLEAR); //удаляет все символы из
// входного буфера
::PurgeComm(hCom, PURGE_TXCLEAR); // удаляет все символы из
// выходного буфера).
}
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
34
DWORD executeSyncCommand(HANDLE hCom, const char* cmd, unsigned int len,
unsigned int responseLen)
// это объявление функции executeSyncCommand осуществляющей передачу
или // прием данных
{
printf("executing command: %.*s\n", len, cmd);
::PurgeComm(hCom, PURGE_RXCLEAR);
::PurgeComm(hCom, PURGE_TXCLEAR);
::SetLastError(0); //извлекает значение кода последней ошибки
// вызывающего потока.
/* Код последней ошибки сохраняется при посредстве базового компонента
потока. Многие потоки не записывают поверх друг друга коды последней
ошибки.*/
DWORD toWrite = (len > 0 && cmd[len - 1] == 0) ? len - 1 : len;
// обрзезка 0 на конце строки, если он там есть
DWORD written = 0;
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
35
::WriteFile(hCom, (const void*)(cmd), toWrite, &written, NULL);
/* Функция производит запись блока данных начиная с текущей позиции в файле
Параметры:
$hFile
Дескриптор файла для записи
$pBuffer
Указатель на буфер, содержащий данные для записи
$iToWrite
Количество байт для записи в файл
$iWritten
Количество записанных байт
$pOverlapped [опционально]
Указатель на структуру $tagOVERLAPPED
Возвращаемое значение:
Успех: Возвращает True
Ошибка: Возвращает False */
// обработка ошибки, если она есть:
DWORD dwError = ::GetLastError();
if (dwError)
return dwError;
if (!responseLen)
return 0;
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
36
::SetLastError(0);
char resp[60] = { 0 };
DWORD read = 0;
::ReadFile(hCom, resp, responseLen, &read, NULL);
/*
Функция читает из файла блок данных, начиная с текущей позиции.
После прочтения блока, позиция переносится в конец прочитанного блока.
Параметры:
$hFile
Дескриптор файла для чтения
$pBuffer
Указатель на буфер, который получает данные, считанные
из файла
$iToRead
Максимальное количество байт для чтения
$iRead
Количество прочитанных байт
$pOverlapped [опционально] Указатель на структуру $tagOVERLAPPED
*/
dwError = ::GetLastError();
if (dwError)
return dwError;
printf("received response length %u: %.*s\n", responseLen, read, resp);
return 0;
} // конец функции выполнения команды
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
37
// основная программа – управление прибором PSP 603
int main(int argc, char* argv[])
{
if (2 != argc)
{
printf("please specify the COM port name\n");
return 0;
}
HANDLE hCom = ::CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
/*
Параметры функции CreateFile :
lpFileName- имя СОМ-порта.
Может принимать значения:
"СОМ1","СОМ2","СОМ3","СОМ4","СОМ5","СОМ6","СОМ7","СОМ8","СОМ9",
если более одной цифры, то в формате "\\.\СОМ47"
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
38
dwDesiredAccess- режим доступа к файлу.
Это четырехбайтовое число, которое задает различные режимы доступа к
файлу. Нас интересует только режим чтение и запись,
этот режим задаётся числом: С0000000hex в СИ можно вместо числа
записать константу с именем "GENERIC_READ|GENERIC_WRITE".
dwShareMode- режим совместного доступа.
СОМ-порты ПК не поддерживают совместный доступ, только одна
программа может открыть порт.
Поэтому этот параметр должен быть равен 0("NULL")(режим запрещен).
lpSecurityAttributes- атрибуты защиты файла.
Для СОМ-портов не используется поэтому всегда равны 0 ("NULL").
dwCreationDistribution- управление режимом автосоздания файла.
Это четырехбайтовое число, которое для СОМ портов всегда должно
быть
00000003hex ("OPEN_EXISTING")
dwFlagsAndAttributes- задает атрибуты создаваемого файла.
Это четырехбайтовое число, которое для СОМ портов всегда должно
быть
0 ("NULL")
hTemplateFile- описатель файла "шаблона" по которому создавался файл.
Для СОМ-портов не используется поэтому всегда равен 0 ("NULL").
Пример открытия СОМ1 в Си:
Com_Handle = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, NULL,
NULL, OPEN_EXISTING, NULL, NULL);
*/
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
39
if (hCom == NULL)
{
printf("Failed to open the com port %s\n", argv[1]);
return 1;
}
printf("the COM port initialization\n");
initializeComm(hCom); // вызов п/п инициализации
printf("put the device under remote control\n");
const char cmdStatusF[] = "F\r"; // код команды чтения состояния прибора PSP 603
if (DWORD res = executeSyncCommand(hCom, cmdStatusF, sizeof(cmdStatusF), 7))
{
printf("got error %u", res);
::CloseHandle(hCom);
return 1;
}
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
40
::Sleep(1000);
printf("getting status\n");
const char cmdStatus[] = "L\r"; // команда чтения 37-ми знаков
// полного статуса прибора
if (DWORD res = executeSyncCommand(hCom, cmdStatus, sizeof(cmdStatus), 37))
{
printf("got error %u", res);
::CloseHandle(hCom);
return 1;
}
printf("reset voltage to 0\n"); // установка нулевого значения выходного
// напряжения
const char cmdResetVoltageZero[] = "SV 00.00\r";
if (DWORD res = executeSyncCommand(hCom, cmdResetVoltageZero,
sizeof(cmdResetVoltageZero), 0))
{
printf("got error %u", res);
::CloseHandle(hCom);
return 1;
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
}
41
::Sleep(1000);
printf("increasing present voltage on one unit per each second\n");
const char cmdIncreaseV[] = "SV+\r"; // команда увеличить напряжение на 1 В
for(unsigned int i = 0; i < 10; ++i)
{
printf("getting current status\n");
if (DWORD res = executeSyncCommand(hCom, cmdStatus, sizeof(cmdStatus),
37))
{
printf("got error %u", res);
::CloseHandle(hCom);
return 1;
}
if (DWORD res = executeSyncCommand(hCom, cmdIncreaseV,
sizeof(cmdIncreaseV), 0))
{
printf("got error %u", res);
::CloseHandle(hCom);
return 1; Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
}
42
::Sleep(1000);
}
printf("getting resulting status\n");
if (DWORD res = executeSyncCommand(hCom, cmdStatus, sizeof(cmdStatus),
37))
{
printf("got error %u", res);
::CloseHandle(hCom);
return 1;
}
::CloseHandle(hCom);
return 0;
}
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
43
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
44
Применение специализированных сред программирования для
автоматизации измерений и испытаний:
Обусловлено тем, что ПО должен разрабатывать специалист в
предметной области, а не программист.
Специализированные среды программирования:
1.Предоставляют пользователю библиотеки программных объектов
высокого уровня, типовых решений, программ.
2.В среду интегрированы драйверы средств измерений, упрощающие
конфигурирование.
3.Простой процесс создания программ, как правило – графическое
программирование на высоком уровне.
Недостатки – избыточность и большой объем кода, потеря
производительности повышенные требования к ресурсам ПК.
Наиболее известна и универсальна – среда графического
программирования LabVIEW (Laboratory Virtual Instrumentation
Engineering – c 1986 г., произdодитель National Instrument, США).
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
45
LabVIEW использует язык G, основанный на архитектуре потоков данных:
Т.е. последовательность выполнения функций определяется
не порядком их следования,
а наличием данных на входах этих функций.
Программа LabVIEW называется виртуальным прибором (Virtual
Instrument, *.vi) и состоит из 2-хчастей
-блок-диаграммы (Block Diagram), описывающей логику работы
-передней панели (Front Panel) представляющей интерфейс
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
46
LabVIEW использует язык G, основанный на архитектуре потоков данных:
Т.е. последовательность выполнения функций определяется
не порядком их следования,
а наличием данных на входах этих функций.
Программа LabVIEW называется виртуальным прибором (Virtual
Instrument, *.vi) и состоит из 2-хчастей
-блок-диаграммы (Block Diagram), описывающей логику работы
-передней панели (Front Panel) представляющей интерфейс
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
47
LabVIEW использует язык G, основанный на архитектуре потоков данных:
Т.е. последовательность выполнения функций определяется
не порядком их следования,
а наличием данных на входах этих функций.
Программа LabVIEW называется виртуальным прибором ВП (Virtual
Instrument, *.vi) и состоит из 2-хчастей
-блок-диаграммы (Block Diagram), описывающей логику работы
Содержит функциональные узлы, служащие источниками, приемниками и
средствами обработки данных, а также терминалы и управляющие
структуры, которые служат аналогами операторов условных переходов и
циклов.
-передней панели (Front Panel) представляющей интерфейс ВП.
Содержит средства ввода –вывода, элементы индикации и управления.
Допускается и приветствуется иерархическая структура.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
48
Основные достоинства LabVIEW:
-поддерживает большой спектр оборудования различных
производителей
имеет многочисленные библиотеки функций:
-Для подключения внешнего оборудования по наиболее
распространенным интерфейсам и протоколам (RS -232, GPIB TCP/IP …)
-для удаленного управления ходом эксперимента
-для управления роботами и системами машинного зрения
-для цифровой обработки сигналов
-для применения математических методов обработки данных
-для визуализации данных
-для моделирования сложных систем
-для хранения информации в БД и генерации отчетов
-для взаимодействия с другими приложениями в рамках принятых
протоколов OLE, COM DCOM и др.
-на основе б-ки Runtime Rngine возможно исполнение LabVIEWпрограмм, там, где не установлена полная среда разработки.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
49
Основные недостатки LabVIEW:
-избыточность кода,
-требуют много ресурсов ПК
-цена
-это эксклюзивный продукт NI, не подчиняющийся общепринятым
стандартам
-код является закрытым
LabVIEW целесообразно использовать для уникальных или
единичных экпериментов, нецелесообразно применять при выпуске
серийной продукции
Желательно использовать более ранние версии LabVIEW, т.к. они
отнимают меньше ресурсов.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
50
Программирование последовательных интерфейсов в LabVIEW:
-Использование специальных драйверов RS-232 (GPIB, USB, VXI и др.)
В последних версиях палитры специального драйвера RS-232 отсутвуют.
-Использование универсальных драйверов VISA
-Драйверы измерительных приборов конкретных типов, образующие
объемную библиотеку
Основные функции при работе с COM-портом:
-Инициализация порта
Serial Port Init
-Чтение и запись данных
Serial Port Write
Serial Port Read
-Определение числа байтов
Bytes at Serial Port
-Пауза
Serial Port Breack
-Закрытие порта
Close Serial Port
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
51
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
52
Инициализация порта:
номер (COM1 имеет номер 0 и т.д.)
скорость передачи, число бит данных в посылке, число
стоповых битов, контроль четности, размер буфера
данных в байтах, протокол управления потоком
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
53
Bytes at Serial Port
возвращает число принятых байтов. Готовых
для чтения
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
54
Serial Port Write записывает данные из строки записи string to write в
порт
Запись символа *L (команда чтения статуса) в
буфер порта
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
55
Запись символа *L (команда чтения статуса)
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
56
Serial Port Read читает заданное число байтов requested
byte count из порта в строку чтения string number
Чтение статуса
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
57
Подготовка передачи команды
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
58
Передача команды, введенной через элемент управления
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
59
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
60
RS-232 (ANSI/EIA-232): универсальный интерфейс, применяется для подключения
многих промышленных приборов. Недостаток - 2-х точечные соединения, недостстчная
помехозащищенность.
RS-422 (AIA Rs-422A): использует дифференциальный электрический сигнал.
RS-485 (EIA – 485): разновидность RS-422 - обеспечивает подключение до 32-х устройств
к одному порту. Привлекателен в промышленных сетях и там, где к одному ПК требуется
подключить много распределенных устройств для сбора данных или управления.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
61
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
62
Кроме заданных стандартом уровней следует принимать во внимание
особенности линии передачи:
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
63
RS-485 (англ. Recommended Standard 485), EIA-485 (англ. Electronic
Industries Alliance-485) — стандарт физического уровня для асинхронного
интерфейса. Регламентирует электрические параметры полудуплексной
многоточечной дифференциальной линии связи типа «общая шина».
Стандарт приобрел большую популярность и стал основой для создания
целого семейства промышленных сетей широко используемых в
промышленной автоматизации.
Стандарт RS-485 совместно разработан двумя ассоциациями:
Ассоциацией электронной промышленности (EIA — Electronics Industries
Association) и Ассоциацией промышленности средств связи (TIA —
Telecommunications Industry Association).
Технические характеристики интерфейса RS-485
одна витая пара проводов,
передача данных осуществляется с помощью дифференциальных
сигналов: Разница напряжений между проводниками одной полярности
означает логическую единицу, разница другой полярности — ноль.
Стандарт RS-485 оговаривает только электрические и временные
характеристики интерфейса.
Стандарт RS-485 не оговаривает:
• параметры качества сигнала
• типы соединителей и кабелей,
• гальваническую развязку линии связи,
• протокол обмена.
Тип приёмопередатчиков — дифференциальный, потенциальный.
Изменение входных и выходных напряжений на линиях A и B: Ua (Ub) от
−7В до +12В (+7В).
Тип приёмопередатчиков — дифференциальный, потенциальный.
Изменение входных и выходных напряжений на линиях A и B: Ua (Ub) от
−7В до +12В (+7В).
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
67
Кроме заданных стандартом уровней следует принимать во внимание
особенности линии передачи:
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
68
Электрические и временные характеристики интерфейса RS-485
Требования, предъявляемые к выходному каскаду:
• источник напряжения с малым выходным сопротивлением,
|Uвых|=1,5:5,0В (не <1,5В и не >6,0В);
• состояние логической «1»: Ua больше Ub (гистерезис 200мВ) —
MARK, OFF;
• состояние логического «0»: Ua меньше Ub (гистерезис 200мВ) —
SPACE, ON;
• выходной каскад должен выдерживать режим короткого замыкания,
иметь максимальный выходной ток 250мА, скорость нарастания
выходного сигнала 1,2В/мкс и схему ограничения выходной
мощности.
Требования, предъявляемые к входному каскаду:
• дифференциальный вход с высоким входным сопротивлением и
пороговой характеристикой от −200мВ до +200мВ;
• допустимый диапазон входных напряжений Uag (Ubg) относительно
земли (GND) от −7В до +12В;
• входной сигнал представлен дифференциальным напряжением
(Ui+0,2В) и более;
• уровни состояния приёмника входного каскада — см. состояния
передатчика выходного каскада
Электрические и временные характеристики интерфейса RS-485
До 32 приёмопередатчиков в одном сегменте сети.
Максимальная длина одного сегмента сети: 1200 метров.
Только один передатчик активный.
Максимальное количество узлов в сети — 250 (с усилителями).
Скорость обмена/длина линии связи (зависимость экспоненциальная):
• 62,5 кбит/с 1200 м (одна витая пара)
• 375 кбит/с 300 м (одна витая пара)
• 500 кбит/с
• 1000 кбит/с
• 2400 кбит/с 100 м (две витых пары)
• 10000 кбит/с 10 м
Другие последовательные интерфейсы:
I2C (Philips) = TWE (two-wire)
1…10 k
(откр. колл.)
SCL – линия тактирования; SDA – линия данных
Для AVR (симметричный КМОП выход):
– разрыв имитируется установкой в 3-состояние (ввод) => 1
– включение имитируется установкой на выход в лог.0 => 0
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
78
Обмен данными по I2C (обычно исп-ся программная эмуляция протокола):
Начало сеанса: (линия в состоянии START): SDA , SCL=1
Окончание сеанса (линия в состоянии STOP): SDA , SCL=1
Передача информации по SDA (положительная логика):
- смена уровней SDA только при SCL=0
- считывание значения бита при SCL=1
В начале:
первый байт = адрес (7бит) + R/W(=1, ведущий читает) (=0, ведущий передает)
9-ый бит: квитирование
во время девятого тактового импульса, ведомый обязан установить SDA=0.
Тактовые импульсы могут иметь произвольную скважность
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
79
Пример эмуляции протокола I2C:
delay: ;5mkc (кварц 4МГц)
push cnt
ldi cnt,6
cyk_del:dec cnt
brne cyk_del
pop cnt
ret
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
80
Лабораторная работа. Реализация последовательной передачи данных в
по интерфейсу I2C.
Используется оригинальная плата с микроконтроллером AT90USB1287 и
цифровым акселерометром MMA7455LT, обменивающиеся данными по
интерфейсу I2C.
Микроконтроллер AT90USB1287 подключен к ПК по интерфейсу USB.
Суть работы: реализация протокола I2C для передачи данных от
микросхемы акселерометра через микроконтроллер в ПК.
Реализация протокола I2C в МК: встроенный модуль TWI, программно
управляемый через пять регистров и аппаратно реализующий два вывода
интерфейса I2C.
TWBR – регистр задания частоты линии SCL
TWCR – регистр управления шиной
TWSR – регистр состояния шины и модуля TWI
TWDR – регистр данных
TWAR – регистр подчиненного адреса шины
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
81
Лабораторная работа. Реализация последовательной передачи данных в
по интерфейсу I2C.
Алгоритм работы TWI МК:
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
82
Другие последовательные интерфейсы:
SPI (Serial Peripheral Interface, Motorola)
Последовательный дуплексный синхронный стандарт передачи данных – для
сопряжения МК или ПЛИС и периферии (ЦАП, АЦП, ЦП, Flash-память…).
• любая передача синхронизирована с общим тактовым сигналом;
• ведущее устройство активизирует ведомое сигналом «выбор кристалла».
В SPI используются четыре цифровых сигнала:
• MOSI или SI — выход ведущего, вход ведомого (англ. Master Out Slave In).
Служит для передачи данных от ведущего устройства ведомому.
• MISO или SO — вход ведущего, выход ведомого (англ. Master In Slave Out).
Служит для передачи данных от ведомого устройства ведущему.
• SCLK или SCK — последовательный тактовый сигнал (англ. Serial CLocK).
Служит для передачи тактового сигнала для ведомых устройств.
• CS или SS — выбор микросхемы, выбор ведомого (англ. Chip Select, Slave
Select).
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
83
Ведущая и подчиненная микросхемы, работающие в различных режимах SPI,
не будут несовместимыми => перед выбором подчиненных микросхем важно
уточнить, какие режимы поддерживаются ведущим шины.
Аппаратные модули SPI, интегрированные в микроконтроллеры, в
большинстве случаев поддерживают возможность выбора любого режима SPI
и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем
(относится только к независимому варианту подключения).
Протокол SPI в любом из режимов легко реализуется программно.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
84
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
85
Протокол передачи в SPI:
Установка данных при передаче и выборка при приеме всегда выполняются
по противоположным фронтам синхронизации.
В качестве первого фронта в цикле передачи может выступать нарастающий
или падающий фронт, поэтому возможно 4 варианта логики работы
интерфейса SPI.
Эти варианты получили название режимов SPI:
Ведущая и подчиненная микросхемы, работающие в различных режимах SPI,
не будут несовместимыми => перед выбором подчиненных микросхем важно
уточнить, какие режимы поддерживаются ведущим шины.
Аппаратные модули SPI, интегрированные в микроконтроллеры, в
большинстве случаев поддерживают возможность выбора любого режима SPI
и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем
(относится только к независимому варианту подключения).
Протокол SPI в любом из режимов легко реализуется программно.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
86
Режимы работы SPI: их 4
CPOL - исходный уровень сигнала синхронизации
CPOL=0, то первый фронт линия синхронизации нарастающий, а последний падающий,
CPOL=1, то первый фронт падающий, а последний - нарастающий
CHA - фаза синхронизации; от этого параметра зависит, в какой
последовательности выполняется установка и выборка данных
CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться
выборка данных, а затем, по заднему фронту, - установка данных;
CPHA=1, то установка данных будет выполняться по переднему фронту в
цикле синхронизации, а выборка - по заднему).
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
87
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
88
Сравнение с шиной I2C:
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
89
IEEE 1394 (Fire Wire) Мультимедийные данные, например видеофильм,
разбиваются на пакеты с интервалами между ними. Число пакетов определяется
тем, какой длины фильм посылается, а в интервалах отправляется служебная
информация, например команды «Стоп» или «Пуск».
- высокая скорость передачи данных (100, 200, или 400 Мбит/с для IEEE 1394a;
800 Мбит/с для IEEE 1394b, а в перспективе — 1,6 и 3,2 Гбит/с);
- поддержка «горячего» (Fire) подключения и отключения, иными словами
автоматического распознавания присоединения и отсоединения аппаратуры
и возможности делать это при работающем компьютере, то есть даже тогда,
когда шина работает в полном режиме;
- возможность «общения» аппаратуры с IEEE 1394 In/Out между собой без
компьютера, например, для редактирования при прямой перезаписи информации
с одной видеокамеры на другую;
-подключать до 63 устройств без применения концентраторов. На одном
устройстве может быть до 27 разъемов для подключения к компьютеру и другим
устройствам, использование кабелей малого диаметра и миниатюрных разъемов
(4 или 6 контактов).;
- пакетная передача данных, конфигурирование Plug&Play;
- поддержка асинхронной и изохронной передачи данных. При асинхронной
передаче получение каждого пакета данных проверяется, и если он не получен
или принят с повреждением, передача повторяется и ошибки исправляются;
- питание внешних устройств
через кабель
IEEE 1394
Певцов Е.Ф. «Автоматизация
физического
эксперимента» лекция #6
90
Кабель IEEE 1394 i.Link
Разъемы IEEE 1394 (6
контактов): а) блочный;
б) кабельный
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
91
USB (англ. Universal Serial Bus) — последовательный интерфейс передачи
данных для среднескоростных и низкоскоростных периферийных устройств.
Разработка спецификаций на шину USB производится в рамках
международной некоммерческой организации USB Implementers Forum (USBIF), объединяющей разработчиков и производителей оборудования с USB.
Для подключения периферийных устройств к шине USB используется
четырёхпроводный кабель, при этом два провода (витая пара) в
дифференциальном включении используются для приёма и передачи данных,
а два провода — для питания периферийного устройства. Благодаря
встроенным линиям питания USB позволяет подключать периферийные
устройства без собственного источника питания (максимальная сила тока,
потребляемого устройством по линиям питания шины USB, не должна
превышать 500 мА).
К одному контроллеру шины USB можно подсоединить до 127 устройств по
топологии «звезда», в том числе и концентраторы. На одной шине USB может
быть до 127 устройств и до 5 уровней каскадирования хабов, не считая
корневого.
В настоящее время широко используются устройства, выполненные в
соответствии со спецификацией USB 2.0. Ведётся внедрение в производство
устройств спецификации USB 3.0.
Певцов Е.Ф. «Автоматизация физического эксперимента» лекция #6
92