Послідовні інтерфейси ПК

Інтерфейс RS-232C як найбільш широко поширений стандартний послідовний метод зв'язку між мікрокомп'ютерами і периферійними пристроями, його призначення та сфери практичного застосування, оцінка основних переваг та недоліків, особливості реалізації.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык украинский
Дата добавления 26.03.2011
Размер файла 55,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Реферат на тему:

«Послідовні інтерфейси ПК»

1. Загальні положення

1.1 Призначення інтерфейсу

Інтерфейс RS-232C є найбільш широко поширеним стандартним послідовним методом зв'язку між мікрокомп'ютерами і периферійними пристроями. Інтерфейс, визначений стандартом Асоціації електронної промисловості (EIA), передбачає наявність обладнання двох видів: термінального DTE і зв'язного DCE. Для правильного уявлення про інтерфейс RS-232C, необхідно виразно розуміти відмінність між цими видами обладнання. Термінальне обладнання, наприклад мікрокомп'ютер, може посилати і (або) приймати дані по послідовному інтерфейсу. Воно як би закінчує (terminate) послідовну лінію. Зв'язне обладнання пристрою, які можуть спростити передачу даних спільно з термінальним обладнанням. Наочним приклад зв'язного обладнання служить модем (модулятор / демодулятор). Він виявляється з'єднувальною ланкою в послідовному ланцюжку між комп'ютером і телефонною лінією.

Відмінність між термінальними і зв'язними пристроями досить розпливчата, тому виникають деякі складності в розумінні того, до якого типу обладнання відноситься той або інший пристрій. Розглянемо ситуацію з принтером. До якого обладнання його віднести? Як зв'язати два комп'ютери, коли вони обидва діють як термінальне обладнання. Для відповіді на ці питання потрібно розглянути фізичне з'єднання пристроїв. Виробивши незначні зміни в лініях інтерфейсу RS-232C, можна примусити зв'язне обладнання функціонувати як термінальне.

1.2 Характеристика інтерфейсу

інтерфейс мікрокомп'ютер периферійний пристрій

Стандарт RS-232C використовує несиметричні передавачі і приймачі - сигнал передається відносно схемної землі. Інтерфейс не забезпечує гальванічної розв'язки приладів. Логічній одиниці відповідає напруга на вході приймача в діапазоні -12…-3В. для лінії управляючих сигналів цей стан називається ON («ввімкнено»), для ліній послідовних даних - MARK. Логічному нулю відповідає діапазон +3… +12В. Для ліній управляючих сигналів цей стан називається OFF («вимкнено»), а для ліній послідовних даних - SPACE. Діапазон -3…+3В - зона нечутливості, яка обумовлює гістерезис приймача: стан лінії буде вважатися зміненим тільки після переходу за порогове значення. Рівні сигналів на виходах передавачів повинні бути в діапазонах -12…-5В і +5…+12В для представлення одиниці і нуля відповідно. Різниця потенціалів між схемними землями (SG), з'єднаних пристроїв повинна бути менша 2В, при більш високій різниці потенціалів можливе неправильне сприйняття сигналів. Інтерфейс передбачає наявність захисного заземлення для з'єднаних пристроїв, якщо вони обидва живляться від мережі змінного струму і мають з мережею фільтри. Для інтерфейсу RS-232C спеціально випускають буферні мікросхеми приймачів (з гістерезисом і передавачем двох полярного сигналу).

1.3 Лінії інтерфейсу

Нижче представлено зображення існуючих видів послідовних портів та опис їх виводів:

Послідовний порт (9 виводів)

