Разработка протокола передачи данных между ЭВМ и микропроцессорной системой

Автор: Пользователь скрыл имя, 17 Апреля 2013 в 20:21, курсовая работа

Описание работы

Последовательный порт (COM порт) это несколько больше чем просто
разъем. Он преобразует данные из параллельного представления в
последовательное и меняет электрическое представление данных. Внутри
компьютера, биты данных передаются в параллельном виде (используется
несколько проводов для передачи данных одновременно). Последовательный
поток данных это последовательность битов всего по одному проводу (такому
как провод передачи и приёма данных на разъёме последовательного порта).
Для того и служит это устройство, чтобы создать такой поток данных из
параллельного вида в последовательный (внутри компьютера) и передать на
контакт передачи данных (и соответственно наоборот).

Содержание

Введение.......................................................................................................................3
COM порт.................................................................................................................3
Контакты и провода.................................................................................................4
Разработка протокола..................................................................................................5
Структура запроса/ответа.......................................................................................5
Описание структуры запроса/ответа.....................................................................5
Типы входов в устройство......................................................................................6
Исходные коды.............................................................................................................7
Классы для работы с протоколом...........................................................................7
Исходный код программы для работы с устройством.......................................10
Скриншоты программы.............................................................................................12
Заключение.................................................................................................................13
Список использованных источников.......

Работа содержит 1 файл

курсовая.pdf

— 153.06 Кб (Скачать)
Page 1
Министерство Образования Науки Российской Федерации
Федеральное Государственное Бюджетное Образовательное Учреждение
Воткинский филиал
«Ижевский государственный технический университет»
Кафедра «Организация вычислительных процессов и систем управления»
Курсовая работа
по предмету: «Организация ЭВМ и систем»
на тему: «Разработка протокола передачи данных между ЭВМ и
микропроцессорной системой»
Выполнил:
Студент группы Д-7-78-1 Тенсина С.В.
Проверил:
к.т.н. Крутихин А.Д.
г. Воткинск, 2011г.

Page 2

Оглавление
Введение.......................................................................................................................3
COM порт.................................................................................................................3
Контакты и провода.................................................................................................4
Разработка протокола..................................................................................................5
Структура запроса/ответа.......................................................................................5
Описание структуры запроса/ответа.....................................................................5
Типы входов в устройство......................................................................................6
Исходные коды.............................................................................................................7
Классы для работы с протоколом...........................................................................7
Исходный код программы для работы с устройством.......................................10
Скриншоты программы.............................................................................................12
Заключение.................................................................................................................13
Список использованных источников.......................................................................14

Page 3

Введение
Последовательный порт это устройства ввода-вывода (I/O device). Как
устройство I/O это только путь для передачи данных из компьютера и в него.
существует также множество других устройств ввода-вывода, таких как
последовательные порты, параллельные порты, контроллеры дисков, сетевые
карты, устройства универсальной последовательной шины USB, и т.п.
Большинство компьютеров имеют один или два последовательный порта.
Каждый имеет 9-ти контактный разъем (иногда 25-ти контактный) (рис.1) на
задней стенке системного блока компьютера. Программы могут отсылать
данные (байты) через контакт отправки данных (output) и получать байты через
другой контакт приёма данных (input). Все остальные контакты служат для
управления и земли.
COM порт
Последовательный порт (COM порт) это несколько больше чем просто
разъем. Он преобразует данные из параллельного представления в
последовательное и меняет электрическое представление данных. Внутри
компьютера, биты данных передаются в параллельном виде (используется
несколько проводов для передачи данных одновременно). Последовательный
поток данных это последовательность битов всего по одному проводу (такому
как провод передачи и приёма данных на разъёме последовательного порта).
Для того и служит это устройство, чтобы создать такой поток данных из
параллельного вида в последовательный (внутри компьютера) и передать на
контакт передачи данных (и соответственно наоборот).
Большинство электронных компонентов последовательного порта
сосредоточено в одно компьютерном чипе (микросхеме) называемом UART.

Page 4

