Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт1 вариант1 гр6402.doc
Скачиваний:
19
Добавлен:
16.03.2015
Размер:
606.72 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ

УНИВЕРСИТЕТ имени академика С.П. КОРОЛЕВА»

(НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ)

Факультет информатики

Кафедра информационных систем и технологий

ОТЧЁТ

к лабораторной работе №1 по курсу

«Интерфейсы АСОИУ»

Выполнили: Алтухов Д.А., гр. 6402

Кривопалов В.Ю., гр. 6402

Маратканов Ю.С., гр. 6402

Проверил: Иоффе В.Г.

Самара, 2011

СОДЕРЖАНИЕ

1 Задание 3

2 Электрическая схема соединения 4

3 Список используемых команд 5

4 Интерфейс пользователя 6

5 Листинг программы с комментариями 8

1 Задание

Вариант 1

Использовать модули I-7021 и I-7044

Сформировать на основе I-7021 экспоненциальное напряжение в рабочем диапазоне модуля. При работе использовать эхоконтроль. Если U ≤ Uдоп. , на выходе модуля I-7044 сформировать потенциал (или импульс, если будет осциллограф).

2 Электрическая схема соединения

Рисунок 1 – Электрическая схема соединения модулей

3 Список используемых команд

Таблица 1 – Используемые общие команды для модулей серии I-7000

Команда

Ответное сообщение

Описание

~AA1

!AA

Произвести сброс статуса модуля

$AAМ

!AA(Данные)

Запросить название модуля

Таблица 2 – Используемые команды модуля I-7021

Команда

Ответное сообщение

Описание

%AANNTTCCFF

!АА

Настроить параметры конфигурации модуля

$AA2

!AANNTTCCFF

Считать параметры конфигурации модуля

#AA(Данные)

>

Задать значение, устанавливаемое на аналоговом выходе модуля

$AA7

!АА

Произвести калибровку значения 10 В

$AA8

!AA(Данные)

Эхоконтроль выхода

Таблица 3 – Используемые команды модуля I-7044

Команда

Ответное сообщение

Описание

%AANNTTCCFF

!AA

Настроить параметры конфигурации модуля

$AA2

!AATTCCFF

Считать параметры конфигурации модуля

@AA(Данные)

>

Установить дискретные выходы

@AA

>(Данные)

Считать данные с дискретных входов и выходов

4 Интерфейс пользователя

Рисунок 2 – Начальный вид формы

Рисунок 3 – Вид формы при настроенном виртуальном подключении и настроенных параметрах функции экспоненциального напряжения

Рисунок 4 – Вид формы после расчётов и отрисовки графиков напряжения

5 Листинг программы с комментариями

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO.Ports;

namespace WinApp___2011_10_02___InterfaceLab1

