Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Проблемы с программированием ADAM-5511

 Ответить Ответить
Автор
Сообщение
Priest Смотреть выпадающим
Новичок
Новичок


Присоединился: 05 Январь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 22
Свойства публикации Свойства публикации   Ответить, цитируя автора - Priest Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Проблемы с программированием ADAM-5511
    Опубликовано: 09 Февраль 2005 06:28

Всем привет...

Я начал писать программы на ADAM-5511 и столкнулся с несколькими проблемами такого рода:

1) почему-то не работают функции задержки ADAMDelay() (из библиотеки Utility.lib) и delay() (из dos.h). Пробовал даже программную задержку установить циклом for, но ADAM посто зависает. Можно конечно через RTC извратиться, но это немного не удобно, точнее совсем не удобно.

2) не работает функция Get_BoardID(), вместо желанного идентификатора модуля выдает какую-то гадость про Borland..

3) как я понял, в библиотеке comm.lib для ADAM-5511 описаны функции приема и передачи информации только для COM2, может есть библиотеки, где есть функции для COM1 (предполагается, что к этому порту подключается компьютер).

Мож у кого есть какие исходники, а то я себя уже полным userom чувствую

Заранее спасибо...

With best regards
Andrew
Наверх
myrob Смотреть выпадающим
Новичок
Новичок


Присоединился: 07 Август 2003
Категория: Ukraine
Online Status: Offline
Публикации: 36
Свойства публикации Свойства публикации   Ответить, цитируя автора - myrob Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Февраль 2005 11:39
Я использовал для программирования ADAM5511 библиотеки для ADAM5510. Все  указанные функции работали. Порты можно программировать используя inport outport с базовыми адресами 2f8  и 3f8 минуя функции библиотек. Для ADAM5510 много примеров есть, поставляемых с ПО
Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Февраль 2005 13:50

1. 2. Delay из DOSа работать не будет. Что не работает ADAMDealy() странно. И сторая надпись странная. В какой модели компилируете? Компилятор какой, надо BC 3.1

3. Все функции из comm.lib com_232_***** - именно для порта COM1 (RS-232). Для RS-485 есть библиотека RIO.LIB с соотв. функциями.

 

Наверх
Priest Смотреть выпадающим
Новичок
Новичок


Присоединился: 05 Январь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 22
Свойства публикации Свойства публикации   Ответить, цитируя автора - Priest Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 10 Февраль 2005 06:28

С компилятором все нормально, использую BorlandC++v.3.1. Я делаю так: пишу программу, загружаю ее в ADAM, запускаю досовскую утилиту, устанавливаю на ADAMе DIP1 в "on", затем захожу в терминальный режим, перезагружаю ADAM, после перезагрузки моя программа автозагружается и в терминальном режиме отображается процесс выполнения моей программы, но на функции ADAMDelay() порграмма просто зависает...

Далее, с Get_BoardID(). Сам не понимаю, почему эта функция не работает, вроде делаю все правильно:

unsigned char BoardID;

int SlotNumber=3;

BoardID=Get_BoardID(SlotNumber);

printf("%s\n, BoardID");

...и выдает она всякую ерунду типа Borland C++ ...и т.д.

Если есть какие библиотечки или examples, то вот мое мыло fox17j@yahoo.com буду очень признателен

With best regards
Andrew
Наверх
myrob Смотреть выпадающим
Новичок
Новичок


Присоединился: 07 Август 2003
Категория: Ukraine
Online Status: Offline
Публикации: 36
Свойства публикации Свойства публикации   Ответить, цитируя автора - myrob Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 10 Февраль 2005 10:11

/***********************************************************************/
  #include <5510drv.h>
  #include <lu40t.h>
