Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не ловятся данные с com-порта / 6 сообщений из 6, страница 1 из 1
04.09.2003, 11:57
    #32255664
LAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не ловятся данные с com-порта
Значит так:

Есть компонента для работы с com-портом (XComm если важно), сама по себе работает нормально, использовал пару раз. Есть мини-АТС, которая позволяет вести мониторинг звонков, выкладывая инфу на com-порт. Сейчас эта инфа ловится гипертерминалом и пишется в файл. Работает, но неудобно, гипертерминал не умеет работать сервисом, приходится держать сервак все время залогиненным, а при перезагруке ручками активировать гипертерминал. Написал примитивнейший сервис, который делает то же самое, установил все параметры com-порта как в гипертерминале - ничего не ловит, вычитал параметры порта функцией GetCommState, установил - бесполезно. Что еще можно? У меня нет новых идей.
...
Рейтинг: 0 / 0
04.09.2003, 13:07
    #32255792
maratka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не ловятся данные с com-порта
если программу писать неохота, то есть такая прога - srvany - позволяет из любой проги сделать сервис. - используй ее. или купи любую программу-тарификатор. ;)
...
Рейтинг: 0 / 0
04.09.2003, 13:17
    #32255807
LAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не ловятся данные с com-порта
Как раз программу написать-то хочется, но я не спец в ком-портах прошу помощи в создавшейся ситуации
...
Рейтинг: 0 / 0
04.09.2003, 13:28
    #32255824
alex-ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не ловятся данные с com-порта
Я тут порылся кое-что накопал - думаю ты сам разберешься :).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
class CPort
{
private:
HENV henv;					
HDBC hdbc;//указатель на структуру содержащую информацию о соединении
HSTMT hstmt;//указатель на структуру запроса

public:
HANDLE port;//Указатель на порт

private:
DCB  dcb;//Структура содержащая параметры порта
COMMTIMEOUTS  ct;//Структура содержащая тайм-ауты
DWORD         bc;	//Количество прочитанных\записанных символов

public:
int ConnectDB(UCHAR *dsn,UCHAR *uid,UCHAR *pwd);//Соединение с базой 
                                                                           данных
void CloseConn(void);//Закрытие соединения с БД
void WriteTrf(char *);//Запись очередной строки в БД
void OpenandConf(void);//Открытие и настройка порта
void ReadFrmComm(char *pstr);//Чтение данных из порта
void Close(void);	//Закрытие порта
};

CPort com1;	//Создаем объект для работы с портом

typedef struct _DCB {
    DWORD DCBlength;       /* sizeof(DCB)                     */ 
    DWORD BaudRate;        /* Baudrate at which running       */ 
    DWORD fBinary:  1 ;      /* Binary Mode (skip EOF check)    */ 
    DWORD fParity:  1 ;      /* Enable parity checking          */ 
    DWORD fOutxCtsFlow: 1 ;  /* CTS handshaking on output       */ 
    DWORD fOutxDsrFlow: 1 ;  /* DSR handshaking on output       */ 
    DWORD fDtrControl: 2 ;   /* DTR Flow control                */ 
    DWORD fDsrSensitivity: 1 ;  /* DSR Sensitivity              */ 
    DWORD fTXContinueOnXoff:  1 ;  /* Continue TX when Xoff sent */ 
    DWORD fOutX:  1 ;        /* Enable output X-ON/X-OFF        */ 
    DWORD fInX:  1 ;         /* Enable input X-ON/X-OFF         */ 
    DWORD fErrorChar:  1 ;   /* Enable Err Replacement          */ 
    DWORD fNull:  1 ;        /* Enable Null stripping           */ 
    DWORD fRtsControl: 2 ;   /* Rts Flow control                */ 
    DWORD fAbortOnError: 1 ;  /* Abort all reads and writes on Error */ 
    DWORD fDummy2: 17 ;      /* Reserved                        */ 
    WORD wReserved;        /* Not currently used              */ 
    WORD XonLim;           /* Transmit X-ON threshold         */ 
    WORD XoffLim;          /* Transmit X-OFF threshold        */ 
    BYTE ByteSize;         /* Number of bits/byte, 4-8        */ 
    BYTE Parity;           /* 0-4=None,Odd,Even,Mark,Space    */ 
    BYTE StopBits;         /* 0,1,2 = 1, 1.5, 2               */ 
    char XonChar;          /* Tx and Rx X-ON character        */ 
    char XoffChar;         /* Tx and Rx X-OFF character       */ 
    char ErrorChar;        /* Error replacement char          */ 
    char EofChar;          /* End of Input character          */ 
    char EvtChar;          /* Received Event character        */ 
    WORD wReserved1;       /* Fill for now.                   */ 
} DCB, *LPDCB;

