на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка программы контроля изделий и подготовка программной документации
p align="left">Затем из файла “module_list.xml” считываются адреса регистров версий, значения версий и разрядность версий соответствующего модуля.

Затем программа считывает фактические значения версий модуля и сравнивает их со значениями, считанными из файла “module_list.xml”. При совпадении этих значений программа выдает норму, при несовпадении - ненорму.

Если с входными параметрами было получено наименование прибора, то программа считывает из файла “device_list.xml” базовые адреса всех модулей, входящих в состав прибора.

Затем из файла “module_list.xml” считываются адреса регистров версий, значения версий и разрядность версий для каждого модуля, входящего в состав прибора.

Затем программа считывает фактические значения версий модулей, входящих в состав прибора, и сравнивает их со значениями, считанными из файла “module_list.xml”. При совпадении этих значений для каждого модуля программа выдает норму, при несовпадении хотя бы для одного модуля - ненорму.

Режимы работы программы

Если программа была запущена “Сервисной программой монитор для сдачи работ” 643.0691.00249-01, то она будет свернута, и вся информация будет выводиться в окне “Сервисной программы монитор для сдачи работ”. После выполнения проверки, программа будет завершена самостоятельно.

Если программа была запущена из командной строки независимо от “Сервисной программы монитор для сдачи работ”, то вся информация будет выводиться в текстовом поле окна программы. После выполнения проверки, программа останется открытой.

Результаты тестирования

При проверке версий прибора фиксируется, результат проверки для каждого модуля, входящего в состав прибора. Если проверка всех модулей завершилась с результатом НОРМА, общий результат - НОРМА. Если проверка хотя бы одного модуля завершилась с результатом НЕНОРМА, то общий результат - НЕНОРМА.

При проверке версий отдельного модуля, результат НОРМА - если проверка завершилась успешно; и НЕНОРМА - если проверка завершилась неудачно.

Входные параметры

Структура XML-файла “device_list.xml”

Файл “device_list.xml” состоит из тегов “device” и тега “default”.

Тег “device” имеет атрибут “name”, в котором содержится название прибора, соответствующего этому тегу. Внутри тегов “device” содержатся теги “module”, которые имеют атрибут “baseaddress”, содержащий базовый адрес модуля в приборе. Внутри тега “module” указывается название модуля.

Тег “default” содержит в себе теги “module”. Тег “module” имеет один атрибут “baseaddress”, в котором содержится базовый адрес модуля по умолчанию. Внутри тега “module” указывается название модуля.

Структура XML-файла “module_list.xml”

Файл “module_list.xml” состоит из тегов “module”.

Тег “module” содержит в себе тег “name” и теги “version”. Тег “name” содержит в себе название модуля. Тег “version” имеет один атрибут “description”, в котором содержится информация о версии, описываемой соответствующим тегом “version”. Тег “version” содержит в себе теги “address” (адрес регистра версии модуля), “value” (значение версии модуля) и “type” (разрядность версии модуля).

При выпуске новой версии модуля, тег “name” в соответствующем теге “module” дополняется датой выпуска следующей версии. Затем создается новый тег “module” с наименованием модуля и обновленными значениями версий в теге “version”.

Структура TXT-файла “corrections.txt”

Если есть необходимость проверить прибор с более ранними версиями каких-либо модулей, входящих в его состав, составляется файл поправок “corrections.txt”. Структура файла “corrections.txt” по п. 0.

Если в папке с программой содержится файл “corrections.txt”, то программа производит обработку этого файла.

В процессе обработки заполняется массив поправок, содержащих два наименования модулей: с поздней версией и с более ранней версией.

Файл “corrections.txt” предназначен для внесения поправок в работу программы.

Файл состоит из записей вида:

<name>=<new_name>;

Здесь “name” - наименование модуля, который необходимо проверить с особыми значениями версий; “new_name” - наименование модуля в файле “module_list.txt” с особыми значениями версий.

Заключение

В ходе преддипломной практики (в период с 15 декабря 2008 по 15 февраля 2009 г.) мною были выполнены поставленные предварительно задачи:

- получены практические навыки работы в коллективе инженеров,

- разработана программа проверки версий компонент изделий,

- подготовлена к выпуску программная документация.

Приложение 1 - Исходные тексты программы

//--------------------------------------------------------------

#ifndef Unit2H

#define Unit2H

//--------------------------------------------------------------#include <Classes.hpp>

//--------------------------------------------------------------class Executing : public TThread

{

private:

protected:

void __fastcall Execute();

public:

bool end;

__fastcall Executing(bool CreateSuspended);

};

//--------------------------------------------------------------#endif

//--------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include <stdio.h>

#include "ProgExchCl_b.h"