Контакты и провода
Старые компьютеры используют 25-ти контактные разъёмы, но только
9 контактов реально задействовано на сегодняшний день. Каждый из 9-ти
контактов соединён обычно с проводом. за исключением двух проводов для
передачи и приёма данных, остальные используются для контроля и земли.
Напряжение на каждом из контактов и проводов измеряется относительно
сигнальной земли. Поэтому минимальное количество проводом для
двунаправленной передачи данных - 3. В редких случаях для работы может
хватить и двух проводов (без сигнальной земли), однако это может привести
к низкой производительности, и иногда к ошибкам при передаче данных.
Остаётся ещё несколько проводов, которые предназначены только для
управления (контроля) и не используются для передачи данных. Все эти
сигналы могли бы передаваться по одной линии, но вместо этого, для
выделены отдельные провода. Некоторые (или все вместе) эти сигнальные
линии называются "линии состояния модема". Линии состояния могут
находиться в одном из двух состояний установленном (включено) +12 вольт
или сброшенном (выключено) -12 вольт. Одни из этих проводов
сигнализируют компьютеру о том, что нужно прекратить передачу данных
через последовательный порт. Другие в свою очередь сигнализируют
устройству, подключённому к последовательному порту, прекратить передачу
данных в компьютер. Если подключено устройство это модем, то оставшиеся
линии могут указывать модеме на то, что нужно занять телефонную линию
или сигнализируют компьютеру о том, что соединение было установлено или
что есть звонок на телефонной линии (значит кото-то соединиться с
компьютером).

Page 5

Разработка протокола
Структура запроса/ответа
Заголовок
Тип
Размер сообщения
Сообщение
CRC
Таблица 1: Общий вид сообщения
Описание структуры запроса/ответа
№ Смещение Размер
(байт)
Значение
Описание
1
0
2
IS
Заголовок сообщения
2
2
1
D или S
Тип сообщения. (D — данные, S
— системное сообщение)
3
3
1
1 байт
(length)
Означает длину сообщения в
символах
4
4
length
Служебное или
системное сообщение
Описание данных сообщения
приведено в таблице 3
5
length+4
1
XOR всех байт
сообщения
Для подсчёта CRC вычисляется
XOR всех байт сообщения.
Таблица 2: Описание сообщения
Описание системных сообщений и данных:
№ Значение
Описание
1
START Сообщение, дающее команду к началу опроса входов.
2
STOP
Сообщение, дающее команду к окончанию опроса входов
3
Данные Данные разделяются символом «;». Сначала идут дискретные (0 или
1). Затем идут аналоговые (в пределах от 20 до -20 с точностью до
0.001)
Таблица 3: Описание возможных значений сообщения

Page 6

Типы входов в устройство

Тип
Имя
Допустимые значения
1
Дискретный
inD1
[0..1]
2
Дискретный
inD2
[0..1]
3
Дискретный
inD3
[0..1]
4
Дискретный
inD4
[0..1]
5
Аналоговый
inA1
[-20.000..+20.000]
6
Аналоговый
inA2
[-20.000..+20.000]
7
Аналоговый
inA3
[-20.000..+20.000]
8
Аналоговый
inA4
[-20.000..+20.000]
9
Аналоговый
inA5
[-20.000..+20.000]
10
Аналоговый
inA6
[-20.000..+20.000]
11
Аналоговый
inA7
[-20.000..+20.000]
12
Аналоговый
inA8
[-20.000..+20.000]
Таблица 4: Описание входов

Page 7

