Вопрос №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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!