#include "Udevices.h"

#define SecondLevelNodeAccess Form1->XMLDocument1->DocumentElement->ChildNodes

#define ThirdLevelNodeAccess(a) Form1->XMLDocument1->DocumentElement->ChildNodes->GetNode(a)->ChildNodes

#define FourthLevelNodeAccess(a, b) Form1->XMLDocument1->DocumentElement->ChildNodes->GetNode(a)->ChildNodes->GetNode(b)->ChildNodes

char received_data[255];

PModule Module; // массив модулей

PCorrection Correction; // массив исправлений

HANDLE m_Disp = NULL; // для монитора

int wrtd, // для функции mWrite

cor_count; // количество исправлений

TCom* ComPort; // порт

//--------------------------------------------------------------

void __fastcall msg(char *str)//сообщение для монитора

{

if(!mWrite(m_Disp, (AnsiString(str)+AnsiString("\n\r")).c_str(), strlen(str)+2, &wrtd));

}

void __fastcall logmsg(AnsiString mes)//сообщение в поле мемо

{

Form1->LogText->Lines->Add(mes);

}

//--------------------------------------------------------------char __fastcall DeviceOrModule(AnsiString Parameter, int* item_index) // определить что было передано с начальными параметрами: прибор или модуль и выдать порядковый номер нужного тега.

{

int i, all_nodes;

// ищем прибор

all_nodes = SecondLevelNodeAccess->GetCount(); // количество тегов второго уровня

for (i = 0; i < all_nodes; i++) {

if(AnsiString(SecondLevelNodeAccess->GetNode(i)->Attributes[WideString("name")] ) == Parameter){

*item_index = i;

return 1;

}

}

// если прибор не найден, ищем модуль в теге default

all_nodes = SecondLevelNodeAccess->FindNode("default")->ChildNodes->GetCount(); // количество тегов третьего уровня в теге default

for (i = 0; i < all_nodes; i++) {

if(AnsiString(SecondLevelNodeAccess->FindNode("default")->ChildNodes->GetNode(i)->Text) == Parameter){

*item_index = i;

return 2;

}

}

return 0;

}

//--------------------------------------------------------------

void __fastcall GetModuleList(AnsiString Parameter, PModule* ModuleList, int item_index, int* modules_counter) // получение списка модулей входящих в состав прибора

{

int i, j, k, p, all_modules, version_count;

AnsiString mes;

*modules_counter = ThirdLevelNodeAccess(item_index)->GetCount(); // количество модулей в приборе

*ModuleList = new TModule[*modules_counter]; // выделяем память под массив модулей

for (i = 0; i < *modules_counter; i++) { // заполняем поля name и baseaddress

if(cor_count)

{

for(j = 0; j < cor_count; j++) {

if (AnsiString(ThirdLevelNodeAccess(item_index)->GetNode(i)->GetNodeValue()) == Correction[j].name) {

(*ModuleList)[i].name = Correction[j].new_name;

break;

}

else (*ModuleList)[i].name = AnsiString(ThirdLevelNodeAccess(item_index)->GetNode(i)->GetNodeValue());

}

}

else (*ModuleList)[i].name = AnsiString(ThirdLevelNodeAccess(item_index)->GetNode(i)->GetNodeValue());

(*ModuleList)[i].baseaddress = StrToInt(ThirdLevelNodeAccess(item_index)->GetNode(i)->Attributes[WideString("baseaddress")]);

}

// LOG->Add(AnsiString());

// активизация dll со списком модулей

Form1->XMLDocument1->FileName = "module_list.xml";

Form1->XMLDocument1->Active = true;

all_modules = SecondLevelNodeAccess->GetCount(); // сколько всего модулей в базе

for (i = 0; i < *modules_counter; i++) {

for (j = 0; j <= all_modules; j++) { // заполняем поля version

if (j >= all_modules) MB_OK );

break;

if ((*ModuleList)[i].name == AnsiString(ThirdLevelNodeAccess(j)->GetNode(0)->GetNodeValue())) {

(*ModuleList)[i].version_count = ThirdLevelNodeAccess(j)->GetCount() - 1;

for (k = 0; k < (*ModuleList)[i].version_count; k++) {

(*ModuleList)[i].version[k] = new TVersion;

(*ModuleList)[i].version[k]->address = StrToInt(FourthLevelNodeAccess(j, k+1)->GetNode(0)->NodeValue);

(*ModuleList)[i].version[k]->value = StrToInt(FourthLevelNodeAccess(j, k+1)->GetNode(1)->NodeValue);

(*ModuleList)[i].version[k]->type = StrToInt(FourthLevelNodeAccess(j, k+1)->GetNode(2)->NodeValue);

(*ModuleList)[i].version[k]->description = AnsiString(ThirdLevelNodeAccess(j)->GetNode(k+1)->Attributes[WideString("description")]);

}

break;

}

}

// LOG->Add(ModuleList[i].name + AnsiString(" ") + ModuleList[i].baseaddress);

}

}