{

public partial class Form1 : Form

{

public SerialPort comport = new SerialPort(); //переменная COM-порта

public int openedPortNumber; //номер открытого порта

public int testModuleNumber; //предполагаемый адрес модуля при тестировании адреса

public bool testAdress; //флаг тестирования адреса

public bool specialCommand; //флаг отдельной команды, подаваемой на порт

public bool adr7021correct; //флаг подтверждения нахождения 7021 по указанному адресу

public bool adr7044correct; //флаг подтверждения нахождения 7044 по указанному адресу

public bool recordFuncToHistory; //флаг записи команд, поданных при формировании функции, в историю команд

public bool isInAllowedRange; //флаг нахождения выходного сигнала 7021 в пределах допустимого диапазона

public bool functionFailed; //флаг провала формирования функции

public bool timerEventFired; //флаг достижения таймером установленного значения

public bool graphicsDrawnOnce; //флаг подтверждения необходимости перерисовки графиков при переключении на окно программы

public static double[] dots; //массив точек на графике экспоненциального напряжения

public static int[] impulseAmp; //массив значений, снимаемых с 7044

public string answer; //строка ответа от одного из модулей

public string[] baudRateCodes; //массив строк, содержащих скорости передачи данных при формировании команд настройки модулей

public System.Timers.Timer timerImpulse; //таймер, отсчитывающий длительность импульса 7044

public Form1()

{

InitializeComponent();

comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); //регистрация события получения данных из COM-порта

}

private void Form1_Load(object sender, EventArgs e)

{

for (int i = 1; i <= 256; i++) //установки номеров порта и скоростей передачи на старте программы

{

comboBoxPorts.Items.Add((string)("COM" + i));

}

comboBoxPorts.SelectedIndex = 0;

bool foundDefaultBaud = false;

int j = 0;

while ((j < comboBoxSpeed.Items.Count) && (!foundDefaultBaud))

{

if (comboBoxSpeed.Items[j].ToString() == "9600")

foundDefaultBaud = true;

else j++;

}

if (foundDefaultBaud) comboBoxSpeed.SelectedIndex = j;

else comboBoxSpeed.SelectedIndex = 0;

dots = new double[Convert.ToInt32(numFuncSteps.Maximum)];

impulseAmp = new int[2];

baudRateCodes = new string[8] { "03", "04", "05", "06", "07", "08", "09", "0A" }; //установка кодов скоростей передачи при настройке модулей

timerImpulse = new System.Timers.Timer();

timerImpulse.Elapsed += new System.Timers.ElapsedEventHandler(timerImpulse_Elapsed);

testAdress = false;

specialCommand = false;

adr7021correct = false;

adr7044correct = false;

recordFuncToHistory = false;

graphicsDrawnOnce = false;

radioButtonReal.Enabled = true;

radioButtonFuncRising.Checked = true;

radioButtonFuncHollow.Checked = true;

groupBoxPortSetup.Enabled = false;

buttonClose.Enabled = false;

groupBoxPortCommands.Enabled = false;

groupBox7021.Enabled = false;

groupBox7044.Enabled = false;

groupBoxVirtual7021.Enabled = false;

groupBoxVirtual7044.Enabled = false;

groupBoxFunction.Enabled = false;

groupBoxGraphs.Enabled = false;

buttonBegin.Enabled = false;

}

private void AddHistoryMessage(string msg) //метод добавления строки в панель истории событий программы

{

richTextBoxHistory.Invoke(new EventHandler(delegate

{

richTextBoxHistory.AppendText(msg);

richTextBoxHistory.ScrollToCaret();

}));

}

private void buttonOpen_Click(object sender, EventArgs e)

{

if (comport.IsOpen) AddHistoryMessage("Порт занят. Сперва закройте используемый порт COM" + openedPortNumber + ". \n");

else

{

comport.PortName = comboBoxPorts.SelectedItem.ToString(); //установка параметров COM-порта перед его открытием

openedPortNumber = comboBoxPorts.SelectedIndex;

int baudRate = 9600;

int.TryParse(comboBoxSpeed.SelectedItem.ToString(), out baudRate);

comport.BaudRate = baudRate;

comport.DataBits = 8;

comport.StopBits = StopBits.One;

comport.Parity = Parity.None;

comport.Handshake = Handshake.None;

comport.ReceivedBytesThreshold = 8;

comport.WriteBufferSize = 20;

comport.ReadBufferSize = 20;

comport.ReadTimeout = Convert.ToInt32(numTimeoutRead.Value);

comport.WriteTimeout = Convert.ToInt32(numTimeoutWrite.Value);

comport.DtrEnable = false;

try

{

comport.Open(); //попытка открытия COM-порта

comport.RtsEnable = true;

System.Threading.Thread.Sleep(100);

AddHistoryMessage("Порт " + comboBoxPorts.SelectedItem.ToString() + " открыт. \n");

radioButtonVirtual.Enabled = false;

buttonOpen.Enabled = false;

buttonClose.Enabled = true;

comboBoxPorts.Enabled = false;

comboBoxSpeed.Enabled = false;

numTimeoutRead.Enabled = false;

numTimeoutWrite.Enabled = false;

groupBoxPortCommands.Enabled = true;

groupBox7021.Enabled = true;

groupBox7044.Enabled = true;

groupBoxVirtual7021.Enabled = false;

groupBoxVirtual7044.Enabled = false;

groupBoxFunction.Enabled = true;

}

catch

{

AddHistoryMessage("Порт " + comboBoxPorts.SelectedItem.ToString() + " открыть не удалось. \n");

}

}

}

private void buttonWrite_Click(object sender, EventArgs e)

{

try

{

specialCommand = true; //попытка передачи отдельной команды, сформированной пользователем, в COM-порт

textBoxAnswer.Text = "";

comport.WriteLine(textBoxCommand.Text + (char)0x0D);

AddHistoryMessage("Записана команда: " + textBoxCommand.Text + " \n");

}

catch (TimeoutException)

{

AddHistoryMessage("Превышено время ожидания записи команды " + textBoxCommand.Text + " \n");

specialCommand = false;

}

}

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) //регистрация события на получение данных COM-портом

{

this.Invoke(new EventHandler(AddRecieve));

}

private void AddRecieve(object s, EventArgs e) //метод, исполняющийся при получении COM-портом данных

