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

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

Код: 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
Не ловятся данные с com-порта
    #32256948
C - -
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшой комментарий к программе. COM-порт открывается функцией CreateFile без флага FILE_FLAG_OVERLAPPED. Это значит, что в случае, если данные из порта не поступают, у представленной программы может не быть шанса завершиться штатно. Висеть в ReadFile она может вечно :)
...
Рейтинг: 0 / 0
Не ловятся данные с com-порта
    #32257651
Мимо пробегал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большая часть АТС требуют аппратного управления потоком данных - то есть нужно управлять DTS,RTS...... Настрой свою коспоненту соответсвующим образом. Терминал как раз успешно справляется с этой задачей.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не ловятся данные с com-порта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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