Далее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
void CPort::OpenandConf(void)
{
dcb.DCBlength=sizeof(DCB);	//это поле обязательно должно содержать
			//длинну всей структуры dcb

BuildCommDCB( "baud=9600  parity=E data= 8  stop= 1 ",&dcb);//заполняет dcb 
                                                                                  автоматически
dcb.fNull=true;	//учитываем нулевые биты

//Настрйка тайм-аутов (все значения в мс)
ct.ReadIntervalTimeout= 10 ;	 //интервал между символами
ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant= 0 ;//множитель- 2 
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant= 0 ;//интервалы на 
                                                                          запись не используются

//открываем порт 
port=
CreateFile( "COM1" ,GENERIC_READ|GENERIC_WRITE, 0 ,NULL,OPEN_EXISTING, 0 ,NULL);

if(port==INVALID_HANDLE_VALUE)
{
  MessageBox(NULL, "Не возможно открыть последовательный 
                            порт" , "Error" ,MB_OK);
  ExitProcess( 1 );
}
	
SetCommState(port,&dcb);	//Определяем конфигурацию порта
SetCommTimeouts(port,&ct); //Устанавливаем тайм-ауты для порта
	
Если надо то еще это :
//PurgeComm(port,PURGE_TXCLEAR|PURGE_RXCLEAR);	//Очищаем порт 

return;
}

Далее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
int CMyService::GetTrafficFromPort(void)
{
.....
.....
.....

com1.OpenandConf();
		
DWORD mask;	//маска события порта
DWORD *lp=&mask;        //указатель на маску

......
......
......
do
{

for(i= 0 ,j= 0 ;i< 1 ;j++)//Цикл считывающий  1  сторку из порта  j-считано символов,
{            	//i-считано строк(кол-во строк задается условием цикла) 

	//if(!m_bIsRunning) break;
	com1.ReadFrmComm(buf_in);	//Считываем символ из порта

	if(buf_in[ 0 ]== 13 )	//Если это возврат коретки, то строка закончена
	{
	i++;j= 0 ;
	com1.WriteTrf(conf);            //Если разрешено, то пишем в БД
.....
.....
.....
	}
.....
.....
.....
}

}
while(m_bIsRunning); // Пока сервис запущен...

com1.Close();	//Закрываем порт
return  0 ;
}
...
Рейтинг: 0 / 0
05.09.2003, 13:27
    #32256948
C - -
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не ловятся данные с com-порта
Небольшой комментарий к программе. COM-порт открывается функцией CreateFile без флага FILE_FLAG_OVERLAPPED. Это значит, что в случае, если данные из порта не поступают, у представленной программы может не быть шанса завершиться штатно. Висеть в ReadFile она может вечно :)
...
Рейтинг: 0 / 0
06.09.2003, 14:58
    #32257651
Мимо пробегал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не ловятся данные с com-порта
Большая часть АТС требуют аппратного управления потоком данных - то есть нужно управлять DTS,RTS...... Настрой свою коспоненту соответсвующим образом. Терминал как раз успешно справляется с этой задачей.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не ловятся данные с com-порта / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]