void save_sec1(void)
{
       extern float SP1, SP2 ;       // гбв ўЄ 
       extern float Ts;                  // ўаҐ¬п Ё§¬ҐаҐ­Ёп
       extern float Tf;
       extern float KP1, KP2;         // Є®щддЁжЁҐ­в Їа®Ї®ажЁ®­ «м­ч©
       extern float KD1, KD2;         // Є®®ддЁжЁҐ­в ¤ЁддҐаҐ­жЁ «м­ч©
       extern float Ti1, Ti2;         // ўаҐ¬п Ё­вЈаЁа®ў ­Ёп
       extern unsigned char Bdata5051[16];
 FILE *f1;
       f1= fopen ("setup1.ini" ,"w" );
       fprintf(f1,"%f %f %f %f %f %f %f %f %f %f",KP1,KD1,Ti1,SP1,KP2,KD2,Ti2,SP2,Ts,Tf);
   //    fprintf(f1,"%f %f %f %f %f %f ",KP1,KD1,Ti1,SP1,Ts,Tf);
       fclose(f1);


}
/************************************************************************/
  void faild_nodeID(void)
      {
 int i;
 char rab_z[36]=  "newerno ustanowlen adres  port 485 ";
//      p_scr();                                         //
      for (i=0; i< 36; i++)
    outport1(rab_z);
    p_0d0a();
    ADAMdelay(1);
      }
/************************************************************************/
  void finish (void)
      {
 int i;
 char rab_z[36]=  "sistema termostatirovaniq wykl`~ena";
//      p_scr();
      for (i=0; i< 36; i++)
    outport1(rab_z);
    p_0d0a();
    ADAMdelay(1);
      }
/************************************************************************/
  void tabl_m(void)
  {
    int i;
    char rab_z[36]=  "koefficienty sohraneny, proweritx-k";

    for (i=0; i< 35; i++)
 outport1(rab_z);
    p_0d0a();
    ADAMdelay(1);
  }
/******************************************************************/
  void durak(void)
      {
    int i;         // *                                             *
    char rab_z [23]=  "         otoidi durak " ;
       for (i=0; i< 23; i++)
 outport1(rab_z);
       p_0d0a();
       ADAMdelay(1);
      }
/************************************************************************/
  void tabl0(void)
  {
    int i;
    char rab_z [46]=  "     t e r m o s t a t i r o w a n i e  lu-40";
    char rab_z1[46]=  "                                  wersiq 1.01";
    char rab_z2[46]=  "     razrabotka |ntuziastow laboratorii 35-30";
    char rab_z3[46]=  "my prokatim was na {aru po wsemu zemnomu {aru";
//    char rab_z3[46]=  "l e n x   dwivet ~elowe~eskim progressom     ";
    char rab_z4[46]=  "esli estx woprosy, ~itaem instrukci`, zatem  ";
    char rab_z5[46]=  "obra}aemsq k iwahnenko a, momot w, {elepko s ";

    number();
    for (i=0; i< 45; i++)
 outport1(rab_z);
    p_0d0a();
    ADAMdelay(1);

    for (i=0; i< 45; i++)
 outport1(rab_z1);
    p_0d0a();
//    p_0d0a();
    ADAMdelay(1);

    for (i=0; i< 45; i++)
       {
 outport1(rab_z2);
 if (i==23)  ADAMdelay(1);
       }
    p_0d0a();
    p_0d0a();
    ADAMdelay(1);

    for (i=0; i< 45; i++)
       {
 outport1(rab_z3);
 if (i==23)  ADAMdelay(1);
       }
    p_0d0a();
    p_0d0a();
    ADAMdelay(1);

    for (i=0; i< 45; i++)
       {
 outport1(rab_z4);
 if (i==23)  ADAMdelay(1);
       }
    p_0d0a();
//    p_0d0a();
    ADAMdelay(1);

    for (i=0; i< 45; i++)
 outport1(rab_z5);
    p_0d0a();
    p_0d0a();
    ADAMdelay(1);
  }