//--------------------------------------------------------------

void __fastcall GetModule(AnsiString Parameter, PModule* ModuleList, int item_index) // получаем информацию для одного модуля

{

int i, j, all_modules;

*ModuleList = new (TModule);

(*ModuleList)[0].name = AnsiString(Form1->XMLDocument1->DocumentElement->ChildNodes->FindNode("default")->ChildNodes->GetNode(item_index)->GetNodeValue());

(*ModuleList)[0].baseaddress = StrToInt(Form1->XMLDocument1->DocumentElement->ChildNodes->FindNode("default")->ChildNodes->GetNode(item_index)->Attributes[WideString("baseaddress")]);

Form1->XMLDocument1->FileName = "module_list.xml";

Form1->XMLDocument1->Active = true;

all_modules = SecondLevelNodeAccess->GetCount();

for (i = 0; i <= all_modules; i++) {

if (i >= all_modules) MB_OK );

break;

if ((*ModuleList)[0].name == AnsiString(ThirdLevelNodeAccess(i)->GetNode(0)->GetNodeValue())) {

(*ModuleList)[0].version_count = ThirdLevelNodeAccess(i)->GetCount() - 1;

for (j = 0; j < (*ModuleList)[0].version_count; j++) {

(*ModuleList)[0].version[j] = new TVersion;

(*ModuleList)[0].version[j]->address = StrToInt(FourthLevelNodeAccess(i, j+1)->GetNode(0)->NodeValue);

(*ModuleList)[0].version[j]->value = StrToInt(FourthLevelNodeAccess(i, j+1)->GetNode(1)->NodeValue);

(*ModuleList)[0].version[j]->type = StrToInt(FourthLevelNodeAccess(i, j+1)->GetNode(2)->NodeValue);

(*ModuleList)[0].version[j]->description = AnsiString(ThirdLevelNodeAccess(i)->GetNode(j+1)->Attributes[WideString("description")]);

}

break;

}

}

/* LOG->Add((*ModuleList)[0].name + AnsiString(" ") + (*ModuleList)[0].baseaddress);

for (i = 0; i < (*ModuleList)[0].version_count; i++) {

LOG->Add((*ModuleList)[0].version[i]->address);

LOG->Add((*ModuleList)[0].version[i]->value);

LOG->Add((*ModuleList)[0].version[i]->type);

} */

}

//--------------------------------------------------------------

unsigned int _fastcall get_version(unsigned int BaseAddress, unsigned int type) // считываем версию с модуля

{

unsigned short i, j;

unsigned short SHsum; // контрольная сумма

unsigned char* pTarget = new unsigned char[10];

unsigned char* pReceived;

unsigned short MessageSize = 6;

unsigned int version;

ComPort = new TCom("COM2", 115200);

i = ComPort->link_on();

if(i) {

MessageBox(NULL, AnsiString(i).c_str(), "Ошибка инициализации порта", MB_OK);

return 0;

}

pTarget[0]= 0x31;

pTarget[1]=(unsigned char)(MessageSize); //младший байт

pTarget[2]=(unsigned char)(MessageSize>>8); //старший байт

pTarget[3] = 0x04;

pTarget[4] = (unsigned char) type;

*(int*)(pTarget + 0x05) = BaseAddress;

version = 0;

SHsum=0x0;

for ( i=3; i<=8; i++ ){SHsum+=pTarget[i];} //подсчёт КС

// MessageBox(NULL, AnsiString(SHsum).c_str(), "Контрольная сумма", MB_OK);

pTarget[9]=(unsigned char)(SHsum);//младший байт

pTarget[10]=(unsigned char)(SHsum>>8);//старший байт

ComPort->write(pTarget, 3+MessageSize+2);

delete [] pTarget;

Sleep(100);

i = ComPort->read();

if(i>0)

{

// MessageBox(NULL, AnsiString(i).c_str(), "Принято байт", MB_OK);

pReceived = ComPort->get_receiver_ptr(); //считываем полученное значение

if ( pReceived[0] != 0x55 || pReceived[1] != 0xAA) {

MessageBox(NULL, pReceived, "Ошибка", MB_OK);

return 0;

}

// наложение масок

switch (type) {

case 1:

version = (unsigned int) (*( char* )(pReceived + 5))&0x000000FF;

break;

case 2:

version = (unsigned int) (*( short* )(pReceived + 5))&0x0000FFFF;

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.