개발/C#(12)
-
C# 선그래프
C# 윈폼을 활용해서 동적차트를 만들어보았다. 차트 내에 여러개의 그래프가 있고, 그래프의 데이터는 List로 관리 데이터 저장 기능까지 구상하고 시작했다. 3종류의 데이터를 받아서, 차트로 표현했다. x축은 총 10개의 데이터가 나타나고 1초마다 값이 업데이트된다. 윈폼이 실행되면, 로딩이 완료된 뒤 Start 이벤트를 발생시킨다. Start이벤트는 차트 관련 설정들을 세팅하고 데이터 생성 스레드를 실행한다. 차트와 관련된 설정들을 기입했다. 아래 사진처럼 윈폼상에서 미리 설정해둬도 되지만, 프로그램을 실행하면서 유동적으로 값을 변경하기 위해, 코드상으로 정의해뒀다. ( 나중에 수정할 부분을 찾기 편하도록 ) GenerateData() 함수는, 랜덤 데이터를 생성하는 함수다. 지금은 데이터가 없어서 임..
2024.04.02 -
Modbus TCP 제어 ( 패킷 과수신 대비 )
Modbus TCP 통신을 사용해서 실제 장비를 제어하는 로직을 사용중이었다. 하나의 프로그램에 프로세스가 총 3개 동작하고 1.MQTT 패킷을 수신 2.제어부 프로세스까지 전달(Socket) 3.실 제어 및 상태값 검증 위와 같이 제어를 하도록 개발했다. 하지만 곰곰히 생각해보니 내가 개발한 코드는, 단순히 '제어'만을 목적을 둔 단순한 코드고 예외상황을 생각하지 못한 안좋은 코드같았다. 수정 전 간단히 시퀀스 다이어그램을 제작했다. Process A 에서, MQTT 브로커로부터 제어 메시지를 수신받는다. 수신받은 메시지를, Process A & B 를 관리하는 Main Process에게 전달. Main Process 는 실 제어부 동작을 하는 Process B 로 패킷을 전달한다. Process B ..
2024.03.06 -
Encoding
개발을 하면서, UTF나 유니코드 등의 용어를 자주 접하지만 깊게 알아보거나 궁금한 적이 없었던 것 같다 오늘 업무하면서 Encoding관련 에러가 발생해서 이참에 궁금해서 알아보았다 유니코드 초창기 컴퓨터는 '영어'와 '특수문자'를 사용했다 시간이 흘러 다양한 국가의 언어를 지원하게 되면서 국제 표준이 만들어졌고, 그게 유니코드 UTF-7, UTF-8, UTF-16, UTF-32 인코딩 방식. 유니코드를 어떻게 컴퓨터에 저장할 것인가에 대한 내용 에러 원인 private void MQTTOnReceived(byte[] recv) { string recvData = Encoding.Default.GetString(recv).Replace("\u0000", System.String.Empty); } MQT..
2024.02.14 -
C# - class & structure
사내에서 지금까지 개발한 데이터 수집 엔진( 프로그램 )이 총 3가지 있다. 요약하자면 A->B->C 순으로 업그레이드 됐는데, 여전히 A, B 엔진이 적용된 곳이 있어서 그 중에서 B 엔진을 C 엔진에 맞게 업그레이드? 병합? 하는 작업을 진행했다. 병합 작업을 진행하면서, 나의 부족한 C# 개발 지식으로 다양한 오류를 접하게 됐다. 참조한 reference가 null 오류 컬렉션 수정 오류 등 너무 오류가 많아서 골치아팠다. 오류의 원인을 찾아보았다. 1. 비효율적인 class 사용 코드를 작성할 때 최소한의 class 단위로 구분해서 작성하라는 입사 초반 지시에 맞게 개발을 진행해왔다. 그러다보니 아무이유없이 무조건 class만 사용해서 개발해왔다. 변수 선언이나 구조를 잡을때도 무조건 class만..
2024.02.10 -
소프트웨어 설계 수정
2024.01.01 - [개발/C#] - 모니터링 자동화 - API Parsing 모니터링 자동화 - API Parsing 2023.12.24 - [개발/C#] - 모니터링 자동화 - 비동기 변경 모니터링 자동화 - 비동기 변경 2023.12.21 - [개발 기록/C#] - 모니터링 자동화 - Excel Write 모니터링 자동화 - Excel Write 2023.12.18 - [개발 기록/C#] - 모 iruk.tistory.com 지금까지는 자동화 개발을 할 때 하나의 C# 윈폼 프로그램에서 진행했다 프로그램이 어느정도 개발은 됐는데 고도화를 진행하다보니 많이 수정이 필요해졌다 구조 변경 기존엔 하나의 프로그램에서 API 호출, DB 저장, 조회 등을 수행했는데 지금은 2가지 종류로 분리하려한다. A..
2024.01.08 -
모니터링 자동화 - API Parsing
2023.12.24 - [개발/C#] - 모니터링 자동화 - 비동기 변경 모니터링 자동화 - 비동기 변경 2023.12.21 - [개발 기록/C#] - 모니터링 자동화 - Excel Write 모니터링 자동화 - Excel Write 2023.12.18 - [개발 기록/C#] - 모니터링 자동화 - Teamviewer 상태 관리 모니터링 자동화 - Teamviewer 상태 관리 2023.12.17 - [ iruk.tistory.com 지금까지 자동화를 한다고 개발을 했지만 생각해보면 자동화 라는 단어가 어울리지 않는다 프로그램 실행 후, 파일을 선택한 뒤 사용자가 직접 로그인(부정방지 문자, 구글 OTP)을 해야하는 단점을 고치고싶었다. API 호출 및 Parsing 사내 다른 파트에 요청해서 API를 ..
2024.01.01 -
C# 반복문 변수 선언과 메모리에 관한 고찰
오늘 회사에서 코드리뷰를 진행했다. 현재 내가 진행중인 프로젝트를 주 2회 코드리뷰를 진행중이다. 코드리뷰를 진행하면서 한 가지 피드백이 있었다. private void WriteGumiIssue(Excel.Worksheet secondSheet) { for(int i = 0;i
2023.12.28 -
모니터링 자동화 - 비동기 변경
2023.12.21 - [개발 기록/C#] - 모니터링 자동화 - Excel Write 모니터링 자동화 - Excel Write 2023.12.18 - [개발 기록/C#] - 모니터링 자동화 - Teamviewer 상태 관리 모니터링 자동화 - Teamviewer 상태 관리 2023.12.17 - [개발 기록/C#] - 모니터링 자동화 - 웹 크롤링 모니터링 자동화 - 웹 크롤링 C# Seleniu iruk.tistory.com 자동화에 필요한 메인 프로세스들은 구현이 완료됐고 각 프로세스를 어떻게 관리할지 고민하다가 비동기 & 프로그레스바 로 결정 이유 1. 사용자에게 진행상황을 표현 2. 동기식 사용 시, 프로세스가 끝날때 까지 다른 동작 불가능 ( ex) 프로그램 종료 ) 3. 클린코드 비동기식 로..
2023.12.24 -
모니터링 자동화 - Excel Write
2023.12.18 - [개발 기록/C#] - 모니터링 자동화 - Teamviewer 상태 관리 모니터링 자동화 - Teamviewer 상태 관리 2023.12.17 - [개발 기록/C#] - 모니터링 자동화 - 웹 크롤링 모니터링 자동화 - 웹 크롤링 C# Selenium 라이브러리를 활용해 모니터링 페이지의 데이터를 크롤링 테스트한다. 크롤링 함수 public bool GetMonit iruk.tistory.com 웹 크롤링 / 팀뷰어 API 호출로 받아온 데이터를 엑셀 보고서 파일에 자동 Write하는 로직을 추가한다. WriteExcel() bool형 함수 public bool WriteExcel(string filePath) { int retryCount = 0; bool success = fa..
2023.12.21