{

try

{

System.Threading.Thread.Sleep(100); //ожидание, требуемое для полной записи сообщения от модуля

byte[] dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length);

if (!testAdress) //обработка данных из модуля при вводе отдельной команды пользователем

{

answer = "";

if ((specialCommand) || (recordFuncToHistory)) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if ((specialCommand) || (recordFuncToHistory)) AddHistoryMessage(((char)dataR[i]).ToString());

if (specialCommand)

textBoxAnswer.Text += ((char)dataR[i]).ToString();

answer += ((char)dataR[i]).ToString();

}

if (specialCommand) textBoxAnswer.Text = textBoxAnswer.Text.Remove(textBoxAnswer.Text.Length - 1);

if (answer.Length > 0) answer = answer.Remove(answer.Length - 1);

if ((specialCommand) || (recordFuncToHistory)) AddHistoryMessage(" \n");

}

else //обработка данных из модуля при проверке адреса модуля

{

testAdress = false;

string adressFeedback = "";

for (int i = 0; i < dataR.Length; i++)

{

adressFeedback += ((char)dataR[i]).ToString();

}

adressFeedback = adressFeedback.Remove(adressFeedback.Length - 1);

if (testModuleNumber == 7021)

{

if (adressFeedback == "!" + textBoxAdress7021.Text + "7021")

MessageBox.Show("По адресу " + textBoxAdress7021.Text + " действительно находится модуль 7021");

else MessageBox.Show("Модуль 7021 не найден по адресу " + textBoxAdress7021.Text);

}

else

{

if (adressFeedback == "!" + textBoxAdress7044.Text + "7044")

MessageBox.Show("По адресу " + textBoxAdress7044.Text + " действительно находится модуль 7044");

else MessageBox.Show("Модуль 7044 не найден по адресу " + textBoxAdress7044.Text);

}

}

}

catch (TimeoutException) //сообщения, выдаваемые при превышении времени ожидания ответа от модуля

{

if (testAdress)

{

if (testModuleNumber == 7021)

AddHistoryMessage("Превышено время ожидания ответа с команды !" + textBoxAdress7021.Text + "M \n");

else AddHistoryMessage("Превышено время ожидания ответа с команды !" + textBoxAdress7044.Text + "M \n");

}

else

if (specialCommand) AddHistoryMessage("Превышено время ожидания ответа с команды " + textBoxCommand.Text + " \n");

testAdress = false;

specialCommand = false;

}

comport.DiscardInBuffer();

}

private void buttonClose_Click(object sender, EventArgs e)

{

if (comport.IsOpen) //действия, предпринимаемые при закрытии COM-порта

{

comport.DiscardOutBuffer();

comport.DiscardInBuffer();

comport.Close();

AddHistoryMessage("Порт COM" + openedPortNumber + " закрыт. \n");

buttonOpen.Enabled = true;

buttonClose.Enabled = false;

comboBoxPorts.Enabled = true;

comboBoxSpeed.Enabled = true;

numTimeoutRead.Enabled = true;

numTimeoutWrite.Enabled = true;

groupBoxPortCommands.Enabled = false;

groupBox7021.Enabled = false;

groupBox7044.Enabled = false;

groupBoxFunction.Enabled = false;

radioButtonVirtual.Enabled = true;

}

else

{

AddHistoryMessage("Порт уже закрыт. \n");

}

}

private void buttonTestAdress7021_Click(object sender, EventArgs e) //метод проверки адреса модуля 7021

