Разработка программного модуля для удаленного администрирования и мониторинга RAID-системы
Обзор программных продуктов для управления RAID-системой. Структура входных и выходных данных. Выбор платформы проектирования. Информационные потребности пользователя. Методика и результаты испытаний программы. Отладка и общие принципы тестирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 01.10.2017 |
Размер файла | 1,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Зануление является одним из средств, обеспечивающих безопасную эксплуатацию электроустановок. Оно выполняется присоединением к неоднократно заземленному нулевому проводу корпусов и других конструктивных металлических частей электрооборудования, которые нормально не находятся под напряжением, но могут оказаться под ним при повреждении изоляции.
Наибольшее допустимое сопротивление заземляющих устройств и заземлителей в системе зануления при подключении компьютера составляет 30 Ом.
Проводка в производственных помещениях выполняется изолированными проводами или кабелями, которые в местах, где возможны их механические повреждения, укладываются в металлические трубы. Помещения, в которых устанавливаются компьютеры, должны соответствовать всем вышеуказанным требованиям.
4.5 Требования по пожарной безопасности
Помещение с компьютерной техникой относится к категории B (пожароопасная) пожарной опасности помещений, так как в помещении находится электрооборудование, горючие вещества (мебель, пластиковые корпуса аппаратуры и др.). Поэтому помещение должно соответствовать нормативам по огнестойкости строительных конструкций, планировке зданий, этажности, оснащенности устройствами противопожарной защиты, установленным для этой категории помещений. Помещение машинного зала должно обладать I или II степенью огнестойкости (см. СНиП 2.01.02-85 “Противопожарные нормы”), то есть самой высокой.
Важным организационным мероприятием является проведение инструктажа по пожароопасности всех лиц, допущенных к работе на компьютерах. При проведении противопожарных инструктажей необходимо добиваться, чтобы персонал практически умел пользоваться первичными средствами тушения пожара и средствами связи.
Для тушения пожара применяются ручные огнетушители и переносные установки. На предприятиях электронной промышленности широко применяются пенные огнетушители ОП-3,ОП-5, а также ОХП-10. Электросети и электроустановки находятся под напряжением, тушить водой их нельзя, так как через струю воды может произойти поражение электрическим током. Именно поэтому для тушения пожара, возникшего из-за неисправности электроприборов, применяются пенные огнетушители.
Возможность быстрой ликвидации пожара во многом зависит от своевременного оповещения о пожаре. Весьма распространенным средством связи является телефонная сеть.
4.6 Уровень шума
При работе различные части компьютера создают посторонний шумовой фон, который отрицательно воздействует на психику человека и на его работоспособность. Уже при уровнях шума в 40-70 дБ ослабляется внимание, ухудшается память, появляется быстрая утомляемость, головная боль. Наибольшей степенью воздействия на состояние человека обладают импульсные и нерегулярные шумы.
Согласно ГОСТ 12.1.003-83 ССБТ “Шум. Общие требования безопасности” допустимым значением уровня шума в компьютерном помещении является 50 дБ. Основными источниками шума в помещении машинного зала являются матричные принтеры, которые могут создавать уровень шума близкий к 50 дБ. Для снижения уровня шума в помещении машинного зала рекомендуется:
Располагать помещение машинного зала вдали от внешних источников шума.
Использовать звукопоглощающие облицовочные материалы.
Использовать малошумящую вентиляцию.
Использовать струйные или лазерные принтеры вместо матричных.
4.7 Защита от вредных излучений
Основным источником эргономических проблем, связанных с охраной здоровья людей, использующих в своей работе персональные компьютеры, являются мониторы, особенно дисплеи с электронно-лучевыми трубками. Они представляют собой источники наиболее вредных излучений, неблагоприятно влияющих на здоровье человека, постоянно работающего за компьютером.
История исследования этого вопроса достаточно длительная и непростая, но полученные результаты носят пока еще преимущественно статистический характер и не имеют адекватного объяснения. Частотный состав (спектр) излучения монитора характеризуется наличием рентгеновских, ультрафиолетовых, инфракрасных и других электромагнитных колебаний. Опасность рентгеновского и части других излучений большинством ученых признается пренебрежимо малой, поскольку их уровень достаточно невелик и в основном поглощается покрытием экрана. Наиболее тяжелая ситуация связана, по-видимому, с полями излучений очень низких частот (ОНЧ) и крайне низких частот (КНЧ), которые, как выяснилось, способны вызывать биологические эффекты при воздействии на живые организмы. Было обнаружено, что электромагнитные поля с частотой порядка 60 Гц могут инициировать изменения в клетках животных (вплоть до нарушения синтеза ДНК). Особенно поразительным для исследователей оказался тот факт, что, в отличие, например, от рентгеновского излучения, электромагнитные волны обладают необычным свойством: опасность их воздействия при снижении интенсивности излучения не уменьшается, мало того, некоторые поля действуют на клетки тела только при малых интенсивностях или на конкретных частотах.
Специальные измерения показали, что мониторы действительно излучают магнитные волны, по интенсивности не уступающие уровням магнитных полей, способных обусловливать возникновение опухолей у людей.
Исследователи из MacWorld обнаружили, что если на расстоянии 10 см перед мониторами, обычно используемыми с компьютерами Macintosh, напряженность магнитного поля составляет примерно от 5 до 23 мГс, то на расстоянии 70 см от экрана ни у одного из обследованных мониторов напряженность поля не превышала величины 1 мГс. (Интенсивность поля вне указанных пределов составляла 0.1 - 0.5 мГс.)
Как это ни странно, но до сих пор нет нормативов для излучений КНЧ-магнитных полей, хотя в некоторых странах (в том числе в Швеции и Канаде) разработаны стандарты для излучений ОНЧ-магнитных полей. Большое число поставщиков - например, фирмы IBM, DEC и Philips - продают мониторы, удовлетворяющие указанным стандартам. Кроме того, любой монитор, работающий не на ЭЛТ, имеет то преимущество, что не излучает переменных компонент, связанных с наличием систем вертикального и горизонтального отклонения электронного луча.
Пользователям персональных компьютеров, желающим снизить уровень облучения переменными магнитными полями, следует расположить мониторы так, чтобы расстояние до них составляло величину, равную расстоянию вытянутой руки (с вытянутыми пальцами). Поскольку магнитные поля сзади и по бокам большинства мониторов значительно сильнее, чем перед экраном, пользователи должны располагать свои рабочие места на расстоянии не менее 1.22 м от боковых и задних стенок других компьютеров. Следует иметь ввиду, что магнитное излучение ничем не задерживается.
4.8 Микроклимат в компьютерном зале
Метеорологическими условиями согласно ГОСТ 12.1.005-88 являются:
температура;
относительная влажность;
скорость движения воздуха;
атмосферное давление.
Работающие люди, включенные компьютеры, а в летнее время еще и солнечная радиация являются источниками избыточного тепла в помещении машинного зала. Повышенная температура и недостаточная влажность воздуха влияет на работоспособность и самочувствие пользователя ПК.
С целью обеспечения комфортных условий для пользователей компьютеров и надежной работы оборудования, необходимо поддерживать следующие метеорологические условия (согласно СН 512-78):
Атмосферное давление в помещении машинного зала должно быть 1013.25±266 ГПа. При пониженном давлении воздуха ухудшается отвод теплоты от элементов компьютера (монитор, системный блок), снижаются изоляционные свойства воздуха.
Воздух, используемый для вентиляции машинного зала, должен очищаться от пыли. Запыленность воздуха не должна превышать 1 мг/мі, а размеры пылинок - 3 мкм. Пыль, попадающая на платы комплекса, приводит к снижению теплообмена и способствует перегреву приборов.
В помещении машинного зала необходимо предусмотреть систему отопления. Она должна обеспечивать достаточное, постоянное и равномерное нагревание воздуха в помещении в холодный период года, а также безопасность в отношении пожара и взрыва. При этом колебания температуры в течении суток не должны превышать 2-3 °С; в горизонтальном направлении - 2 °С на каждый метр длины; а в вертикальном - 1 °С на каждый метр высоты помещения. Для отопления помещения машинного зала рекомендуется использовать водяные или воздушные системы центрального отопления.
Работающие люди и включенные компьютеры являются источниками избыточного тепла в помещении машинного зала. Поэтому необходимо предусмотреть систему кондиционирования и вентиляции помещения.
Таблица 4.1 Параметры воздушной среды
Температура наружного воздуха |
Оптимальные параметры |
Допустимые параметры |
|
Ниже +10 °С |
Температура: 20-22 °С; Относительная влажность: 40-60 %; Скорость движения воздуха не более 0,2 м/с. |
Температура: 18-22 °С; Относительная влажность: не более 70 %; Скорость движения воздуха не более 0,3 м/с. |
|
Выше +10 °С |
Температура: 20-25 °С; Относительная влажность: 40-60 %; Скорость движения воздуха не более 0,3 м/с. |
Температура: не более чем на 3 °С выше наружного воздуха в 13 ч дня самого жаркого месяца, но не выше 28 °С; Относительная влажность: 70 при 24 °С и ниже; 65 при 25 °С; 60 при 26 °С; 55 при 27 °С; 50 при 28 °С; Скорость движения воздуха не более 0,5 м/с. |
4.9 Психофизиологические факторы
Психофизиологические факторы в зависимости от характера действия делятся на следующие группы:
физические перегрузки (статические);
нервно-психические перегрузки:
Ч умственное перенапряжение,
Ч перенапряжение зрительных анализаторов,
Ч монотонность труда,
Ч эмоциональные перегрузки в большом коллективе.
Монотонность или монотония - психическое состояние человека, вызванное однообразием восприятий или действий. Под утомлением понимается процесс понижения работоспособности, временный упадок сил, возникающий при выполнении определенной физической или умственной работы. Для уменьшения влияния этих факторов необходимо применять оптимальные режимы труда и отдыха в течении рабочего дня:
общее время работы за дисплеем не должно превышать 50% всего рабочего времени программиста;
при обычной работе за компьютером необходимо делать 15-минутные перерывы через каждые два часа, а при интенсивной работе - через каждый час;
не следует превышать темп работы порядка 10 тысяч нажатий клавиш в час (примерно 1500 слов);
предпочтительнее использовать дисплеи с высокой разрешающей способностью (разрешением) и удобным размером экрана (лучше TFT-панели диаметром от 17 дюймов);
для CRT-монитора частота обновления экранного изображения должна быть не менее 70-72 Гц,
наконец, при вводе данных с клавиатуры рекомендуется не зажимать телефонную трубку между плечом и ухом.
Рабочая поза оказывает значительное влияние на эффективность работы человека. Основные требования к рабочим местам при выполнении работы сидя приведены в ГОСТ 12.2.033-78 "ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования". При организации рабочего места программиста необходимо придерживаться следующих рекомендаций:
рабочее место должно быть оборудовано так, чтобы исключать неудобные позы и длительные статические напряжения тела;
поскольку найти такое идеальное положение для тела, в котором можно было бы пребывать в течении всего дня, вряд ли возможно, для большинства людей комфортабельным может быть рабочее место, которое можно приспособить, как минимум, для двух позиций (при этом положение оборудования должно соответствовать выполняемой работе и привычкам пользователя).
Для предотвращения перенапряжения зрительных анализаторов пользователя и снижения монотонности труда, работу, связанную с использованием монитора, необходимо чередовать с работой, не требующей использования компьютера, либо делать небольшие перерывы через каждые 45-90 минут. Общее время работы за монитором не должно превышать 6 часов в день.
К обслуживанию и работе на компьютере допускаются лица прошедшие медосмотр при поступлении на работу. Последующий медосмотр проводится раз в два года. Также необходимо соблюдать ограничения на работу с персональными компьютерами для служащих, страдающих заболеваниями опорно-двигательного аппарата, глаз (или нарушениями зрения), кожи.
В данном разделе было проанализировано рабочее место разработчика ПО с точки зрения производственной и экологической безопасности. При рассмотрении вопросов безопасности большое внимание уделялось проблемам:
Ч Освещенности
Ч Защиты от излучений
Ч Электробезопасности
Ч Опасные психофизиологические и вредные производственные факторы
Ч Создание оптимального микроклимата.
Были произведены расчеты для оптимального освещения компьютерной комнаты.
Вопрос экологической безопасности не был рассмотрен, так как современный компьютер является устройством, практически не оказывающим вредного воздействия на состояние окружающей среды, поэтому можно считать, что процесс работы на ЭВМ экологически безопасен.
Заключение
Таким образом, в результате проведенных работ по разработке приложения по удаленному управлению и мониторингом RAID-системы в составе проекта GUIMAN мной был реализован программный модуль Агент, связывающий пользовательский интерфейс с RAID-контроллером.
В рамках дипломного проекта были получены следующие результаты:
Ч Была проведена исследовательская работа, на основании которой была создана структурная схема работы как приложения в целом, так и конкретно модуля Агент.
Ч Разработана схема функционирования ПМ GUIMAN.
Ч Были разработаны схемы алгоритмов функционирования ПМ GUIMAN и отдельно на модуль Агент: алгоритм для поиска RAID-контроллеров, алгоритм опроса RAID-массива и другие.
Ч Полностью реализован ПМ Агент в составе проекта ПМ GUIMAN.
Ч Разработан модуль для тестирования работоспособности RAID-контроллера.
Ч Был составлен график проведения работ по созданию ПМ GUIMAN и произведен расчет стоимости программного продукта.
Ч Произведен анализ ПЭБ рабочего места разработчика ПО.
Созданный программный продукт для управления и мониторингом RAID-системы полностью удовлетворяет техническому заданию на дипломное проектирование.
Список литературы
1. Гагарина Л.Г., Зубов Н.Н., Стрижков А.В., Федотова Е.Л. Методические указания для подготовки дипломного проекта по специальности 220400. /под редакцией д.т.н. Нестерова А.Э./ - М.: МИЭТ, 2004.
2. Буч Г. «Объектно-ориентированный анализ и проектирование с примерами приложений на С++». - М.: Бином, 1998.
3. Ирэ Пол. Объектно-ориентированное программирование с использованием C++: Пер. с англ. - Киев: ДиаСофт, 1995.
4. Сэм Канер, Джек Фолк, Енг Кек Нгуен. «Тестирование программного обеспечения». - Киев: ДиаСофт, 2000.
5. Д. Дж. Круглински. Программирование на Microsoft Visual C++ 6.0 (пер. с англ.). - СПб.: Питер, 2003.
6. Проскуряков А.В. Сетевое планирование и управление. Методические указания для курсового и дипломного проектирования по курсу «Организация и управление производством». - М.: МИЭТ, 1991.
7. Моисеева Н.К., Костина Г.Д. Маркетинговые исследования при создании и использовании программных продуктов. - М.: МИЭТ, 1996.
8. Моисеева Н.К., Павлова А.М., Проскуряков А.В. Методика выполнения организационно-экономической части дипломного проекта. - М.: МИЭТ, 1982.
9. Константинова Л.А., Писеев В.М. Методические указания по выполнению раздела «Охрана окружающей среды» в дипломных проектах. - М.: МИЭТ, 1988.
10. Каракеян В.И., Писеев В.М. Методы и средства обеспечения оптимальных параметров производственной среды на предприятиях электронной промышленности. - М.: МИЭТ, 1987.
Приложение
Текст программного кода
Программный модуль Агент состоит из 14 классов. Ниже приведен листинг нескольких важных классов.
//// Agent-server Main Class
CAgnt::CAgnt()
{
m_pSocket=NULL;
}
CAgnt::~CAgnt()
{
if(m_pSocket)
{
m_pSocket->Send(MSG_BREAK_CONNECT);
Sleep(100);
m_pSocket->Close();
delete m_pSocket;
m_pSocket =NULL;
}
if (m_LogFile.m_hFile!=(UINT)INVALID_HANDLE_VALUE)
m_LogFile.Close();
}
////////////////////////////////////////////////////////////////////// CAgnt Operations
OOL CAgnt::Init(LPTSTR pszLogFileName,char* pszHostName,BYTE bAdapter,BYTE bTargetID,BYTE bLUN)
{
//BOOL CAgnt::Init(CManView* pView)
strcpy(m_szHostName,pszHostName);
m_bAdapter=bAdapter;
m_bTargetID=bTargetID;
m_bLUN=bLUN;
if(pszLogFileName)m_LogFile.Open(pszLogFileName,CFile::modeWrite|CFile::shareDenyWrite);
if(m_LogFile)
{
if(m_LogFile.m_hFile!=(UINT)INVALID_HANDLE_VALUE) m_LogFile.SeekToEnd();
}
PHOSTENT phe;
If ((phe=gethostbyname(m_szHostName))==NULL) return FALSE;
int count=0;
CString Temp;
Temp.Format("Trying connect to %s ...",m_szHostName);
DisplayMsg(Temp);
while(phe->h_addr_list[count]!=NULL)
{
//Adress iteration
Temp.Format("%u.%u.%u.%u",
(unsigned char)phe->h_addr_list[count][0],
(unsigned char)phe->h_addr_list[count][1],
(unsigned char)phe->h_addr_list[count][2],
(unsigned char)phe->h_addr_list[count][3]);
if(ConnectSocket(Temp,161))
{
//Connection is established
Temp+=" - found !\n";
DisplayMsg(Temp);
DisplayMsg("Connecting to Raid ...");
if(!GetConnectA(m_bAdapter,m_bTargetID,m_bLUN)) return FALSE;
DisplayMsg("Connected !\n");
return TRUE;
}//Connection is established
count++;
}//Adress iteration
return FALSE;
}//BOOL CAgnt::Init(CManView* pView)
BOOL CAgnt::GetConnectA(BYTE bAdapter,BYTE bTargetID,BYTE bLUN)
{//GetConnect(...)
m_bAdapter=bAdapter;
m_bTargetID=bTargetID;
m_bLUN=bLUN;
if(!m_pSocket->Send(MSG_GET_CONNECT))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//GetConnect(...)
BOOL CAgnt::BreakConnectA(void)
{//BreakConnect(...)
if(!m_pSocket->Send(MSG_BREAK_CONNECT))return FALSE;
delete m_pSocket;
m_pSocket = NULL;
// if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//BreakConnect(...)
BOOL CAgnt::GetParamA(LPSTR pszSection,LPSTR pszVariable,LPSTR pszValue)
{//GetParam(...)
m_pszSection=pszSection;
m_pszVariable=pszVariable;
if(!m_pSocket->Send(MSG_GET_PARAM))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
strcpy(pszValue,m_szValue);
return !(BOOL)m_dwError;
}//GetParam(...)
BOOL CAgnt::SetParamA(LPSTR pszSection,LPSTR pszVariable,LPSTR pszValue)
{//SetParam(...)
m_pszSection=pszSection;
m_pszVariable=pszVariable;
memset(m_szValue,0,sizeof(m_szValue));
strcpy(m_szValue,pszValue);
if(!m_pSocket->Send(MSG_SET_PARAM))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//SetParam(...)
BOOL CAgnt::GetRaidInfoA(CRaidInfo* pRi)
{//GetRaidInfo(...)
char buf[1024];
memset(m_RaidInfo.m_szProductionID,0,sizeof(m_RaidInfo.m_szProductionID));
memset(m_RaidInfo.m_szModelName,0,sizeof(m_RaidInfo.m_szModelName));
memset(m_RaidInfo.m_szSerialNumber,0,sizeof(m_RaidInfo.m_szSerialNumber));
memset(m_RaidInfo.m_szFirmwareVerionNO,0,sizeof(m_RaidInfo.m_szFirmwareVerionNO));
//ExecCommand(NULL,"getpage 0;",&buf);
int i;
if(!m_pSocket->Read()) m_dwError|=ERR_READING_SOCKET;
strcpy(pRi->m_szProductionID,m_RaidInfo.m_szProductionID);
strcpy(pRi->m_szModelName,m_RaidInfo.m_szModelName);
strcpy(pRi->m_szSerialNumber,m_RaidInfo.m_szSerialNumber);
strcpy(pRi->m_szFirmwareVerionNO, m_RaidInfo.m_szFirmwareVerionNO);
pRi->m_dwStripeSize=m_RaidInfo.m_dwStripeSize;
pRi->m_bWriteBufferEnable=m_RaidInfo.m_bWriteBufferEnable;
pRi->m_bHostChannelNumber=m_RaidInfo.m_bHostChannelNumber;
pRi->m_bDiskChannelNumber=m_RaidInfo.m_bDiskChannelNumber;
pRi->m_bSlotNumber=m_RaidInfo.m_bSlotNumber;
pRi->m_dwRamSize=m_RaidInfo.m_dwRamSize;
pRi->m_bHitRatio=m_RaidInfo.m_bHitRatio;
pRi->m_bIsReady=m_RaidInfo.m_bIsReady;
for(i=0;i<8;i++) pRi->m_bDiskWidth[i]= m_RaidInfo.m_bDiskWidth[i]; //TRUE-Enable
for(i=0;i<8;i++)pRi->m_bDiskSpeed[i]= m_RaidInfo.m_bDiskSpeed[i];// 0-fast2timing 1-ultraTiming 2-Ultra2timing
for(i=0;i<2;i++)pRi->m_bHostID[i]= m_RaidInfo.m_bHostID[i];//0xFF - multiple ID
for(i=0;i<2;i++)pRi->m_bHostQueuing[i]= m_RaidInfo.m_bHostQueuing[i];
for(i=0;i<2;i++)pRi->m_bHostSpeed[i]= m_RaidInfo.m_bHostSpeed[i];// 0-fast2timing 1-ultraTiming 2-Ultra2timing
for(i=0;i<2;i++)pRi->m_bHostWidth[i]=m_RaidInfo.m_bHostWidth[i];// 8 <=> 16
for(i=0;i<2;i++)pRi->m_bHostTerminator[i]=m_RaidInfo.m_bHostTerminator[i];//TRUE-Enable
for(i=0;i<2;i++)pRi->m_bHostMaintenance[i]=m_RaidInfo.m_bHostMaintenance[i];// 0-SingleEnded 1-LVD 2-HVD
for(i=0;i<2;i++){for(int j=0;j<8;j++)pRi->m_HostLUNmap[i].bSliceID[j]=m_RaidInfo.m_HostLUNmap[i].bSliceID[j];}
for(i=0;i<2;i++){for(int j=0;j<8;j++)pRi->m_HostLUNmap[i].bArrayID[j]=m_RaidInfo.m_HostLUNmap[i].bArrayID[j];}
for(i=0;i<96;i++)
{
pRi->m_SlotMap[i].bScsiID=m_RaidInfo.m_SlotMap[i].bScsiID;
pRi->m_SlotMap[i].bDiskChanID=m_RaidInfo.m_SlotMap[i].bDiskChanID;
}
return !(BOOL)m_dwError;
}//GetRaidInfo(...)
BOOL CAgnt::GetRaidArrayInfoA(int n4RaidArray,CRaidArrayInfo* pRai)
{//GetRaidArrayInfo(...)
m_bPage=1+n4RaidArray;
if(!m_pSocket->Send(MSG_GET_STATUS))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
int i;
for(i=0;i<4;i++)
{//duplicate structures
pRai[i].bInit=m_RaidArrayInfo[i].bInit;//(0...100)% 0xFF=IsDone
pRai[i].bAdd=m_RaidArrayInfo[i].bAdd;//(0...100)% 0xFF=IsDone
pRai[i].bCheck=m_RaidArrayInfo[i].bCheck;//(0...100)% 0xFF=IsDone
pRai[i].bExpand=m_RaidArrayInfo[i].bExpand;// (0...100)% OtherWise=NoExpansionGoing
pRai[i].bStatus=m_RaidArrayInfo[i].bStatus;//Is any bitwise combination of WARN_UPS | WARN_TEMPERATURE | WARN_FAN | WARN_POWER
pRai[i].bDiskIsChanged=m_RaidArrayInfo[i].bDiskIsChanged;// It sets when some disk has changed from previous this page
pRai[i].bArrayIsChecked=m_RaidArrayInfo[i].bArrayIsChecked;// It sets when array checking doing
pRai[i].bStripeSize=m_RaidArrayInfo[i].bStripeSize;
pRai[i].bRaidLevel=m_RaidArrayInfo[i].bRaidLevel;//{0,1,3,4,5,6} note: value 6 indicate level <0+1>
pRai[i].bDisksQuantity=m_RaidArrayInfo[i].bDisksQuantity;
pRai[i].dwCapacity=m_RaidArrayInfo[i].dwCapacity;// N sectors, that RAID has
int j;
for(j=0;j<8;j++)pRai[i].dwSize[j]=m_RaidArrayInfo[i].dwSize[j];//The size in mega bytes that the j-th slice, that array has
for(j=0;j<32;j++)pRai[i].bMembersID[j]=m_RaidArrayInfo[i].bMembersID[j];//The j-th byte store the slot ID of the j-th member
for(j=0;j<128;j++)pRai[i].bSlotStatus[j]=m_RaidArrayInfo[i].bSlotStatus[j];//Is any bitwise combination of ST_ONLINE | ST_BELONG | ST_REBILD
}//duplicate structures
return !(BOOL)m_dwError;
}//GetRaidArrayInfo(...)
BOOL CAgnt::GetSlotArrayInfoA(int n16Slot,CSlotArrayInfo* pSai)
{//GetSlotArrayInfo(...)
m_bPage=16+n16Slot;
if(!m_pSocket->Send(MSG_GET_STATUS))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
for(int i=0;i<16;i++)
{//duplicate structures
strcpy(pSai[i].m_szDiskVendorID,m_SlotArrayInfo[i].m_szDiskVendorID);
pSai[i].wBadBlock=m_SlotArrayInfo[i].wBadBlock;// N BadBlocks of disk media
pSai[i].dwSize=m_SlotArrayInfo[i].dwSize;//Disk Size
}//duplicate structures
return !(BOOL)m_dwError;
}//GetSlotArrayInfo(...)
BOOL CAgnt::ResetA(void)
{//Reset(...)
if(!m_pSocket->Send(MSG_RESET))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//Reset(...)
BOOL CAgnt::ShutDownA(void)
{//ShutDown(...)
if(!m_pSocket->Send(MSG_SHUTDOWN))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//ShutDown(...)
BOOL CAgnt::AddSlotA(BYTE bSlotNumber)
{//AddSlot(...)
m_bSlotNumber=bSlotNumber;
if(!m_pSocket->Send(MSG_ADD_SLOT))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//AddSlot(...)
BOOL CAgnt::RemoveSlotA(BYTE bSlotNumber)
{//RemoveSlot(...)
m_bSlotNumber=bSlotNumber;
if(!m_pSocket->Send(MSG_REMOVE_SLOT))return FALSE;
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET;
return !(BOOL)m_dwError;
}//RemoveSlot(...)
DWORD CAgnt::GetLastErrorA(LPSTR pszMessageText)
{//GetLastError(...)
pszMessageText=&m_szMessageText[0];
return m_dwError;
}//GetLastError(...)
BOOL CAgnt::ConnectSocket(LPCTSTR lpszAddress, UINT nPort)
{
m_pSocket=new CAgntSocket(this);
if(!m_pSocket->Create())
{
CString Temp;
Temp.Format("Windows sockets initialization failed.\n");
DisplayMsg(Temp);
delete m_pSocket;
m_pSocket = NULL;
return FALSE;
}
m_pSocket->Init();
if(!m_pSocket->Connect(lpszAddress,nPort))
{
CString Temp;
Temp.Format("Can't connect to %s\n",lpszAddress);
DisplayMsg(Temp);
delete m_pSocket;
m_pSocket=NULL;
return FALSE;
}
return TRUE;
}
void CAgnt::DisplayMsg(LPCTSTR lpszText)
{
if(m_LogFile)
{
if(m_LogFile.m_hFile!=(UINT)INVALID_HANDLE_VALUE) m_LogFile.Write(lpszText,strlen(lpszText));
}
}
void CAgnt::Assemble(BYTE What)
{
int i;
WORD Len;
m_dwError=0;
memset(Data,0,sizeof(Data));
Data[ 0]=What;
switch(What)
{
case MSG_GET_CONNECT:
case MSG_BREAK_CONNECT:
Len=9;
Data[1]=HIBYTE(Len);//HiLenght
Data[2]=LOBYTE(Len);//LoLenght
Data[3]=HTC();
Data[4]=m_bAdapter;
Data[5]=m_bTargetID;
Data[6]=m_bLUN;
Data[7]=(BYTE)(CRC(Len)>>8);
Data[8]=(BYTE)CRC(Len);
break;
case MSG_GET_STATUS:
Len=10;
Data[1]=HIBYTE(Len);//HiLenght
Data[2]=LOBYTE(Len);//LoLenght
Data[3]=HTC();
Data[4]=0x5F;//CommandSignature
Data[5]=0;//m_bLUN<<5;//LUN*32
Data[6]=0x01;//CommandCode
Data[7]=m_bPage;//PageNumber
Data[8]=(BYTE)(CRC(Len)>>8);
Data[9]=(BYTE)CRC(Len);
break;
// ........ //
case MSG_COMMAND:
{ CAgntCommand c;
c << (DWORD)mp_Host <<mp_CommandString;
c.FillData(*this);
} break;
}
}
BYTE CAgnt::DesAssemble()
{
int i,j;
BYTE Command=Data[0];
switch(Command)
{
case MSG_RET_STATUS:
m_dwError=(((DWORD)Data[4])<<24)|(((DWORD)Data[5])<<16)|(((DWORD)Data[6])<<8)|((DWORD)Data[7]);
if(Data[8]!=m_bPage)m_dwError|=ERR_WRONG_PAGE;
for(i=0;i<0x200;i++)Data[i]=Data[i+9];//5BytesShift
// ........ //
case MSG_RET_PARAM:
memset(m_szValue,0,sizeof(m_szValue));
for(i=0;i<STRING_LENGTH-1;i++)m_szValue[i]=Data[i+4];//RetVal
break;
case MSG_RESPONSE:
m_dwError|=(((DWORD)Data[4])<<24) | (((DWORD)Data[5])<<16) | (((DWORD)Data[6])<<8)|((DWORD)Data[7]);
memset(m_szMessageText,0,sizeof(m_szMessageText));
for(i=0;i<STRING_LENGTH-1;i++)m_szMessageText[i]=Data[i+8];//TextDescription
break;
case MSG_CMD_RESPONSE:
/*doing nothing*/
break;
}
return Command;
}
BYTE CAgnt::HTC(void)
{
int i;
BYTE htc=0;
for(i=0;i<3;i++)
{
htc+=Data[i];
}
return -htc;
}
WORD CAgnt::CRC(WORD len)
{
WORD i,crc=0;
BYTE shift;
for(i=0;i<len-2;i++)
{
shift=8;
crc=crc^(Data[i]<<8);
while(shift)
{
crc=crc<<1;
if(crc&0x8000)crc=crc^0x1021;
shift--;
}
}
return crc;
}
void CAgnt::Serialize(CArchive& ar)
{
WORD i;
m_dwError=0;
if(ar.IsStoring())
{
ar<<(WORD)MSG_MARKER;
for(i=0;i<4;i++)ar<<Data[i];
DataLen=256*Data[1]+Data[2];
for(i=4;i<DataLen;i++)ar<<Data[i];
ar<<(WORD)MSG_MARKER;
}
else
{
BYTE b;
WORD w;
memset(Data,0,sizeof(Data));
ar>>w;
if(w!=MSG_MARKER){m_dwError=ERR_INVALID_MARKER;goto end;}
for(i=0;i<4;i++)ar>>Data[i];
if(Data[3]!=HTC()){m_dwError=ERR_BROKEN_HEADER;goto end;}
DataLen=256*Data[1]+Data[2];
if(DataLen>1024){m_dwError=ERR_INVALID_LENGTH;goto end;}
for(i=4;i<DataLen;i++)
{
if(ar.IsBufferEmpty()){m_dwError=ERR_DATA_LOOSED;goto end;}
ar>>Data[i];
}
if(CRC(DataLen)!=256*Data[DataLen-2]+Data[DataLen-1]){m_dwError=ERR_BAD_CRC;goto end;}
end:while(!ar.IsBufferEmpty())ar>>b;
return;
}
}
#ifdef _DEBUG
void CAgnt::AssertValid()const{CObject::AssertValid();}
void CAgnt::Dump(CDumpContext& dc)const{CObject::Dump(dc);}
#endif //_DEBUG
#define __MSG_SEND(MSG) \
if(!m_pSocket->Send(MSG))return FALSE;\
if(!m_pSocket->Read())m_dwError|=ERR_READING_SOCKET
// CAgntSocket - open new socket for manager
IMPLEMENT_DYNAMIC(CAgntSocket,CSocket)
CAgntSocket::CAgntSocket(CAgnt* pAgnt)
{
m_pAgnt=pAgnt;
m_pFile=NULL;
m_pArchiveIn=NULL;
m_pArchiveOut=NULL;
}
void CAgntSocket::Init(void)
{
m_pFile=new CSocketFile(this);
m_pArchiveIn=new CArchive(m_pFile,CArchive::load);
m_pArchiveOut=new CArchive(m_pFile,CArchive::store);
}
CAgntSocket::~CAgntSocket()
{
if(m_pArchiveOut)
{
m_pArchiveOut->Abort();
delete m_pArchiveOut;
m_pArchiveOut =NULL;
}
if(m_pArchiveIn)
{
m_pArchiveIn->Abort();
delete m_pArchiveIn;
m_pArchiveIn =NULL;
}
if(m_pFile) {delete m_pFile;m_pFile=NULL;}
}
void CAgntSocket::OnReceive(int nErrorCode)
{//CAgntSocket::OnReceive(int nErrorCode)
CSocket::OnReceive(nErrorCode);
//Read();
}//CAgntSocket::OnReceive(int nErrorCode)
BOOL CAgntSocket::Read(void)
{
BOOL Res;
CString strTemp;
TRY
{
m_pAgnt->Serialize(*m_pArchiveIn);
if(m_pAgnt->m_dwError)
{
strTemp.Format(" - error : 0x%08X",m_pAgnt->m_dwError);
Res=FALSE;
}
else
{
strTemp.Format(" - response : 0x%02X",m_pAgnt->DesAssemble());
Res=TRUE;
}
m_pAgnt->DisplayMsg(strTemp);
}
CATCH(CFileException, e)
{
m_pArchiveIn->Abort();
delete m_pArchiveIn;
m_pArchiveIn=new CArchive(m_pFile,CArchive::load);
strTemp.Format("Server has reset the connection");
m_pAgnt->DisplayMsg(strTemp);
Res=FALSE;
}
END_CATCH
return Res;
}
BOOL CAgntSocket::Send(BYTE Command)
{
BOOL Res;
CString strTemp;
m_pAgnt->Assemble(Command);
strTemp.Format("Command 0x%02X :",Command);
m_pAgnt->DisplayMsg(strTemp);
TRY
{
m_pAgnt->Serialize(*m_pArchiveOut);
m_pArchiveOut->Flush();
Res=TRUE;
}
CATCH(CFileException,e)
{
m_pArchiveOut->Abort();
delete m_pArchiveOut;
m_pArchiveOut=new CArchive(m_pFile,CArchive::store);
strTemp.Format("Server has reset the connection");
m_pAgnt->DisplayMsg(strTemp);
Res=FALSE;
}
END_CATCH
return Res;
}
1. The Accusys GUI Command Descriptor (From RS-232)
0.0.1 Length is 2 bytes.
0.0.2 Data depends on Length value. If Length = 0x000f, then Data must be 15 Bytes.
0.0.3 Checksum is the value of Length + Data, is 1 Byte.
Received Command Status Response Code
Supported ACS command:
(Ex .. 590127 .0002 .01 .01 .04)
Response Data : 0x59, 0x01, 0x27, Page Data.........
Руководство пользователя
Ниже приведены избранные части документации пользователя (файл помощи) системы GUIMAN, касающиеся модуля Агент. На рисунке показана система помощи.
Встроенная система помощи
Overview
At a glance, the animated icons will show you all available drive information including drive status (active, free or failed),capacity, online RAID Subsystem status and even drive manufacturer and serial number.
Animated RAID Controller will quickly inform you about the status and configuration of the RAID and send you an alert if a drive or RAID fails.
Remote network control ability provides the enhanced flexible multi-user access to RAID Subsystem from different locations.
RAID Configuration, Security Settings and Failure Alert priorities are all easily managed using a mouse.
Impressive user interface gives a complete overview of the RAID Subsystem status and configuration. Animated graphics provide effective warning to the RAID administrator of any abnormalities.
The GUI manager has state of the art computer generated graphics.
Common GUIMAN Overview
GUIMAN is software system providing the powerful user interface for RAID Subsystem control and management.
GUIMAN consists of the following main applications:
- Agent
- Manager
- Connection Wizard
Agent
Agent is a GUIMAN 1.1 application providing the control interface between Manager and RAID Subsystem. Agent may be installed on the Host Computer or another computer connected to the RAID Subsystem via RS-232 or SCSI interface (optional).
Manager
Manager is GUIMAN Client application providing a management of RAID Subsystem via Agent. Manager is installed on a GUI Host Computer or remote network computer. Remote Manager Installation provides user interface via network (TCP/IP).
For Remote Manager Configuration the Network license is required
Connection Wizard
Connection Wizard is GUIMAN application provides the initial settings of Agent and Manager. Connection Wizard runs automatically during GUIMAN installation and also it may be run to RAID Controller detection and communication parameters reconfiguration.
To start Connection Wizard user should use Start/Programs/RAID GUI Manager/Connection Wizard menu. On doing so Connection Wizard Window appears. User should choose SCSI or RS-232 connection type and follow the instruction on the screen.
Supported RAID Controllers
GUIMAN 1.1 supports the following RAID Controllers:
- ACS-9910 - SCSI to SCSI RAID Controller
- ACS-9900 - SCSI to SCSI RAID Controller
- ACS-8900 - SCSI to IDE RAID Controller
- ACS-8600 - SCSI to IDE RAID Controller
Fore more details see ACS-9910/9900/8900/8600 User Manuals.
GUIMAN Installation Overview
There are the following GUIMAN configurations:
- Host
- Remote Manager
Host Configuration
Host Configuration is a full GUIMAN configuration. It contains Agent application, Manager Application and WebGUIMAN.
To install the Host Configuration user should:
- Insert the GUIMAN Distributive CD on Host CD-ROM
- Run setup.exe
- Choose Host configuration
- Choose the required options when Connection Wizard starts
For more details see Connection Wizard chapter
- Implement the Apache server setup using default settings
- Download the WEB license from GUIMAN Web site to the Host Computer
Remote Manager Configuration
Remote Manager Configuration is installed on remote computer which is linked with Host Computer via LAN.
To install the Remote Manager Configuration user should:
- Insert the GUIMAN Distributive CD on Host CD-ROM
- Run setup.exe file
- Install GUIMAN Host Configuration on Host Computer
- Download the Network license from GUIMAN Web site to the Host Computer
- Skip next steps if Host Configuration already installed on Remote Computer.
- Run setup.exe file from the GUIMAN 1-1 folder on the Remote computer
- Choose Remote Manager Configuration
Connection Wizard Using
To start Connection Wizard user should use Start/Programs/RAIDGUI Manager/Connection Wizard menu. On doing so Connection Wizard Window appears. User should choose SCSI or RS-232 connection type and following the instruction on the screen User should
- Choose the current type of connection between Host Computer and RAID controller
- Choose existing or create new E-mail profile (is required for e-mail notification service)
- Allow the Connection Wizard to detect RAID controller and set the required parameters
- Enter any name and any password for E-mail profile (if it is required)
- Click test profile to be sure that the profile is workable.
- Click next
- Allow the connection Wizard to install Apache server (if it is required)
Getting Started
To start working with GUIMAN application a user should:
- Use the Start/Programs/RAID GUI Manager/Connection Wizard menu. On doing so, Connection Wizard window appears.
- Follow instructions on the screen.
- Use the Start/Programs/RAID GUI Manager/RAID GUI Agent menu. On doing so, the RAID Agent icon appears in the right corner of the Windows Tool Bar Manager menu.
- Use the Start/Programs/RAID GUI Manager/RAID GUI Manager menu. On doing so the application Physical Window appears.
- For more details see Section RAID Configuration and Management.
Размещено на Allbest.ru
Подобные документы
Понятие и назначение, основы создания RAID–массивов, принципы их работы и законы функционирования. Классификация и разновидности систем RAID, их отличительные признаки, оценка преимуществ и недостатков каждого вида. Тестовая разработка RAID-массива.
курсовая работа [1,7 M], добавлен 24.04.2010Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Основные стадии разработки, принципы тестирования и отладка программного модуля "VFS". Особенности проектирования на языке UML. Методы "грубой силы" и их применение при отладке программы. Вредные факторы, присутствующие на рабочем месте программиста.
дипломная работа [827,0 K], добавлен 07.03.2012Разработка концептуальной модели базы данных. Реализация алгоритмов и разработка управляющей программы. Разработка структуры системы управления данными. Методика проведения и результаты тестирования. Функционирование разработанного программного модуля.
курсовая работа [550,5 K], добавлен 08.06.2023Выбор состава технических и программных средств разработки системы. Описание входных и выходных данных. Выбор модели базы данных. Разработка подсистемы наполнения базы данных, формирования отчетов. Разработка интерфейса пользователя, тестирование системы.
курсовая работа [3,7 M], добавлен 04.12.2014Описание входной и выходной информации. Требования к комплексу технических средств и к интерфейсу конечного пользователя. Разработка форм представления входных и выходных данных. Проектирование программных модулей. Руководство пользователя и программиста.
курсовая работа [421,6 K], добавлен 27.06.2015Порядок работы менеджера турфирмы. Анализ рынка программных приложений для ведения туристического бизнеса. Выбор средств проектирования и разработки системы управления баз данных. Разработка, реализация и анализ работы программного модуля, его запуск.
дипломная работа [3,4 M], добавлен 19.07.2015Разработка программы для автоматизации расчетов на телефонной станции. Описание входной и выходной информации, комплекс технических средств. Интерфейс конечного пользователя. Проектирование программных модулей представления входных и выходных данных.
курсовая работа [460,1 K], добавлен 26.06.2015Аппаратные и программные RAID-массивы. Расчет объема массива. Временные затраты на расчет и запись контрольных сумм. Пример распределения файлов по JBOD-массиву. Вероятности отказа каждого диска в массиве. Сравнение стандартных уровней RAID-массивов.
курсовая работа [3,0 M], добавлен 28.03.2011Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015