|
Добрый день! Подскажите кому не лень почему не работает COM-4 на контроллере ADAM-5510E/TCP.
У контроллера 4 порта. Com1 - 232/485 (выбирается перемычкой), Com2 - 485,
Com3 (для программирования) и Com4 - 232/485 (выбирается перемычкой) .
Для работы с каждым портом предусмотрены свои функции в библиотеке которая идет с контроллером.
Нужно опрашивать устройства с RS-232. Одно устройство я подсоединил к COM-1, другое к COM-4. Устройство
описано классом, сокращенный исходный код которого приведен ниже. Так вот, устройство которое подключено к COM-1
работает, контроллер его опрашивает, связь идет все ок. И то же самое вроде сделано для связи по COM-4
но обмена нет. Все проверил нету. Перемычки все в RS-232. Класс используется примерно так:
Ustroistvo * dev1;
dev1=new ustroistvo(1); // сделали экземляр для COM-1
Ustroistvo * dev2
dev2=new ustroistvo(4); // сделали экземляр для COM-4
// Используемые переменные
unsigned char obuf[7] - буффер на передачу
unsigned char ibuf[20] - буффер на прием
int port - номер порта
Вот отрывок кода класса:
1-конструктор
2-опрос устройтсва
1.
-------------------------------------------------
// Инициализация (вход - int port)
if (port==1) // Если порт COM1
{
int status;
status=com_install(1);
if (status==0) cout << "COM 1 Installed \n";
com_set_format(8,0,1);
com_set_speed((unsigned long)9600);
com_set_parity(0,1);
}
else
if (port==4) // Если порт COM4
{
int status;
status=com_232_485_install();
if (status==0) cout << "COM 4 Installed \n";
com_232_485_set_format(8,0,1);
com_232_485_set_speed((unsigned long)9600);
com_232_485_set_parity(0,1);
}
else
cout << "INVALID COM Port!!!";
-------------------------------------------------
2.
-------------------------------------------------
// Работа с портами
obuf[0]=255;
obuf[1]=33;
obuf[2]=0x20;
obuf[3]=0x2E;
obuf[4]=4;
for (int i=1;i<5;i++) crc=crc^obuf[I];
obuf[5]=crc;
obuf[6]=3;
if (port==1) // если порт устройства COM-1
com_tx_string(obuf);
else
if (port==4) // если порт устройства COM-4
com_232_485_tx_string(obuf);
ADAMdelay(10);
int k=0;
if (port==1)
while (com_rx_empty()==0)
{
ibuf[k]=com_rx();
k++;
}
else
if (port==4)
while (com_232_485_rx_empty()==0)
{
ibuf[k]=com_232_485_rx();
k++;
}
ibuf[k+1]='\0';
printf("%d ",ibuf[0]);
printf("%d ",ibuf[1]);
printf("%d ",ibuf[2]);
printf("%d ",ibuf[3]);
printf("%d ",ibuf[4]);
printf("%d ",ibuf[5]);
printf("%d ",ibuf[6]);
printf("%d \n",ibuf[7]);
-------------------------------------------------
Если через COM-4 то ibuf[0]...[7] нули. А если через COM-1 то все ок.
Подскажите кто с этим сталкивался.
Также для связи с устройством используются Rx,Tx,Gnd,DTR. Без DTR не работает.
Может быть в COM1 есть управление DTR а в COM-4 нет?
Заранее огромное спасибо.
|