Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №1-4
з Переферійних пристроїв
на тему: «Дослідження режимів функціонування інтерфейсу RS-232C»
МЕТА РОБОТИ: ознайомитися з процесом передачі даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Короткі теоретичні відомості
Асинхронний послідовний інтерфейс – це основний тип інтерфейсу, за допомогою якого здійснюється передача даних між комп’ютерами. Термін асинхроний означає, що при передачі даних не використовуються ніякі синхронізуючі сигнали, і окремі символи можуть передаватись з випадковими інтервалами, як, наприклад при вводі даних з клавіатури.
Кожному символу, який передається через послідовне з’єднання, мусить передувати стандартний стартовий сигнал, а завершувати його передачу – стоповий сигнал. Стартовий сигнал – це нулевий біт, його ще називають стартовим бітом. Його призначення – повідомити пристою, який приймає дані про те, що наступні вісім бітів представляють собою байт даних. Після символа передаються один чи два стопових біта, які дають сигнал про закінчення передачі символа. В пристрої який приймає дані, символи розпізнаються по появі стартових і стопових сигналів, а не по моменту їх передачі. Асинхроний інтерфейс орієнтований на передачу символів (байтів), а при передачі використовується приблизно 20% інформації тільки для ідентифікації кожного символа.
Рис.1 Роз’єм послідовного порту
Інтерфейс RS - 232С широко використовують у персональних
комп'ютерах для обміну інформацією з периферійними пристроями у послідовному дуплексному режимі обміну. Спрощений варіант інтерфейсу стик С2 є аналогом інтерфейсу RS - 232С для колишніх країн економічної співдружності. Швидкість передавання даних в асинхронному режимі може становити біт/с: 50, 75, 100, 150, 300, 600, 1200, 2400, 4800, 9600, 19200.
Інтерфейс RS-232C розроблено в 1969 році рядом корпорацій США для забезпечення з’єднання комп’ютерів та різноманітних периферійних пристроїв. Стандарт RS-232 в загальному випадку описує 4 інтерфейсні функції:
1. Визначення керувальних сигналів, що передаються через інтерфейс.
2. Визначення формату даних користувача, що передаються через інтерфейс.
3. Передачу тактових сигналів для синхронізації потоку даних.
4. Формування електричних характеристик інтерфейсу.
Інтерфейс RS-232 є послідовним асинхронним інтерфейсом, в якому перед бітами даних передається спеціальний стартовий біт, після бітів даних йде біт паритета та 1 чи 2 стопових біти. Така сукупність бітів носить назву старт-стопного символу. Кожний старт-стопний символ, як правило, у якості бітів даних містить один інформаційний символ, наприклад, символ стандартного коду для обміну інформацією, що задається таблицею ASCII. Символи ASCII відображаються семибітовими кодовими словами. Так, наприклад, латинська буква А має код 1000001. Її передача рівнями ТТЛ зображена на рис. 2.
Початок асинхронного символу завжди відмічається низьким рівнем стартового рівня (“0”). Після нього йдуть 7 біт даних, потім біт паритету, та 2 стопових біти. Біт паритету встановлюється в “1”, або “0”, наприклад, непарний паритет характеризується тим, що загальна кількість одиниць в групі з семи біт (сім даних + один біт паритету) повинно бути непарним числом. Стопові біти передаються високим рівнем (“1”).
Рис.2 Схема передачі даних через RS-232C.
Комп'ютер має 25-контактний (DB25P) або 9-контактний (DB9P) роз'єми для підключення RS-232C. Розташування контактів роз’ємів зображене на рисунку 3. Призначення контактів роз'ємів приведене в таблиці 1.
Рис. 3 Розташування контактів роз’ємів DB25P та DB9P
Таблиця 1. Призначення контактів роз’ємів DB25P та DB9P
Найменування
Напрям
Опис
Контакт(25-контактний роз'єм DB25P )
Контакт(9-контактний роз'єм DB9P)
DCD
IN
Carrie Detect (Визначення несучої)
8
1
- RXD
IN
Receive Data (Дані, що приймаються)
3
2
- TXD
OUT
Transmit Data (Дані, що передаються)
2
3
DTR
OUT
Data Terminal Ready (Готовність терміналу)
20
4
GND
-
System Ground (Корпус системи)
7
5
DSR
IN
Data Set Ready (Готовність даних)
6
6
RTS
OUT
Request to Send (Запит на відправку)
4
7
CTS
IN
Clear to Send (Готовність прийому)
5
8
RI
IN
Ring Indicator (Індикатор)
22
9
Найчастіше використовуються трьох- або чотирьохпровідний зв'язок (для двонаправленої передачі). Схема з'єднання для чотирьохпровідної лінії зв'язку показана на рисунку 4.
Рис.4 Схема 4-провідної лінії зв'язку для RS-232C
Для двопровідної лінії зв'язку у випадку передачі з комп'ютера на зовнішній пристрій використовуються сигнали SG і TхD. Всі 10 сигналів інтерфейсу задіюються лише при з'єднанні комп'ютера з модемом.
Формат даних, що передаються, показаний на рисунку 5. Власне дані (5, 6, 7 або 8 біти) супроводжуются стартовим бітом, бітом парності і одним або двома стоповими бітами. Отримавши стартовий біт, приймач вибирає з лінії біти даних через визначені інтервали часу. Дуже важливо, щоб тактові частоти приймача і передавача були однаковими, допустима розбіжність - не більше 10 %
Рис. 5 Формат даних RS-232C
Всі сигнали RS-232C передаються спеціально вибраними рівнями, що забезпечують високу завадостійкість зв'язку (рис.6). Відзначимо, що дані передаються в інверсному коді (логічній одиниці відповідає низький рівень, логічному нулю - високий рівень).
Рис. 6 Рівні сигналів RS-232C на передавальному і приймаючому кінцях лінії зв'язку.
Хід роботи
Лабораторна робота № 1
Створення програми передавача пакетних даних
через COM порт .
МЕТА РОБОТИ: ознайомитися з процесом створення програми передавача пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Хід роботи
Для створення моделі передавача даних через послідовний асинхронний інтерфейс RS-232C (COM-порт) використовую програми Емулятор і передавач.
Рис. 1. Емулятор інтерфейсу RS-232C
За допомогою Емулятора можна запустити Емуляцію двох потрів а також задати для них Швидкість передачі, а також контороль на парність або непарність.
Рис. 2. Передавач через інтерфейс RS-232C
За допомогою передавача можна підключитись до одного з двох портів які були створені емулятором, і передати повідомлення на приймач.
Лабораторна робота № 2
Створення програми приймача пакетних даних
через COM порт .
МЕТА РОБОТИ: ознайомитися з процесом створення програми приймача пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Хід роботи
Для створення приймача потрібен емулятор, який емулює порти а також програма приймача, яка може приймати повідомлення передавача.
Рис. 3. Приймач через інтерфейс RS-232C
За допомогою передавача можна підключитись до одного з двох портів які були створені емулятором, і отримати повідомлення від передавача.
Лабораторна робота № 3
Відтворення передані та прийому інформації через COM порт у графічному вигляді.
МЕТА РОБОТИ: ознайомитися з процесом формування та передачі пакетних даних у графічному представленні через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Хід роботи
Для того, щоб ознайомитись з передачею даних в графічному вигляді через інтерфейс RS-232C я використав вільну бібліотеку ZedGraph.dll, задопомогою якої промоделював графік передачі слів.
Рис. 4. Графік передачі символа ‘К’ через COM-port
На даному графіку поданий графік передачі даних, який включає стартовий біт, інформаційні біти, біт контролю, і 2 біти завершення.
Лабораторна робота № 4
Налаштування портів на передачу та прийом
інформації через COM порт.
МЕТА РОБОТИ: ознайомитися з процесом налаштування основних параметрів прийому – передачі пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Хід роботи
Для того, щоб виконати передачу, потрібно виклнати запус емулятора, підключення Передавача і приймача і виконати передачу інформації.
Рис. 5. Емулятор інтерфейсу RS-232C
Рис. 6. Передавач через інтерфейс RS-232C
Рис. 7. Приймач через інтерфейс RS-232C
Висновок: я ознайомився з процесом передачі даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Додаток:
Код програми емулятора:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Security.AccessControl;
using System.Security.Principal;
namespace Simulator_RS232C
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Text = "9600";
radioButton1.Checked = true;
string Text;
try
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal myPrincipal = new WindowsPrincipal(ident);
if (!myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.CreateSubKey | RegistryRights.WriteKey | RegistryRights.ChangePermissions | RegistryRights.SetValue,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Deny));
}
RegistryKey path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\", true);
Text = path.GetValue("Port1").ToString();
Text = path.GetValue("Port2").ToString();
Text = path.GetValue("Parity").ToString();
comboBox1.Text = path.GetValue("Speed").ToString();
button1.Enabled = false;
groupBox1.Enabled = false;
groupBox2.Enabled = false;
groupBox3.Enabled = false;
button2.Enabled = true;
}
catch {}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int port1 = Convert.ToInt32(textBox1.Text);
int port2 = Convert.ToInt32(textBox2.Text);
if (textBox1.Text != textBox2.Text)
{
try
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal myPrincipal = new WindowsPrincipal(ident);
if (!myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.CreateSubKey | RegistryRights.WriteKey | RegistryRights.ChangePermissions | RegistryRights.SetValue,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Deny));
}
RegistryKey path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\", true);
path.SetValue("Port1", "COM " + textBox1.Text);
path.SetValue("Port2", "COM " + textBox2.Text);
path.SetValue("P1_State", "0");
path.SetValue("P2_State", "0");
if (radioButton1.Checked)
path.SetValue("Parity", radioButton1.Text);
else
path.SetValue("Parity", radioButton2.Text);
path.SetValue("Speed", comboBox1.Text);
button1.Enabled = false;
groupBox1.Enabled = false;
groupBox2.Enabled = false;
groupBox3.Enabled = false;
button2.Enabled = true;
}
catch { }
}
else
{
MessageBox.Show("Не можна двічі відкрити один порт");
}
}
catch
{
MessageBox.Show("Невірно задані номера портів");
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal myPrincipal = new WindowsPrincipal(ident);
if (!myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.CreateSubKey | RegistryRights.WriteKey | RegistryRights.ChangePermissions | RegistryRights.SetValue,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Deny));
}
RegistryKey path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\", true);
path.DeleteValue("Port1");
path.DeleteValue("Port2");
path.DeleteValue("Parity");
path.DeleteValue("Speed");
path.DeleteValue("P1_State");
path.DeleteValue("P2_State");
button2.Enabled = false;
groupBox1.Enabled = true;
groupBox2.Enabled = true;
groupBox3.Enabled = true;
button1.Enabled = true;
}
catch { }
}
}
}
Код програми передавача і приймача:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
using Microsoft.Win32;
using System.Security.AccessControl;
using System.Security.Principal;
namespace PP_labs_1_4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i = 0;
char last_bit = '0';
private string Convert_to_ASCII(char symbol)
{
int bit;
int ASCII;
string message = "";
if (Convert.ToInt32(symbol) > 300)
ASCII = Convert.ToInt32(symbol) - 912;
else
ASCII = Convert.ToInt32(symbol);
for (int i = 0; i < 8; i++)
{
bit = ASCII % 2;
ASCII = ASCII / 2;
message = message.Insert(0, bit.ToString());
}
return message;
}
private void button1_Click(object sender, EventArgs e)
{
try
{
PaintGraffics(Convert_to_ASCII(textBox1.Text[0]));
if (textBox1.Text != "")
{
comboBox1.Items.Clear();
for (int i = 0; i < textBox1.Text.Length; i++)
{
comboBox1.Items.Add(i);
}
comboBox1.Text = comboBox1.Items[0].ToString();
}
}
catch { }
try
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal myPrincipal = new WindowsPrincipal(ident);
if (!myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.CreateSubKey | RegistryRights.WriteKey | RegistryRights.ChangePermissions | RegistryRights.SetValue,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Deny));
}
RegistryKey path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\", true);
path.SetValue("Message", textBox1.Text);
}
catch { }
}
double StartX=0;
double StepX = 2;
private void PaintGraffics(string Char)
{
bool bParity = true;
GraphPane pane = zedGraphControl1.GraphPane;
pane.CurveList.Clear();
StartX = 0;
StartX = Paint_Start(StartX, pane);
StartX = Paint_Message(StartX, pane, Char);
if (textBox4.Text == "Непарність")
bParity = true;
else
bParity = false;
StartX = Paint_Finish(bParity, Parity(Char), StartX, pane);
}
private void Form1_Load(object sender, EventArgs e)
{
GraphPane pane = zedGraphControl1.GraphPane;
pane.Title.Text = "RS-232C";
pane.YAxis.Title.Text = "Рівень";
pane.XAxis.Title.Text = "Час";
try
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal myPrincipal = new WindowsPrincipal(ident);
if (!myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.CreateSubKey | RegistryRights.WriteKey | RegistryRights.ChangePermissions | RegistryRights.SetValue,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Deny));
}
RegistryKey path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\", true);
comboBox2.Items.Add(path.GetValue("Port1"));
comboBox2.Items.Add(path.GetValue("Port2"));
comboBox2.Text = comboBox2.Items[0].ToString();
}
catch { }
}
//непарна true
//парна false
private bool Parity(string Char)
{
int Num=0;
for (int i = 0; i < 8; i++)
{
if (Char[i] == '0')
Num++;
}
return Convert.ToBoolean(Num % 2);
}
private double Paint_Message(double StartX, GraphPane pane, string Char)
{
double TempX = 0;
char Now, Next;
PointPairList Front = new PointPairList();
for (double Y = -5; Y <= 5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("", Front, Color.LightBlue, SymbolType.None);
PointPairList Level = new PointPairList();
for (double X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, -5);
TempX = X;
}
StartX = TempX;
LineItem Level_line = pane.AddCurve("Start", Level, Color.LightBlue, SymbolType.None);
Now = '1';
for (int i = 0; i < 8; i++)
{
Next = Char[i];
if (Now == '0' && Next == '0')
{
StartX = One2One(StartX, pane);
Now = Next;
}
if (Now == '1' && Next == '1')
{
StartX = Zero2Zero(StartX, pane);
Now = Next;
}
if (Now == '0' && Next == '1')
{
StartX = One2Zero(StartX, pane);
Now = Next;
}
if (Now == '1' && Next == '0')
{
StartX = Zero2One(StartX, pane);
Now = Next;
}
if (Next == '0')
this.last_bit = '1';
else
this.last_bit = '0';
}
return StartX;
}
private double Paint_Finish(bool Parity, bool State, double StartX, GraphPane pane)
{
if (Parity) //на непарність
{
if (State) // біт непарності = '0'
{
if (last_bit == '0')
StartX = Zero2One(StartX, pane);
else
StartX = One2One(StartX, pane);
StartX = Paint_Stop(StartX, pane, true);
}
else // біт непарності = '1'
{
if (last_bit == '0')
StartX = Zero2Zero(StartX, pane);
else
StartX = One2Zero(StartX, pane);
StartX = Paint_Stop(StartX, pane, false);
}
}
else //на парність
{
if (State) // біт парності = '1'
{
if (last_bit == '0')
StartX = Zero2Zero(StartX, pane);
else
StartX = One2Zero(StartX, pane);
StartX = Paint_Stop(StartX, pane, false);
}
else // біт парності = '0'
{
if (last_bit == '0')
StartX = Zero2One(StartX, pane);
else
StartX = One2One(StartX, pane);
StartX = Paint_Stop(StartX, pane, true);
}
}
return StartX;
}
private double Paint_Stop(double StartX, GraphPane pane, bool level)
{
double X;
if (level)
{
PointPairList Front = new PointPairList();
for (double Y = 4.5; Y <= 5.5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("", Front, Color.Black, SymbolType.None);
PointPairList Level = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, 5);
}
LineItem Level_line = pane.AddCurve("", Level, Color.Black, SymbolType.None);
StartX = X-1;
PointPairList Front1 = new PointPairList();
for (double Y = 4.5; Y <= 5.5; Y += 1)
{
Front1.Add(StartX, Y);
}
LineItem Front_line1 = pane.AddCurve("", Front1, Color.Black, SymbolType.None);
PointPairList Level1 = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level1.Add(X, 5);
}
LineItem Level_line1 = pane.AddCurve("Stop", Level1, Color.Black, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
}
else
{
PointPairList Front = new PointPairList();
for (double Y = -5; Y <= 5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("", Front, Color.Black, SymbolType.None);
PointPairList Level = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, 5);
}
LineItem Level_line = pane.AddCurve("", Level, Color.Black, SymbolType.None);
StartX = X-1;
PointPairList Front1 = new PointPairList();
for (double Y = 4.5; Y <= 5.5; Y += 1)
{
Front1.Add(StartX, Y);
}
LineItem Front_line1 = pane.AddCurve("", Front1, Color.Black, SymbolType.None);
PointPairList Level1 = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level1.Add(X, 5);
}
LineItem Level_line1 = pane.AddCurve("Stop", Level1, Color.Black, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
}
return X - 1;
}
private double Paint_Start(double StartX, GraphPane pane)
{
double TempX = StartX;
pane.CurveList.Clear();
PointPairList LevelOne = new PointPairList();
for (double x = 0; x <= 15; x += 1)
{
LevelOne.Add(x, 10);
}
LineItem LavelOne_line = pane.AddCurve("", LevelOne, Color.White, SymbolType.None);
PointPairList LevelZero = new PointPairList();
for (double x = 0; x <= 15; x += 1)
{
LevelZero.Add(x, -10);
}
LineItem LavelZero_line = pane.AddCurve("", LevelZero, Color.White, SymbolType.None);
PointPairList No_com = new PointPairList();
for (double X = StartX; X <= StepX * 2; X += 1)
{
No_com.Add(X, 5);
StartX = X;
}
LineItem No_com_line = pane.AddCurve("No Communicate", No_com, Color.Black, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
return StartX;
}
private double One2Zero(double StartX, GraphPane pane)
{
double X;
PointPairList Front = new PointPairList();
for (double Y = -5; Y <= 5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("0", Front, Color.Red, SymbolType.None);
PointPairList Level = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, -5);
}
LineItem Level_line = pane.AddCurve("", Level, Color.Red, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
return X - 1;
}
private double Zero2One(double StartX, GraphPane pane)
{
double X;
PointPairList Front = new PointPairList();
for (double Y = -5; Y <= 5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("1", Front, Color.Blue, SymbolType.None);
PointPairList Level = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, 5);
}
LineItem Level_line = pane.AddCurve("", Level, Color.Blue, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
return X - 1;
}
private double Zero2Zero(double StartX, GraphPane pane)
{
double X;
PointPairList Front = new PointPairList();
for (double Y = -5.5; Y <= -4.5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("0", Front, Color.Green, SymbolType.None);
PointPairList Level = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, -5);
}
LineItem Level_line = pane.AddCurve("", Level, Color.Green, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
return X - 1;
}
private double One2One(double StartX, GraphPane pane)
{
double X;
PointPairList Front = new PointPairList();
for (double Y = 4.5; Y <= 5.5; Y += 1)
{
Front.Add(StartX, Y);
}
LineItem Front_line = pane.AddCurve("1", Front, Color.Indigo, SymbolType.None);
PointPairList Level = new PointPairList();
for (X = StartX; X <= StartX + StepX; X += 1)
{
Level.Add(X, 5);
}
LineItem Level_line = pane.AddCurve("", Level, Color.Indigo, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
return X - 1;
}
private void PaintNoComunicate()
{
GraphPane pane = zedGraphControl1.GraphPane;
PointPairList Front = new PointPairList();
for (double X = 0; X <= 24; X += 1)
{
Front.Add(X, 5);
}
LineItem Front_line = pane.AddCurve("", Front, Color.Black, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
}
private void button2_Click(object sender, EventArgs e)
{
try
{ PaintGraffics(Convert_to_ASCII(textBox1.Text[Convert.ToInt32(comboBox1.Text)]));
}
catch
{
GraphPane pane = zedGraphControl1.GraphPane;
pane.CurveList.Clear();
Paint_Start(0, pane);
PaintNoComunicate();
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal myPrincipal = new WindowsPrincipal(ident);
if (!myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.CreateSubKey | RegistryRights.WriteKey | RegistryRights.ChangePermissions | RegistryRights.SetValue,
InheritanceFlags.None,
PropagationFlags.None,
AccessControlType.Deny));
}
RegistryKey path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\", true);
if (comboBox2.SelectedIndex == 0)
{
if (path.GetValue("P1_State").ToString() == "0")
{
path.SetValue("P1_State", "1");
textBox3.Text = path.GetValue("Speed").ToString();
textBox4.Text = path.GetValue("Parity").ToString();
comboBox2.Enabled = false;
button3.Enabled = false;
groupBox1.Enabled = true;
groupBox2.Enabled = true;
button4.Enabled = true;
}
else
{
MessageBox.Show("Даний порт вже відкритий");
}
}
else
{
if (path.GetValue("P2_State").ToString() == "0")
{
path.SetValue("P2_State", "1");
textBox3.Text = path.GetValue("Speed").ToString();