{

testAdress = true;

testModuleNumber = 7021;

try

{

comport.WriteLine("$" + textBoxAdress7021.Text + "M" + (char)0x0D); //попытка послать команду идентификации модуля по данному адресу

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа от модуля

{

AddHistoryMessage("Превышено время ожидания записи команды " + textBoxCommand.Text + " \n");

testAdress = false;

}

}

private void buttonTestAdress7044_Click(object sender, EventArgs e) //метод проверки адреса модуля 7044

{

testAdress = true;

testModuleNumber = 7044;

try

{

comport.WriteLine("$" + textBoxAdress7044.Text + "M" + (char)0x0D); //попытка послать команду идентификации модуля по данному адресу

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа от модуля

{

AddHistoryMessage("Превышено время ожидания записи команды " + textBoxCommand.Text + " \n");

testAdress = false;

}

}

private void checkBoxVirtual7021_CheckedChanged(object sender, EventArgs e) //метод, определяющий действия при выборе виртуального модуля 7021

{

if (checkBoxVirtual7021.Checked)

{

groupBoxVirtual7021.Enabled = true;

buttonTestAdress7021.Enabled = false;

}

else

{

groupBoxVirtual7021.Enabled = false;

buttonTestAdress7021.Enabled = true;

}

}

private void checkBoxVirtual7044_CheckedChanged(object sender, EventArgs e) //метод, определяющий действия при выборе виртуального модуля 7044

{

if (checkBoxVirtual7044.Checked)

{

groupBoxVirtual7044.Enabled = true;

buttonTestAdress7044.Enabled = false;

}

else

{

groupBoxVirtual7044.Enabled = false;

buttonTestAdress7044.Enabled = true;

}

}

private void radioButtonReal_CheckedChanged(object sender, EventArgs e) //метод, определяющий действия при выборе реального подключения модулей

{

if (radioButtonReal.Checked)

{

groupBoxPortSetup.Enabled = true;

groupBox7021.Enabled = false;

checkBoxVirtual7021.Checked = false;

checkBoxVirtual7021.Enabled = true;

buttonTestAdress7021.Enabled = true;

groupBox7044.Enabled = false;

checkBoxVirtual7044.Checked = false;

checkBoxVirtual7044.Enabled = true;

buttonTestAdress7044.Enabled = true;

groupBoxFunction.Enabled = false;

labelCOMport.Enabled = true;

labelTimeoutWrite.Enabled = true;

labelTimeoutRead.Enabled = true;

buttonOpen.Enabled = true;

comboBoxPorts.Enabled = true;

numTimeoutWrite.Enabled = true;

numTimeoutRead.Enabled = true;

}

}

private void radioButtonVirtual_CheckedChanged(object sender, EventArgs e) //метод, определяющий действия при выборе полностью виртуального подключения модулей

{

if (radioButtonVirtual.Checked)

{

groupBoxPortSetup.Enabled = true;

groupBox7021.Enabled = true;

checkBoxVirtual7021.Checked = true;

checkBoxVirtual7021.Enabled = false;

buttonTestAdress7021.Enabled = false;

groupBox7044.Enabled = true;

checkBoxVirtual7044.Checked = true;

checkBoxVirtual7044.Enabled = false;

buttonTestAdress7044.Enabled = false;

groupBoxFunction.Enabled = true;

labelCOMport.Enabled = false;

labelTimeoutWrite.Enabled = false;

labelTimeoutRead.Enabled = false;

buttonOpen.Enabled = false;

comboBoxPorts.Enabled = false;

numTimeoutWrite.Enabled = false;

numTimeoutRead.Enabled = false;

}

}

private void textBoxAdress7021_TextChanged(object sender, EventArgs e) //метод, анализирующий изменение поля адреса модуля 7021

{

textBoxAdress7021.Text = textBoxAdress7021.Text.ToUpper();

if (textBoxAdress7021.Text.Length == 2)

{

if (((("0123456789ABCDEFabcdef").IndexOf(textBoxAdress7021.Text[0])) != -1) && ((("0123456789ABCDEFabcdef").IndexOf(textBoxAdress7021.Text[1])) != -1))

adr7021correct = true;

else adr7021correct = false;

}

else adr7021correct = false;

if (adr7021correct && adr7044correct && (textBoxAdress7021.Text.ToUpper() != textBoxAdress7044.Text.ToUpper()))

buttonBegin.Enabled = true;

else buttonBegin.Enabled = false;

}

private void textBoxAdress7044_TextChanged(object sender, EventArgs e) //метод, анализирующий изменение поля адреса модуля 7044

{

textBoxAdress7044.Text = textBoxAdress7044.Text.ToUpper();

if (textBoxAdress7044.Text.Length == 2)

{

if (((("0123456789ABCDEFabcdef").IndexOf(textBoxAdress7044.Text[0])) != -1) && ((("0123456789ABCDEFabcdef").IndexOf(textBoxAdress7044.Text[1])) != -1))

adr7044correct = true;

else adr7044correct = false;

}

else adr7044correct = false;

if (adr7021correct && adr7044correct && (textBoxAdress7021.Text.ToUpper() != textBoxAdress7044.Text.ToUpper()))

buttonBegin.Enabled = true;

else buttonBegin.Enabled = false;

}

private void checkBoxFuncToHistory_CheckedChanged(object sender, EventArgs e) //метод, определяющий запись сообщений в историю при формировании экспоненциального напряжения

{

if (checkBoxFuncToHistory.Checked)

recordFuncToHistory = true;

else recordFuncToHistory = false;

}

private void CountFunction(int count, bool risen, bool hollow) //метод, высчитывающий напряжения, небходимые для формирования экспоненциальной функции с заданным числом точек

{

double maxX, maxY, minX, minY;

maxY = 0.99;

maxX = -Math.Log(1 - maxY, Math.E);

minY = 0.01;

minX = -Math.Log(1 - minY, Math.E);

double interval = (maxX - minX) / (count - 1);

int j;

if (risen)

{

if (hollow)

{

for (int i = count - 1; i >= 0; i--)

{

j = count - i - 1;

dots[i] = Math.Round(Math.Exp(-(minX + interval * j)) * 10, 3);

}

}

else

{

for (int i = 0; i < count; i++)

{

dots[i] = Math.Round((1 - Math.Exp(-(minX + interval * i))) * 10, 3);

}

}

}

else

{

if (hollow)

{

for (int i = 0; i < count; i++)

{

dots[i] = Math.Round(Math.Exp(-(minX + interval * i)) * 10, 3);

}

}

else

{

for (int i = count - 1; i >= 0; i--)

{

j = count - i - 1;

dots[i] = Math.Round((1 - Math.Exp(-(minX + interval * j))) * 10, 3);

}

}

}

}

private void DrawGraphics() //метод рисования графиков напряжений модулей 7021 и 7044

{

Graphics g1 = panel7021.CreateGraphics(); //отрисовка графика 7021

g1.Clear(Color.White);

using (g1)

{

using (Pen pen = new Pen(Color.Black, 2f))

{

g1.DrawLine(pen, 15f, 1f, 15f, 151f);

g1.DrawLine(pen, 15f, 151f, 220f, 151f);

}

using (Pen penR = new Pen(Color.Red, 1f))

{

float interval = 200f / (Convert.ToInt32(numFuncSteps.Value) - 1);

for (int i = 1; i < Convert.ToInt32(numFuncSteps.Value); i++)

{

g1.DrawLine(penR, 16f + interval * (i - 1), 151f - (float)(dots[i - 1] / 10 * 150), 16f + interval * i, 151f - (float)(dots[i] / 10 * 150));

}

}

}

Graphics g2 = panel7044.CreateGraphics(); //отрисовка графика 7044

g2.Clear(Color.White);

using (g2)

{

using (Pen pen = new Pen(Color.Black, 2f))

{

g2.DrawLine(pen, 15f, 1f, 15f, 151f);

g2.DrawLine(pen, 15f, 151f, 220f, 151f);

}

Pen penS;

if (isInAllowedRange) penS = new Pen(Color.Green, 1f);

else penS = new Pen(Color.Red, 1f);

using (penS)

{

g2.DrawLine(penS, 15f, 145f, 115f, 145f);

if (isInAllowedRange)

{

float interval = 130f - (float)((255 - Convert.ToDouble(impulseAmp[0])) / 255 * 130);

g2.DrawLine(penS, 115f, 145f, 115f, 145f - interval);

g2.DrawLine(penS, 115f, 145f - interval, 205f, 145f - interval);

float interval2 = 130f - (float)((255 - Convert.ToDouble(impulseAmp[1])) / 255 * 130);

g2.DrawLine(penS, 205f, 145f - interval, 205f, 145f - interval2);

g2.DrawLine(penS, 205f, 145f - interval2, 215f, 145f - interval2);

}

else

{

g2.DrawLine(penS, 115f, 145f, 215f, 145f);

}

}

}

}

private void buttonBegin_Click(object sender, EventArgs e) //метод формирования экспоненциального напряжения

{

groupBoxRadioVirtual.Enabled = false; //предварительная настройка и подсчёты

groupBoxPortSetup.Enabled = false;

groupBoxPortCommands.Enabled = false;

groupBox7021.Enabled = false;

groupBox7044.Enabled = false;

groupBoxFunction.Enabled = false;

CountFunction(Convert.ToInt32(numFuncSteps.Value), radioButtonFuncRising.Checked, radioButtonFuncHollow.Checked);

recordFuncToHistory = checkBoxFuncToHistory.Checked;

isInAllowedRange = true;

functionFailed = false;

if (checkBoxVirtual7021.Checked) //"настройка" виртуального модуля 7021

{

AddHistoryMessage("\nИдёт настройка I-7021 \n\n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: ~" + textBoxAdress7021.Text + "1 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7021.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7021.Text + " \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: %" + textBoxAdress7021.Text + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7021.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7021.Text + " \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7021.Text + "2 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7021.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7021.Text + "7 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7021.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7021.Text + " \n");

AddHistoryMessage("\nНастройка I-7021 прошла успешно \n");

}

else //настройка реального модуля 7021

{

AddHistoryMessage("\nИдёт настройка I-7021 \n\n");

try //попытка сброса статуса модуля 7021

{

comport.WriteLine("~" + textBoxAdress7021.Text + "1" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: ~" + textBoxAdress7021.Text + "1 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды ~" + textBoxAdress7021.Text + "1 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

byte[] dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7021.Text) //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды ~" + textBoxAdress7021.Text + "1 \n");

functionFailed = true;

}

}

if (!functionFailed)

{

try //попытка настройки модуля 7021 на заданные скорость и формат вывода

{

comport.WriteLine("%" + textBoxAdress7021.Text + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: %" + textBoxAdress7021.Text + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды %" + textBoxAdress7021.Text + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7021.Text) //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды %" + textBoxAdress7021.Text + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

functionFailed = true;

}

}

}

if (!functionFailed)

{

try //попытка проверки настроенного режима работы модуля 7021

{

comport.WriteLine("$" + textBoxAdress7021.Text + "2" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7021.Text + "2 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды $" + textBoxAdress7021.Text + "2 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7021.Text + "32" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды $" + textBoxAdress7021.Text + "2 \n");

functionFailed = true;

}

}

}

if (!functionFailed)

{

try //попытка калибровки значения модуля 7021 на 10 В

{

comport.WriteLine("$" + textBoxAdress7021.Text + "7" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7021.Text + "7 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды $" + textBoxAdress7021.Text + "7 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7021.Text) //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды $" + textBoxAdress7021.Text + "7 \n");

functionFailed = true;

}

}

}

