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

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

?ановити драйвери, а також програмне забезпечення, що йдуть в комплекті з кабелем на 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;

}

}

 

///

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);

}

}

}

 

///

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));

}

}

 

///

public void Close()

{

StopReading();

_serialPort.Close();

StatusChanged("connection closed");

}

 

///

public bool IsOpen

{

get

{

return _serialPort.IsOpen;

}

}

 

/// Get a list of the available ports. Already opened ports

/// are not returend.

public string[] GetAvailablePorts()

{

return SerialPort.GetPortNames();

}

 

///

///

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 = "\r\n"; break;

}

 

_serialPort.Write(data + lineEnding);

}

}

}

}