Страница 1 из 1

Добавлено: 09 Август 2004, 9:47
Гость
Добрый день !

Извините что отвлекаю.
Помогите, кто чем может.
Смешная ситуация
Написал программу (C55,WinXP), которая работает через Com порт с
контроллером.
Ну все было хорошо, (Read- ok Write - ok) пока не выключил машину.
Делаю Init port
APICreateFile...ok
GetCommState....ok
!--------------------
DCB.BaudRate = CBR_4800
DCB.Parity = None
DCB.ByteSize = 8
DCB.StopBits = 1
!-----------------
SetCommState....ok
SetCommTimeouts....ok

Пишу в контроллер (вернуть статус)
Тот должен ответить типа FF FF ....... и т.д.
Начинаю читать 7F 7F........и т.д.
Программа пишет, читает все вроде нормально, но везде замена или концовка на Hex: 7F Dec: 127
Запускаю любую другую Com программу на этот порт.
Потом захожу своей, все прекрасно.
Timeouts настроил.
Может DCB у меня с ошибкой?
Ниже описание DCB

Код: Выделить всё

DCB                 GROUP
DCBlength           ULONG       ! sizeof(DCB)
BaudRate            ULONG       ! current baud rate
fBinary             ULONG       ! binary mode, no EOF check
fParity             ULONG       ! enable parity checking
fOutxCtsFlow        ULONG       ! CTS output flow control
fOutxDsrFlow        ULONG       ! DSR output flow control
fDtrControl         ULONG       ! DTR flow control type
fDsrSensitivity     ULONG       ! DSR sensitivity
fTXContinueOnXoff   ULONG       ! XOFF continues Tx
fOutX               ULONG       ! XON/XOFF out flow control
fInX                ULONG       ! XON/XOFF in flow control
fErrorChar          ULONG       ! enable error replacement
fNull               ULONG       ! enable null stripping
fRtsControl         ULONG       ! RTS flow control
fAbortOnError       ULONG       ! abort reads/writes on error
Dummy2              ULONG       ! reserved
wReserved           USHORT      ! not currently used
XonLim              USHORT      ! transmit XON threshold
XoffLim             USHORT      ! transmit XOFF threshold
ByteSize            BYTE        ! number of bits/byte, 4-8
Parity              BYTE        ! 0-4=no,odd,even,mark,space
StopBits            BYTE        ! 0,1,2 = 1, 1.5, 2
XonChar             BYTE        ! Tx and Rx XON character
XoffChar            BYTE        ! Tx and Rx XOFF character
ErrorChar           BYTE        ! error replacement character
EofChar             BYTE        ! end of input character
EvtChar             BYTE        ! received event character
wReserved2         USHORT
                   END
Написал: ClaList(2)

Добавлено: 16 Август 2004, 10:30
Гость
Структура DCB должна быть такой :

Код: Выделить всё

DCB GROUP
Length ULONG
BaudRate ULONG
Binary ULONG
   !----Вот эти поля все вместе занимают 32 бита(см MSDN) и сворачиваются в поле Binary -----------
   ! fBinary ULONG
   ! fParity ULONG
   ! fOutxCTSFlow ULONG
   ! fOutxDSRFlow ULONG
   ! fDTRControl ULONG
   ! fDSRSensitivity ULONG
   ! fTxContinueOnXOff ULONG
   ! fOutX ULONG
   ! fInX ULONG
   ! fErrorChar ULONG
   ! fNull ULONG
   ! fRtsControl ULONG
   ! fAbortOnError ULONG
   ! Dummy2 ULONG
   !------------------------------------
wReserved USHORT
XonLim USHORT
XoffLim USHORT
ByteSize BYTE
Parity BYTE
StopBits BYTE
XOnChar BYTE
XOffChar BYTE
ErrorChar BYTE
EvtChar BYTE
wReserved2 USHORT
   END
Из MSDN

Код: Выделить всё

typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary  :1;
DWORD fParity  :1;
DWORD fOutxCtsFlow  :1;
DWORD fOutxDsrFlow  :1;
DWORD fDtrControl  :2;
DWORD fDsrSensitivity  :1;
DWORD fTXContinueOnXoff  :1;
DWORD fOutX  :1;
DWORD fInX  :1;
DWORD fErrorChar  :1;
DWORD fNull  :1;
DWORD fRtsControl  :2;
DWORD fAbortOnError  :1;
DWORD fDummy2  :17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB;


С уважением, Андрей Истомин

Написал: ClaList(2)