Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Параметры подключения к com-порту

2.9K
08 ноября 2005 года
narcotic
41 / / 04.10.2004
Здравствуйте. У меня есть следующий код, но я не знаю, как в код добавить параметры подключения к порту, а именно: BaudRate, StopBits, Parity и ByteSize.

Код:
void ShowLastError(void)
     {
   LPVOID lpMsgBuf;

   FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL
    );

    // Display the string.
    MessageBox( NULL,(char*) lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );

    // Free the buffer.
    LocalFree( lpMsgBuf );
     };

HANDLE hCom;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString com=this->Edit1->Text;
AnsiString Succesful("\tóñïåøíî");
AnsiString Failed   ("\tíå óñïåøíî");

DWORD T;
bool b;

_COMMTIMEOUTS ctmo;
COMMCONFIG cc;
DCB cdb;
DWORD size=sizeof(COMMCONFIG);

AnsiString str;

//îòêðûòèå ïîðòà
hCom=CreateFile(com.c_str(),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

cc.dwSize=size;
cc.wVersion=1;
cc.dwProviderSubType=PST_RS232;
cc.dwProviderOffset=0;
cc.dwProviderSize=0;

//ïðîâåðêà íà óñïåøíîå îòêðûòèå
if (hCom==INVALID_HANDLE_VALUE)
   ShowLastError();
//÷òåíèå òåêóùèõ íàñòðîåê
if (!GetCommConfig(hCom,&cc,&size))
   ShowLastError();
//âûâîä äèàëîãîâîãî îêíà ñ òåêóùèìè ïàðàìåòðàìè
if (!CommConfigDialog(this->Edit1->Text.c_str(),this->Handle,&cc))
   ShowLastError();
//óñòàíîâêà íîâûõ ïàðàìåòðîâ
if (!SetCommConfig(hCom,&cc,size))
   ShowLastError();

//íàñòðîéêà òàéìàóòîâ
ctmo.ReadIntervalTimeout=0;
ctmo.ReadTotalTimeoutMultiplier=0;
ctmo.ReadTotalTimeoutConstant=100;
ctmo.WriteTotalTimeoutMultiplier=0;
ctmo.WriteTotalTimeoutConstant=100;
//óñòàíîâêà òàéìàóòîâ
SetCommTimeouts(hCom,&ctmo);
//âêëþ÷åíèå òàéìåðà
this->Timer1->Enabled=true;
}

Подскажите, пожалуйста, что здесь нужно дописать.

И еще один вопрос. Мне нужно отправить в порт такую строку:
{0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x03}
Я пробовал писать следующий код, но ничего не выходило :(

 
Код:
// Отправка
DWORD b;
unsigned char s = {0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x03};
//?????? ??????? ? ????
WriteFile(hCom,&s,1,&b,0);


 
Код:
//Прием
char k;
DWORD b=0;
//÷òåíèå ñèìâîëà èç ïîðòà
ReadFile(hCom,&k,1,&b,0);
if (b)
        {
        //çàïèñü ñèìâîëà íà ýêðàí
        this->Memo1->Text=this->Memo1->Text+AnsiString(k);
        }
317
09 ноября 2005 года
Relax
573 / / 20.09.2000
хелп Windows SDK, раздел "Using the Communications Functions" :

The following example opens a handle to COM1 and fills in a DCB structure with the current configuration. The DCB structure is then modified and used to reconfigure the device.

DCB dcb;
HANDLE hCom;
DWORD dwError;
BOOL fSuccess;

hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0, /* comm devices must be opened w/exclusive-access */
NULL, /* no security attrs */
OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
0, /* not overlapped I/O */
NULL /* hTemplate must be NULL for comm devices */
);

if (hCom == INVALID_HANDLE_VALUE) {
dwError = GetLastError();

/* handle error */
}

/*
* Omit the call to SetupComm to use the default queue sizes.
* Get the current configuration.
*/

fSuccess = GetCommState(hCom, &dcb);

if (!fSuccess) {
/* Handle the error. *
}

/* Fill in the DCB: baud=9600, 8 data bits, no parity, 1 stop bit. */

dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
/* Handle the error. *
}

а при отправке строки, в принципе все правильно, но unsigned char s - это не строка, это один байт! (или это опечатка?) надо unsigned char *s или unsigned char s[] = {}. тем более вертикальная палочка - это операция бинарное "или", поэтому то, что написано у тебя аналогично unsigned char s = 0x03, поэтому и получается не строка а один байт...
2.9K
09 ноября 2005 года
narcotic
41 / / 04.10.2004
Огромное спасибо за ответ! Даже не знаю, как выразить всю свою благодарность!:)
317
10 ноября 2005 года
Relax
573 / / 20.09.2000
да не за что! :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог