C#를 사용하여 직렬 정보 읽는 방법

5674 단어
최근에 친구의 의뢰를 받아, 그를 도와 직렬 읽기 프로그램을 썼다.이전에는 Windows API를 호출해서 실행해야 한다는 것만 알았는데 MSDN을 조회한 후에Net framework 2.0 시작Net 내부에 SerialPort 클래스가 봉인되어 있어 직렬 내용을 쉽게 읽을 수 있습니다.
SerialPort는 System에 있습니다.IO.Ports namspace 아래.자주 사용하는 구조 함수는
   1:  public SerialPort(
   2:      string portName,
   3:      int baudRate,
   4:      Parity parity,
   5:      int dataBits,
   6:      StopBits stopBits
   7:  )
  • portName: 포트 번호(예: COM1, COM2, COM3 등)...
  • baudRate: 초당 9600
  • parity: 패리티가 있는지 여부
  • 데이터 비트: 데이터 비트
  • stopBits: 정지 비트
  • 이것들은 더욱 구체적인 하드웨어 지표에 따라 설정할 수 있다.
     
    또한 SerialPort 클래스는 다음과 같은 속성을 제공합니다.
    Handshake: 악수 프로토콜 설정, (None, XOnXOff, RequestToSend와 RequestToSendXOnXOff
    WriteTimeout: 데이터를 쓸 때 시간 초과 ReadTimeout: 데이터를 읽을 때 시간 초과
     
    저는 주로 인터페이스를 통해 데이터를 읽기 때문에 SerialPort류의 DataReceived 이벤트를 사용했습니다. 이 이벤트를 호출할 때 주의해야 합니다.textbox에 값을 부여하는 것과 같은 UI 내용을 이 이벤트에서 직접 업데이트할 수 없습니다.Microsoft의 공식 설명에 따르면 이 사건은 사실 다른 스레드(비GUI 스레드) 내에서 촉발된 것이다.
     
    다음은 나의 간단한 범례 프로그램이다.
     
       1:  using System;
       2:  using System.ComponentModel;
       3:  using System.Drawing;
       4:  using System.IO.Ports;
       5:  using System.Windows.Forms;
       6:   
       7:  namespace Reader
       8:  {
       9:      public partial class MainForm : Form
      10:      {
      11:          private static SerialPort _serialPort = null;
      12:   
      13:          public MainForm()
      14:          {
      15:              InitializeComponent();
      16:          }
      17:   
      18:          void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
      19:          {
      20:              this.Invoke(new EventHandler(DoUpdate));
      21:          }
      22:   
      23:          private void DoUpdate(object s, EventArgs e)
      24:          {
      25:              this.lbText.Text = _serialPort.ReadExisting();
      26:          }
      27:   
      28:          private void btnStart_Click(object sender, EventArgs e)
      29:          {
      30:              _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
      31:              _serialPort.Handshake = Handshake.RequestToSendXOnXOff;
      32:              _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
      33:              _serialPort.Open();
      34:   
      35:              this.btnStart.Enabled = false;
      36:          }
      37:      }
      38:  }
     
        。      。
     
        
     

    전재 대상:https://www.cnblogs.com/izualx/archive/2010/12/24/1915767.html

    좋은 웹페이지 즐겨찾기