/******************************************************************/
void tabl1(void)
{
    extern   float TP[7];
    extern   unsigned char Bdata5051[16];
    extern   unsigned char termopara[8] ;
    extern   int outpid0 ;
    extern   int outpid1 ;
    file://extern   float bdata0 ;
    file://extern   float bdata1 ;

    char rab1[80];
    char * buf=rab1;
    int i;
//    char rab_z[41]=  "t e r m o s t a t i r o w a n i e  lu-40";
    char rab_t[35]=  "t a b l i c a  t e m p e r a t u r";
    char rab_t0[35]= "T0 temperatura sekcii      #9  tp5";
    char rab_t1[35]=   "T1 temperatura sekcii      #10 tp7";
    char rab_t2[35]=   "T2 temperatura |n1 sekcii  #9  tp3";
    char rab_t3[35]=   "T3 temperatura oborotnoj wody  tp1";
    char rab_t4[35]=   "T4 temperatura |n2 sekcii  #10 tp4";
    char rab_t5[35]=   "T5 temperatura rezonator uskor tp6";
    char rab_t6[35]=   "T6 temper wody wyhod teploobm  tp2";
    char rab_b1[35]=   "w1 woda w sekcii #9               ";
    char rab_b2[35]=   "w2 woda w sekcii #10              ";
    char termopara0[8]= "  obryw";
    char out0pid[35]=  "wyhod pid-regulqtora sekcii  #9   ";
    char out1pid[35]=  "wyhod pid-regulqtora sekcii  #10  ";
    char voda[14]=     "     net wody";
//    char termopara1[8]= "  norma";

/*    for (i=0; i< 40; i++)
 outport1(rab_z);
    p_0d0a();
    p_0d0a();
    ADAMdelay(1);
*/
    tabl0();

    for (i=0; i< 34; i++)
 outport1(rab_t);
    p_0d0a();
    p_0d0a();

  /***************************************************/

    ADAMdelay(1);
    for (i=0; i< 34; i++)
 outport1(rab_t0);

   sprintf(buf,"%6.1f",TP[0]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[0]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
 // ************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
 outport1(rab_t1);

   sprintf(buf,"%6.1f",TP[1]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[1]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
 // ************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
       outport1(rab_t2);

   sprintf(buf,"%6.1f",TP[2]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[2]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
 // ************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
       outport1(rab_t3);

   sprintf(buf,"%6.1f",TP[3]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[3]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
// **************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
       outport1(rab_t4);

   sprintf(buf,"%6.1f",TP[4]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[4]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
// ***************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
       outport1(rab_t5);

   sprintf(buf,"%6.1f",TP[5]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[5]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
// ****************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
       outport1(rab_t6);

   sprintf(buf,"%6.1f",TP[6]);

   for (i=0; i< 6; i++)
       outport1(rab1);

   if (termopara[6]==0)
      for (i=0; i< 7; i++)
   outport1(termopara0);
/*   else
      for (i=0; i< 7; i++)
   outport1(termopara1);
*/
   p_0d0a();
// *******************************

   ADAMdelay(1);
   for (i=0; i< 34; i++)
       outport1(rab_b1);

   sprintf(buf,"%6d",Bdata5051[0]);

   for (i=0; i< 7; i++)
       outport1(rab1);

   if  ( Bdata5051[0]== 0 )
       for (i=0; i<14; i++)
    outport1  ( voda );

   p_0d0a();


// ****************************

   ADAMdelay(1);
    for (i=0; i< 34; i++)
 outport1(rab_b2);

   sprintf(buf,"%6d",Bdata5051[1]);

   for (i=0; i< 7; i++)
   outport1(rab1);

   if  ( Bdata5051[1]== 0 )
       for (i=0; i<14; i++)
    outport1  ( voda );

   p_0d0a();

   file://**************************
    ADAMdelay(1);
    for (i=0; i< 34; i++)
 outport1(out0pid);

   sprintf(buf,"%6d",outpid0);

   for (i=0; i< 6; i++)
       outport1(rab1);
    p_0d0a();
   file://**************************
    ADAMdelay(1);
    for (i=0; i< 34; i++)
 outport1(out1pid);

   sprintf(buf,"%6d",outpid1);

   for (i=0; i< 6; i++)
       outport1(rab1);
    p_0d0a();
}
/***************************************************************/
/*****************************************************************/
void tabl2(void)                file://в Ў«Ёж  §­ зҐ­Ё© Є®ҐддЁжЁҐ­в®ў
{
       extern float SP1, SP2 ;       // гбв ўЄ 
       extern float Ts;                  // ўаҐ¬п Ё§¬ҐаҐ­Ёп
       extern float Tf;
       extern float KP1, KP2;         // Є®щддЁжЁҐ­в Їа®Ї®ажЁ®­ «м­ч©
       extern float KD1, KD2;         // Є®®ддЁжЁҐ­в ¤ЁддҐаҐ­жЁ «м­ч©
       extern float Ti1, Ti2;         // ўаҐ¬п Ё­вЈаЁа®ў ­Ёп
       extern unsigned char Bdata5051[16];
    char rab1[80];
    char * buf=rab1;
    int i;

   tabl0();
     file://ᥪжЁп 1
   outport(port,'K');
   outport(port,'P');
   outport(port,'1');
   outport(port,'=');

   sprintf(buf,"%6.2f",KP1);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
 // ************************
   outport(port,'K');
   outport(port,'D');
   outport(port,'1');
   outport(port,'=');

   sprintf(buf,"%6.2f",KD1);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
 // ************************
   outport(port,'T');
   outport(port,'i');
   outport(port,'1');
   outport(port,'=');

   sprintf(buf,"%6.2f",Ti1);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
 // ************************
   outport(port,'S');
   outport(port,'P');
   outport(port,'1');
   outport(port,'=');

   sprintf(buf,"%6.2f",SP1);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
// **************************
       file://ᥪжЁп 2
   outport(port,'K');
   outport(port,'P');
   outport(port,'2');
   outport(port,'=');

   sprintf(buf,"%6.2f",KP2);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
 // ************************
   outport(port,'K');
   outport(port,'D');
   outport(port,'2');
   outport(port,'=');

   sprintf(buf,"%6.2f",KD2);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
 // ************************
   outport(port,'T');
   outport(port,'i');
   outport(port,'2');
   outport(port,'=');

   sprintf(buf,"%6.2f",Ti2);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
 // ************************
   outport(port,'S');
   outport(port,'P');
   outport(port,'2');
   outport(port,'=');

   sprintf(buf,"%6.2f",SP2);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
// **************************

   outport(port,'T');
   outport(port,'s');
   outport(port,'=');

   sprintf(buf,"%6.2f",Ts);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
// **************************

   outport(port,'T');
   outport(port,'f');

   outport(port,'=');

   sprintf(buf,"%6.2f",Tf);

   for (i=0; i< 6; i++)
   outport(port,rab1);

   p_0d0a();
// **************************
}
/*****************************************************************/
void help(void)
{
char ma[80];
char *buf=ma;
file://char sym;
int i;
file://float f;
char * msg1[25]={"T - tablica temperatur  "};
char * msg2[25]={"K - tablica   koef PID  "};
char * msg3[25]={"A - wwod koef sekcii #9 "};
char * msg4[25]={"E - wwod koef sekcii #10"};
char * msg5[25]={"M - zapisx na disk      "};
char * msg6[25]={"H - pomo}x              "};
char * msg7[25]={"O - wyhod               "};

 p_scr();
 ADAMdelay(1);
 tabl0();
 ADAMdelay(1);

 sprintf(buf,"%s",msg1[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 ADAMdelay(1);
 file://puts(buf);

 sprintf(buf,"%s",msg2[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 ADAMdelay(1);
 // puts(buf);

 sprintf(buf,"%s",msg3[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 ADAMdelay(1);
 // puts(buf);

 sprintf(buf,"%s",msg4[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 // puts(buf);

 sprintf(buf,"%s",msg5[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 ADAMdelay(1);
 // puts(buf);

 sprintf(buf,"%s",msg6[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 ADAMdelay(1);
 // puts(buf);

 sprintf(buf,"%s",msg7[0]);
 for(i=0;i<24;i++)
 outport1(buf);
 p_0d0a();
 ADAMdelay(1);
 // puts(buf);
}
/***********************************************************************/
  int slot5018=18;
  int slot5024=24;
  int slot5051=51;
  int slot5056=56;

  void slot_number(void)
      {
 //      extern int cycle_number;
       unsigned char SlotID;
       int i;
       for (i=0; i<=3; i=i+1)
   {
    SlotID=Get_BoardID (i);
    if  (SlotID==ADAM5018_ID)
       { slot5018=i; printf ( "\nSLOT5018= %d", slot5018 ); }
    if  (SlotID==ADAM5024_ID)
       { slot5024=i; printf ( "\nSLOT5024= %d", slot5024 ); }
    if  (SlotID==ADAM5051_ID)
       { slot5051=i; printf ( "\nSLOT5051= %d", slot5051 ); }
    if  (SlotID==ADAM5056_ID)
       { slot5056=i; printf ( "\nSLOT5056= %d", slot5056 ); }
   }
 //  number();
 //  time_open ();
/*   if (  cycle_number==10000 )
     {
      slot5018=18;
      slot5024=24;
      slot5051=51;
      slot5056=56;
     }*/
//   printf ( "\nSLOT5018= %d", slot5018 );
//   printf ( "\nSLOT5024= %d", slot5024 );
//   printf ( "\nSLOT5051= %d", slot5051 );
//   printf ( "\nSLOT5056= %d", slot5056 );
   if (slot5018>3 || slot5024>3 || slot5051>3 || slot5056>3)
     {
      printf("\nERROR install module ADAM5000");
 //     cycle_number=10000;
     }
      }

Наверх
Semelenov Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 15 Октябрь 2003
Категория: Belarus
Online Status: Offline
Публикации: 141
Свойства публикации Свойства публикации   Ответить, цитируя автора - Semelenov Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 10 Февраль 2005 15:52

На всякий случай проверьте на каком процеесоре сделана Ваш ADAM.

Компиляторы Си (и Паскаля в том числе) в EXE-файл добавляют процедуру определения задержки для процедуры Delay.

В случае наличия у Вас процессора RDC8000 - добавте в сецию инициализации любого модуля, подключенного к программе строчку "Test8086 := 0;".

Нам это помогло (как это ни странно !).

Наверх
Priest Смотреть выпадающим
Новичок
Новичок


Присоединился: 05 Январь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 22
Свойства публикации Свойства публикации   Ответить, цитируя автора - Priest Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 14 Февраль 2005 06:39

Спасибо за исходник, но я уже вышел из положения...

Я взял библиотеки от ADAM-5510 и ADAM-5511 и собрал одну библиотеку, довольно-таки неплохо получилось  не нужно извращаться с адресацией...

Вот только возник один вопрос, я к ADAM-5510 нашел примеры с кучей библиотек, например есть такие comml.lib, commc.lib, commm.lib, comms.lib ..... utilityl.lib, utilityc.lib, utilitym.lib, utilitys.lib, вроде описания всех функций находятся в каждой из них, только вот чем они отличаются, например, библиотека *c.lib от *s.lib?

А так, вроде, все путем...

Большое спасибо

With best regards
Andrew
Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 14 Февраль 2005 10:31

Первоначально опубликовано Priest

чем они отличаются, например, библиотека *c.lib от *s.lib?

Как это в Си обычно принято, последняя буква указывает на модель памяти: c - compact, s - small, и т. д.

Инженер-системотехник
+7 (916) 477 3925
Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 14 Февраль 2005 18:10
Первоначально опубликовано Priest

отличаются, например, библиотека *c.lib от *s.lib?

Откомпилированы под разные модели памяти: compact, small и т. д.

Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz