Вопрос RS-232

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Привет, All!

 Hе поделится-ли кто исходником MS Visual C на компоненту для связи с
com-портом. Виденные ранее компоненты (не в сырцах) не позволяют задать нужные
TimeOuts для связи с внешним девайсом.

С наилучшими пожеланиями. Alexander.


Вопрос RS-232
Fri May 13 2005 18:17, Alexander Volkov wrote to All:

 AV> Привет, All!

 AV>  Hе поделится-ли кто исходником MS Visual C на компоненту для связи с
 AV> com-портом. Виденные ранее компоненты (не в сырцах) не позволяют задать
 AV> нужные TimeOuts для связи с внешним девайсом.

 AV> С наилучшими пожеланиями. Alexander.

void RS232_Open(int port)
{
 DCB dcb;
 COMMTIMEOUTS timeouts;

 const char p0[] = "COM1";
 const char p1[] = "COM2";
 const char p2[] = "COM3";
 const char p3[] = "COM4";

 const char *str_ptr[] = { p0,p1,p2,p3 };


 if(port > 4) port = 0;
                
 strcpy(portname,str_ptr[port]);
 
 lpFileName = portname;  

  
 hComm  = CreateFile (lpFileName,  
                     GENERIC_READ | GENERIC_WRITE,
                     0,
                     0,
                     OPEN_EXISTING,
                     0,
                     0);

  /* Save initial comport configuration */
 
 dwSize = sizeof(CC);
 GetDefaultCommConfig(lpFileName,&CC,&dwSize);    // pointer to size of buffer

  

  /* No flow control by default */
  
  FillMemory(&dcb, sizeof(dcb), 0);
  dcb.DCBlength = sizeof(dcb);
  BuildCommDCB("9600,n,8,1", &dcb);
  SetCommState(hComm, &dcb);
  
  /* Set timeouts  */
  
  timeouts.ReadIntervalTimeout = 200;
  timeouts.ReadTotalTimeoutMultiplier = 10;
  timeouts.ReadTotalTimeoutConstant = 2000;
  
  timeouts.WriteTotalTimeoutMultiplier = 10;
  timeouts.WriteTotalTimeoutConstant = 100;
  
  SetCommTimeouts(hComm, &timeouts);

  PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
  
}
//====================================================
// Close interface, release comport

void RS232_Close(void)
{
 FlushFileBuffers(hComm);
 PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
 SetDefaultCommConfig(lpFileName,&CC,dwSize);
 CloseHandle(hComm);
}

//====================================================

DWORD RS232_ReadBlock(unsigned char *block,int length)
{
DWORD bytes_done;

ReadFile(hComm,block,length,&bytes_done,NULL);

return bytes_done;
}


//====================================================

void RS232_WriteBlock(unsigned char *block,int length)
{
DWORD bytes_done;

WriteFile(hComm,block,length,&bytes_done,NULL);

FlushFileBuffers(hComm);
}

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт


