C#

[C#] 시리얼통신 윈폼(Winform) 아스키 모드, 바이트(Hex) 모드 디스플레이 SerialPort DataReceived() display ascii or bytes

정보처리마법사 2017. 1. 17. 13:25
반응형

[C#] 시리얼통신 윈폼(Winform) 아스키 모드, 바이트 모드 디스플레이 SerialPort DataReceived() display ascii or bytes(Hex) 

 

 

C# SerialPort

 

안녕하세요 정보처리마법사 입니다.

 

이번 포스팅의 주제는 시리얼통신에 관한 내용입니다.



데이터를 받을 때 페이지 맨 아래 소스코드와 같이 ReadByte() 메소드를 사용하지 않고 그냥 ReadExisting() 

메소드를 사용하면 아스키형식으로 눈으로 바로 확인 할 수 있지만 아래와 같이 아스키 형식과 바이트(Hex) 형식 

둘다 눈으로 확인하고 싶다면 다음과 같이 코딩을 하면 됩니다.



 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string rcvData_ascii_format = string.Empty;
            string rcvData_byte_format = string.Empty;
 
            while (serialPort1.BytesToRead != 0)
            {
                var num = 0;
                int[] arr_rcvData_bytes = new int[7];
                char[] arr_rcvData_char = new char[7];
                while (num < 7)
                {
                    arr_rcvData_bytes[num] = serialPort1.ReadByte();
                    arr_rcvData_char[num] = Convert.ToChar(arr_rcvData_bytes[num]);
                    
                    rcvData_byte_format += arr_rcvData_bytes[num].ToString("X2");
                    rcvData_ascii_format += arr_rcvData_char[num];
 
                    num++;
                }
            }
 
            this.Invoke(new Action(delegate ()
            {
                textBox3.AppendText("데이터 입력받는 중.\r\n");
                textBox3.AppendText("Ascii Format : " + rcvData_ascii_format + "\r\n");
                textBox3.AppendText(" Byte Format : " + rcvData_byte_format + "\r\n");
            }));
 
            serialPort1.Write(rcvData_ascii_format);
        }
cs

 

 

 

 

이상으로 포스팅을 마칩니다. 감사합니다.


 


 



아래 소스코드는 개인 참고용 입니다. 무시하셔도 됩니다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
        private int[] arr_rcvData_bytes = new int[7];
        private char[] arr_rcvData_char = new char[7];
 
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string rcvData_ascii_format = string.Empty;
            string rcvData_byte_format = string.Empty;
 
            while (serialPort1.BytesToRead != 0)
            {
                var num = 0;
 
                while (num < 7)
                {
                    arr_rcvData_bytes[num] = serialPort1.ReadByte();
                    arr_rcvData_char[num] = Convert.ToChar(arr_rcvData_bytes[num]);
 
                    rcvData_byte_format += arr_rcvData_bytes[num].ToString("X2");
                    rcvData_ascii_format += arr_rcvData_char[num];
 
                    num++;
                }
            }
 
            byte[] arr_sendData_byte = new byte[] { 0201036464643303 };
 
            this.Invoke(new Action(delegate ()
            {
                textBox3.AppendText("데이터 입력받는 중.\r\n");
                textBox3.AppendText("Ascii Format : " + rcvData_ascii_format + "\r\n");
                textBox3.AppendText(" Byte Format : " + rcvData_byte_format + "\r\n");
 
                // 받은 데이터
                for (int i = 0; i < 7; i++)
                {
                    arr_tb[i].Text = arr_rcvData_bytes[i].ToString("X2");
                }
 
                // 보낸 데이터
                for (int i = 0; i < 8; i++)
                {
                    arr_tb[i + 7].Text = arr_sendData_byte[i].ToString("X2");
                }
            }));
 
            // 테스트 용도로 받은 데이터 그대로 보냄.
            // serialPort1.Write(rcvData_ascii_format);
 
            // 임시 데이터 자릿수에 맞게 전송.
            serialPort1.Write(arr_sendData_byte, 08);
        }
cs







Fin.


잘 못 된 정보가 있으면 말씀해주세요~


공감버튼 클릭은 작성자에게 큰 힘이 됩니다.  행복한 하루 되세요.


 



반응형