Рис. 1. Вилка на 9 виводів (вигляд з боку комп'ютера)

Таблиця 1. Призначення контактів 9-контактного рознімача RS-232C

Вивід

Найменування

Напрямок

Опис

1

CD

Carrier Detect (Визначення несучої)

2

RXD

Receive Data (Дані, що приймаються)

3

TXD

Transmit Data (Дані, що передаються)

4

DTR

Data Terminal Ready (Готовність термінала)

5

GND

System Ground (Корпус системи)

6

DSR

Data Set Ready (Готовність даних)

7

RTS

Request to Send (Запит на відправку)

8

CTS

Clear to Send (Готовність прийому)

9

RI

Ring Indicator (Індикатор)

Послідовний порт (25 виводів)

Рис. 2. Вилка на 25 виводів (вигляд з боку комп'ютера)

Таблиця 2. Призначення контактів 25-контактного рознімача RS-232C

Вивід

Найменування

Напрямок

Опис

1

SHIELD

Shield Ground (Захисний корпус)

2

TXD

Transmit Data (Дані, що передаються)

3

RXD

Receive Data (Дані, що приймаються)

4

RTS

Request to Send (Запит на відправку)

5

CTS

Clear to Send (Готовність прийому)

6

DSR

Data Set Ready (Готовність даних)

7

GND

System Ground (Корпус системи)

8

CD

Carrier Detect (Визначення несучої)

9-19

n/c

20

DTR

Data Terminal Ready (Готовність терміналу)

21

n/c

22

RI

Ring Indicator (Індикатор)

23-25

n/c

1.4 Робота інтерфейсу

У більшості схем, що містять інтерфейс RS-232C, дані передаються асинхронно, тобто у вигляді послідовності пакету даних. Кожний пакет містить один символ коду ASCII, причому інформація в пакеті достатня для його декодування без окремого сигналу синхронізації.

Символи коду ASCII представляються сімома бітами, наприклад буква А має код 1000001. Щоб передати букву А по інтерфейсу RS-232C, необхідно ввести додаткові біти, котрі вказують на початок і кінець пакету. Крім того, бажано додати зайвий біт для простого контролю помилок по паритету (парність).

Найбільш широко поширений формат, що включає в себе один стартовий біт, один біт паритету і два стопових біти. Початок пакету даних завжди відмічає низький рівень стартового біта. Після нього слідує 7 біт даних символа коду ASCII. Біт парності містить 1 або 0 так, щоб загальне число одиниць в 8 битной групі було непарним. Останнім передаються два стопових біти, представлених високим рівнем напруження. Еквівалентний ТТЛ сигнал при передачі букви А показаний на рис. 3.

Рис. 3. Представлення коду букви А сигнальними рівнями ТТЛ

Таким чином, повне слово, що асинхронно передається складається з 11 біт (фактично дані містять тільки 7 біт) і записується у вигляді 01000001011.

Мікропроцесорна система без засобів введення і виведення виявляється малоефективною. Характеристики і об'єми інформації введення-виведення в системі визначаються, насамперед, специфікою її застосування наприклад, в мікропроцесорній системі управління деяким промисловим процесом не потрібна клавіатура і дисплей, оскільки майже напевно її дистанційно програмує і контролює головний мікрокомп'ютер (з використанням послідовної лінії RS - 232C).

Оскільки дані звичайно представлені на шині мікропроцесора в паралельній формі (байтами, словами), їх послідовне введення виведення є дещо складним. Для послідовного введення потрібні засоби перетворення послідовних вхідних даних в паралельні дані, які можна розмістити на шині. З іншого боку, для послідовного виведення необхідні засоби перетворення паралельних даних, представлених на шині, в послідовні вихідних даних. У першому випадку перетворення здійснюється регістром зсуву з послідовним входом і паралельним виходом (SIPO), а у другому регістром зсуву з паралельним входом і послідовним виходом (PISO).

Послідовні дані передаються в синхронному або асинхронному режимах. Існують спеціальні мікросхеми введення-виведення, вирішальні проблеми перетворення, описані вище. Приведемо список найбільш типових сигналів таких мікросхем:

D0 D7 - вхідні вихідні лінії даних, що підключаються безпосередньо до шини процесора;

RXD - дані, що приймаються (вхідні послідовні дані);

TXD - дані, що передаються (вихідні послідовні дані);

CTS - скидання передачі. На цій лінії периферійний пристрій формує сигнал низького рівня, коли готовий сприймати інформацію від процесора;

RTS - запит передачі. На цю лінію мікропроцесорна система видає сигнал низького рівня, коли вона збирається передавати дані в периферійний пристрій.

Всі сигнали мікросхем послідовного введення виведення, що програмуються ТТЛ сумісні. Ці сигнали розраховані тільки на дуже короткі лінії зв'язку. Для послідовної передачі даних на значні відстані потрібні додаткові буфери і перетворювачі рівнів, що включаються між мікросхемами послідовного введення виведення і лінією зв'язку.

Для управління потоком даних (Flow Control) можуть використовуватися два варіанти протоколу - апаратний і програмний.

Апаратний протокол управління потоком RTS/CTS використовує сигнал CTS, який дозволяє зупинити передачу даних, якщо приймач не готовий до їх прийому. Передавач випускає черговий байт тільки при включеній лінії CTS. Байт, який вже почав передаватися, затримати сигналом CTS неможливо (це гарантує цілісність посилки). Апаратний протокол забезпечує найшвидшу реакцію передавача на стан приймача. Мікросхеми асинхронних приймачів-передавачів мають не менше двох регістрів в прийомній частині - зсувний, для прийому чергової посилки, і зберігаючий, з якого зчитується прийнятий метод. Це дозволяє реалізувати обмін по апаратному протоколу без втрати даних. Апаратний протокол зручно використовувати при підключенні принтерів і плотерів, якщо вони його підтримують. При безпосередньому (без модемів) зєднанні двох комп'ютерів апаратний протокол потребує перехресного зєднання ліній RTS-CTS.

Якщо апаратний протокол не використовується, передаваючого терміналу повинен бути забезпечений стан «ввімкнено» на лінії CTS перемичкою RTS-CTS. В протилежному випадку передавач буде «мовчати».

Програмний протокол управління потоком XON/XOFF передбачає наявність двох направленого каналу передачі даних. Працює протокол наступним чином: якщо пристрій, який приймає дані, виявляє причини, за якими не може їх далі приймати, він по зворотному послідовному каналу посилає байт-символ XOFF (13h). Протилежний пристрій, прийнявши цей символ, призупиняє передачу. Коли приймаючий пристрій знов стає готовим до прийому даних, він посилає символ XON (11h), прийнявши який протилежний пристрій відновлює передачу. Час реакції передавача на зміни стану приймача в порівнянні з апаратним протоколом збільшується на час передачі символу (XON або XOFF) плюс час реакції програми передавача на прийом символу. З цього випливає, що дані без втрат можуть прийматися тільки приймачем, який має додатковий буфер даних, які приймають, і сигналізуючи про готовність передчасно.

Переваги програмного протоколу полягають у відсутності необхідності передачі управляючих сигналів інтерфейсу - мінімальний кабель для двостороннього обміну може мати тільки три провідники. Недоліком, крім вимого наявності буферу і більшого часу реакції, є складність реалізації повно дуплексного режиму обміну. В цьому випадку з потоку приймаючих даних повинні виділятися символи управління потоком, що обмежує набір символів, що передаються.

IBM PC може містити до чотирьох послідовних портів, які також називають адаптерами RS-232C. В PS/2 (крім моделей 25 і 30) може бути до восьми таких адаптерів. В MS-DOS послідовні порти називаються COMX, де X - номер порту. Працювати з послідовними портами можна як з використанням BIOS, так і безпосередньо через використання апаратних переривань.

В BIOS для роботи з послідовними портами виділено спеціальне переривання int14 (тут і далі числа вказуються в 16-ій системі числення). З допомогою цього переривання можна встановити параметри порту, перевірити статус порту, прийняти або передати байт даних. Але при роботі через BIOS програма повинна обробляти дані зі швидкістю не менше ніж швидкість їх поступлення, так як в IBM PC не підтримується апаратна буферизація даних, які проходять через послідовний порт. Робота з використанням int14 можлива при передачі даних зі швидкостями до 300 бод. При більших швидкостях дані губляться.

При роботі на швидкостях більше 300 бод доводиться організовувати програмну буферизацію даних, що приймаються, а в окремих випадках і даних, що передаються. Це можна зробити при використанні переривань, які можуть генеруватися послідовними портами.

1.5 Програмна частина інтерфейсу

Програмувати розробку інтерфейсу можна на нижчому рівні (наприклад із використанням мови Assembler), на середньому рівні та на мовах високого рівня (наприклад в середовищі Microsoft Visual C++.NET 2005).

Для програмування COM портів в середовищі Microsoft Visual C++.NET 2005 використовується компонент SeriesPort, в якому реалізована вся взаємодія з драйвером COM-порту.

Для роботи з COM-портом оголошуємо об'єкт:

System:IO: Ports: SerialPort^ serialPort1;

Перед записом ініціалізуємо необхідні властивості:

· PortName;

· BaudRate;

· ReadTimeout.

Після ініціалізації об'єкта віддкриваємо порт:

serialPort1->Open();

Для запису використовуються методи:

· Write (array<unsigned char>^ buffer, int offset, int size);

· WriteLine (String^ line).

Для зчитування даних з порту використовуються методи класу SerialPort:

· Read (array<unsigned char>^ buffer, int offset, int size);

· ReadLine();

· ReadChar();

· ReadByte().

1.6 Перспективи інтерфейсу RS-232C

Розроблено декілька нових стандартів, направлених на усунення нестач первинних специфікацій інтерфейсу RS-232C. Серед них можна відмітити інтерфейс RS-422 (балансна система, що допускає імпеданс лінії до 50 Ом), RS-423 (несиметрична система з мінімальним імпедансом лінії 450 Ом) і RS-449 (стандарт з високою швидкістю передачі даних, в якому декілька змінені функції схем і застосовується 37 контактний роз'єм типу D).

2. Порядок виконання роботи

Робота виконуються на комп'ютері з використанням навчального стенду.

2.1 Ознайомитись з інструкцією до лабораторної роботи.

2.2 Отримати у викладача завдання і написати програму для обміну інформацією через COM порт.

2.3 Перевірити функціонування програми на двох ПК, які з'єднані через COM порти.

3. Приклад завдання та його реалізація

3.1 Приклад завдання

1. З'єднати два комп'ютери через роз'єми COM-портів.

2. Скласти програму надсилання та прийому файлів через COM порт.

3.2 Реалізація

Програма реалізації приведена в додатку 1.

4. Зміст звіту

4.1 Мета роботи.

4.2 Короткі теоретичні відомості.

4.3 Код програми для обміну інформацією через COM порт з поясненнями і коментарями.

4.4 Висновки і порівняння.

Література

1. Гук М.Ю. Аппаратные средства IBM PC. Энциклопедия. 3-е изд. - СПб.: Питер, 2006-1072 с.: ил.

2. Гук М. Интерфейсы ПК: справочник, ЗАО «Издательство «Питер», 1999. - 416 с.: ил.

3. Парамуд Я.С. Інтерфейси периферійних пристроїв ЕОМ:

4. Навч.посбник.-к.: ІСДО, 1995,-76 с.

5. MSDN helper (http://www.msdn.com).

Додаток

Код програми написаний на мові Microsoft Visual C++.NET для обміну файлами через COM-порт з'єднання.

#pragma once

namespace COMmunicator {

using namespace System;

using namespace System: ComponentModel;

using namespace System: Collections;

using namespace System: Windows: Forms;

using namespace System: Data;

using namespace System: Drawing;

using namespace System:IO;

void readData();

 /// <summary>

 /// Summary for Form1

 ///

 /// WARNING: If you change the name of this class, you will need to change the

 /// 'Resource File Name' property for the managed resource compiler tool

 /// associated with all.resx files this class depends on. Otherwise,

 /// the designers will not be able to interact properly with localized

 /// resources associated with this form.

 /// </summary>

public ref class Form1: public System: Windows: Forms: Form

{

public:

Form1 (void)

{

InitializeComponent();

 //

 //TODO: Add the constructor code here

 //

}

protected:

 /// <summary>

 /// Clean up any resources being used.

 /// </summary>

~Form1 ()

{

if (components)

{

delete components;

}

}

private: System:IO: Ports: SerialPort^ serialPort1;

private: System: Windows: Forms: ComboBox^ comboBox1;

private: System: Windows: Forms: Button^ button1;

private: System: Windows: Forms: Button^ button2;

private: System: Windows: Forms: OpenFileDialog^ openFileDialog1;

private: System: Windows: Forms: Button^ button3;

private: System: Windows: Forms: TextBox^ textBox1;

private: System: Windows: Forms: Label^ label1;

private: System: Windows: Forms: Label^ label2;

private: System: Windows: Forms: Label^ label3;

private: System: Windows: Forms: ComboBox^ comboBox2;

private: System: Windows: Forms: Label^ label4;

private: System: Windows: Forms: ProgressBar^ progressBar1;

private: System: ComponentModel:IContainer^ components;

protected:

private:

 /// <summary>

 /// Required designer variable.

 /// </summary>

#pragma region Windows Form Designer generated code

 /// <summary>

 /// Required method for Designer support - do not modify

 /// the contents of this method with the code editor.

 /// </summary>

void InitializeComponent(void)

{

this->components = (gcnew System: ComponentModel: Container());

this->serialPort1 = (gcnew System:IO: Ports: SerialPort (this->components));

this->comboBox1 = (gcnew System: Windows: Forms: ComboBox());

this->button1 = (gcnew System: Windows: Forms: Button());

this->button2 = (gcnew System: Windows: Forms: Button());

this->openFileDialog1 = (gcnew System: Windows: Forms: OpenFileDialog());

this->button3 = (gcnew System: Windows: Forms: Button());

this->textBox1 = (gcnew System: Windows: Forms: TextBox());

this->label1 = (gcnew System: Windows: Forms: Label());

this->label2 = (gcnew System: Windows: Forms: Label());

this->label3 = (gcnew System: Windows: Forms: Label());

this->comboBox2 = (gcnew System: Windows: Forms: ComboBox());

this->label4 = (gcnew System: Windows: Forms: Label());

this->progressBar1 = (gcnew System: Windows: Forms: ProgressBar());

this->SuspendLayout();

 //

 // comboBox1

 //

this->comboBox1->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->comboBox1->FormattingEnabled = true;

this->comboBox1->Location = System: Drawing: Point (176, 21);

this->comboBox1->Name = L «comboBox1»;

this->comboBox1->Size = System: Drawing: Size (97, 24);

this->comboBox1->TabIndex = 1;

 //

 // button1

 //

this->button1->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->button1->Location = System: Drawing: Point (323, 71);

this->button1->Name = L «button1»;

this->button1->Size = System: Drawing: Size (136, 23);

this->button1->TabIndex = 2;

this->button1->Text = L «Прийняти файл»;

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System: EventHandler (this, &Form1:button1_Click);

 //

 // button2

 //

this->button2->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->button2->Location = System: Drawing: Point (495, 70);

this->button2->Name = L «button2»;

this->button2->Size = System: Drawing: Size (127, 23);

this->button2->TabIndex = 3;

this->button2->Text = L «Надіслати файл»;

this->button2->UseVisualStyleBackColor = true;

this->button2->Click += gcnew System: EventHandler (this, &Form1:button2_Click);

 //

 // openFileDialog1

 //

this->openFileDialog1->InitialDirectory = L «D:\\»;

this->openFileDialog1->RestoreDirectory = true;

this->openFileDialog1->Title = L «Select file»;

this->openFileDialog1->FileOk += gcnew System: ComponentModel: CancelEventHandler (this, &Form1:openFileDialog1_FileOk);

 //

 // button3

 //

this->button3->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->button3->Location = System: Drawing: Point (593, 20);

this->button3->Name = L «button3»;

this->button3->Size = System: Drawing: Size (29, 24);

this->button3->TabIndex = 5;

this->button3->Text = L»…»;

this->button3->TextAlign = System: Drawing: ContentAlignment: TopCenter;

this->button3->UseVisualStyleBackColor = true;

this->button3->Click += gcnew System: EventHandler (this, &Form1:button3_Click);

 //

 // textBox1

 //

this->textBox1->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->textBox1->Location = System: Drawing: Point (372, 21);

this->textBox1->Name = L «textBox1»;

this->textBox1->Size = System: Drawing: Size (215, 22);

this->textBox1->TabIndex = 6;

 //

 // label1

 //

this->label1->AutoSize = true;

this->label1->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->label1->Location = System: Drawing: Point (26, 24);

this->label1->Name = L «label1»;

this->label1->Size = System: Drawing: Size (144, 16);

this->label1->TabIndex = 7;

this->label1->Text = L «Доступні COM порти:»;

this->label1->Click += gcnew System: EventHandler (this, &Form1:label1_Click);

 //

 // label2

 //

this->label2->AutoSize = true;

this->label2->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->label2->Location = System: Drawing: Point (320, 23);

this->label2->Name = L «label2»;

this->label2->Size = System: Drawing: Size (46, 16);

this->label2->TabIndex = 8;

this->label2->Text = L «Файл:»;

 //

 // label3

 //

this->label3->AutoSize = true;

this->label3->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->label3->Location = System: Drawing: Point (26, 73);

this->label3->Name = L «label3»;

this->label3->Size = System: Drawing: Size (139, 16);

this->label3->TabIndex = 9;

this->label3->Text = L «Швидкість передачі:»;

 //

 // comboBox2

 //

this->comboBox2->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->comboBox2->FormattingEnabled = true;

this->comboBox2->Items->AddRange (gcnew cli:array< System: Object^ >(8) {L «1200», L «2400», L «4800», L «9600», L «19200», L «38400»,

L «57600», L «115200»});

this->comboBox2->Location = System: Drawing: Point (176, 70);

this->comboBox2->Name = L «comboBox2»;

this->comboBox2->Size = System: Drawing: Size (97, 24);

this->comboBox2->TabIndex = 10;

 //

 // label4

 //

this->label4->AutoSize = true;

this->label4->Font = (gcnew System: Drawing: Font (L «Microsoft Sans Serif», 9.75F, System: Drawing: FontStyle: Regular, System: Drawing: GraphicsUnit: Point,

static_cast<System: Byte>(204)));

this->label4->Location = System: Drawing: Point (320, 113);

this->label4->Name = L «label4»;

this->label4->Size = System: Drawing: Size (0, 16);

this->label4->TabIndex = 12;

 //

 // progressBar1

 //

this->progressBar1->Location = System: Drawing: Point (29, 134);

this->progressBar1->Name = L «progressBar1»;

this->progressBar1->Size = System: Drawing: Size (593, 17);

this->progressBar1->TabIndex = 13;

 //

 // Form1

 //

this->AutoScaleDimensions = System: Drawing: SizeF (6, 13);

this->AutoScaleMode = System: Windows: Forms: AutoScaleMode: Font;

this->ClientSize = System: Drawing: Size (652, 166);

this->Controls->Add (this->progressBar1);

this->Controls->Add (this->label4);

this->Controls->Add (this->comboBox2);

this->Controls->Add (this->label3);

this->Controls->Add (this->label2);

this->Controls->Add (this->label1);

this->Controls->Add (this->textBox1);

this->Controls->Add (this->button3);

this->Controls->Add (this->button2);

this->Controls->Add (this->button1);

this->Controls->Add (this->comboBox1);

this->Name = L «Form1»;

this->Text = L «COM Комутнікатор»;

this->Load += gcnew System: EventHandler (this, &Form1: Form1_Load);

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

private: System: Void Form1_Load (System: Object^ sender, System: EventArgs^ e) {

array<String^>^ ports = serialPort1->GetPortNames();

int i = 0;

comboBox1->Items->Clear();

for (i = 0; i < ports->Length; i++) {

comboBox1->Items->Add (ports[i]);

}

comboBox1->SelectedIndex = 0;

comboBox2->SelectedIndex = 7;

}

private: System: Void button2_Click (System: Object^ sender, System: EventArgs^ e) {

String^ portName = (String^) comboBox1->SelectedItem;

array<unsigned char>^ buffer = gcnew array<unsigned char>(1000);

unsigned int bytesRead = 0;

if (! File: Exists (textBox1->Text)) {

MessageBox: Show («Такий файл не існує», «Помилка»,

MessageBoxButtons:OK, MessageBoxIcon: Error);

}

else {

int numBytesRead = 0;

FileStream^ f = gcnew FileStream (textBox1->Text, FileMode: Open, FileAccess: Read);

FileInfo^ fi = gcnew FileInfo (textBox1->Text);

unsigned int fileSize = fi->Length;

String^ fileName = fi->Name;

String^ fileSizeStr = «» + fileSize;

 // for files only

array<wchar_t>^ b1 = fileName->ToCharArray();

label4->Text = «Передача файлу» + fileName +»…»;

serialPort1->PortName = portName;

serialPort1->BaudRate = Int32: Parse (comboBox2->Text);

serialPort1->WriteTimeout = 10000;

serialPort1->Open();

serialPort1->WriteLine(fileName);

serialPort1->WriteLine(fileSizeStr);

while (bytesRead < fileSize) {

numBytesRead = f->Read (buffer, 0,1000);

serialPort1->Write (buffer, 0, numBytesRead);

bytesRead += numBytesRead;

label4->Text = «Відіслано» + (bytesRead *100 /fileSize) + «%»;

progressBar1->Value = (bytesRead *100 /fileSize);

Update();

}

serialPort1->Close();

f->Close();

MessageBox: Show («Файл» + fileName + «успішне передано», «Пердача файлу», MessageBoxButtons:OK, MessageBoxIcon: Information);

progressBar1->Value = 0;

label4->Text = «»;

Update();

}

}

private: System: Void button1_Click (System: Object^ sender, System: EventArgs^ e) {

String^ fileName;

String^ fileSizeStr;

unsigned int fileSize;

String^ portName = (String^) comboBox1->SelectedItem;

label4->Text = «Очікування файлу…»;

serialPort1->PortName = portName;

serialPort1->BaudRate = Int32: Parse (comboBox2->Text);

serialPort1->ReadTimeout = 10000;

serialPort1->Open();

fileName = serialPort1->ReadLine();

fileSizeStr = serialPort1->ReadLine();

fileSize = Int32: Parse(fileSizeStr);

array<unsigned char>^ buffer = gcnew array<unsigned char>(1000);

unsigned int bytesRead = 0;

if (! Directory: Exists (». //files»)) {

Directory: CreateDirectory (». //files»);

}

if (File: Exists (». //files // » + fileName)) {

MessageBox: Show («Такий файл уже існує», «Помилка»,

MessageBoxButtons:OK, MessageBoxIcon: Error);

}

else {

int numBytesRead = 0;

FileStream^ w = gcnew FileStream («files // » + fileName, FileMode: OpenOrCreate, FileAccess: Write);

FileInfo^ fi = gcnew FileInfo («files // » + fileName);

 // for files only

label4->Text = «Прийом файлу» + fileName +»…»;

while (bytesRead < fileSize) {

numBytesRead = serialPort1->Read (buffer, 0,1000);

w->Write (buffer, 0, numBytesRead);

bytesRead += numBytesRead;

label4->Text = «Отримано» + (bytesRead *100 /fileSize) + «%»;

progressBar1->Value = (bytesRead *100 /fileSize);

Update();

}

serialPort1->Close();

w->Close();

MessageBox: Show («Файл» + fileName + «успішне прийнято:» + fi->FullName, «Пердача файлу», MessageBoxButtons:OK, MessageBoxIcon: Information);

progressBar1->Value = 0;

label4->Text = «»;

Update();

serialPort1->Close();

}

}

private: System: Void openFileDialog1_FileOk (System: Object^ sender, System: ComponentModel: CancelEventArgs^ e) {

}

private: System: Void label1_Click (System: Object^ sender, System: EventArgs^ e) {

}

private: System: Void button3_Click (System: Object^ sender, System: EventArgs^ e) {

openFileDialog1->InitialDirectory =».\\»;

openFileDialog1->Filter = «txt files(*.txt)|*.txt|All files (*.*)|*.*»;

openFileDialog1->FilterIndex = 2;

openFileDialog1->RestoreDirectory = true;

if (System: Windows: Forms: DialogResult:OK == openFileDialog1->ShowDialog(this)) {

textBox1->Text = openFileDialog1->FileName;

} else {

textBox1->Text = «»;

}

}

private: System: Void progressBar1_Click (System: Object^ sender, System: EventArgs^ e) {

}

};

}

Размещено на Allbest.ru


Подобные документы

  • Взаємодія комп’ютера з зовнішніми пристроями. Послідовний потік даних як біти синхронізації і власне біти даних. Специфіка формату послідовних даних, які формує UART. Електричний інтерфейс RS-232C. Способи керування портами у WINDOWS95 та WINDOWS XP.

    реферат [660,1 K], добавлен 19.06.2010

  • По призначенню шинні інтерфейси ПК підрозділяються на внутрісистемні і зовнішні. По способу передачі інформації шинні інтерфейси ПК підрозділяються на паралельні і послідовні. Режими обміну шинного інтерфейсу - дуплексний, напівдуплексний і симплексний.

    лекция [33,0 K], добавлен 13.04.2008

  • Існуючі технології інтерфейсів, критерії та оцінка їх ефективності. Голосовий інтерфейс та його практичне застосування, особливості реалізації в AutoCAD. Методика побудови та оцінювання ефективності, а також розробка програм з голосовим інтерфейсом.

    дипломная работа [1,1 M], добавлен 30.10.2014

  • Інтерфейс Centronics як радіальний, асинхронний, паралельний інтерфейс, особливості та сфери його застосування, характеристика та аналоги. Послідовність погодження режиму передачі. Перспективи інтерфейсу IEEE 1284, порівняльні характеристики з USB.

    реферат [575,3 K], добавлен 25.03.2011

  • Опис актуальності, цілей, завдань розроблюваного ПЗ, його призначення та галузь застосування. Огляд програмних продуктів, що мають аналогічні цілі й призначення. Розробка інтерфейсу ПО й короткий опис основних елементів керування грою у п`ятнашки.

    курсовая работа [806,3 K], добавлен 20.10.2012

  • Розподіл адресного простору пам’яті. Визначення формату команди. Формати команд і алгоритм функціонування мікрокомп’ютера. Програмно-мікропрограмна модель мікрокомп’ютера. Структурна схема мікрокомп’ютера. Закодована мікропрограма мікрокомп’ютера.

    курсовая работа [1,4 M], добавлен 30.08.2014

  • Microsoft Excel як програма для роботи з електронними таблицями, оцінка її необхідності та можливостей, функціональні особливості та сфери практичного використання. Основні типи об’єктів програми, їх характеристика. Поняття та призначення СУБД MS ACCESS.

    контрольная работа [952,8 K], добавлен 21.04.2011

  • Трансп’ютер - мікрокомп'ютер із власною внутрішньою пам'яттю й каналами для з'єднання з іншими трансп’ютерами. Структура центрального процесора. Система команд трансп’ютера і їхнє виконання. Організація пам'яті трансп’ютера, диспетчеризація процесів.

    реферат [140,8 K], добавлен 30.03.2011

  • Операційна система Android: поняття та загальна характеристика, оцінка переваг та недоліків, принципи програмування в ній. Основні типи елементів інтерфейсу, використання адаптерів. Розробка програми, головні файли, система взаємодії. Асинхронні запити.

    курсовая работа [1,4 M], добавлен 13.05.2014

  • Сутність і напрямки вивчення методики шифрування алгоритмами збивання. Поняття та структура алгоритму DES, оцінка його переваг та недоліків. Підключ як деяка ключова інформація, яка отримується з основного ключа шифрування, його аналіз і значення.

    лабораторная работа [99,5 K], добавлен 18.11.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.