Смекни!
smekni.com

Інтерфейси автоматизованих систем управління (стр. 2 из 2)

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 = "&bsol;r"; break;

case Settings.Option.AppendType.AppendLF:

lineEnding = "&bsol;n"; break;

case Settings.Option.AppendType.AppendCRLF:

lineEnding = "&bsol;r&bsol;n"; break;

}

_serialPort.Write(data + lineEnding);

}

}

}

}