if (!functionFailed) AddHistoryMessage("\nНастройка I-7021 прошла успешно \n");

else AddHistoryMessage("\nНастройка I-7021 провалилась \n");

}

if (checkBoxVirtual7044.Checked) //"настройка" виртуального модуля 7044

{

AddHistoryMessage("\nИдёт настройка I-7044 \n\n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: ~" + textBoxAdress7044.Text + "1 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7044.Text + " \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: %" + textBoxAdress7044.Text + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7044.Text + " \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7044.Text + "2 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + "00 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: > \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + " \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: >0000 \n");

AddHistoryMessage("\nНастройка I-7044 прошла успешно \n");

}

else if (!functionFailed) //настройка реального модуля 7044

{

AddHistoryMessage("\nИдёт настройка I-7044 \n");

try //попытка сброса статуса модуля 7044

{

comport.WriteLine("~" + textBoxAdress7044.Text + "1" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: ~" + textBoxAdress7044.Text + "1 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды ~" + textBoxAdress7044.Text + "1 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

byte[] dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7044.Text) //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды ~" + textBoxAdress7044.Text + "1 \n");

functionFailed = true;

}

}

if (!functionFailed)

{

try //попытка настройки модуля 7044 на заданные скорость и формат вывода

{

comport.WriteLine("%" + textBoxAdress7044.Text + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: %" + textBoxAdress7044.Text + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды %" + textBoxAdress7044.Text + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7044.Text) //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды %" + textBoxAdress7044.Text + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00 \n");

functionFailed = true;

}

}

}

