Линии последовательной передачи данных
RS-232
RS-422
RS-485 (четырехпроводная схема)
RS-485 (двухпроводная схема)
Кодирование сообщений
Режимы кодирования
Открытие порта последовательной передачи данных (Windows)
Установка режима приема/передачи
Установка режима приема/передачи (пример)
Чтение/запись данных
241.50K
Category: informaticsinformatics

Линии последовательной передачи данных

1. Линии последовательной передачи данных

2. RS-232

UA
A1
G
+25В
R
0
+3В
R
A2
G
0
t
-3В
1
GND
-25В
G – генератор сигнала (передатчик); R – приемник;
A1, A2 – сигнальные проводники;
GND – земля

3. RS-422

UAB
A1
G
B1

+6В
R
0
+0.2В
A2
R

B2
G
0
t
-0.2В
1
GND
-6В
G – генератор сигнала (передатчик); R – приемник;
A1, B1, A2, B2 – сигнальные проводники;
GND – земля;
RН – сопротивление нагрузки

4. RS-485 (четырехпроводная схема)

ENABLE
A1
G
ENABLE
R

B1
A2
R

G
B2
GND
SLAVE
MASTER
R
ENABLE
G
SLAVE

5. RS-485 (двухпроводная схема)

ENABLE
A
G

B
R

ENABLE
G
R
GND
SLAVE
MASTER
R
ENABLE
G
SLAVE

6. Кодирование сообщений

Стартовый
бит
Бит
четности
U(t)
+UС
0
…1
0
1
0
0
0
1
1
0
1
0
1
0
t
-UС
Холостой
ход
Информационные биты
10110001
Стоповый
бит

7. Режимы кодирования

Биты
Стартовый бит
Информационные биты
Бит четности
Стоповые биты
Режимы бита четности:
код с проверкой на четность;
код с проверкой на нечетность;
бит четности не передается.
Количество
1
5, 6, 7, 8
0, 1
1, 1.5, 2

8. Открытие порта последовательной передачи данных (Windows)

void* CreateFile(
const char *Name,
long AccessFlags,
long ShareMode,
void *Ptr,
long CreateFlags,
long Flags,
void *TemplateH
);
//
//
//
//
//
//
//
”COM1”, ”COM2”, …
GENERIC_READ|GENERIC_WRITE
0
0
OPEN_EXISTING
FILE_FLAG_WRITE_THROUGH
0
void *Hnd;
Hnd = CreateFile( ”COM1”, GENERIC_READ|GENERIC_WRITE,
0, 0, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0 );
if( Hnd == INVALID_HANDLE_VALUE ) {
printf("Open error\n");
}

9. Установка режима приема/передачи

bool SetCommState( void *Hnd, DCB *dcb );
struct
long
long
long
long
long
long
char
char
char

};
DCB {
DCBlength;
BaudRate;
fBinary : 1;
fParity : 1;
fDtrControl : 2;
fRtsControl : 2;
ByteSize;
Parity;
StopBits;
//
//
//
//
//
//
//
//
//
sizeof(DCB)
скорость передачи в бодах
1
вкл./откл. бит четности
DTR_CONTROL_DISABLE
RTS_CONTROL_ENABLE
5, 6, 7, 8
0-нет, 1-нечетн., 2-четн.
0-1, 1-1.5, 2-2

10. Установка режима приема/передачи (пример)

DCB dcb;
memset( &dcb, 0, sizeof(dcb) );
dcb.DCBlength
= sizeof(DCB);
dcb.BaudRate
= CBR_9600;
dcb.fBinary
= true;
dcb.ByteSize
= 8;
dcb.fParity
= true;
dcb.Parity
= EVENPARITY;
dcb.StopBits
= ONESTOPBIT;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
if( !SetCommState(Hnd,&dcb) ) {
printf("SetCommState error\n");
}

11. Чтение/запись данных

bool ReadFile( int Hnd, void *Buf, long N,
long *M, void *Ptr );
bool WriteFile( int Hnd, void *Buf, long N,
long *M, void *Ptr );
unsigned char Buf[100];
long BytesRead;
if( !ReadFile( Hnd, Buf, 100, &BytesRead, 0 ) ) {
printf("ReadFile error\n");
}
English     Русский Rules