C\#SerialPort 비동기 읽 기 요약
5955 단어 port
C\#직렬 통신 에 사용 되 는 System.IO.Ports.SerialPort 류 를 제공 하여 직렬(RS 232 지원,RS 485 에 대해 필 자 는 시도 하지 않 았 음)의 읽 기와 쓰기 작업 을 편리 하 게 할 수 있 습 니 다.
몇 가지 특징
SerialPort 에 대해 다음 과 같은 몇 가지 주의 할 점 이 있 습 니 다.
1,ReadLine 은 동기 화 읽 기 에 만 사용 할 수 있 습 니 다.데이터 가 없 을 때 이 함 수 는 막 힐 것 입 니 다.
2.SerialPort 에서 read 시리즈 함수(Read,ReadByte,ReabChar,ReadLine,ReadExisting 등)를 호출 할 때 버퍼 란 필요 하지 않 거나 읽 은 데 이 터 를 사용자 가 정의 하 는 byte[]또는 string 형식의 변수 로 직접'흐름'합 니 다.Write 에 대해 서도 마찬가지다.그래서 flushRx 나 flushTx 라 는 개념 은 존재 하지 않 는 다.
3.상기 한 바 와 같이 직렬 포트 자체 의 버퍼 가 존재 합 니 다.즉,하위 기기 에서 보 낸 데이터 가 읽 히 지 않 으 면 데이터 양 이 버퍼 크기 를 초과 하지 않 은 상태 에서 계속 쌓 입 니 다.필 자 는 이 문제 에 있어 서 자신의 소홀 로 인해 불필요 한 번 거 로 움 을 초래 한 적 이 있다.
4.SerialPort 의 읽 기 데이터 함수 가 다양 합 니 다.위 에서 언급 한 Read,ReadByte,ReabChar,ReadLine,ReadExisting 은 모두 호출 할 수 있 습 니 다.일정한 형식 에 맞 는 직렬 패 킷(비트 흐름)을 읽 었 지만 효과 가 다 릅 니 다.구체 적 인 원인 에 대해 필자 도 잘 모 르 겠 습 니 다.직렬 통신 의 바 텀 과 응용 층 이 모두 정통 한 고수 에 게 대답 해 야 합 니 다.어 리 석 은 필자 의 테스트 를 통 해 그 함수 들 은 두 가지 로 나 눌 수 있 는데 하 나 는 readbyte,즉 ReadByte,Read 등 이다.그들 이 읽 은 데 이 터 는 byte 변수 에 저장 된다.다른 하 나 는 readchar 입 니 다.예 를 들 어 ReadChar,ReadExisting 등 두 사람 이 읽 은 데이터 가 다 릅 니 다.내 시험 에서 readbyte 함수 가 ff ff 를 읽 었 을 때 readchar 함수 가 3f 3f 를 읽 었 다.
5.직렬 포트 가 정확 한 수 치 를 읽 지 못 하면 장치 인 터 페 이 스 를 삽입 해 볼 수 있 습 니 다.그 이 유 는 까지 고수 의 지 도 를 구 할 수 있 습 니 다!
코드 부분
내 헛소리 듣 기 싫어?그럼 코드 를 직접 보 세 요.
1,기본 매개 변수 설정
1 // SerialPort
2
3 SerialPort serp = new SerialPort();
4
5 serp.BaudRate = 115200;
6
7 ......// msdn
2,수신 관련 매개 변수 설정
1 // 。 , Exception
2
3 serp.serialport.ReadTimeout = 90 * 1000;
4
5 //
6
7 serp.serialport.DataReceived += new SerialDataReceivedEventHandler(this.serialport_DataReceived);
8
9 serp.Open();
3,수신 이벤트 처리 함수 정의
1 //
2
3 private serialport_DataReceived(Object sender, SerialDataReceivedEventArgs e)
4
5 {
6
7 try{
8
9 Thread.Sleep(100); //( ) , int len
10
11 int len = serp.BytesToRead;
12
13 if( len!=0 )
14
15 {
16
17 byte [] buff = new byte[len];
18
19 serp.Read(buff, 0, len);
20
21 //try some other functions to read? do yourself if intersted
22
23 //processing data in buff
24
25 }
26
27 }
28
29 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
시스템 의 상황 을 감시 하고 당신 이 알 아야 할 두 세 가지!좀 비 프로 세 스, CPU 의 이 용 률, 메모리 의 사용 상황, 디스크 공간의 사용 상황, 시스템 의 균형 부하 보다 못 합 니 다. 최신 정보 에 따라 시스템 운행 상태 가 좋 은 지 판단 할 수 있 습 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.