Смекни!
smekni.com

Розробка програмного забезпечення системи збору даних про хід та параметри технологічного процесу (стр. 5 из 5)

Application->MessageBoxA("Ошибка WSAStartup!", "Error!", MB_OK);

Form1->Button1->Enabled = TRUE;

return;

}

//создание сокета

sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sClient == INVALID_SOCKET)

{

Application->MessageBoxA("Невозможно создать сокет", "Error!", MB_OK);

Form1->Button1->Enabled = TRUE;

return;

}

server.sin_family = AF_INET;

server.sin_port = htons(iPort);

server.sin_addr.s_addr = inet_addr(cAddress);

if (server.sin_addr.s_addr == INADDR_NONE)

{

// Если не указан IP-адрес

Application->MessageBoxA("Напрвальный IP адрес", "Error!", MB_OK);

Form1->Button1->Enabled = TRUE;

return;

}

if (connect(sClient, (struct sockaddr *)&server,

sizeof(server)) == SOCKET_ERROR)

{

Application->MessageBoxA("Неудалось подключится к серверу", "Error!", MB_OK);

Form1->Button1->Enabled = TRUE;

return;

}

req.typeRequest = 0; //запрос на синхронизацию

req.typeSender = 5; //идентификатор рабочей станции

req.lengthPack = sizeof(request);

//отправка запроса на синхронизацию времени

nLeft = req.lengthPack;

idx = 0;

while(nLeft > 0)

{

ret = send(sClient, ((char *)&req) + idx, nLeft, 0);

if (ret == SOCKET_ERROR)

{

Application->MessageBoxA("Ошибка отправки запроса на синхронизацию", "Error!", MB_OK);

CloseClientSocket();

return;

}

nLeft -= ret;

idx += ret;

}

//приём времени сервера и установка его в системе

nLeft = sizeof(time_t);

idx = 0;

while(nLeft > 0)

{

ret = recv(sClient, ((char *)&UpdateTime)+idx, nLeft, 0);

if ((ret == SOCKET_ERROR)||(ret == 0))

{

Application->MessageBoxA("Ошибка приёма времени", "Error!", MB_OK);

CloseClientSocket();

return;

}

nLeft -= ret;

idx += ret;

}

// установка времени в системе

//stime(&UpdateTime);

Form1->Button2->Enabled = TRUE;

Form1->Button3->Enabled = TRUE;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

CloseClientSocket();

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

int iTypeUVM, nLeft, idx, ret;

package1 pack1;

package2 pack2;

packageServer packServ;

requestRange reqRange;

tm tmBegin, tmEnd, *tmTime;

time_t time_tBegin, time_tEnd;

unsigned long i;

Form1->Button3->Enabled = FALSE;

StringGrid1->RowCount = 2;

StringGrid1->Rows[1]->Clear();

//формирование структур времени

tmBegin.tm_sec = Form1->ComboBox3->ItemIndex;

tmBegin.tm_min = Form1->ComboBox2->ItemIndex;

tmBegin.tm_hour = Form1->ComboBox6->ItemIndex;

tmBegin.tm_mday = Form1->ComboBox8->ItemIndex+1;

tmBegin.tm_mon = Form1->ComboBox10->ItemIndex;

tmBegin.tm_year = Form1->ComboBox12->ItemIndex+70;

tmBegin.tm_isdst = 0;

time_tBegin = mktime(&tmBegin);

if (time_tBegin == -1)

{

Application->MessageBoxA("Ошибка преобразования начального времени", "Error!", MB_OK);

Form1->Button3->Enabled = TRUE;

return;

}

tmEnd.tm_sec = Form1->ComboBox5->ItemIndex;

tmEnd.tm_min = Form1->ComboBox4->ItemIndex;

tmEnd.tm_hour = Form1->ComboBox7->ItemIndex;

tmEnd.tm_mday = Form1->ComboBox9->ItemIndex+1;

tmEnd.tm_mon = Form1->ComboBox11->ItemIndex;

tmEnd.tm_year = Form1->ComboBox13->ItemIndex+70;

tmEnd.tm_isdst = 0;

time_tEnd = mktime(&tmEnd);

if (time_tBegin == -1)

{

Application->MessageBoxA("Ошибка преобразования конечного времени", "Error!", MB_OK);

Form1->Button3->Enabled = TRUE;

return;

}

if (time_tEnd < time_tBegin)

{

Application->MessageBoxA("Конечное время меньше начального", "Error!", MB_OK);

Form1->Button3->Enabled = TRUE;

return;

}

iTypeUVM = Form1->ComboBox1->ItemIndex + 1;

//Формирование шапки таблицы

if (iTypeUVM == 1)

{

StringGrid1->Cells[7][0] = "Скорость 1";

StringGrid1->Cells[8][0] = "Скорость 2";

StringGrid1->Cells[9][0] = "Темпер. 1";

StringGrid1->Cells[10][0] = "Темпер. 2";

StringGrid1->Cells[11][0] = "Темпер. 3";

StringGrid1->Cells[12][0] = "Вес 1";

StringGrid1->Cells[13][0] = "Вес 2";

StringGrid1->Cells[14][0] = "Вес 3";

StringGrid1->Cells[15][0] = "Длина 1";

StringGrid1->Cells[16][0] = "Длина 2";

}

