МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Реферат на тему:
“ІНТЕРФЕЙСИ АВТОМАТИЗОВАНИХ СИСТЕМ УПРАВЛІННЯ”
Львів – 2011
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
Послідовна шина USB (UniversalSerialBus - універсальна послідовна шина) з'явилася по комп'ютерних мірках досить давно - версія першого затвердженого варіанту стандарту з'явилася 15 січня 1996 року. Розробка стандарту була ініційована вельми авторитетними фірмами - Intel, DEC, IBM, NEC, NorthenTelecom і Compaq.
Основна мета стандарту – створити можливість користувачам працювати в режимі Plug&Play з периферійними пристроями. Це передбачає автоматичне розпізнавання пристрою відразу ж після підключення і наступного встановлення відповідних драйверів. Окрім цього, бажане живлення малопотужних пристроїв подається з самої шини. Швидкість шини є достатньою для більшості периферійних пристроїв. Контролер USB займає тільки одне переривання незалежно від кількості підключених до шини пристроїв.
1.1 Технічні характеристики USB
· висока швидкість обміну (high-speedsignalingbitrate, стандарт USB 2.0) – 480 Мбіт/с;
· повна швидкість обміну (full-speedsignalingbitrate, стандарт USB 1.1) - 12 Мбіт/с;
· максимальна довжина кабелю (екранована вита пара) для високої та повної швидкості обміну - 5 м;
· низька швидкість обміну (low-speedsignalingbitrate, стандарт USB1.0) - 1.5 Мбіт/с;
· максимальна довжина кабелю (з’єднання за допомогою провідників) для низької швидкості обміну - 3 м;
· максимальна кількість підключених пристроїв або навантажувальна здатність порту “ведучого” комп’ютера (включаючи розмножувачі) – 127;
· можливе підключення пристроїв з різними швидкостями обміну;
· напруга живлення для периферійних пристроїв USB- 5 В;
· максимальний струм споживання на один периферійний пристрій - 500 мА.
Те, що довжини кабелів обмежені до 5-ти метрів для високих та повних швидкостей, і, до 3-х метрів для низької швидкості обумовлюється використанням кабелів стійких до електромагнітних завад (наводок) та звичайних кабелів, де з’єднання відбувається за допомогою провідників.
Особливо зручний цей інтерфейс для підключення пристроїв, які часто підключаються/відключаються, таких як цифрові фотокамери, флеш носії інформації і т.д. Конструкція роз'ємів для USB розрахована на багатократне приєднання/від’єднання.
Можливість використання тільки трьох швидкостей обміну даними обмежує вживаність шини, але істотно зменшує кількість ліній інтерфейсу і спрощує апаратну реалізацію.
Живлення безпосередньо від USB можливо тільки для пристроїв з малим споживанням струму до 500mA, таких як клавіатури, миші, джойстики і тому подібне.
1.2 Конструктивні особливості інтерфейсу USB
Для підключення периферійних пристроїв використовується 4-х жильний кабель. Кожен такий кабель має “A” роз'єм (Рис.1) на одній стороні і “B” на іншій (див. рис.2).
Рис. 1. Конструкція USB роз’єму - "А"
Роз'єм серії “A” призначений тільки для підключення до джерела, тобто до “ведучого” комп'ютера або до концентратора. Під “ведучим” комп’ютером тут і надалі розуміється комп’ютер, який містить кореневий концентратор.
Рис.2. Конструкція USB роз’єму "В"
Роз'єм серії “B” призначені тільки для підключення до периферійних пристроїв.
Призначення кожного контакту роз'ємів «А» та «В» наведено в табл. 1.
Таблиця 1
Призначення контактів
Номер контакту | Призначення | Колір дроту |
1 | V BUS | Червоний |
2 | D- | Білий |
3 | D+ | Зелений |
4 | GND | Чорний |
Обплетення | екран | --- |
GND – корпус «земля»
VBus - +5 В
D+ - шина для передачі даних
D- - шина для прийому даних.
Кабель для підтримки повної швидкості шини (full-speed) виконується як кручена пара, захищається екраном і він може використовуватися для роботи в режимі мінімальної швидкості (low-speed). Кабель для роботи тільки на мінімальній швидкості (наприклад, для підключення миші) може бути неекранованим.
1.3 Передача даних
Інтерфейс USB сполучає між собою хост (host - головний управляючий пристрій, до якого під'єднуються однин або декілька USB-пристроїв) та безпосередньо самі пристрої. Хост знаходиться усередині персонального комп'ютера і управляє роботою всього інтерфейсу. Для того, щоб до одного порту USB можна було підключати більше ніж один пристрій, застосовуються USB хаб (usbhub - пристрій, що забезпечує підключення багатьох USB присторів до хоста комп'ютера). Кореневий хаб (roothub – хаб, який стоїть в ієрархії USB пристроїв найвище) знаходиться всередині комп'ютера і підключений безпосередньо до хосту комп'ютера. У інтерфейсі USB використовується спеціальний термін "функція" - це логічно завершений пристрій, який виконує яку-небудь специфічну процедуру. Топологія інтерфейсу USB є набором з 7 рівнів: на першому рівні знаходиться хост і кореневий хаб, а на останньому - тільки функції. Пристрій, до складу якого входить хаб і одна або декілька функцій, називається складеним.
Порт хаба або функції, що підключаються до хабу більш високого рівня, називається висхідним портом, а порт хаба, що підключається до хабу нижчого рівня або до функції називається низхідним портом.
Хост породжує всі передачі даних по інтерфейсу. Дані передаються у вигляді пакетів. У інтерфейсі USBвикористовується декілька пакетів:
· пакет-маркер (tokenpaсket) описує тип і напрям передачі даних, адресу пристрою і порядковий номер кінцевої точки (кінцевої точка - частина USB-пристрою, що адресується); пакети-маркери бувають декількох типів: IN, OUT, SOF, SETUP;
· пакет з даними (datapacket) містить дані, що передаються;
· пакет узгодження (handshakepacket) призначений для повідомлення про результати пересилки даних; пакети узгодження бувають декількох типів: ACK, NAK, STALL.
Таким чином кожна транзакція складається з трьох фаз: фаза передачі пакету-маркера, фаза передачі даних і фаза узгодження.
У інтерфейсі USB використовуються декілька типів пересилань інформації:
· управляюче пересилання (controltransfer) використовується для конфігурації пристрою, а також для інших специфічних для конкретного пристрою цілей;
· потокове пересилання (bulktransfer) використовується для передачі відносно великого об'єму інформації;
· пересилання з перериванням (iterrupttransfer) використовується для передачі відносно невеликого об'єму інформації, для якого важлива своєчасна його пересилка. Має обмежену тривалість і підвищений пріоритет щодо інших типів пересилання;
· ізохронне пересилання (isochronoustransfer) також називається потоковим пересилання реального часу. Інформація, що передається в такому пересиланні, вимагає реального масштабу часу при її створенні, пересиланні і прийомі.
Потокові пересилання характеризуються гарантованою безпомилковою передачею даних між хостом і функцією за допомогою виявлення помилок при передачі і повторного запиту інформації.
Коли хост стає готовим приймати дані від функції, він передає IN-пакет типу пакет-маркер до функції. У відповідь на це функція передає хосту пакет з даними або, якщо вона не може зробити цього, передає NAK- або STALL-пакет. NAK-пакет повідомляє про тимчасову неготовність функції передавати дані, а STALL-пакет повідомляє про необхідність втручання хоста. Якщо хост успішно отримав дані, то він у фазі узгодження посилає функції ACK-пакет. Інакше - транзакція завершується.
Коли хост стає готовим передавати дані, він посилає функції OUT-пакет, що супроводжується пакетом з даними. Якщо функція успішно отримала дані, вона посилає хосту ACK-пакет, інакше відсилається NAK- або STALL-пакет.
Управляючі пересилання містять не менше двох стадій: стадія налаштування і статусна стадія. Між ними може також розміщуватись стадія передачі даних. Стадія налаштування використовується для виконання SETUP-транзакції, в процесі якої пересилається інформація в кінцевій точці, якою управляють. SETUP-транзакція містить SETUP-пакет, пакет з даним і пакет узгодження. Якщо пакет з даними отриманий функцією успішно, то вона посилає хостуACK-пакет. Інакше транзакція завершується.
Всі транзакції у стадії передачі даних повинні проводитися в одному напрямі.
У статусній стадії проводиться остання транзакція, яка використовує ті ж принципи, що і в потокових пересиланнях. Напрям цієї транзакції протилежний тому, який використовувався у стадії передачі даних. Статусна стадія служить для повідомлення про результат виконання SETUP-стадії і стадії передачі даних. Статусна інформація завжди передається від функції до хоста. При управляючому записі (ControlWriteTransfer) статусна інформація передається у стані передачі даних статусної стадії транзакції. При управляючому читанні (ControlReadTransfer) статусна інформація повертається у фазі узгодження статусної стадії транзакції після того, як хост відправить пакет даних нульової довжини в попередній фазі передачі даних.
Пересилання з перериванням можуть містити IN- або OUT-пересилання. При отриманні IN-пакета функція може повернути пакет з даним
Ізохронні транзакції містять фазу передачі маркера і фазу передачі даних, але не мають фази узгодження. Хост посилає IN- або OUT-маркер, після чого у фазі передачі даних контрольна точка (для IN- маркера) або хост (для OUT- маркера) пересилає дані. Ізохронні транзакції не підтримують фазу узгодження і повторні пересилання даних у разі виникнення помилок.
1.4Міст USB-USB
1.4.1 Загальний опис
Найлегший шлях для з’єднання двох комп’ютерів – це використати USB-USB міст показаний на рис.3 та рис.4. Комутуючи два комп’ютери таким кабелем можна передавати файли з одного комп’ютера на інший, і навіть, створити мережу для доступу в інтернет через комп’ютер до якого підключені за допомогою такого кабелю (за умов, що цей комп’ютер має вихід в інтернет).
Рис.3. Вигляд USB-USB моста
інтерфейс шина хост мережа
Щодо швидкості, то мікроконтроллер USB моста може підтримувати стандарт USB 1.1 (12 Мбіт/с) або USB 2.0 (480 Мбіт/с).
Рис.4. Вигляд моста зсередини
1.4.2 Встановлення
USB-USBміст може працювати у двох режимах: режим прямого з’єднання та в режимі мережі (див. рис.5).
Для режиму прямого з’єднання передбачене програмне забезпечення, яке додається в комплекті з кабелем. Воно дозволяє пересилати чи копіювати вибрані файли наабо з віддаленого комп’ютера.
Процес встановлення драйверів для USB-USBкабелю залежить від виробника. Потрібно буде, перш за все встановити драйвери, а також програмне забезпечення, що йдуть в комплекті з кабелем на CD. Ця процедура повинна бути здійснена на обох комп’ютерах, без підключеного кабелю.
Деякі виробники постачають два різні файли установки, один для режиму прямого з’єднання, інший – для режиму мережі. Інші виробники постачають тільки один установочний файл, який підходить для обох режимів.
Рис.5. Вибір режиму роботи з програми пересилки
В режимі мережі, є можливість створити малу мережі між двома комп’ютерами. Після створення такої мережі з’являється можливість організації спільних папок, принтерів та доступу до Інтернет.
1.4.2 Використання USB-USB моста
В даній лабораторній роботі використовується PCLinq2 Hi-Speed USB Bridge Cable кабель який дозволяє легко з’єднати два комп’ютери просто приєднавши кабель до кожного з них. Перед тим як розпочати роботу з програмою PCLinq2 (див. рис.7) потрібно в першу чергу запустити програму Setup на кожному з комп’ютерів.
Рис.6. Можливі режими роботи PCLinq2 кабелю
Рис.7. Програма пересилки PCLinq2, яка відповідає за взаємодію та файлову пересилку між двома комп’ютерами по PCLinq2 Hi-Speed USB Bridge Cable кабелю
Додаток 1.
Код програми для роботи із COM портом
using System;
using System.IO;
using System.IO.Ports;
using System.Collections;
using System.Threading;
namespace Termie
{
public sealed class CommPort
{
SerialPort _serialPort;
Thread _readThread;
volatile bool _keepReading;
//begin Singleton pattern
static readonly CommPort instance = new CommPort();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static CommPort()
{
}
CommPort()
{
_serialPort = new SerialPort();
_readThread = null;
_keepReading = false;
}
public static CommPort Instance
{
get
{
return instance;
}
}
//end Singleton pattern
//begin Observer pattern
public delegate void EventHandler(string param);
public EventHandler StatusChanged;
public EventHandler DataReceived;
//end Observer pattern
private void StartReading()
{
if (!_keepReading)
{
_keepReading = true;
_readThread = new Thread(ReadPort);
_readThread.Start();
}
}
private void StopReading()
{
if (_keepReading)
{
_keepReading = false;
_readThread.Join();//block until exits
_readThread = null;
}
}
/// <summary> Get the data and pass it on. </summary>
private void ReadPort()
{
while (_keepReading)
{
if (_serialPort.IsOpen)
{
byte[] readBuffer = new byte[_serialPort.ReadBufferSize + 1];
try
{
// If there are bytes available on the serial port,
// Read returns up to "count" bytes, but will not block (wait)
// for the remaining bytes. If there are no bytes available
// on the serial port, Read will block until at least one byte
// is available on the port, up until the ReadTimeout milliseconds
// have elapsed, at which time a TimeoutException will be thrown.
int count = _serialPort.Read(readBuffer, 0, _serialPort.ReadBufferSize);
String SerialIn = System.Text.Encoding.ASCII.GetString(readBuffer,0,count);
DataReceived(SerialIn);
}
catch (TimeoutException) { }
}
else
{
TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50);
Thread.Sleep(waitTime);
}
}
}
/// <summary> Open the serial port with current settings. </summary>
public void Open()
{
Close();
try
{
_serialPort.PortName = Settings.Port.PortName;
_serialPort.BaudRate = Settings.Port.BaudRate;
_serialPort.Parity = Settings.Port.Parity;
_serialPort.DataBits = Settings.Port.DataBits;
_serialPort.StopBits = Settings.Port.StopBits;
_serialPort.Handshake = Settings.Port.Handshake;
// Set the read/write timeouts
_serialPort.ReadTimeout = 50;
_serialPort.WriteTimeout = 50;
_serialPort.Open();
StartReading();
}
catch (IOException)
{
StatusChanged(String.Format("{0} does not exist", Settings.Port.PortName));
}
catch (UnauthorizedAccessException)
{
StatusChanged(String.Format("{0} already in use", Settings.Port.PortName));
}
catch (Exception ex)
{
StatusChanged(String.Format("{0}", ex.ToString()));
}
// Update the status
if (_serialPort.IsOpen)
{
string p = _serialPort.Parity.ToString().Substring(0, 1); //First char
string h = _serialPort.Handshake.ToString();
if (_serialPort.Handshake == Handshake.None)
h = "no handshake"; // more descriptive than "None"
StatusChanged(String.Format("{0}: {1} bps, {2}{3}{4}, {5}",
_serialPort.PortName, _serialPort.BaudRate,
_serialPort.DataBits, p, (int)_serialPort.StopBits, h));
}
else
{
StatusChanged(String.Format("{0} already in use", Settings.Port.PortName));
}
}
/// <summary> Close the serial port. </summary>
public void Close()
{
StopReading();
_serialPort.Close();
StatusChanged("connection closed");
}
/// <summary> Get the status of the serial port. </summary>
public bool IsOpen
{
get
{
return _serialPort.IsOpen;
}
}
/// <summary> Get a list of the available ports. Already opened ports
/// are not returend. </summary>
public string[] GetAvailablePorts()
{
return SerialPort.GetPortNames();
}
/// <summary>Send data to the serial port after appending line ending. </summary>
/// <param name="data">An string containing the data to send. </param>
public void Send(string data)
{
if (IsOpen)
{
string lineEnding = "";
switch (Settings.Option.AppendToSend)
{
case Settings.Option.AppendType.AppendCR:
lineEnding = "r"; break;
case Settings.Option.AppendType.AppendLF:
lineEnding = "n"; break;
case Settings.Option.AppendType.AppendCRLF:
lineEnding = "rn"; break;
}
_serialPort.Write(data + lineEnding);
}
}
}
}