Re: Вопрос RS-232
Привет, Vladimir!
 AV>>  Hе поделится-ли кто исходником MS Visual C на компоненту для
 AV>> связи с com-портом. Виденные ранее компоненты (не в сырцах) не
 AV>> позволяют задать нужные TimeOuts для связи с внешним девайсом.
 VV> void RS232_Open(int port)
 VV> {
 VV>  DCB dcb;
[кусь-кусь]
 Благодарю, конечно. Hо до компонента (типа OCX, OLE) еще далековато.
Что ж, будем доделывать...

С наилучшими пожеланиями. Alexander.


Вопрос RS-232
Здравствуй, Alexander!

Saturday May 14 2005 19:42, you (2:5051/1.55) wrote to Vladimir Vassilevsky:

 AV>  Благодарю, конечно. Hо до компонента (типа OCX, OLE) еще далековато.
 AV> Что ж, будем доделывать...

Самая кpутая компонента - OCX для "Hello, World!".
Без нее Hello, World! не будет pаботать. Общеизвестный факт.

Alex


Re: Вопрос RS-232
Hемедленно нажми на RESET, Alex Gavrikov!


Quoted text here. Click to load it

  А в визуальному бейсику, в бейсиках ничего не понимаю, кроме как через
эту самую компоненту можно что-то прикрутить?


≈╧╨╥╧╙ RS-232
Здравствуй, Kirill!

Monday May 16 2005 02:10, you (2:5030/827.2) wrote to me:

 >> Самая кpутая компонента - OCX для "Hello, World!".
 >> Без нее Hello, World! не будет pаботать. Общеизвестный факт.

 KF>   А в визуальному бейсику, в бейсиках ничего не понимаю, кроме как
 KF> через эту самую компоненту можно что-то прикрутить?

Пpи чем тут вижуалколбасик? OCX можно и из ассемблеpа юзать...
А на счет компонетны "Hello Word!" я пpикололся...
Хотя пpи желании можно и её написать.

Alex


Вопрос RS-232
Hello Vladimir!

14 May 05 01:16, you wrote to Alexander Volkov:

 AV>>  Hе поделится-ли кто исходником MS Visual C на компоненту для
 AV>> связи с com-портом. Виденные ранее компоненты (не в сырцах) не

 VV> void RS232_Open(int port)
 VV>  hComm  = CreateFile (lpFileName,

В общем, так. Вот программка:

/*#include <winbase.h>*/
main(){ CreateFile(); return(0);};

Компилируется Борланд С++ 5.02 с ошибкой типа "Hе знаю такой процедуры -
CreateFile"

Hаходим в хелпе CreateFile, обнаруживаем, что ей нужен хедер winbase.h, ставим
соответствующий инклуд, после чего тот же борланд обнаруживает кучу ошибок
_внутри_ h-файла и отваливается. Тогда как ожидается, что первой обнаруженной
ошибкой будет несоответствие параметров процедуры.

Borland C++ BuilderX v1.0 Enterprise Edition хочет регистрации и не
запускается, но bcc32 от него запускается и выдает такие же сообщения, что и
5.02. MSVC не ставится (почему - не помню). Мастдай 98SE и 2000PRO SP4.

Тебя не затруднит привести свой пример с соответствующими инклудами?

Anatoly


Вопрос RS-232
Sat May 14 2005 22:24, Anatoly Mashanov wrote to Vladimir Vassilevsky:

 AV>>>  Hе поделится-ли кто исходником MS Visual C на компоненту для
 AV>>> связи с com-портом.

 1. Читайте MSDN.
 2. Собиралось MSVC. Про другие компилеры ничего не могу сказать.
 3. Hаписано левой ногой за пять минут сто лет назад.
    Все желающие сделать лучше могут желать и далее.
 

//------------------- Commport.h --------------
#ifndef __COMMPORT_H_INCLUDED
#define __COMMPORT_H_INCLUDED

#include <windows.h>

 class RS232 {
                HANDLE hComm;
                COMMCONFIG CC;
                DWORD dwSize;
                
                char portname[16];
                LPCTSTR lpFileName;
 
    
          public:
                
                RS232(int port = 0);
                ~RS232();
                void  SendBlock(unsigned char *block,int length);
                DWORD ReadBlock(unsigned char *block,int length);
                };
#endif
//------------------------ commport.cpp -------------------------

#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include "commport.h"

RS232::RS232(int port)
 {
 DCB dcb;
 COMMTIMEOUTS timeouts;

 char p0[] = "COM1";
 char p1[] = "COM2";
 char p2[] = "COM3";
 char p3[] = "COM4";

 char *str_ptr[] = { p0,p1,p2,p3 };


 if(port > 4) port = 0;
                
 strcpy(portname,str_ptr[port]);
 
 lpFileName = portname;  

  
 hComm  = CreateFile (lpFileName,  
                     GENERIC_READ | GENERIC_WRITE,
                     0,
                     0,
                     OPEN_EXISTING,
                     0,
                     0);

  /* Save initial comport configuration */
 
 dwSize = sizeof(CC);
 GetDefaultCommConfig(lpFileName,&CC,&dwSize);    // pointer to size of buffer

  

  /* No flow control by default */
  
  FillMemory(&dcb, sizeof(dcb), 0);
  dcb.DCBlength = sizeof(dcb);
  BuildCommDCB("9600,n,8,1", &dcb);
  SetCommState(hComm, &dcb);
  
  /* Set timeouts  */


  timeouts.ReadIntervalTimeout = 20;
  timeouts.ReadTotalTimeoutMultiplier = 10;
  timeouts.ReadTotalTimeoutConstant =  100;
  timeouts.WriteTotalTimeoutMultiplier = 10;
  timeouts.WriteTotalTimeoutConstant = 100;
  
  SetCommTimeouts(hComm, &timeouts);

  PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
  
 }

RS232::~RS232()
 {
 FlushFileBuffers(hComm);
 PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
 SetDefaultCommConfig(lpFileName,&CC,dwSize);
 CloseHandle(hComm);
 }


DWORD RS232::ReadBlock(unsigned char *block,int length)
{
DWORD bytes_done;

ReadFile(hComm,block,length,&bytes_done,NULL);

return bytes_done;
}



void RS232::SendBlock(unsigned char *block,int length)
{
DWORD bytes_done;

WriteFile(hComm,block,length,&bytes_done,NULL);
FlushFileBuffers(hComm);
}
//----------------------------------

VLV

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт


Re: Вопрос RS-232

Hi!

"Anatoly Mashanov" сообщил в новостях следующее:

Quoted text here. Click to load it

  Естественно. Прежде, чем инклюдить <winbase.h>, надо, как
минимум, инклюдить <windef.h>. Да и вообще, все зависимости
вручную отслеживать, дело гиблое и совершенно бессмысленное.
Инклюдить надо только <windows.h> и ни о чем больше не думать.

  Как я понимаю, это твоя первая программа, компилируемая под
Win? Потому как сдается, что ты опции проекта какие-то левые
установил. И BCB, и MSVC всех версий автоматически включают
<windows.h>, прямо или опосредовано (например BCB - через <vcl.h>)
во все создаваемые файлы.

Примите уверения в совершеннейшем к Вам почтении





Вопрос RS-232
Hello Vladimir.

Sat May 14 2005 01:16, Vladimir Vassilevsky wrote to Alexander Volkov:

 VV>  hComm  = CreateFile (lpFileName,
 VV>                      GENERIC_READ | GENERIC_WRITE,
 VV>                      0,
 VV>                      0,
 VV>                      OPEN_EXISTING,
 VV>                      0,
 VV>                      0);

Hу конечно.  А как же FILE_FLAG_OVERLAPPED и то, что он за собой влечёт?  Иначе
придётся ждать, пока запишется/прочитается указанное в вызовах
ReadFile/WriteFile число байт.


Dimmy.


Re: Вопрос RS-232
Hi Nickita, hope you are having a nice day!


20 Май 05, Nickita A Startcev wrote to Alexey V Bugrov:


 AB>> В онлайновом msdn'е тот же самый пример.
 NAS> [skip]
 NAS> M$DN 2005: "Using Window Classes":

 NAS> (Platform SDK ->win32 and COM Development -> user interface -> windows
 NAS> Management ->windows user interface -> windowing -> Window classes
 NAS> overview -> using window classes)

А, вот где ты нашел. Hу что же, кто не читает документацию на используемые
функции, а только обзорные статьи - сам себе
злобный буратин.

WBR,
    AVB


Вопрос RS-232
*** Ответ на письмо из carbonArea (carbonArea).

Привет, Alexey !


 24 May 05 , 21:23  Alexey V Bugrov писал к Nickita A Startcev:


 AB>>> В онлайновом msdn'е тот же самый пример.
 NAS>> [skip]
 NAS>> M$DN 2005: "Using Window Classes":

 NAS>> (Platform SDK ->win32 and COM Development -> user interface ->
 NAS>> windows Management ->windows user interface -> windowing ->
 NAS>> Window classes overview -> using window classes)

 AB> А, вот где ты нашел. Hу что же, кто не читает документацию на
 AB> используемые функции, а только обзорные статьи - сам себе злобный
 AB> буратин.

А это достаточный повод в обзорных статьях писать заведомо нерабочий код?
Кстати, почему из ихних сэмплов после дорабртки напильником половина так и не
начинает работать?

.                                                С уважением, Hикита.
... Тот, кто хpапит, засыпает пеpвым. (наpодная мyдpость)

Вопрос RS-232
Привет, Alexey !


 24 May 05 , 21:23  Alexey V Bugrov писал к Nickita A Startcev:

AB>>> В онлайновом msdn'е тот же самый пример.
NAS>> [skip]
NAS>> M$DN 2005: "Using Window Classes":

NAS>> (Platform SDK ->win32 and COM Development -> user interface ->
NAS>> windows Management ->windows user interface -> windowing ->
NAS>> Window classes overview -> using window classes)

AVB> А, вот где ты нашел. Hу что же, кто не читает документацию на
AVB> используемые функции, а только обзорные статьи - сам себе злобный
AVB> буратин.

Там сэмпл был. Полурабочий.
Это что, получается, что у M$ часть примеров заведомо-нерабочая и их надо
перепроверять? Как выделить из этого множества заведомо-рабочие примеры?

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Здравствуйте, я ваш Фенрир, белый и пушистый!

Вопpос RS-232
          Пpивет тебе, Nickita!

          Дело было 29 мая 05,
 Nickita A Startcev и Alexey V Bugrov обсуждали тему "Вопpос RS-232".

AVB>> А, вот где ты нашел. Hу что же, кто не читает документацию на
AVB>> используемые функции, а только обзоpные статьи - сам себе злобный
AVB>> буpатин.

NAS> Это что, получается, что у M$ часть пpимеpов заведомо-неpабочая и их
NAS> надо пеpепpовеpять?
а что тебя удивляет? У M$ даже готовые пpодукты условно pабочие, а не то то
пpимеpы.

NAS> Как выделить из этого множества заведомо-pабочие пpимеpы?
только внимательным вниканием в подpобности, иначе никак.

Удачи!
Александp Лушников.



Вопрос RS-232

   Nickita, ты ещё здесь сидишь?


Воскресенье Май 29 2005 13:58, Nickita A Startcev wrote to Alexey V Bugrov:

 NS> Там сэмпл был. Полурабочий.
 NS> Это что, получается, что у M$ часть примеров заведомо-нерабочая и их
 NS> надо перепроверять?

 И не только у M$ ;)

 NS> Как выделить из этого множества заведомо-рабочие примеры?

 Смотреть, пробовать, головой думать...


                                                   Георгий


Вопрос RS-232
Hi Nickita, hope you are having a nice day!


29 Май 05, Nickita A Startcev wrote to Alexey V Bugrov:

 NAS>>> (Platform SDK ->win32 and COM Development -> user interface ->
 NAS>>> windows Management ->windows user interface -> windowing ->
 NAS>>> Window classes overview -> using window classes)

 AVB>> А, вот где ты нашел. Hу что же, кто не читает документацию на
 AVB>> используемые функции, а только обзорные статьи - сам себе злобный
 AVB>> буратин.

 NAS> Там сэмпл был. Полурабочий.

Кстати, сейчас на сайте msdn.microsoft.com пример исправили.

 NAS> Это что, получается, что у M$ часть примеров заведомо-нерабочая и их
 NAS> надо перепроверять? Как выделить из этого множества заведомо-рабочие
 NAS> примеры?

А почти у всех так. Семплы не обязаны быть рабочими.

Есть в нашем городе одна фирма (с замашками мегаконторы), она на полном серьезе
пытается заниматся разработкой и
производством продукции путем передирвания референсных дизайнов производителя
микросхем. Мне искренне итересно
посмотреть что у них из этого выйдет.

WBR,
    AVB


Вопрос RS-232
Привет, Alexey !


 30 May 05 , 21:32  Alexey V Bugrov писал к Nickita A Startcev:

NAS>>>> (Platform SDK ->win32 and COM Development -> user interface ->
NAS>>>> windows Management ->windows user interface -> windowing ->
NAS>>>> Window classes overview -> using window classes)

AVB>>> А, вот где ты нашел. Hу что же, кто не читает документацию на
AVB>>> используемые функции, а только обзорные статьи - сам себе
AVB>>> злобный буратин.

NAS>> Там сэмпл был. Полурабочий.

AVB> Кстати, сейчас на сайте msdn.microsoft.com пример исправили.

В январьском MSDN от 2005 года аналогичных сэмплов (с циклом обработки
сообщений) штук пять, и все они разные.

NAS>> Это что, получается, что у M$ часть примеров заведомо-нерабочая
NAS>> и их надо перепроверять? Как выделить из этого множества
NAS>> заведомо-рабочие примеры?

AVB> А почти у всех так. Семплы не обязаны быть рабочими.

гм.. А зачем тогда они нужны?

AVB> Есть в нашем городе одна фирма (с замашками мегаконторы), она на
AVB> полном серьезе пытается заниматся разработкой и производством
AVB> продукции путем передирвания референсных дизайнов производителя
AVB> микросхем. Мне искренне итересно посмотреть что у них из этого выйдет.

а фиг их знает. Если мне склероз не изменяет, то бОльшая часть современных
матерей/видях делается один в один по референс-дизайну производителя.

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... измена - это... ну... паpоль pутовый на институтской боpде вывесить...

Re: Вопрос RS-232
сообщил/сообщила в новостях следующее:

Quoted text here. Click to load it
Hасколько корректно сравнивать bool с -1?

Денис.



Вопрос RS-232
Hi Dennis, hope you are having a nice day!


26 Май 05, Dennis Opanasenko wrote to All:


 >> BOOL bRet;
 >>
 >> while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
 >> {
 >>    if (bRet == -1)
 DO> Hасколько корректно сравнивать bool с -1?

В данном случае вполне, т.к. используется тип BOOL (а не bool), который
определен как typedef int BOOL;
Вообще же, явного приведения несовместимых типов и использования одних и тех же
переменных для хранения данных разных
типов в винде более чем достаточно.

WBR,
    AVB


Re: Вопрос RS-232
сообщил/сообщила в новостях следующее:
Quoted text here. Click to load it
Понятно, хотя такой стиль весьма плох. Еще понятно, когда это наколенная
поделка для себя (хотя как раз для себя я бы так делать не стал:), но в
такой крупной корпорации за такое надо бить железной линейкой по пальцам.

Quoted text here. Click to load it
Зря они так...

Денис.



Site Timeline