Вопрос №3 Разработка программного модуля организации передачи данных с контроллера ADAM 5510М на управляющий компьютер.



Постановка задачи. Организовать передачу и прием данных поочередно через порта (COM1, COM2, COM3) контроллера ADAM 5510М. Предусмотреть наличие установленной на управляющем компьютере специальной заводской программы ADAM 5510_Series Utility, которая позволяет через СОМ-порт видеть пространство контроллера и формировать сигналы клавиатуры ПК и выводить ответы контроллера на консоль компьютера. Иными словам утилита позволяет видеть ресурсы компьютера (консоль ввода/вывода) как свои собственные.

 

Схема организации передачи данных

 

Задача 2

#include “5510drv.h” /*подключение библиотечных функций контроллера

void main()

{

unsigned long speed=9600L; /*переменная, хранящая значение скорости

передачи данных*/

unsigned char data,ch;  /*переменные для хранения передаваемых

данных*/

int status,com,sp; /*переменные для хранения значений при инсталляции COM-портов, имени COM-портов, выбора значений скорости передачи данных*/

unsigned int i,j; /*переменные для организации передачи данных*/

 

while(1) /*проверяемым условием в определении цикла м.б. любое допустимое выражение языка С; в этом случае цикл продолжает выполняться до тех пор, пока это выражение истинно*/

{

/*организация меню для выбора СОМ-порта и значения скорости передачи данных*/

printf(“\n com1: com232”);

printf(“\n com2: com485”);

printf(“\n com3: com232485”);

 

/*выбор порта*/

printf(“\n Input the coummuncation at com : “);

scanf(“%d”,&com);

 

/*выбор и установка значения скорости передачи данных*/

printf(“\n Select baud rate 9600L “);

printf(“\n [1] 9600L “);

printf(“\n [2] 19200L “);

printf(“\n [3] 38400L “);

printf(“\n [4] 57600L “);

printf(“\n [5]115200L “);

printf(“\n baudrate=”);

scanf(“%d”,&sp);

 

switch(sp) /*установка значения скорости передачи данных*/

 

{

case 1:

speed=9600L;break;

case 2:

speed=19200L;break;

case 3:

speed=38400L;break;

case 4:

speed=57600L;break;

case 5:

speed=115200L;break;

default: /*установка значения скорости, если не одно из

предложенных значений не установлено*/

speed=9600L;break;

}

 

 

switch(com)

{

case 1: /*выбран порт COM1 (RS-232) */

/*выполняется инсталляция порта (установка КД) */

status=com_install(1);

 

if(status==0) /*успешное завершение установки*/

printf (“\n The allocation of com%d port is ok\n “,com);

 

else

if (status==1)

{

/*драйвер уже установлен установки*/

Printf (“\ncom%d port is already installed\n “,com);

 

}

else

{

/*дрйвер не установлен*/

printf(“\n The allocation of com%d port is not ok

\n “,com);

printf(“status=%d\n”,status);

exit(0);

}

 

/*установка параметров информационной посылки */

com_set_format(8,0,1);

/*установка скорости передачи данных*/

com_set_speed(speed);

 

/* PLC --- à PC*/

/* организация передачи данных через COM-порт(Tx(PLC) к Rx (ПК)) PLC ----- PC */

printf(“Stop trasnfer data <ESC>”); /* остановка передачи данных*/

 

for(i=0;i<1000;i++) /*вложенный цикл как искусственный прием организации непрерывной (в течение сравнительно длительного периода времени) передачи данных*/

{

for(j=0;j<1000;j++)

{

/* передача последовательности символов

“ com232 test “*/

com_tx_string(“ com232 test “);

 

/* ввод данных с клавиатуры происходит до тех пор, пока не будет нажата клавиша Esc (ее 16-ричный код 0x1b)*/

if (kbhit ( ))

{

ch=getch();/* чтение строки данных и размещение их в переменной ch без отображения на мониторе*/

if(ch==0x1b) { i=1000;j=1000 ;}  

}

}

 }

 

/* PC --- à PLC*/

 

/* прием данных с управляющего ПК переданных через COM-порт контроллера (Rx) */

printf(“\n\n Please transfer data from server or <ESC> to exit\n”);

 

while(1)

{

/* получение статуса приемника*/

if(com_rx_empty()==0) /* очередь занята, до тех пор, пока не будет передан последний из находящихся в буфере приемника контроллера байт*/

{

/* получение и вывод символа на консоль */

data=com_rx();/* чтение очередного символа из буфера кнтроллера для COM1*/

printf (“\n %c”,data);

}

 

if(kbhit())

{

ch=getch();

if(ch==0x1b) { break; }

}

}

break;

 

case 2: /*выбран порт CO2 (RS-485) */

/*инициализация регистров прерывания порта

микропроцессора порта*/

status=com_485_install( );

 

if(status==0)

printf(“\n The allocation of com%d port is ok\n “,com);

 

else

if (status==1)

{

printf(“\ncom%d port is already installed\n “,com);

}

else

{

printf(“\n The allocation of com%d port is not ok \n “,com);

printf(“status=%d\n”,status);

exit(0);

}

 

 com_485_set_format(8,0,1);

      com_485_set_speed(speed);

 

/*Передача данных (контроллер - ПК)*/

printf(“Stop trasnfer data <ESC>”);

 

for(i=0;i<1000;i++)

{

for(j=0;j<1000;j++)

{

/* передача последовательности символов

“ com485 test “*/

com_485_tx_string(“ com485 test “);

 

if(kbhit( ))

{

ch=getch();

 

if(ch==0x1b) { i=1000;j=1000 ;}

}

}

}

 

 

/* прием данных контроллером от ПК*/

printf(“\nPlease transfer data from server or input<ESC> to exit\n”);

 

while(1)

{

 

if(com_485_rx_empty()==0)

{

data=com_485_rx();

printf(“\n %c”,data);

}

 

if(kbhit())

{

ch=getch();

if(ch==0x1b) { break; }

}

}

break;

 

case 3: /* выбран порт CO 3 ( RS -232/485) */

status=com_232_485_install();

if(status==0)

printf (“\n The allocation of com%d port is ok\n “,com);

Else

 if (status==1)

{

printf (“\ncom%d port is already installed\n “,com);

}

Else

{

printf (“\n The allocation of com%d port is not ok \n “,com);

printf (“status=%d\n”,status);

exit(0);

}

// Format and Speed Setting

com_232_485_set_format(8,0,1);

com_232_485_set_speed(speed);

// Transfer data

printf (“Stop trasnfer data <ESC>”);

for(i=0;i<1000;i++)

{

for(j=0;j<1000;j++)

{

com_232_485_tx_string(“ com232485 test “);

If(kbhit())

{

ch=getch ();

if(ch==0x1b){ i=1000;j=1000 ;}

}

}

}

// Прием данных

printf (“\n\n Please transfer data from server or <ESC> to exit\n”);

While(1)

{

if(com_232_485_rx_empty()==0)

{

data=com_232_485_rx();

printf (“\n %c”,data);

}

If(kbhit())

{

ch=getch ();

if(ch==0x1b){ break; }

}

}

break;

default:

break;

}

 

//Завершение основного цикла while

printf(“\n <ESC> to exit or anykey to continue\n “);

ch=getch();

if(ch==0x1b) { break;}

}

}


Дата добавления: 2019-02-13; просмотров: 307; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!