if (!functionFailed) //сообщение о превышении времени ожидания ответа

{

try //попытка проверки настроенного режима работы модуля 7044

{

comport.WriteLine("$" + textBoxAdress7021.Text + "2" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7044.Text + "2 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды $" + textBoxAdress7044.Text + "2 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != "!" + textBoxAdress7044.Text + "40" + baudRateCodes[comboBoxSpeed.SelectedIndex] + "00") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды $" + textBoxAdress7044.Text + "2 \n");

functionFailed = true;

}

}

}

if (!functionFailed) //сообщение о превышении времени ожидания ответа

{

try //попытка установки нулевого выходного напряжения на модуле 7044

{

comport.WriteLine("@" + textBoxAdress7044.Text + "00" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + "00 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды @" + textBoxAdress7044.Text + "00 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != ">") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды @" + textBoxAdress7044.Text + "00 \n");

functionFailed = true;

}

}

}

if (!functionFailed) //сообщение о превышении времени ожидания ответа

{

try //попытка проверки нулевого напряжения на модуле 7044

{

comport.WriteLine("@" + textBoxAdress7044.Text + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + " \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды @" + textBoxAdress7044.Text + " \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer.Substring(0, 3) != ">00") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды @" + textBoxAdress7044.Text + " \n");

functionFailed = true;

}

}

}