Исходные коды
Классы для работы с протоколом
static class Protocol{
public static byte GetLength(string data) {
return (byte)data[3];
}
public static char GetType(string data) {
return data[2];
}
public static ProtocolData GetData(string data){
if (GetType(data) == 'D') {
string[] values = GetMessage(data).Split(';');
byte inD1 = byte.Parse(values[0]);
byte inD2 = byte.Parse(values[1]);
byte inD3 = byte.Parse(values[2]);
byte inD4 = byte.Parse(values[3]);
float inA1 = float.Parse(values[4]);
float inA2 = float.Parse(values[5]);
float inA3 = float.Parse(values[6]);
float inA4 = float.Parse(values[7]);
float inA5 = float.Parse(values[8]);
float inA6 = float.Parse(values[9]);
float inA7 = float.Parse(values[10]);
float inA8 = float.Parse(values[11]);
return new ProtocolData(inD1, inD2, inD3, inD4,
inA1, inA2, inA3, inA4, inA5, inA6, inA7, inA8);
}
else{
throw new ArgumentException("Данные нельзя получить из системного
сообщения.");
}
}

Page 8

public static bool CheckMessage(string data){
byte crc = (byte)data[0];
for (int i = 1; i < data.Length - 1; i++){
crc ^= (byte)data[i];
}
return crc == data[data.Length - 1];
}
public static string GetMessage(string data){
return data.Substring(4, GetLength(data));
}
public static string CreateMessage(string data, string type){
StringBuilder message = new StringBuilder();
message.Append("IS"); //Добавить заголовок протокола
message.Append(type); //Добавить тип сообщения - системное
byte length = ((byte)data.Length); //Получаем длинну сообщения
message.Append((Char)length); //Добавляем длунну к сообщению
message.Append(data); //Добавляем текст сообщения
string tmpMessage = message.ToString();
byte crc = (byte)tmpMessage[0];
for (int i = 1; i < tmpMessage.Length - 1; i++){
crc ^= (byte)tmpMessage[i];
}
message.Append((Char)crc); //Добавляем подпись к сообщению
return message.ToString();
}
}
class ProtocolData{
public readonly byte InD1;
public readonly byte InD2;
public readonly byte InD3;

Page 9

public readonly byte InD4;
//float - точность 7 знаков
public readonly float InA1;
public readonly float InA2;
public readonly float InA3;
public readonly float InA4;
public readonly float InA5;
public readonly float InA6;
public readonly float InA7;
public readonly float InA8;
public ProtocolData(byte InD1, byte InD2, byte InD3, byte InD4,
float InA1, float InA2, float InA3, float InA4, float InA5, float InA6, float InA7, float
InA8){
this.InD1 = InD1;
this.InD2 = InD2;
this.InD3 = InD3;
this.InD4 = InD4;
this.InA1 = InA1;
this.InA2 = InA2;
this.InA3 = InA3;
this.InA4 = InA4;
this.InA5 = InA5;
this.InA6 = InA6;
this.InA7 = InA7;
this.InA8 = InA8;
}
public override string ToString(){
return InD1 + ";" + InD2 + ";" + InD3 + ";" + InD4 + ";" +
Math.Round(InA1, 3) + ";" + Math.Round(InA2, 3) + ";" + Math.Round(InA3, 3) + ";" +
Math.Round(InA4, 3) + ";" + Math.Round(InA5, 3) + ";" + Math.Round(InA6, 3) + ";" +
Math.Round(InA7, 3) + ";" + Math.Round(InA8, 3);
}
}

Page 10

Исходный код эмулятора микропроцессорной системы
public partial class Form1 : Form
{
SerialPort port = new SerialPort();
bool started = false;
public Form1()
{
InitializeComponent();
Timer t = new Timer();
t.Tick += new EventHandler(t_Tick);
t.Interval = 1000;
t.Start();
port.PortName = "COM3";
port.ReadTimeout = 1000;
port.Encoding = Encoding.GetEncoding(1251);
port.Open();
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string message = port.ReadLine();
message = Protocol.GetMessage(message);
switch (message)
{
case "START":
{
{
started = true;
break;
}
}
case "STOP":
{
lock (label9)

Page 11

{
started = false;
break;
}
}
}
}
void t_Tick(object sender, EventArgs e)
{
if (started)
{
label9.ForeColor = Color.Green;
label9.Text = "Идёт опрос";
string message = string.Empty;
ProtocolData pd = new ProtocolData(
(byte)((inD1.Checked) ? 1 : 0), (byte)((inD2.Checked) ? 1 : 0),
(byte)((inD3.Checked) ? 1 : 0), (byte)((inD4.Checked) ? 1 : 0),
(float)inA1.Value, (float)inA2.Value, (float)inA3.Value, (float)inA4.Value,
(float)inA5.Value, (float)inA6.Value, (float)inA7.Value, (float)inA8.Value);
port.WriteLine(Protocol.CreateMessage(pd.ToString(), "D"));
}
else
{
label9.ForeColor = Color.Red;
label9.Text = "Опрос не ведётся";
}
}
}

Page 12

Скриншоты программы
Рисунок 1: Общий вид работы программы для эмулятора микропроцессорной системы и
ЭВМ (слева на право)
Рисунок 2: Описание интерфейса эмулятора микропроцессорной системы

Page 13

Заключение
В данной работе был спроектирован протокол для обмена данными с
микропроцессорной системой, а также программное обеспечение, демонстрирующее обмен
данными с микропроцессорной системой, общающихся с помощью разработанного
протокола посредством интерфейса RS-232.

Page 14

Список использованных источников
1.
.NET сетевое программирование для профессионалов Э.Кровчик, Лори 2005.
2.
Программирование на языке С#. Учебный курс. Фаронов В.В. Питер, 2007.
3.
http://msdn.microsoft.com/ru-ru/library/
4.
http://www.aggsoft.ru/rs232-pinout-cable/serial-port-interface.htm

Информация о работе Разработка протокола передачи данных между ЭВМ и микропроцессорной системой