else

{

StringGrid1->Cells[7][0] = "Скорость 1";

StringGrid1->Cells[8][0] = "Скорость 2";

StringGrid1->Cells[9][0] = "Скорость 3";

StringGrid1->Cells[10][0] = "Темпер. 1";

StringGrid1->Cells[11][0] = "Темпер. 2";

StringGrid1->Cells[12][0] = "Вес 1";

StringGrid1->Cells[13][0] = "Вес 2";

StringGrid1->Cells[14][0] = "Вес 3";

StringGrid1->Cells[15][0] = "Вес 4";

StringGrid1->Cells[16][0] = "Длина";

}

//формирование и отсылка запроса на диапазон времён

reqRange.typeRequest = 2;

reqRange.typeSender = 5;

reqRange.lengthPack = sizeof (requestRange);

reqRange.iTypeUVM = iTypeUVM;

reqRange.tBegin = time_tBegin;

reqRange.tEnd = time_tEnd;

nLeft = reqRange.lengthPack;

idx = 0;

while(nLeft > 0)

{

ret = send(sClient, ((char *)&reqRange) + idx, nLeft, 0);

if (ret == SOCKET_ERROR)

{

Application->MessageBoxA("Ошибка отправки запроса на приём данных", "Error!", MB_OK);

CloseClientSocket();

return;

}

nLeft -= ret;

idx += ret;

}

//приём от сервера кол-ва записей входяих в диапазон

nLeft = sizeof(packageServer);

idx = 0;

while(nLeft > 0)

{

ret = recv(sClient, ((char *)&packServ)+idx, nLeft, 0);

if ((ret == SOCKET_ERROR)||(ret == 0))

{

Application->MessageBoxA("Ошибка приёма количества данных", "Error!", MB_OK);

CloseClientSocket();

return;

}

nLeft -= ret;

idx += ret;

}

if (packServ.AmountPacks == 0)

{

Application->MessageBoxA("Нет данных в заданном диапазоне времени", "Error!", MB_OK);

Form1->Button3->Enabled = TRUE;

return;

}

//приём в цикле записей

StringGrid1->RowCount = packServ.AmountPacks+1;

for (i = 0; i<packServ.AmountPacks; i++)

{

if (iTypeUVM == 1)

nLeft = sizeof(package1);

else

nLeft = sizeof(package2);

idx = 0;

while(nLeft > 0)

{

if (iTypeUVM == 1)

ret = recv(sClient, ((char *)&pack1)+idx, nLeft, 0);

else

ret = recv(sClient, ((char *)&pack2)+idx, nLeft, 0);

if ((ret == SOCKET_ERROR)||(ret == 0))

{

Application->MessageBoxA("Ошибка приёма структуры данных", "Error!", MB_OK);

CloseClientSocket();

return;

}

nLeft -= ret;

idx += ret;

}//while

//отображение полученной записи

StringGrid1->Cells[0][i+1] = i+1;

if (iTypeUVM == 1)

tmTime = localtime(&pack1.time);

else

tmTime = localtime(&pack2.time);

StringGrid1->Cells[1][i+1] = (*tmTime).tm_year+1900;

StringGrid1->Cells[2][i+1] = (*tmTime).tm_mon;

StringGrid1->Cells[3][i+1] = (*tmTime).tm_mday+1;

StringGrid1->Cells[4][i+1] = (*tmTime).tm_hour;

StringGrid1->Cells[5][i+1] = (*tmTime).tm_min;

StringGrid1->Cells[6][i+1] = (*tmTime).tm_sec;

if (iTypeUVM == 1)

{

StringGrid1->Cells[7][i+1] = pack1.speed1;

StringGrid1->Cells[8][i+1] = pack1.speed2;

StringGrid1->Cells[9][i+1] = pack1.temperature1;

StringGrid1->Cells[10][i+1] = pack1.temperature2;

StringGrid1->Cells[11][i+1] = pack1.temperature3;

StringGrid1->Cells[12][i+1] = pack1.weight1;

StringGrid1->Cells[13][i+1] = pack1.weight2;

StringGrid1->Cells[14][i+1] = pack1.weight3;

StringGrid1->Cells[15][i+1] = pack1.length2;

StringGrid1->Cells[16][i+1] = pack1.length2;

}

else

{

StringGrid1->Cells[7][i+1] = pack2.speed1;

StringGrid1->Cells[8][i+1] = pack2.speed2;

StringGrid1->Cells[9][i+1] = pack2.speed3;

StringGrid1->Cells[10][i+1] = pack2.temperature1;

StringGrid1->Cells[11][i+1] = pack2.temperature2;

StringGrid1->Cells[12][i+1] = pack2.weight1;

StringGrid1->Cells[13][i+1] = pack2.weight2;

StringGrid1->Cells[14][i+1] = pack2.weight3;

StringGrid1->Cells[15][i+1] = pack2.weight4;

StringGrid1->Cells[16][i+1] = pack2.length;

}

}//for

Form1->Button3->Enabled = TRUE;

}

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