if (!functionFailed) AddHistoryMessage("\nНастройка I-7044 прошла успешно \n");

else AddHistoryMessage("\nНастройка I-7044 провалилась \n");

}

if (!functionFailed)

{

AddHistoryMessage("\nНачинается формирование экспоненциального напряжения \n\n");

if (checkBoxVirtual7021.Checked) //"формирование" экспоненциального напряжения на виртуальном модуле 7021

{

for (int i = 0; i < Convert.ToInt32(numFuncSteps.Value); i++)

{

if (recordFuncToHistory) AddHistoryMessage("Записана команда: #" + textBoxAdress7021.Text + (String.Format("{0,6:00.000}", dots[i])).Replace(',', '.') + " \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7021.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: > \n");

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7021.Text + "8 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7021.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: !" + textBoxAdress7021.Text + (String.Format("{0,6:00.000}", dots[i])).Replace(',', '.') + " \n");

}

AddHistoryMessage("\nЭкспоненциальное напряжение успешно сформировано \n");

}

else //формирование экспоненциального напряжения на реальном модуле 7021

{

for (int j = 0; j < Convert.ToInt32(numFuncSteps.Value); j++) //для каждой точки графика задаётся отдельное напряжение

{

try //попытка подачи команды о формировании заданного напряжения на модуле 7021

{

comport.WriteLine("#" + textBoxAdress7021.Text + (String.Format("{0,6:00.000}", dots[j])).Replace(',', '.') + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: #" + textBoxAdress7021.Text + (String.Format("{0,6:00.000}", dots[j])).Replace(',', '.') + " \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды #" + textBoxAdress7021.Text + (String.Format("{0,6:00.000}", dots[j])).Replace(',', '.') + " \n");

functionFailed = true;

break;

}

while (comport.BytesToRead < 1)

System.Threading.Thread.Sleep(100); //ожидание формирования в буфере ответного сообщения

byte[] dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != ">") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды #" + textBoxAdress7021.Text + (String.Format("{0,6:00.000}", dots[j])).Replace(',', '.') + " \n");

functionFailed = true;

break;

}

}

try //попытка чтения поставленного на модуле 7021 напряжения с эхоконтролем

{

comport.WriteLine("$" + textBoxAdress7021.Text + "8" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: $" + textBoxAdress7021.Text + "8 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды $" + textBoxAdress7021.Text + "8 \n");

functionFailed = true;

break;

}

while (comport.BytesToRead < 10) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer.Substring(0, 3) == "!" + textBoxAdress7021.Text) //анализ полученного ответа и запись напряжения, снятого с модуля 7021

{

try

{

dots[j] = Convert.ToDouble(answer.Substring(3, 5));

}

catch

{

dots[j] = Convert.ToDouble(answer.Substring(3, 5).Replace('.', ','));

}

if ((dots[j] < 0) || (dots[j] > 10))

{

isInAllowedRange = false;

}

}

else //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды $" + textBoxAdress7021.Text + "8 \n");

functionFailed = true;

break;

}

}

}

if (!functionFailed) AddHistoryMessage("\nЭкспоненциальное напряжение успешно сформировано \n");

else AddHistoryMessage("\nВывод экспоненциального напряжения провален \n");

}

}

if (!functionFailed)

{

if (isInAllowedRange) //если напряжение с модуля 7021 находится в допустимом диапазоне, выполнить следущее:

{

AddHistoryMessage("\nЭкспоненциальное напряжение выводилось в пределах допустимого диапазона, \nначинается формирование импульса на I-7044 \n\n");

if (checkBoxVirtual7044.Checked) //"формирование" импульса заданной длительности на виртуальном модуле 7044

{

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + "FF \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: > \n");

impulseAmp[0] = 255;

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + " \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: >FF00 \n");

timerImpulse.Interval = Convert.ToDouble(numImpulse7044.Value);

timerEventFired = false;

timerImpulse.Start();

while (!timerEventFired) ;

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + "00 \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: > \n");

impulseAmp[1] = 0;

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + " \n");

System.Threading.Thread.Sleep(Convert.ToInt32(numVirtualTimestep7044.Value));

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: >0000 \n");

}

else //формирование импульса заданной длительности на реальном модуле 7044

{

try //попытка формирования максимального напряжения на выводах модуля 7044

{

comport.WriteLine("@" + textBoxAdress7044.Text + "FF" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + "FF \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды @" + textBoxAdress7044.Text + "FF \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

byte[] dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != ">") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды @" + textBoxAdress7044.Text + "FF \n");

functionFailed = true;

}

}

