TIL_221117

Today Jeeho Learned·2022년 11월 17일
0

TIL

목록 보기
121/249
post-thumbnail

공부한 것

  • 2주차 과제~ ing
  • C# String to int 형변환 정리

회고

  • 어제 제대로 못한 해결하지 못한 부분을 고치는데 도저히 제대로 동작하지 않아서 고민을 많이했다. UART통신에서 Control에서 보내는 데이터를 Simulatator에서 받고, 다시 Simulator에서 보내는 데이터를 Control에서 받아야 하는부분인데, Control에서 데이터를 받는 부분이 ControlSerialport_DataReceived에서 invoke로 ControlSerialportReceived()메서드로 넘겨주면서 데이터를 받고있었는데, ControlSerialportReceived이 메서드는 데이터가 들어오지 않으면 아예 동작하지 않는 이벤트이다. 그런데 나는 이 함수에서 데이터가 들어오는 것중에서 바르게 데이터가 들어왔을때를 if문으로 설정해주었고, 데이터가 들어오지 않을 경우를 else문으로 넣어줬는데 바르게 들어와도 데이터가 들어오지 않을 경우의 else문이 계속 동작되었다.
    그래서 대리님께 여쭈어보니 알려주셨고, UartTestButton_Click()메서드 안에서 처리를 해야했다.
        private void UartTestButton_Click(object sender, EventArgs e)
        {


            LogTextbox.Text += "UART Test Start" + Environment.NewLine;
            if (ControlSerialport.IsOpen)
            {
                ControlSerialport.Write("UART");
            }

            cntFlag = false;
            //1.반복문 만들고
            //2.3초가 지났는지 확인하고 데이터가 수신하지 못했는지 확인한다.
            //3. 3초가 지나고 데이터가 수신하지 못하면 fail출력
            //4. 3초가 지나지 않았으면 데이터가 수신이 되었는지 확인한다.
            //5. 3초 이내이고 데이터가 수신이 되지 않았으면 반복문을 수행한다.

            //TODO:
            //1. 3초동안 3번(1초단위로) 대기하고 3초가 지나면 메세지창에 fail를 표시하고 버튼을 활성한다.
            //2. 리시브 데이터의 length를 확인한다.
            while (true)
            {
                if (cnt >= 3 && cntFlag == false) //3초가 지났는지 확인한다.
                {
                    // 3초가 지났으면 fail 메세지를 표기한다.
                    LogTextbox.Text += "UART Test Failed(Can not Read Data)" + Environment.NewLine;
                    cnt = 0;
                    break;
                }

                if (cntFlag == true)
                {
                    // 3초가 안지나고 성공하면 버턴을 활성화 하고 리턴한다.
                    break;
                }
                //딜레이1초
                Delay(1000);
                cnt++;          //카운트 증가
            }
        }

이런식으로 처리를 해주었더니 제대로 동작했다. 아직 이 시리얼통신에 대한 구조가 제대로 정리되지 않았었는데, 이것을 하면서 어느정도 어떤 역할들을 하는지 알았다. 이제 다양한 송수신형태에 대해서 공부해보려고 한다.

  • 다음으로 수신하는 부분을 계속해서 string으로만 보냈었는데, byte[]형식으로 보내보려고 공부하고 있었는데 어려워서 제대로 하지 못했다. 작성한 코드가 맞는지 내일 컨펌받아보려고 한다!!

  • string형태로 데이터를 많이 보내다보니 int로 형변환 하는 것을 정리했다.

  • byte에 대해서 더 알아보아야겠음! 지금은 내가 업무를 제대로 시작한 것도 아니고, 기초를 쌓는 시간이니 후다닥 빨리 동작만 제대로 구현하기보다는 왜 그렇게 되는지를 차근차근 알아가야겠다고 생각했다. 지금까지 구현한 것도 일정보다 빠르게 구현 한 것인데, 하나하나 뜯어보면서 차곡차곡 정리해야겠다.

profile
기록해야 (살아)남는다 !

0개의 댓글