if (!functionFailed)

{

try //попытка чтения напряжения на выводе модуля 7044

{

comport.WriteLine("@" + textBoxAdress7044.Text + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + " \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды @" + textBoxAdress7044.Text + " \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer[0] != '>') //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды @" + textBoxAdress7044.Text + " \n");

functionFailed = true;

}

else

{

impulseAmp[1] = Int32.Parse(answer.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier); //запись значения напряжения на выводе модуля 7044

}

}

}

if (!functionFailed)

{

timerImpulse.Interval = Convert.ToDouble(numImpulse7044.Value); //включение таймера, отсчитывающего длительность импульса на модуле 7044

timerEventFired = false;

timerImpulse.Start();

while (!timerEventFired) ; //ожидание достижения таймером заданной длительности

}

if (!functionFailed)

{

try //попытка формирования нулевого напряжения на выводах модуля 7044

{

comport.WriteLine("@" + textBoxAdress7044.Text + "00" + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + "00 \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды @" + textBoxAdress7044.Text + "00 \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer != ">") //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды @" + textBoxAdress7044.Text + "00 \n");

functionFailed = true;

}

}

}

if (!functionFailed)

{

try //попытка чтения напряжения на выводе модуля 7044

{

comport.WriteLine("@" + textBoxAdress7044.Text + (char)0x0D);

if (recordFuncToHistory) AddHistoryMessage("Записана команда: @" + textBoxAdress7044.Text + " \n");

}

catch (TimeoutException) //сообщение о превышении времени ожидания ответа

{

AddHistoryMessage("Превышено время ожидания записи команды @" + textBoxAdress7044.Text + " \n");

functionFailed = true;

}

while (comport.BytesToRead == 0) //ожидание формирования в буфере ответного сообщения

System.Threading.Thread.Sleep(100);

dataR = new byte[comport.BytesToRead];

comport.Read(dataR, 0, dataR.Length); //чтение и анализ ответа

answer = "";

if (recordFuncToHistory) AddHistoryMessage("Получен ответ: ");

for (int i = 0; i < dataR.Length; i++)

{

if (recordFuncToHistory) AddHistoryMessage(((char)dataR[i]).ToString());

answer += ((char)dataR[i]).ToString();

}

answer = answer.Remove(answer.Length - 1);

if (recordFuncToHistory) AddHistoryMessage(" \n");

comport.DiscardInBuffer();

{

if (answer[0] != '>') //сообщение при неверном ответе

{

AddHistoryMessage("Получен неверный ответ при записи команды @" + textBoxAdress7044.Text + " \n");

functionFailed = true;

}

else

{

impulseAmp[1] = Int32.Parse(answer.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier);

}

}

}

}

if (!functionFailed) AddHistoryMessage("\nФормирование импульса на I-7044 успешно закончено \n");

else AddHistoryMessage("\nФормирование импульса на I-7044 провалено \n");

}

else //если напряжение с модуля 7021 не находится в допустимом диапазоне, выполнить следущее:

{

for (int i = 0; i < impulseAmp.Length; i++) //на выводе модуля 7044 всё время остаётся нулевое напряжение

{

impulseAmp[i] = 0;

}

}

}

if (!functionFailed) //если формирование экспоненциального напряжения прошло без сбоев, ...

{

groupBoxGraphs.Enabled = true; //отрисовать графики напряжений на модулях

graphicsDrawnOnce = true;

DrawGraphics();

}

groupBoxRadioVirtual.Enabled = true; //возобновление возможности работы с компонентами формы

groupBoxPortSetup.Enabled = true;

if (radioButtonReal.Checked)

{

groupBoxPortCommands.Enabled = true;

}

groupBox7021.Enabled = true;

groupBox7044.Enabled = true;

groupBoxFunction.Enabled = true;

}

private void timerImpulse_Elapsed(object sender, EventArgs e)

{

timerEventFired = true; //установка флага достижения таймером установленной длительности

timerImpulse.Stop();

}

private void panel7021_Paint(object sender, PaintEventArgs e) //событие перерисовки графика напряжений модуля 7021 при выводе формы на передний план

{

if (graphicsDrawnOnce) //если графики однажды отрисовывались, ...

DrawGraphics(); //перерисовать графики

}

private void panel7044_Paint(object sender, PaintEventArgs e) //событие перерисовки графика напряжений модуля 7044 при выводе формы на передний план

{

if (graphicsDrawnOnce) //если графики однажды отрисовывались, ...

DrawGraphics(); //перерисовать графики

}

}

}

5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]